@cabane/companion 0.6.53 → 0.6.54
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 +4 -3
- package/dist/runtime.js +4 -3
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -6978,6 +6978,7 @@ var COMPANION_LOCAL_TOOL_GLOB = `mcp__${COMPANION_LOCAL_MCP_SERVER}__*`;
|
|
|
6978
6978
|
var SKIP_TURN_TOOL = "skip_turn";
|
|
6979
6979
|
var ASK_TOOL = "ask";
|
|
6980
6980
|
var ASK_TOOL_NAME = `mcp__${COMPANION_LOCAL_MCP_SERVER}__${ASK_TOOL}`;
|
|
6981
|
+
var MAX_ASK_ITEMS = 20;
|
|
6981
6982
|
var SUB_AGENT_TOOL = "sub_agent";
|
|
6982
6983
|
var SUB_AGENT_TOOL_NAME = `mcp__${COMPANION_LOCAL_MCP_SERVER}__${SUB_AGENT_TOOL}`;
|
|
6983
6984
|
var WAKE_ME_TOOL = "wake_me";
|
|
@@ -7049,7 +7050,7 @@ function createSummonMcpServer(summonState, skipState, askState, subAgentCreate,
|
|
|
7049
7050
|
...askState ? [
|
|
7050
7051
|
tool(
|
|
7051
7052
|
ASK_TOOL,
|
|
7052
|
-
|
|
7053
|
+
`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 summon/dispatch instead.`,
|
|
7053
7054
|
{
|
|
7054
7055
|
targetUserId: z13.string().uuid().describe(
|
|
7055
7056
|
"The workspace member (human) to ask \u2014 a user id, from your turn context's roster."
|
|
@@ -7069,8 +7070,8 @@ function createSummonMcpServer(summonState, skipState, askState, subAgentCreate,
|
|
|
7069
7070
|
body: z13.string().min(1).max(400).optional().describe("Optional short framing beneath the headline. NOT a report."),
|
|
7070
7071
|
options: z13.array(z13.string().min(1).max(200)).min(2).max(4).optional().describe("Optional 2\u20134 one-click answers for this question.")
|
|
7071
7072
|
})
|
|
7072
|
-
).min(1).max(
|
|
7073
|
-
|
|
7073
|
+
).min(1).max(MAX_ASK_ITEMS).optional().describe(
|
|
7074
|
+
`MULTI-question form: 1\u2013${MAX_ASK_ITEMS} questions to ask at once, when a plan ends with several bounded decisions. Provide EITHER this or \`question\`/\`headline\`/\`options\`, not both.`
|
|
7074
7075
|
)
|
|
7075
7076
|
},
|
|
7076
7077
|
async (args) => {
|
package/dist/runtime.js
CHANGED
|
@@ -6477,6 +6477,7 @@ var COMPANION_LOCAL_TOOL_GLOB = `mcp__${COMPANION_LOCAL_MCP_SERVER}__*`;
|
|
|
6477
6477
|
var SKIP_TURN_TOOL = "skip_turn";
|
|
6478
6478
|
var ASK_TOOL = "ask";
|
|
6479
6479
|
var ASK_TOOL_NAME = `mcp__${COMPANION_LOCAL_MCP_SERVER}__${ASK_TOOL}`;
|
|
6480
|
+
var MAX_ASK_ITEMS = 20;
|
|
6480
6481
|
var SUB_AGENT_TOOL = "sub_agent";
|
|
6481
6482
|
var SUB_AGENT_TOOL_NAME = `mcp__${COMPANION_LOCAL_MCP_SERVER}__${SUB_AGENT_TOOL}`;
|
|
6482
6483
|
var WAKE_ME_TOOL = "wake_me";
|
|
@@ -6548,7 +6549,7 @@ function createSummonMcpServer(summonState, skipState, askState, subAgentCreate,
|
|
|
6548
6549
|
...askState ? [
|
|
6549
6550
|
tool(
|
|
6550
6551
|
ASK_TOOL,
|
|
6551
|
-
|
|
6552
|
+
`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 summon/dispatch instead.`,
|
|
6552
6553
|
{
|
|
6553
6554
|
targetUserId: z13.string().uuid().describe(
|
|
6554
6555
|
"The workspace member (human) to ask \u2014 a user id, from your turn context's roster."
|
|
@@ -6568,8 +6569,8 @@ function createSummonMcpServer(summonState, skipState, askState, subAgentCreate,
|
|
|
6568
6569
|
body: z13.string().min(1).max(400).optional().describe("Optional short framing beneath the headline. NOT a report."),
|
|
6569
6570
|
options: z13.array(z13.string().min(1).max(200)).min(2).max(4).optional().describe("Optional 2\u20134 one-click answers for this question.")
|
|
6570
6571
|
})
|
|
6571
|
-
).min(1).max(
|
|
6572
|
-
|
|
6572
|
+
).min(1).max(MAX_ASK_ITEMS).optional().describe(
|
|
6573
|
+
`MULTI-question form: 1\u2013${MAX_ASK_ITEMS} questions to ask at once, when a plan ends with several bounded decisions. Provide EITHER this or \`question\`/\`headline\`/\`options\`, not both.`
|
|
6573
6574
|
)
|
|
6574
6575
|
},
|
|
6575
6576
|
async (args) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cabane/companion",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.54",
|
|
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",
|