@cabane/companion 0.6.59 → 0.6.61
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 +6 -4
- package/dist/runtime.js +6 -4
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2430,8 +2430,9 @@ var CabaneApi = class {
|
|
|
2430
2430
|
// companion PAT — so the spawn carries the same authority as the agent's other
|
|
2431
2431
|
// cabane calls this turn (mirrors build-options' `turnToken ?? agentPat`);
|
|
2432
2432
|
// - the `x-cabane-active-conversation` header naming the caller's turn, which
|
|
2433
|
-
// the server verifies against the live run to resolve the caller pair for
|
|
2434
|
-
//
|
|
2433
|
+
// the server verifies against the live run to resolve the caller pair for
|
|
2434
|
+
// the explicit child's birth subscription (the same origin that stamps
|
|
2435
|
+
// provenance).
|
|
2435
2436
|
// Single-shot (no outbox/retry): a `sub_agent` spawn is a live, user-visible
|
|
2436
2437
|
// action, and its result is returned to the agent immediately. Returns
|
|
2437
2438
|
// `{ status, body }` un-thrown so the caller maps validation errors
|
|
@@ -7220,7 +7221,7 @@ function createTurnControlMcpServer(sendState, skipState, askState, subAgentCrea
|
|
|
7220
7221
|
...askState ? [
|
|
7221
7222
|
tool(
|
|
7222
7223
|
ASK_TOOL,
|
|
7223
|
-
`Ask a HUMAN a structured question (or a short LIST of them) you need answered to continue, then END your turn \u2014 don't wait for the reply. Use it when you genuinely can't proceed without a person's input (a decision only they can make, a missing fact). Pass \`targetUserId\` (a workspace member's user id \u2014 every person's id is on the roster in your turn context). Two forms: a SINGLE question \u2014 a \`headline\` (the actual question as one clear, capitalized sentence ending in \`?\`, "Do we go to prod?") plus a short \`question\` body for the framing the headline can't hold \u2014 OR, when a plan ends with SEVERAL bounded decisions at once, a \`questions\` array of 1\u2013${MAX_ASK_ITEMS} items, each \`{ headline, body?, options? }\`. **Prefer the list over cramming the extra decisions into prose or dropping them** \u2014 end the turn with one ask carrying every question, never pick one and bury the rest. Each question keeps the same form rules: a one-sentence \`headline\`, a short \`body\` frame (NOT a report \u2014 your status, links, and detail go in your REPLY, and the body renders inline markdown only: links/emphasis/inline code, no bulleted lists or headings), and 2\u20134 \`options\` when the answer is a bounded choice \u2014 for a yes/no go-ahead always pass them, so it's one click, not a typed reply. An option can be a short button label or a whole sentence. Provide EITHER \`question\` (single) or \`questions\` (array), never both. The ask is a first-class attention item aimed at that person; your final reply carries the surrounding CONTEXT (what you found, why you're stuck), the ask carries the QUESTION(S).
|
|
7224
|
+
`Ask a HUMAN a structured question (or a short LIST of them) you need answered to continue, then END your turn \u2014 don't wait for the reply. Use it when you genuinely can't proceed without a person's input (a decision only they can make, a missing fact). Pass \`targetUserId\` (a workspace member's user id \u2014 every person's id is on the roster in your turn context). Two forms: a SINGLE question \u2014 a \`headline\` (the actual question as one clear, capitalized sentence ending in \`?\`, "Do we go to prod?") plus a short \`question\` body for the framing the headline can't hold \u2014 OR, when a plan ends with SEVERAL bounded decisions at once, a \`questions\` array of 1\u2013${MAX_ASK_ITEMS} items, each \`{ headline, body?, options? }\`. **Prefer the list over cramming the extra decisions into prose or dropping them** \u2014 end the turn with one ask carrying every question, never pick one and bury the rest. Each question keeps the same form rules: a one-sentence \`headline\`, a short \`body\` frame (NOT a report \u2014 your status, links, and detail go in your REPLY, and the body renders inline markdown only: links/emphasis/inline code, no bulleted lists or headings), and 2\u20134 \`options\` when the answer is a bounded choice \u2014 for a yes/no go-ahead always pass them, so it's one click, not a typed reply. An option can be a short button label or a whole sentence. Provide EITHER \`question\` (single) or \`questions\` (array), never both. The ask is a first-class attention item aimed at that person; your final reply carries the surrounding CONTEXT (what you found, why you're stuck), the ask carries the QUESTION(S). The human sends ONE response: supplied answers are recorded, omissions become terminally Unanswered; later answers require a fresh ask. Ask only when blocked \u2014 never ceremonially. One ask per turn (last call wins). After asking, stop \u2014 when the person replies addressed to you, the ask resolves and you resume; other people's or agents' messages may wake you but leave it open. Targets a human only; to hand work to another AGENT use send/dispatch instead.`,
|
|
7224
7225
|
{
|
|
7225
7226
|
targetUserId: z13.string().uuid().describe(
|
|
7226
7227
|
"The workspace member (human) to ask \u2014 a user id, from your turn context's roster."
|
|
@@ -8478,7 +8479,8 @@ ${reason}`,
|
|
|
8478
8479
|
...args.title ? { title: args.title } : {},
|
|
8479
8480
|
body: args.prompt,
|
|
8480
8481
|
dispatch: dispatchTarget,
|
|
8481
|
-
dispatchAsk: true
|
|
8482
|
+
dispatchAsk: true,
|
|
8483
|
+
parentConversationId: payload.conversationId
|
|
8482
8484
|
}
|
|
8483
8485
|
);
|
|
8484
8486
|
if (status2 >= 400) return { ok: false, error: describeSubAgentError(status2, body) };
|
package/dist/runtime.js
CHANGED
|
@@ -1850,8 +1850,9 @@ var CabaneApi = class {
|
|
|
1850
1850
|
// companion PAT — so the spawn carries the same authority as the agent's other
|
|
1851
1851
|
// cabane calls this turn (mirrors build-options' `turnToken ?? agentPat`);
|
|
1852
1852
|
// - the `x-cabane-active-conversation` header naming the caller's turn, which
|
|
1853
|
-
// the server verifies against the live run to resolve the caller pair for
|
|
1854
|
-
//
|
|
1853
|
+
// the server verifies against the live run to resolve the caller pair for
|
|
1854
|
+
// the explicit child's birth subscription (the same origin that stamps
|
|
1855
|
+
// provenance).
|
|
1855
1856
|
// Single-shot (no outbox/retry): a `sub_agent` spawn is a live, user-visible
|
|
1856
1857
|
// action, and its result is returned to the agent immediately. Returns
|
|
1857
1858
|
// `{ status, body }` un-thrown so the caller maps validation errors
|
|
@@ -6719,7 +6720,7 @@ function createTurnControlMcpServer(sendState, skipState, askState, subAgentCrea
|
|
|
6719
6720
|
...askState ? [
|
|
6720
6721
|
tool(
|
|
6721
6722
|
ASK_TOOL,
|
|
6722
|
-
`Ask a HUMAN a structured question (or a short LIST of them) you need answered to continue, then END your turn \u2014 don't wait for the reply. Use it when you genuinely can't proceed without a person's input (a decision only they can make, a missing fact). Pass \`targetUserId\` (a workspace member's user id \u2014 every person's id is on the roster in your turn context). Two forms: a SINGLE question \u2014 a \`headline\` (the actual question as one clear, capitalized sentence ending in \`?\`, "Do we go to prod?") plus a short \`question\` body for the framing the headline can't hold \u2014 OR, when a plan ends with SEVERAL bounded decisions at once, a \`questions\` array of 1\u2013${MAX_ASK_ITEMS} items, each \`{ headline, body?, options? }\`. **Prefer the list over cramming the extra decisions into prose or dropping them** \u2014 end the turn with one ask carrying every question, never pick one and bury the rest. Each question keeps the same form rules: a one-sentence \`headline\`, a short \`body\` frame (NOT a report \u2014 your status, links, and detail go in your REPLY, and the body renders inline markdown only: links/emphasis/inline code, no bulleted lists or headings), and 2\u20134 \`options\` when the answer is a bounded choice \u2014 for a yes/no go-ahead always pass them, so it's one click, not a typed reply. An option can be a short button label or a whole sentence. Provide EITHER \`question\` (single) or \`questions\` (array), never both. The ask is a first-class attention item aimed at that person; your final reply carries the surrounding CONTEXT (what you found, why you're stuck), the ask carries the QUESTION(S).
|
|
6723
|
+
`Ask a HUMAN a structured question (or a short LIST of them) you need answered to continue, then END your turn \u2014 don't wait for the reply. Use it when you genuinely can't proceed without a person's input (a decision only they can make, a missing fact). Pass \`targetUserId\` (a workspace member's user id \u2014 every person's id is on the roster in your turn context). Two forms: a SINGLE question \u2014 a \`headline\` (the actual question as one clear, capitalized sentence ending in \`?\`, "Do we go to prod?") plus a short \`question\` body for the framing the headline can't hold \u2014 OR, when a plan ends with SEVERAL bounded decisions at once, a \`questions\` array of 1\u2013${MAX_ASK_ITEMS} items, each \`{ headline, body?, options? }\`. **Prefer the list over cramming the extra decisions into prose or dropping them** \u2014 end the turn with one ask carrying every question, never pick one and bury the rest. Each question keeps the same form rules: a one-sentence \`headline\`, a short \`body\` frame (NOT a report \u2014 your status, links, and detail go in your REPLY, and the body renders inline markdown only: links/emphasis/inline code, no bulleted lists or headings), and 2\u20134 \`options\` when the answer is a bounded choice \u2014 for a yes/no go-ahead always pass them, so it's one click, not a typed reply. An option can be a short button label or a whole sentence. Provide EITHER \`question\` (single) or \`questions\` (array), never both. The ask is a first-class attention item aimed at that person; your final reply carries the surrounding CONTEXT (what you found, why you're stuck), the ask carries the QUESTION(S). The human sends ONE response: supplied answers are recorded, omissions become terminally Unanswered; later answers require a fresh ask. Ask only when blocked \u2014 never ceremonially. One ask per turn (last call wins). After asking, stop \u2014 when the person replies addressed to you, the ask resolves and you resume; other people's or agents' messages may wake you but leave it open. Targets a human only; to hand work to another AGENT use send/dispatch instead.`,
|
|
6723
6724
|
{
|
|
6724
6725
|
targetUserId: z13.string().uuid().describe(
|
|
6725
6726
|
"The workspace member (human) to ask \u2014 a user id, from your turn context's roster."
|
|
@@ -7977,7 +7978,8 @@ ${reason}`,
|
|
|
7977
7978
|
...args.title ? { title: args.title } : {},
|
|
7978
7979
|
body: args.prompt,
|
|
7979
7980
|
dispatch: dispatchTarget,
|
|
7980
|
-
dispatchAsk: true
|
|
7981
|
+
dispatchAsk: true,
|
|
7982
|
+
parentConversationId: payload.conversationId
|
|
7981
7983
|
}
|
|
7982
7984
|
);
|
|
7983
7985
|
if (status >= 400) return { ok: false, error: describeSubAgentError(status, body) };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cabane/companion",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.61",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The Cabane Companion (headless): connect a coding 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",
|