@bli-cockpit/cli 0.2.66 → 0.2.67

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.
@@ -59,6 +59,7 @@ export const JARVIS_ANSWER_ENVELOPE_KEYS = [
59
59
  "thread_id",
60
60
  "trace_thread_id",
61
61
  "proposal_id",
62
+ "next_action",
62
63
  "degraded",
63
64
  "degraded_reasons",
64
65
  ];
@@ -195,6 +196,7 @@ export function buildJarvisAnswerEnvelope(input) {
195
196
  thread_id: input.thread ?? null,
196
197
  trace_thread_id: input.traceThread ?? null,
197
198
  proposal_id: input.proposalId ?? null,
199
+ next_action: input.nextAction ?? null,
198
200
  degraded: reasons.length > 0,
199
201
  degraded_reasons: reasons,
200
202
  };
@@ -158,6 +158,9 @@ export async function sendOneTurn(context, prompt, io) {
158
158
  revised: body.revised,
159
159
  trace,
160
160
  proposalId: body.proposalId,
161
+ // BLI-3787: the sentence beside it — what a person must do next when
162
+ // the arm proposed something, and when it refused instead.
163
+ nextAction: body.nextAction,
161
164
  // BLI-3770: the door's own structured citations. Absent from a
162
165
  // dashboard that predates it, and the envelope falls back to
163
166
  // reading the answer's own `Source:` lines when it is.
@@ -254,7 +254,8 @@ export function localSubcommandHelp(command) {
254
254
  "Trace lines arrive live while JARVIS works; pass --no-stream to wait for the whole answer in one piece instead.",
255
255
  "--json writes one machine-readable response (including trace and model) to stdout; operational metadata stays on stderr. A --json run never streams fragments, whichever mode it is in.",
256
256
  "A --json turn is treated as an AGENT surface: if it proposes a coding task, JARVIS answers with proposal_id and NOT the eight-character approval code, because a code a program can read is a code it could approve with. The person fetches the code themself — a Tower browser tab, their Slack DM, or an interactive `cockpit jarvis` — and hands it back. Pass --show-approval-code when a script really is driving a dispatch for a person; the run says on stderr that it did.",
257
- "That object carries answer, sources (the Source: lines inside it), turn_id (pass it to --trace), thread_id (pass it to --thread), proposal_id (the coding-arm proposal this turn made, or null), degraded and degraded_reasons — the SAME shape the bli-tower MCP server's jarvis_ask tool returns, so a script and an agent read one contract. reply/thread/traceId/model/trace/latency are still there beside it and still mean what they always meant.",
257
+ "That object carries answer, sources (the Source: lines inside it), turn_id (pass it to --trace), thread_id (pass it to --thread), proposal_id, next_action, degraded and degraded_reasons — the SAME shape the bli-tower MCP server's jarvis_ask tool returns, so a script and an agent read one contract. reply/thread/traceId/model/trace/latency are still there beside it and still mean what they always meant.",
258
+ "proposal_id carries the coding-arm proposal a turn made, and is null when it made none — including when the arm refused. next_action is the sentence that says which of those it was and what a PERSON has to do about it: fetch the approval code for that proposal (a Tower tab, their Slack DM, or their own interactive `cockpit jarvis`), or approve a refused one where a person reads. A null proposal_id is never on its own. Do not send a proposal_id back on a --json turn: this is the surface the code was withheld from, and reading it back is refused here.",
258
259
  "A turn that outlives the dashboard's own ceiling is reported as turn_timed_out — an incomplete answer is never printed as a finished one.",
259
260
  "The command uses the existing paired device identity. It cannot override the caller, team, role, or person scope.",
260
261
  "A thread is SINGLE-WRITER: two turns in the same conversation at the same time can read each other, and one can answer the other's question. Your own terminal is one conversation, named main, and stays that way. A --json turn is a program's, so it gets a FRESH conversation per call unless --thread names one, and the answer's thread_id is the name it used — pass that back with --thread to continue it deliberately. On a --json turn, --thread main asks for the shared default nobody chose, so it is treated as naming nothing and a fresh conversation is minted anyway.",
@@ -15,7 +15,7 @@ export async function runCockpitCli(argv, io) {
15
15
  }
16
16
 
17
17
  if (command === "--version" || command === "-V" || command === "version") {
18
- writeLine(io?.stdout ?? process.stdout, "0.2.66");
18
+ writeLine(io?.stdout ?? process.stdout, "0.2.67");
19
19
  return 0;
20
20
  }
21
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bli-cockpit/cli",
3
- "version": "0.2.66",
3
+ "version": "0.2.67",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "bin": {
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@bli-cockpit/memory-mcp": "0.1.9",
31
- "@bli-cockpit/mcp": "0.1.8",
31
+ "@bli-cockpit/mcp": "0.1.9",
32
32
  "@bli-cockpit/telemetry-core": "0.1.30"
33
33
  }
34
34
  }