@cabane/companion 0.6.220 → 0.6.221
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +12 -3
- package/dist/runtime.js +4 -2
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2572,7 +2572,7 @@ var init_transcript_sink = __esm({
|
|
|
2572
2572
|
});
|
|
2573
2573
|
|
|
2574
2574
|
// packages/agent-runtime/src/turn-control/descriptions.ts
|
|
2575
|
-
var MAX_ASK_QUESTION_BYTES, MAX_ASK_HEADLINE_BYTES, MAX_ASK_ITEMS, EXCHANGE_KINDS, APPROVAL_OPTIONS, REQUEST_OPTIONS, MAX_EXCHANGE_FILES, MAX_REQUEST_BODY_BYTES, MAX_ASK_OPTION_BYTES, ASK_OPTION_NOT_A_STRING, MIN_ASK_OPTIONS, MAX_ASK_OPTIONS, ASK_TARGET_PATTERN, ASK_TARGET_INVALID, MAX_WAKE_NOTE_BYTES, MAX_WITHDRAW_REASON_BYTES, MAX_SKIP_REASON_BYTES, TURN_CONTROL_MCP_SERVER, TURN_CONTROL_TOOLS, TURN_CONTROL_TOOL_DESCRIPTIONS, TURN_CONTROL_FIELD_DESCRIPTIONS;
|
|
2575
|
+
var MAX_ASK_QUESTION_BYTES, MAX_ASK_HEADLINE_BYTES, MAX_ASK_ITEMS, EXCHANGE_KINDS, APPROVAL_OPTIONS, REQUEST_OPTIONS, EXCHANGE_EXPECTS, REQUEST_RESULT_OPTIONS, MAX_EXCHANGE_FILES, MAX_REQUEST_BODY_BYTES, MAX_ASK_OPTION_BYTES, ASK_OPTION_NOT_A_STRING, MIN_ASK_OPTIONS, MAX_ASK_OPTIONS, ASK_TARGET_PATTERN, ASK_TARGET_INVALID, MAX_WAKE_NOTE_BYTES, MAX_WITHDRAW_REASON_BYTES, MAX_SKIP_REASON_BYTES, TURN_CONTROL_MCP_SERVER, TURN_CONTROL_TOOLS, TURN_CONTROL_TOOL_DESCRIPTIONS, TURN_CONTROL_FIELD_DESCRIPTIONS;
|
|
2576
2576
|
var init_descriptions = __esm({
|
|
2577
2577
|
"packages/agent-runtime/src/turn-control/descriptions.ts"() {
|
|
2578
2578
|
"use strict";
|
|
@@ -2582,6 +2582,8 @@ var init_descriptions = __esm({
|
|
|
2582
2582
|
EXCHANGE_KINDS = ["question", "approval", "request"];
|
|
2583
2583
|
APPROVAL_OPTIONS = ["Yes", "No"];
|
|
2584
2584
|
REQUEST_OPTIONS = ["Done", "Couldn't"];
|
|
2585
|
+
EXCHANGE_EXPECTS = ["confirmation", "result"];
|
|
2586
|
+
REQUEST_RESULT_OPTIONS = ["Couldn't"];
|
|
2585
2587
|
MAX_EXCHANGE_FILES = 5;
|
|
2586
2588
|
MAX_REQUEST_BODY_BYTES = 2e3;
|
|
2587
2589
|
MAX_ASK_OPTION_BYTES = 200;
|
|
@@ -2606,7 +2608,7 @@ var init_descriptions = __esm({
|
|
|
2606
2608
|
answer: `Call this just before you write your answer: the text you write next is what the conversation keeps as your message. Call it once.`,
|
|
2607
2609
|
open_exchange: `Put something in front of one person that comes back with a recorded outcome, then end your turn; don't wait for it. \`targetUserId\` is a person on your roster, by their \`@handle\`; to bring in an agent, name them with \`@handle\` in your reply.
|
|
2608
2610
|
- \`kind\`: \`question\` for a choice among courses of action (two included) or free text; \`approval\` for a yes/no on one action you propose; \`request\` for something only the person can do, reported back.
|
|
2609
|
-
- A question is one item (\`headline\`, optional \`question\` body, \`options\`) or \`questions\`, 1\u2013${MAX_ASK_ITEMS} items; never both. An approval or request is \`headline\` and an optional \`question\` body only: its answers are fixed (${APPROVAL_OPTIONS.join(" / ")};
|
|
2611
|
+
- A question is one item (\`headline\`, optional \`question\` body, \`options\`) or \`questions\`, 1\u2013${MAX_ASK_ITEMS} items; never both. An approval or request is \`headline\` and an optional \`question\` body only: its answers are fixed (${APPROVAL_OPTIONS.join(" / ")}; a request's set by \`expects\`). A request's body carries the steps and may hold a list and code blocks; every other body is a sentence or two of framing, inline Markdown only.
|
|
2610
2612
|
- Decisions that arise together go in ONE call, in the order you want them answered. A second call is a separate exchange, never an edit.
|
|
2611
2613
|
- Voice, in headline, body and options: "I" for yourself, never your own name; name everyone else who decides or acts, as on your roster. Never "you", "your", "we", "us", "our" or their contractions, nor "he", "she" or "they" for a named actor. A quotation stays accurate: say who said it.
|
|
2612
2614
|
- It must stand alone, since it can arrive first: the reply carries the findings, the exchange the question; don't repeat the reply in it.
|
|
@@ -2622,7 +2624,8 @@ var init_descriptions = __esm({
|
|
|
2622
2624
|
answer: {},
|
|
2623
2625
|
open_exchange: {
|
|
2624
2626
|
targetUserId: "The person: their `@handle` from your turn context's roster (preferred), or their user id.",
|
|
2625
|
-
kind: `What the exchange is for; default \`question\`. \`question\`: the person picks among courses of action or types an answer. \`approval\`: a yes/no on one proposed action \u2014 the person answers ${APPROVAL_OPTIONS.join(" or ")}. \`request\`: something only the person can do
|
|
2627
|
+
kind: `What the exchange is for; default \`question\`. \`question\`: the person picks among courses of action or types an answer. \`approval\`: a yes/no on one proposed action \u2014 the person answers ${APPROVAL_OPTIONS.join(" or ")}. \`request\`: something only the person can do; set \`expects\`.`,
|
|
2628
|
+
expects: `A request only, and set it every time: \`confirmation\` when you only need to hear it's done (they answer ${REQUEST_OPTIONS.join(" or ")}), \`result\` when you need something back (they type it, or answer ${REQUEST_RESULT_OPTIONS.join("")}). Default \`result\`. Refused on a question or approval.`,
|
|
2626
2629
|
question: `The body beneath the headline \u2014 for a question or approval one or two sentences of framing, NOT a report (up to ${MAX_ASK_QUESTION_BYTES} characters, inline markdown only); for a request the steps, with lists and code blocks allowed (up to ${MAX_REQUEST_BODY_BYTES} characters). With \`questions\`, leave it out.`,
|
|
2627
2630
|
headline: `ONE clear, capitalized sentence, up to ${MAX_ASK_HEADLINE_BYTES} characters: for a question or approval, the question ending in \`?\` ("Should Ledger deploy once Mia approves?"); for a request, what to do ("Run these and send me the output"). What the person reads first in For you. Required for an approval or request.`,
|
|
2628
2631
|
files: `1\u2013${MAX_EXCHANGE_FILES} workspace paths, drawn as file chips above the body; the person must be able to read each.`,
|
|
@@ -6237,6 +6240,7 @@ function createTurnControlMcpServer(acts, skipState) {
|
|
|
6237
6240
|
{
|
|
6238
6241
|
targetUserId: z15.string().regex(ASK_TARGET_PATTERN, { error: ASK_TARGET_INVALID }).describe(TURN_CONTROL_FIELD_DESCRIPTIONS.open_exchange.targetUserId),
|
|
6239
6242
|
kind: z15.enum(EXCHANGE_KINDS).optional().describe(TURN_CONTROL_FIELD_DESCRIPTIONS.open_exchange.kind),
|
|
6243
|
+
expects: z15.enum(EXCHANGE_EXPECTS).optional().describe(TURN_CONTROL_FIELD_DESCRIPTIONS.open_exchange.expects),
|
|
6240
6244
|
// The request's cap; the server holds every other kind to its own.
|
|
6241
6245
|
question: z15.string().min(1).max(MAX_REQUEST_BODY_BYTES).optional().describe(TURN_CONTROL_FIELD_DESCRIPTIONS.open_exchange.question),
|
|
6242
6246
|
headline: z15.string().min(1).max(MAX_ASK_HEADLINE_BYTES).optional().describe(TURN_CONTROL_FIELD_DESCRIPTIONS.open_exchange.headline),
|
|
@@ -6268,6 +6272,7 @@ function createTurnControlMcpServer(acts, skipState) {
|
|
|
6268
6272
|
ask: {
|
|
6269
6273
|
targetUserId: args.targetUserId,
|
|
6270
6274
|
kind,
|
|
6275
|
+
...args.expects ? { expects: args.expects } : {},
|
|
6271
6276
|
...args.headline ? { headline: args.headline } : {},
|
|
6272
6277
|
...args.question ? { question: args.question } : {},
|
|
6273
6278
|
...args.options ? { options: args.options } : {},
|
|
@@ -6297,9 +6302,13 @@ function createTurnControlMcpServer(acts, skipState) {
|
|
|
6297
6302
|
...q.body ? { body: q.body } : {},
|
|
6298
6303
|
...q.options && q.options.length > 0 ? { options: q.options } : {}
|
|
6299
6304
|
})),
|
|
6305
|
+
// Forwarded so the server refuses it on a question, as it does an
|
|
6306
|
+
// approval's, rather than dropping it here unseen.
|
|
6307
|
+
...args.expects ? { expects: args.expects } : {},
|
|
6300
6308
|
...args.files ? { files: args.files } : {}
|
|
6301
6309
|
} : {
|
|
6302
6310
|
targetUserId: args.targetUserId,
|
|
6311
|
+
...args.expects ? { expects: args.expects } : {},
|
|
6303
6312
|
...args.question ? { question: args.question } : {},
|
|
6304
6313
|
...args.headline ? { headline: args.headline } : {},
|
|
6305
6314
|
...args.options && args.options.length > 0 ? { options: args.options } : {},
|
package/dist/runtime.js
CHANGED
|
@@ -2939,6 +2939,7 @@ var MAX_ASK_HEADLINE_BYTES = 120;
|
|
|
2939
2939
|
var MAX_ASK_ITEMS = 20;
|
|
2940
2940
|
var APPROVAL_OPTIONS = ["Yes", "No"];
|
|
2941
2941
|
var REQUEST_OPTIONS = ["Done", "Couldn't"];
|
|
2942
|
+
var REQUEST_RESULT_OPTIONS = ["Couldn't"];
|
|
2942
2943
|
var MAX_EXCHANGE_FILES = 5;
|
|
2943
2944
|
var MAX_REQUEST_BODY_BYTES = 2e3;
|
|
2944
2945
|
var MAX_ASK_OPTION_BYTES = 200;
|
|
@@ -2960,7 +2961,7 @@ var TURN_CONTROL_TOOL_DESCRIPTIONS = {
|
|
|
2960
2961
|
answer: `Call this just before you write your answer: the text you write next is what the conversation keeps as your message. Call it once.`,
|
|
2961
2962
|
open_exchange: `Put something in front of one person that comes back with a recorded outcome, then end your turn; don't wait for it. \`targetUserId\` is a person on your roster, by their \`@handle\`; to bring in an agent, name them with \`@handle\` in your reply.
|
|
2962
2963
|
- \`kind\`: \`question\` for a choice among courses of action (two included) or free text; \`approval\` for a yes/no on one action you propose; \`request\` for something only the person can do, reported back.
|
|
2963
|
-
- A question is one item (\`headline\`, optional \`question\` body, \`options\`) or \`questions\`, 1\u2013${MAX_ASK_ITEMS} items; never both. An approval or request is \`headline\` and an optional \`question\` body only: its answers are fixed (${APPROVAL_OPTIONS.join(" / ")};
|
|
2964
|
+
- A question is one item (\`headline\`, optional \`question\` body, \`options\`) or \`questions\`, 1\u2013${MAX_ASK_ITEMS} items; never both. An approval or request is \`headline\` and an optional \`question\` body only: its answers are fixed (${APPROVAL_OPTIONS.join(" / ")}; a request's set by \`expects\`). A request's body carries the steps and may hold a list and code blocks; every other body is a sentence or two of framing, inline Markdown only.
|
|
2964
2965
|
- Decisions that arise together go in ONE call, in the order you want them answered. A second call is a separate exchange, never an edit.
|
|
2965
2966
|
- Voice, in headline, body and options: "I" for yourself, never your own name; name everyone else who decides or acts, as on your roster. Never "you", "your", "we", "us", "our" or their contractions, nor "he", "she" or "they" for a named actor. A quotation stays accurate: say who said it.
|
|
2966
2967
|
- It must stand alone, since it can arrive first: the reply carries the findings, the exchange the question; don't repeat the reply in it.
|
|
@@ -2976,7 +2977,8 @@ var TURN_CONTROL_FIELD_DESCRIPTIONS = {
|
|
|
2976
2977
|
answer: {},
|
|
2977
2978
|
open_exchange: {
|
|
2978
2979
|
targetUserId: "The person: their `@handle` from your turn context's roster (preferred), or their user id.",
|
|
2979
|
-
kind: `What the exchange is for; default \`question\`. \`question\`: the person picks among courses of action or types an answer. \`approval\`: a yes/no on one proposed action \u2014 the person answers ${APPROVAL_OPTIONS.join(" or ")}. \`request\`: something only the person can do
|
|
2980
|
+
kind: `What the exchange is for; default \`question\`. \`question\`: the person picks among courses of action or types an answer. \`approval\`: a yes/no on one proposed action \u2014 the person answers ${APPROVAL_OPTIONS.join(" or ")}. \`request\`: something only the person can do; set \`expects\`.`,
|
|
2981
|
+
expects: `A request only, and set it every time: \`confirmation\` when you only need to hear it's done (they answer ${REQUEST_OPTIONS.join(" or ")}), \`result\` when you need something back (they type it, or answer ${REQUEST_RESULT_OPTIONS.join("")}). Default \`result\`. Refused on a question or approval.`,
|
|
2980
2982
|
question: `The body beneath the headline \u2014 for a question or approval one or two sentences of framing, NOT a report (up to ${MAX_ASK_QUESTION_BYTES} characters, inline markdown only); for a request the steps, with lists and code blocks allowed (up to ${MAX_REQUEST_BODY_BYTES} characters). With \`questions\`, leave it out.`,
|
|
2981
2983
|
headline: `ONE clear, capitalized sentence, up to ${MAX_ASK_HEADLINE_BYTES} characters: for a question or approval, the question ending in \`?\` ("Should Ledger deploy once Mia approves?"); for a request, what to do ("Run these and send me the output"). What the person reads first in For you. Required for an approval or request.`,
|
|
2982
2984
|
files: `1\u2013${MAX_EXCHANGE_FILES} workspace paths, drawn as file chips above the body; the person must be able to read each.`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cabane/companion",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.221",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The Cabane Companion (headless): connect an agent on your machine to your Cabane workspace as a responder — drive work against your own codebase, files, and MCP servers without putting any of it in Cabane.",
|
|
6
6
|
"license": "UNLICENSED",
|