@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 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 the
2434
- // immutable birth tether (the same origin that stamps provenance).
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). An open ask marks you as blocked until EVERY question is answered, so raise one only when you truly can't proceed \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
+ `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 the
1854
- // immutable birth tether (the same origin that stamps provenance).
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). An open ask marks you as blocked until EVERY question is answered, so raise one only when you truly can't proceed \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
+ `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.59",
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",