@plurnk/plurnk 0.6.0 → 0.22.0

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/render.js CHANGED
@@ -1,35 +1,42 @@
1
1
  // Glyph palette + line formatting for the TUI log waterfall.
2
2
  // Glyphs per TUI.md §4 (canonical for the constellation).
3
+ // Width-stable glyph palette — EVERY glyph is plain East-Asian-Wide
4
+ // (width 2 in node and every major terminal); VS16 variation-selector
5
+ // sequences (✉️ ✏️ ⚙️ ⚠️ 🗑) are banned from the palette entirely after
6
+ // two rounds of cursor-drift and column-gap forensics. No pad-space
7
+ // hacks needed: stable widths give true column alignment.
3
8
  export const OP_GLYPHS = {
4
9
  FIND: "🔍",
5
10
  READ: "📖",
6
- EDIT: "✏️ ",
11
+ EDIT: "📝",
7
12
  COPY: "📋",
8
13
  MOVE: "📦",
9
14
  SHOW: "➕",
10
15
  HIDE: "➖",
11
- SEND: "✉️ ",
12
- EXEC: "⚙️ ",
16
+ OPEN: "",
17
+ FOLD: "",
18
+ SEND: "💬",
19
+ EXEC: "🔧",
13
20
  };
14
21
  export const ORIGIN_GLYPHS = {
15
22
  model: "🤖",
16
23
  client: "👤",
17
- system: "⚙️ ",
24
+ plurnk: "🧰", // the runtime actor (§14.7)
18
25
  plugin: "🔌",
19
26
  };
20
27
  export const sendSubGlyph = (status) => {
21
28
  if (status === 410)
22
- return "🗑";
29
+ return "💥";
23
30
  if (status === 499)
24
31
  return "✋";
25
32
  if (status === 102)
26
33
  return "⏳";
27
34
  if (status >= 200 && status < 300)
28
35
  return "✅";
29
- if (status >= 400 && status < 500)
30
- return "⚠️ ";
31
- if (status >= 500 && status < 600)
32
- return "🔥";
36
+ // Single failure glyph for 4xx/5xx converged with plurnk.nvim:
37
+ // one signal in the alignment column; the colored status carries class.
38
+ if (status >= 400 && status < 600)
39
+ return "";
33
40
  return "";
34
41
  };
35
42
  // ANSI escape codes. NO_COLOR support per Unix convention.
@@ -97,6 +104,15 @@ const buildExtra = (entry) => {
97
104
  return "";
98
105
  }
99
106
  };
107
+ // `01/02/03 ` coordinate label — zero-padded to two digits minimum for
108
+ // alignment zen, growing naturally past 99. Every waterfall line carries
109
+ // one (log entries from the wire, the prompt and stream lines from their
110
+ // own coordinates — §5.1). DB ids are NOT the user's loop/turn numbers.
111
+ export const coordLabel = (loopSeq, turnSeq, sequence) => {
112
+ const p = (n) => String(n).padStart(2, "0");
113
+ return `${DIM}${p(loopSeq)}/${p(turnSeq)}/${p(sequence)}${RESET} `;
114
+ };
115
+ const coordPrefix = (entry) => coordLabel(entry.loop_seq, entry.turn_seq, entry.sequence);
100
116
  const BOLD = code("1");
101
117
  const ITALIC = code("3");
102
118
  // Heuristic: body looks like markdown if it carries any of the structural markers.
@@ -141,6 +157,26 @@ export const extractSendBody = (txUnknown, prettify) => {
141
157
  return renderMarkdown(raw);
142
158
  return raw;
143
159
  };
160
+ // Conversation stripes (TUI). The true user↔model dialogue must stand
161
+ // out against operation-record lines: model speech (broadcast SEND —
162
+ // §5.4) renders on a dark-blue full-width band; the user's prompt (the
163
+ // engine writes it as a system-origin EDIT to plurnk://prompt/<loop>/<turn>,
164
+ // service SPEC §15) on dark green. 256-color picks with an explicit
165
+ // near-white foreground so the bands read on any terminal theme;
166
+ // `\x1b[K` (background-color-erase) paints each line to the right edge
167
+ // without needing the terminal width.
168
+ const MODEL_STRIPE = code("48;5;17") + code("38;5;254");
169
+ const USER_STRIPE = code("48;5;22") + code("38;5;254");
170
+ const ERASE_EOL = useColor ? "\x1b[K" : "";
171
+ // Re-arm the stripe after every inner RESET (status colors, markdown
172
+ // styling) so a styled span can't cut the band mid-line.
173
+ const stripeLines = (lines, stripe) => {
174
+ if (stripe.length === 0)
175
+ return lines.join("\n");
176
+ return lines
177
+ .map((l) => `${stripe}${l.split(RESET).join(RESET + stripe)}${ERASE_EOL}${RESET}`)
178
+ .join("\n");
179
+ };
144
180
  // Broadcast SEND (model → user) — multi-line block, content not telemetry.
145
181
  // Per TUI.md §3.4.1 / SPEC.md §5.4. Header column-aligns with trace lines (2-space indent);
146
182
  // body indents further (5 spaces) so it visually nests under the speaker.
@@ -154,16 +190,36 @@ const renderBroadcast = (entry) => {
154
190
  if (subGlyph.length > 0)
155
191
  headerParts.push(subGlyph);
156
192
  headerParts.push(statusText);
157
- const header = headerParts.join(" ");
193
+ const header = ` ${coordPrefix(entry)}${headerParts.join(" ")}`;
158
194
  const body = extractSendBody(entry.tx, /* prettify */ true);
159
- const bodyBlock = body.length > 0
160
- ? "\n" + body.split("\n").map((line) => ` ${line}`).join("\n")
161
- : "";
162
- return `\n ${header}${bodyBlock}\n`;
195
+ const multiLine = body.includes("\n");
196
+ // Short single-line replies inline after the header (nvim's
197
+ // BROADCAST_INLINE_LIMIT convergence); longer/multi-line bodies
198
+ // start on the next line, indented under the speaker.
199
+ const lines = body.length === 0 ? [header]
200
+ : !multiLine && body.length <= 80 ? [`${header} ${body}`]
201
+ : [header, ...body.split("\n").map((l) => ` ${l}`)];
202
+ const stripe = entry.origin === "model" ? MODEL_STRIPE
203
+ : entry.origin === "client" ? USER_STRIPE : "";
204
+ // No surrounding blank lines: the stripe (full-width background color)
205
+ // is the standout — a broadcast reads as conversation whether single-
206
+ // or multi-line. Blank-wrapping every turn-terminator SEND (the model
207
+ // SENDs once per turn, 102 to continue) just padded the waterfall with
208
+ // empty lines between operations.
209
+ return stripeLines(lines, stripe);
163
210
  };
211
+ // The prompt entry (system-origin EDIT against plurnk://prompt/<loop>/<turn>,
212
+ // service SPEC §15). The TUI SKIPS these in the live waterfall: the line the
213
+ // user typed at the readline prompt is already their record, and rendering
214
+ // the broadcast too duplicated every prompt (#198 made it arrive live).
215
+ // Erasing the typed echo instead would mean terminal-width math over
216
+ // emoji/nerdfont prompts — the rabbit hole this client refuses to enter.
217
+ export const isPromptEntry = (entry) => entry.op === "EDIT" && entry.scheme === "plurnk" && (entry.pathname ?? "").startsWith("prompt/");
164
218
  // Render a log entry as one waterfall line.
165
- // Returns the full ANSI-formatted line WITHOUT trailing newline,
166
- // EXCEPT for broadcast SEND which returns a multi-line block with its own surrounding blank lines.
219
+ // Returns the full ANSI-formatted line(s) WITHOUT trailing newline. A
220
+ // broadcast SEND returns one striped line (single-line body) or a striped
221
+ // block (multi-line body) — no surrounding blank lines; the stripe's
222
+ // background color is the standout.
167
223
  export const renderLogEntry = (entry) => {
168
224
  // Broadcast SEND has no path at all (both scheme AND pathname null).
169
225
  // A SEND directed at file:// would have scheme=null but pathname set —
@@ -172,7 +228,13 @@ export const renderLogEntry = (entry) => {
172
228
  return renderBroadcast(entry);
173
229
  const origin = ORIGIN_GLYPHS[entry.origin] ?? "?";
174
230
  const opGlyph = OP_GLYPHS[entry.op] ?? "?";
175
- const subGlyph = entry.op === "SEND" && typeof entry.signal === "number" ? sendSubGlyph(entry.signal) : "";
231
+ // Universal status glyph every line gets one (rummy f20c4a0 / nvim
232
+ // convergence; a check that exists only sometimes is dissonant).
233
+ // SENDs glyph their signal (✋/💥/⏳ carry meaning); everything else
234
+ // glyphs the outcome status.
235
+ const subGlyph = entry.op === "SEND" && typeof entry.signal === "number"
236
+ ? sendSubGlyph(entry.signal)
237
+ : sendSubGlyph(entry.status_rx);
176
238
  const statusColor = colorForStatus(entry.status_rx);
177
239
  const statusText = `${statusColor}${entry.status_rx}${RESET}`;
178
240
  // Render whatever target the daemon supplied — no synthesis. If scheme
@@ -194,11 +256,20 @@ export const renderLogEntry = (entry) => {
194
256
  parts.push(pathText);
195
257
  if (extra.length > 0)
196
258
  parts.push(extra);
197
- return ` ${parts.join(" ")}`;
259
+ return ` ${coordPrefix(entry)}${parts.join(" ")}`;
198
260
  };
199
- export const renderSummary = (turns, wallMs, tokens, finalStatus, hitMaxTurns) => {
261
+ // usage is absent for non-model ops (op.exec / op.parse have no provider
262
+ // call) — those render no token part. It is NOT a fallback for missing
263
+ // data: a model loop always carries real usage (plurnk-service #197).
264
+ export const renderSummary = (turns, wallMs, finalStatus, hitMaxTurns, usage) => {
200
265
  const tag = hitMaxTurns ? "maxTurns" : finalStatus === 200 ? "done" : `final ${finalStatus}`;
201
266
  const ms = wallMs >= 1000 ? `${(wallMs / 1000).toFixed(2)}s` : `${wallMs}ms`;
202
- return `${DIM} ${tag} · ${turns} turn${turns === 1 ? "" : "s"} · ${ms} · ${tokens} tokens${RESET}`;
267
+ let tokenPart = "";
268
+ if (usage !== undefined) {
269
+ tokenPart = ` · ↑${usage.promptTokens} ↓${usage.completionTokens}`;
270
+ if (usage.costPico > 0)
271
+ tokenPart += ` · $${(usage.costPico / 1e12).toFixed(4)}`;
272
+ }
273
+ return `${DIM} ${tag} · ${turns} turn${turns === 1 ? "" : "s"} · ${ms}${tokenPart}${RESET}`;
203
274
  };
204
275
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
package/dist/rpc.d.ts CHANGED
@@ -1,3 +1,8 @@
1
+ export declare class RpcError extends Error {
2
+ readonly method: string;
3
+ readonly code: number;
4
+ constructor(method: string, code: number, message: string);
5
+ }
1
6
  export interface RpcOptions {
2
7
  url: string;
3
8
  }
package/dist/rpc.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,OAAO,GAAG;;gBAOR,EAAE,GAAG,EAAE,EAAE,UAAU;IAIzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBxB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW7D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAMlE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B/B"}
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAeA,qBAAa,QAAS,SAAQ,KAAK;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAM5D;AAQD,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,OAAO,GAAG;;gBAOR,EAAE,GAAG,EAAE,EAAE,UAAU;IAIzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBxB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW7D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAMlE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B/B"}
package/dist/rpc.js CHANGED
@@ -1,5 +1,19 @@
1
1
  // WebSocket JSON-RPC client. Shared by CLI and TUI. Per TUI.md §1.
2
2
  import { WebSocket } from "ws";
3
+ // A daemon-supplied JSON-RPC error response, surfaced as a typed throw so
4
+ // the catch boundary can classify it (client:rpc:error) without parsing the
5
+ // message string. Carries the failed method (unknown at the boundary, known
6
+ // here) and the daemon's numeric code.
7
+ export class RpcError extends Error {
8
+ method;
9
+ code;
10
+ constructor(method, code, message) {
11
+ super(`rpc error ${code}: ${message}`);
12
+ this.name = "RpcError";
13
+ this.method = method;
14
+ this.code = code;
15
+ }
16
+ }
3
17
  export default class Rpc {
4
18
  #url;
5
19
  #ws = null;
@@ -35,7 +49,7 @@ export default class Rpc {
35
49
  if (params !== undefined)
36
50
  payload.params = params;
37
51
  return new Promise((resolve, reject) => {
38
- this.#pending.set(id, { resolve, reject });
52
+ this.#pending.set(id, { resolve, reject, method });
39
53
  this.#ws?.send(JSON.stringify(payload));
40
54
  });
41
55
  }
@@ -65,7 +79,7 @@ export default class Rpc {
65
79
  return;
66
80
  this.#pending.delete(parsed.id);
67
81
  if (parsed.error !== undefined) {
68
- pending.reject(new Error(`rpc error ${parsed.error.code}: ${parsed.error.message}`));
82
+ pending.reject(new RpcError(pending.method, parsed.error.code, parsed.error.message));
69
83
  }
70
84
  else {
71
85
  pending.resolve(parsed.result);
package/dist/rpc.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
package/dist/stream.d.ts CHANGED
@@ -1,11 +1,16 @@
1
- export interface StreamEventPayload {
1
+ interface StreamCoord {
2
+ loop_seq?: number;
3
+ turn_seq?: number;
4
+ sequence?: number;
5
+ }
6
+ export interface StreamEventPayload extends StreamCoord {
2
7
  entryId: number;
3
8
  target: string;
4
9
  channel: string;
5
10
  state: string;
6
11
  contentLength: number;
7
12
  }
8
- export interface StreamConcludedPayload {
13
+ export interface StreamConcludedPayload extends StreamCoord {
9
14
  entryId: number;
10
15
  target: string;
11
16
  subscriptionId: number;
@@ -15,7 +20,13 @@ export interface StreamConcludedPayload {
15
20
  wakeAction: string;
16
21
  wakeLoopId?: number;
17
22
  }
18
- export declare const renderStreamEvent: (ev: StreamEventPayload) => string;
19
- export declare const renderStreamConcluded: (ev: StreamConcludedPayload) => string;
23
+ export default class StreamTrace {
24
+ #private;
25
+ event(ev: StreamEventPayload): string | null;
26
+ concluded(ev: StreamConcludedPayload): string;
27
+ }
28
+ export declare const inlineable: (content: string) => boolean;
29
+ export declare const renderInline: (channel: string, content: string) => string;
20
30
  export declare const reportStream: (line: string) => void;
31
+ export {};
21
32
  //# sourceMappingURL=stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,iBAAiB,GAAI,IAAI,kBAAkB,KAAG,MAU1D,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,IAAI,sBAAsB,KAAG,MAalE,CAAC;AAIF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,IAE3C,CAAC"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AA2BA,UAAU,WAAW;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD,MAAM,CAAC,OAAO,OAAO,WAAW;;IAM5B,KAAK,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAS5C,SAAS,CAAC,EAAE,EAAE,sBAAsB,GAAG,MAAM;CAehD;AAID,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,KAAG,OAG5C,CAAC;AAIF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,MAG7C,CAAC;AAIpB,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,IAE3C,CAAC"}
package/dist/stream.js CHANGED
@@ -1,45 +1,84 @@
1
- // Stream notification renderers for plurnk-service's stream/event and
1
+ // Stream trace rendering for plurnk-service's stream/event and
2
2
  // stream/concluded broadcasts (plurnk-service SPEC §7.1 / §13.6).
3
3
  //
4
- // Same `📡` glyph as TelemetryEvent (SPEC §8) these are daemon-pushed
5
- // metadata events the user should see, in the same channel posture
6
- // (stderr in CLI, inline in TUI), distinguished by the discriminator.
7
- //
8
- // Content fetching (entry.read) is NOT done here the CLI is a trace
9
- // viewer. plurnk.nvim does in-buffer content rendering.
4
+ // Optics discipline (v0.12.0): a 12-byte exec used to produce four raw
5
+ // metadata lines and never show its output. Now: ONE start line per
6
+ // stream (first event; growth ticks and close transitions are silent),
7
+ // one conclusion line in the waterfall grammar (📡 in the origin slot,
8
+ // status glyph, status, target), and tiny concluded outputs are inlined
9
+ // by the caller via entry.read the single, bounded exception to "the
10
+ // TUI doesn't fetch content" (SPEC §5.3), because the content IS the
11
+ // optics when it's two lines long.
10
12
  import process from "node:process";
13
+ import { coordLabel } from "./render.js";
11
14
  const useColor = process.env.NO_COLOR !== "1" && process.env.NO_COLOR !== "true";
12
15
  const code = (n) => useColor ? `\x1b[${n}m` : "";
13
16
  const RESET = code("0");
14
17
  const DIM = code("2");
18
+ const GREEN = code("32");
19
+ const RED = code("31");
15
20
  const STREAM_GLYPH = "📡";
16
- export const renderStreamEvent = (ev) => {
17
- const parts = [
18
- STREAM_GLYPH,
19
- "stream/event",
20
- ev.target,
21
- `channel=${ev.channel}`,
22
- `state=${ev.state}`,
23
- `len=${ev.contentLength}`,
24
- ];
25
- return ` ${parts.join(" ")}`;
21
+ // The coordinate label from a stream payload, or "" when the stream
22
+ // carries none (non-coordinate-bearing scheme).
23
+ const streamCoord = (ev) => typeof ev.loop_seq === "number" && typeof ev.turn_seq === "number" && typeof ev.sequence === "number"
24
+ ? coordLabel(ev.loop_seq, ev.turn_seq, ev.sequence)
25
+ : "";
26
+ const statusGlyph = (status) => {
27
+ if (status === 200)
28
+ return "✅";
29
+ if (status === 499)
30
+ return "";
31
+ return "❌";
26
32
  };
27
- export const renderStreamConcluded = (ev) => {
28
- const parts = [
29
- STREAM_GLYPH,
30
- "stream/concluded",
31
- ev.target,
32
- `status=${ev.closeStatus}`,
33
- `wake=${ev.wakeAction}`,
34
- ];
35
- let line = ` ${parts.join(" ")}`;
36
- if (ev.summary && ev.summary.length > 0) {
37
- line += ` ${DIM}"${ev.summary}"${RESET}`;
33
+ const statusColor = (status) => status === 200 ? GREEN : RED;
34
+ // Per-connection coalescing state: which streams have announced their
35
+ // start. Cleared per entry on conclusion; plain Map, no timers.
36
+ export default class StreamTrace {
37
+ #started = new Set();
38
+ // First event for an entry announces the stream; every later tick
39
+ // (growth, per-channel close) is silent — a line-oriented view has
40
+ // nothing actionable to say about len changing.
41
+ event(ev) {
42
+ if (this.#started.has(ev.entryId))
43
+ return null;
44
+ this.#started.add(ev.entryId);
45
+ return ` ${streamCoord(ev)}${STREAM_GLYPH} ⏳ ${ev.target}`;
46
+ }
47
+ // One conclusion line in the waterfall grammar. The daemon's summary
48
+ // leads with the target we already printed — strip the echo. Wake is
49
+ // engine bookkeeping except when it actually opened a loop.
50
+ concluded(ev) {
51
+ this.#started.delete(ev.entryId);
52
+ let summary = ev.summary ?? "";
53
+ if (summary.startsWith(ev.target))
54
+ summary = summary.slice(ev.target.length).replace(/^\s+/, "");
55
+ const wake = ev.wakeAction === "opened-loop" ? " → woke loop" : "";
56
+ const parts = [
57
+ STREAM_GLYPH,
58
+ statusGlyph(ev.closeStatus),
59
+ `${statusColor(ev.closeStatus)}${ev.closeStatus}${RESET}`,
60
+ ev.target,
61
+ ];
62
+ let line = ` ${streamCoord(ev)}${parts.join(" ")}`;
63
+ if (summary.length > 0)
64
+ line += ` ${DIM}"${summary}"${RESET}`;
65
+ return line + wake;
38
66
  }
39
- return line;
67
+ }
68
+ // Inline-worthiness for concluded channel content: short enough that the
69
+ // content IS the better optics. Anything larger stays behind the summary.
70
+ export const inlineable = (content) => {
71
+ if (content.length === 0 || content.length > 160)
72
+ return false;
73
+ return content.trimEnd().split("\n").length <= 2;
40
74
  };
41
- // Write a stream event to stderr. Used by CLI mode; TUI mode renders
42
- // inline in the waterfall with the readline-prompt-wipe prefix.
75
+ // Render a concluded channel's content as indented lines under the
76
+ // conclusion; stderr is marked and tinted.
77
+ export const renderInline = (channel, content) => content.trimEnd().split("\n")
78
+ .map((l) => channel === "stderr" ? ` ${RED}!${RESET} ${l}` : ` ${l}`)
79
+ .join("\n");
80
+ // Write a stream line to stderr. Used by CLI mode; TUI writes inline in
81
+ // the waterfall with the readline-prompt-wipe prefix.
43
82
  export const reportStream = (line) => {
44
83
  process.stderr.write(`${line}\n`);
45
84
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,kEAAkE;AAClE,EAAE;AACF,wEAAwE;AACxE,mEAAmE;AACnE,sEAAsE;AACtE,EAAE;AACF,sEAAsE;AACtE,wDAAwD;AAExD,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;AACjF,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAEtB,MAAM,YAAY,GAAG,IAAI,CAAC;AAqB1B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAsB,EAAU,EAAE;IAChE,MAAM,KAAK,GAAG;QACV,YAAY;QACZ,cAAc;QACd,EAAE,CAAC,MAAM;QACT,WAAW,EAAE,CAAC,OAAO,EAAE;QACvB,SAAS,EAAE,CAAC,KAAK,EAAE;QACnB,OAAO,EAAE,CAAC,aAAa,EAAE;KAC5B,CAAC;IACF,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAA0B,EAAU,EAAE;IACxE,MAAM,KAAK,GAAG;QACV,YAAY;QACZ,kBAAkB;QAClB,EAAE,CAAC,MAAM;QACT,UAAU,EAAE,CAAC,WAAW,EAAE;QAC1B,QAAQ,EAAE,CAAC,UAAU,EAAE;KAC1B,CAAC;IACF,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,qEAAqE;AACrE,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAQ,EAAE;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"subcommands.d.ts","sourceRoot":"","sources":["../src/subcommands.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAyBhC,eAAO,MAAM,SAAS,GAAU,KAAK,GAAG,EAAE,MAAM;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,MAAM,CAkBjF,CAAC;AAmBF,eAAO,MAAM,cAAc,GAAU,KAAK,GAAG,EAAE,MAAM;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,MAAM,CAkBtF,CAAC;AAWF,eAAO,MAAM,cAAc,GACvB,KAAK,GAAG,EACR,aAAa,MAAM,EACnB,MAAM;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KACxB,OAAO,CAAC,MAAM,CAyBhB,CAAC;AAYF,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,GACnB,KAAK,GAAG,EACR,MAAM;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,KACjD,OAAO,CAAC,MAAM,CAmBhB,CAAC"}
1
+ {"version":3,"file":"subcommands.d.ts","sourceRoot":"","sources":["../src/subcommands.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AA6BhC,eAAO,MAAM,SAAS,GAAU,KAAK,GAAG,EAAE,MAAM;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,MAAM,CAkBjF,CAAC;AAmBF,eAAO,MAAM,cAAc,GAAU,KAAK,GAAG,EAAE,MAAM;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,MAAM,CAkBtF,CAAC;AAWF,eAAO,MAAM,cAAc,GACvB,KAAK,GAAG,EACR,aAAa,MAAM,EACnB,MAAM;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KACxB,OAAO,CAAC,MAAM,CAyBhB,CAAC;AAYF,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,GACnB,KAAK,GAAG,EACR,MAAM;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,KACjD,OAAO,CAAC,MAAM,CAmBhB,CAAC"}
@@ -5,11 +5,14 @@
5
5
  import { formatPlain } from "./cli.js";
6
6
  import { report, clientSubcommandSessionNotFound, clientSubcommandSessionAmbiguous } from "./telemetry.js";
7
7
  // ─── Shared rendering helpers ─────────────────────────────────────────
8
- // Simple column-aligned table. Renders header + rows; no header borders.
8
+ const useColor = process.env.NO_COLOR !== "1" && process.env.NO_COLOR !== "true";
9
+ const BOLD = useColor ? "\x1b[1m" : "";
10
+ const RESET = useColor ? "\x1b[0m" : "";
11
+ // Simple column-aligned table. Header row is bold; rows plain. No borders.
9
12
  const renderTable = (headers, rows) => {
10
13
  const widths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] ?? "").length)));
11
14
  const fmt = (cells) => cells.map((c, i) => c.padEnd(widths[i] ?? 0)).join(" ").trimEnd();
12
- return [fmt(headers), ...rows.map(fmt)].join("\n");
15
+ return [`${BOLD}${fmt(headers)}${RESET}`, ...rows.map(fmt)].join("\n");
13
16
  };
14
17
  export const runModels = async (rpc, opts) => {
15
18
  const { aliases } = await rpc.call("providers.list");
@@ -1 +1 @@
1
- {"version":3,"file":"subcommands.js","sourceRoot":"","sources":["../src/subcommands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subcommands.js","sourceRoot":"","sources":["../src/subcommands.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,2EAA2E;AAC3E,6EAA6E;AAC7E,yBAAyB;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAE3G,yEAAyE;AAEzE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;AACjF,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AAExC,2EAA2E;AAC3E,MAAM,WAAW,GAAG,CAAC,OAAiB,EAAE,IAAgB,EAAU,EAAE;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,CAAC,KAAe,EAAE,EAAE,CAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IACvE,OAAO,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,GAAQ,EAAE,IAAuB,EAAmB,EAAE;IAClF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAiC,CAAC;IACrF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4FAA4F,CAAC,CAAC;QACnH,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;KACtB,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAYF,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE;IAC3C,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC9B,MAAM,GAAG,GAAG,OAAO,GAAG,IAAI,CAAC;IAC3B,IAAI,GAAG,GAAG,IAAI;QAAE,OAAO,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,GAAQ,EAAE,IAAuB,EAAmB,EAAE;IACvF,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAA+B,CAAC;IAClF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACpE,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,YAAY,IAAI,YAAY;QAC9B,CAAC,CAAC,UAAU;QACZ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;KAC1B,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAC/B,GAAQ,EACR,WAAmB,EACnB,IAAuB,EACR,EAAE;IACjB,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,CAA+B,CAAC;IAClF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,gCAAgC,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAuB,CAAC;IAC7F,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAmBF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC3B,GAAQ,EACR,IAAgD,EACjC,EAAE;IACjB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9E,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACxE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAkB,CAAC;IACxE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC;IACb,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC,CAAC"}
@@ -24,6 +24,7 @@ export declare class TelemetryError extends Error {
24
24
  }
25
25
  export declare const renderTelemetryEvent: (event: TelemetryEvent) => string;
26
26
  export declare const report: (event: TelemetryEvent) => void;
27
+ export declare const clientDaemonStale: (missing: string[]) => TelemetryEvent;
27
28
  export declare const clientConnectionRefused: (url: string, cause: unknown) => TelemetryEvent;
28
29
  export declare const clientRuntimeError: (cause: unknown) => TelemetryEvent;
29
30
  export declare const clientConnectionClosed: (cause: unknown) => TelemetryEvent;
@@ -33,8 +34,7 @@ export declare const clientSubcommandSessionNotFound: (name: string) => Telemetr
33
34
  export declare const clientSubcommandSessionAmbiguous: (name: string, count: number) => TelemetryEvent;
34
35
  export declare const clientSubcommandUnknownVerb: (path: string, available?: string[]) => TelemetryEvent;
35
36
  export declare const clientSubcommandMissingArgument: (path: string, argument: string) => TelemetryEvent;
36
- export declare const clientProposalNoTtyReview: (logEntryId: number) => TelemetryEvent;
37
- export declare const clientIoPersonaReadFailed: (path: string, cause: unknown) => TelemetryEvent;
37
+ export declare const clientProposalEditsBlocked: () => TelemetryEvent;
38
38
  export declare const clientRpcError: (method: string, cause: unknown) => TelemetryEvent;
39
39
  export declare const colors: {
40
40
  RESET: string;
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC;AAUrD,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAIjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAUD,qBAAa,cAAe,SAAQ,KAAK;IACrC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,KAAK,EAAE,cAAc,EAAE,QAAQ,GAAE,MAAW;CAM3D;AAsDD,eAAO,MAAM,oBAAoB,GAAI,OAAO,cAAc,KAAG,MAO5D,CAAC;AAKF,eAAO,MAAM,MAAM,GAAI,OAAO,cAAc,KAAG,IAE9C,CAAC;AAKF,eAAO,MAAM,uBAAuB,GAAI,KAAK,MAAM,EAAE,OAAO,OAAO,KAAG,cASpE,CAAC;AAIH,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,cAIlD,CAAC;AAGH,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,KAAG,cAItD,CAAC;AAGH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,cAM9E,CAAC;AAGH,eAAO,MAAM,2BAA2B,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,cAM3E,CAAC;AAGH,eAAO,MAAM,+BAA+B,GAAI,MAAM,MAAM,KAAG,cAK7D,CAAC;AAGH,eAAO,MAAM,gCAAgC,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,cAM7E,CAAC;AAGH,eAAO,MAAM,2BAA2B,GAAI,MAAM,MAAM,EAAE,YAAY,MAAM,EAAE,KAAG,cAQ/E,CAAC;AAGH,eAAO,MAAM,+BAA+B,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,cAM/E,CAAC;AAGH,eAAO,MAAM,yBAAyB,GAAI,YAAY,MAAM,KAAG,cAK7D,CAAC;AAGH,eAAO,MAAM,yBAAyB,GAAI,MAAM,MAAM,EAAE,OAAO,OAAO,KAAG,cAKvE,CAAC;AAGH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,OAAO,OAAO,KAAG,cAK9D,CAAC;AAIH,eAAO,MAAM,MAAM;;;;;CAA8B,CAAC"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC;AAUrD,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAIjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAUD,qBAAa,cAAe,SAAQ,KAAK;IACrC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,KAAK,EAAE,cAAc,EAAE,QAAQ,GAAE,MAAW;CAM3D;AAsDD,eAAO,MAAM,oBAAoB,GAAI,OAAO,cAAc,KAAG,MAO5D,CAAC;AAKF,eAAO,MAAM,MAAM,GAAI,OAAO,cAAc,KAAG,IAE9C,CAAC;AAOF,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,KAAG,cAMpD,CAAC;AAGH,eAAO,MAAM,uBAAuB,GAAI,KAAK,MAAM,EAAE,OAAO,OAAO,KAAG,cAWpE,CAAC;AAIH,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,cAIlD,CAAC;AAGH,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,KAAG,cAItD,CAAC;AAGH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,cAM9E,CAAC;AAGH,eAAO,MAAM,2BAA2B,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,cAM3E,CAAC;AAGH,eAAO,MAAM,+BAA+B,GAAI,MAAM,MAAM,KAAG,cAK7D,CAAC;AAGH,eAAO,MAAM,gCAAgC,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,cAM7E,CAAC;AAGH,eAAO,MAAM,2BAA2B,GAAI,MAAM,MAAM,EAAE,YAAY,MAAM,EAAE,KAAG,cAQ/E,CAAC;AAGH,eAAO,MAAM,+BAA+B,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,cAM/E,CAAC;AAQH,eAAO,MAAM,0BAA0B,QAAO,cAI5C,CAAC;AAGH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,OAAO,OAAO,KAAG,cAK9D,CAAC;AAIH,eAAO,MAAM,MAAM;;;;;CAA8B,CAAC"}
package/dist/telemetry.js CHANGED
@@ -96,6 +96,16 @@ export const report = (event) => {
96
96
  process.stderr.write(`${renderTelemetryEvent(event)}\n`);
97
97
  };
98
98
  // ─── Client-side emitters ────────────────────────────────────────────
99
+ // `client:connection:daemon_stale` — discover is missing wire markers this
100
+ // client depends on; the daemon predates the client (clients track HEAD per
101
+ // service SPEC §13.9).
102
+ export const clientDaemonStale = (missing) => ({
103
+ source: "client:connection",
104
+ kind: "daemon_stale",
105
+ message: `daemon is older than this client (missing: ${missing.join(", ")})`,
106
+ missing,
107
+ hints: ["Restart plurnk-service from a current checkout."],
108
+ });
99
109
  // `client:connection:refused` — WebSocket connection couldn't be established.
100
110
  export const clientConnectionRefused = (url, cause) => ({
101
111
  source: "client:connection",
@@ -103,8 +113,10 @@ export const clientConnectionRefused = (url, cause) => ({
103
113
  message: cause instanceof Error ? cause.message : String(cause),
104
114
  url,
105
115
  hints: [
106
- "Is the daemon running?",
107
- "Start it from plurnk-service with: node bin/plurnk-service.js start",
116
+ "The plurnk client needs the background daemon running.",
117
+ " 1. Install the service: npm i -g @plurnk/plurnk-service",
118
+ " 2. Configure your keys: export OPENAI_API_KEY=\"your-key\"",
119
+ " 3. Start the daemon: plurnk-service",
108
120
  ],
109
121
  });
110
122
  // `client:runtime:error` — generic catch-all for thrown errors we don't have
@@ -170,18 +182,15 @@ export const clientSubcommandMissingArgument = (path, argument) => ({
170
182
  argument,
171
183
  });
172
184
  // `client:proposal:no_tty_review` — fail-closed in CLI without --yolo.
173
- export const clientProposalNoTtyReview = (logEntryId) => ({
185
+ // `client:proposal:edits_blocked` no review channel (non-TTY, no --yolo),
186
+ // so the loop runs with flags.noProposals: the server auto-rejects
187
+ // side-effecting ops (the model sees a plain 400, mode-blind). Only the
188
+ // client can say WHY, because the server is silent by design (plurnk #24 /
189
+ // #169 client half). Emitted once at loop start, not per proposal.
190
+ export const clientProposalEditsBlocked = () => ({
174
191
  source: "client:proposal",
175
- kind: "no_tty_review",
176
- message: "no TTY for review, no --yolo — rejecting proposal",
177
- logEntryId,
178
- });
179
- // `client:io:persona_read_failed` — couldn't read the --persona file.
180
- export const clientIoPersonaReadFailed = (path, cause) => ({
181
- source: "client:io",
182
- kind: "persona_read_failed",
183
- message: cause instanceof Error ? cause.message : String(cause),
184
- path,
192
+ kind: "edits_blocked",
193
+ message: "edits and exec blocked: no review channel to approve them (run on a TTY, or pass --yolo)",
185
194
  });
186
195
  // `client:rpc:error` — RPC call rejected with a daemon-supplied error.
187
196
  export const clientRpcError = (method, cause) => ({