@plurnk/plurnk 0.12.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/README.md +28 -29
- package/dist/cli.d.ts +2 -8
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +22 -31
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +5 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +63 -0
- package/dist/completion.js.map +1 -0
- package/dist/dispatcher.d.ts +36 -1
- package/dist/dispatcher.d.ts.map +1 -1
- package/dist/dispatcher.js +135 -39
- package/dist/dispatcher.js.map +1 -1
- package/dist/paste.d.ts +7 -0
- package/dist/paste.d.ts.map +1 -0
- package/dist/paste.js +98 -0
- package/dist/paste.js.map +1 -0
- package/dist/render.d.ts +8 -7
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +26 -23
- package/dist/render.js.map +1 -1
- package/dist/rpc.d.ts +5 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +16 -2
- package/dist/rpc.js.map +1 -1
- package/dist/stream.d.ts +8 -2
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +8 -2
- package/dist/stream.js.map +1 -1
- package/dist/subcommands.d.ts.map +1 -1
- package/dist/subcommands.js +5 -2
- package/dist/subcommands.js.map +1 -1
- package/dist/telemetry.d.ts +1 -2
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +12 -13
- package/dist/telemetry.js.map +1 -1
- package/dist/tui.d.ts +18 -3
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +225 -103
- package/dist/tui.js.map +1 -1
- package/package.json +4 -1
package/dist/dispatcher.js
CHANGED
|
@@ -5,11 +5,12 @@ import { parseArgs } from "node:util";
|
|
|
5
5
|
import { readFile } from "node:fs/promises";
|
|
6
6
|
import { isAbsolute, join, resolve } from "node:path";
|
|
7
7
|
import { homedir } from "node:os";
|
|
8
|
-
import
|
|
8
|
+
import { createRequire } from "node:module";
|
|
9
|
+
import Rpc, { RpcError } from "./rpc.js";
|
|
9
10
|
import { runCli } from "./cli.js";
|
|
10
11
|
import { runTui } from "./tui.js";
|
|
11
12
|
import { runModels, runSessionList, runSessionRuns, runLogRead } from "./subcommands.js";
|
|
12
|
-
import { TelemetryError, report, clientConnectionRefused, clientDaemonStale, clientFlagInvalid, clientFlagMissingDependency,
|
|
13
|
+
import { TelemetryError, report, clientConnectionRefused, clientDaemonStale, clientFlagInvalid, clientFlagMissingDependency, clientRpcError, clientRuntimeError, clientSubcommandMissingArgument, clientSubcommandSessionNotFound, clientSubcommandSessionAmbiguous, clientSubcommandUnknownVerb, } from "./telemetry.js";
|
|
13
14
|
// Read all of stdin to EOF. Called when stdin is piped (not a TTY) — never
|
|
14
15
|
// blocks an interactive session because we gate on isTTY upstream.
|
|
15
16
|
const readStdin = async () => {
|
|
@@ -18,15 +19,6 @@ const readStdin = async () => {
|
|
|
18
19
|
buf += chunk;
|
|
19
20
|
return buf;
|
|
20
21
|
};
|
|
21
|
-
// Persona resolution: the flag/env value is a path to a markdown file.
|
|
22
|
-
// Personas are typically long; quoting multiline markdown on the command
|
|
23
|
-
// line is hostile. Path-only keeps the contract obvious.
|
|
24
|
-
export const resolvePersona = async (raw) => {
|
|
25
|
-
if (raw === undefined)
|
|
26
|
-
return undefined;
|
|
27
|
-
const abs = isAbsolute(raw) ? raw : resolve(process.cwd(), raw);
|
|
28
|
-
return await readFile(abs, "utf8");
|
|
29
|
-
};
|
|
30
22
|
// LoopFlags resolution: --flags takes raw JSON (the generic passthrough —
|
|
31
23
|
// any flag the daemon wires lands without a client release). Mode is NOT a
|
|
32
24
|
// flag here: ask/act ride the prompt-prefix habit (`? text` / `: text`),
|
|
@@ -81,8 +73,6 @@ env:
|
|
|
81
73
|
PLURNK_PROJECT_ROOT absolute path passed to session.create as the session's
|
|
82
74
|
project_root (workspace for file ops). Default: cwd.
|
|
83
75
|
Empty string = headless (no project_root, file ops 400).
|
|
84
|
-
PLURNK_PERSONA path to a persona file (text/markdown); contents are
|
|
85
|
-
passed on every loop.run.
|
|
86
76
|
PLURNK_YOLO when truthy, auto-accept every proposal without prompting.
|
|
87
77
|
Client-side only — proposals still go through the wire.
|
|
88
78
|
|
|
@@ -103,8 +93,6 @@ options:
|
|
|
103
93
|
on --session attach (daemon preserves stored value).
|
|
104
94
|
Default: cwd. Empty string = headless. Overrides
|
|
105
95
|
PLURNK_PROJECT_ROOT.
|
|
106
|
-
--persona <path> path to a persona file (text/markdown); contents are
|
|
107
|
-
passed on every loop.run. Overrides PLURNK_PERSONA.
|
|
108
96
|
--yolo auto-accept every proposal locally without prompting.
|
|
109
97
|
Overrides PLURNK_YOLO.
|
|
110
98
|
--flags <json> raw LoopFlags JSON passthrough on every loop.run
|
|
@@ -113,6 +101,18 @@ options:
|
|
|
113
101
|
--max-turns <n> per-loop turn cap (daemon default PLURNK_MAX_TURNS).
|
|
114
102
|
--timeout <s> CLI mode: cancel the loop (loop.cancel) after <s>
|
|
115
103
|
seconds; exits 3 with "timedOut":true in the result.
|
|
104
|
+
--pick <glob> membership overlay: admit files git misses (the sole
|
|
105
|
+
source when headless). Repeatable.
|
|
106
|
+
--hide <glob> membership overlay: drop a tracked match. Repeatable.
|
|
107
|
+
--view <glob> membership overlay: admit a member read-only. Repeatable.
|
|
108
|
+
--manifest-items <n> session-open preview: -1 full / 0 off / N first-N
|
|
109
|
+
items of plurnk://manifest.json at turn 0. Create-time.
|
|
110
|
+
--md <name=path> pin a markdown doc into the session (read at turn 0);
|
|
111
|
+
merges with operator PLURNK_MD_*. Repeatable. Create-time.
|
|
112
|
+
--max-commands <n> ceiling on ops per emission for the session (min with the
|
|
113
|
+
daemon's PLURNK_MAX_COMMANDS — can only tighten). Create-time.
|
|
114
|
+
--no-git deny git membership + telemetry for the session (never
|
|
115
|
+
re-enables past the operator lockout). Create-time.
|
|
116
116
|
--loop <id> (log read) filter to a single loop id
|
|
117
117
|
--turn <id> (log read) filter to a single turn id
|
|
118
118
|
--since <id> (log read) return entries with id > <id>
|
|
@@ -130,12 +130,93 @@ const dieWith = (code, event) => {
|
|
|
130
130
|
report(event);
|
|
131
131
|
process.exit(code);
|
|
132
132
|
};
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
// Map the repeatable membership flags (--pick/--hide/--view) to constraints.
|
|
134
|
+
export const buildConstraints = (values) => [
|
|
135
|
+
...(values.pick ?? []).map((glob) => ({ effect: "pick", glob })),
|
|
136
|
+
...(values.hide ?? []).map((glob) => ({ effect: "hide", glob })),
|
|
137
|
+
...(values.view ?? []).map((glob) => ({ effect: "view", glob })),
|
|
138
|
+
];
|
|
139
|
+
export const buildSettings = async (values, cwd) => {
|
|
140
|
+
const settings = {};
|
|
141
|
+
const mc = values["max-commands"];
|
|
142
|
+
if (mc !== undefined) {
|
|
143
|
+
const n = Number(mc);
|
|
144
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
145
|
+
throw new TelemetryError(clientFlagInvalid("--max-commands", mc, "must be a positive integer"));
|
|
146
|
+
}
|
|
147
|
+
settings.maxCommands = n;
|
|
148
|
+
}
|
|
149
|
+
if (values["no-git"] === true)
|
|
150
|
+
settings.git = false;
|
|
151
|
+
const mi = values["manifest-items"];
|
|
152
|
+
if (mi !== undefined) {
|
|
153
|
+
const n = Number(mi);
|
|
154
|
+
if (!Number.isInteger(n) || n < -1) {
|
|
155
|
+
throw new TelemetryError(clientFlagInvalid("--manifest-items", mi, "must be -1 (full), 0 (off), or a positive integer"));
|
|
156
|
+
}
|
|
157
|
+
settings.manifestItems = n;
|
|
158
|
+
}
|
|
159
|
+
const mdSpecs = values.md ?? [];
|
|
160
|
+
if (mdSpecs.length > 0) {
|
|
161
|
+
const mdDocs = [];
|
|
162
|
+
for (const spec of mdSpecs) {
|
|
163
|
+
const eq = spec.indexOf("=");
|
|
164
|
+
if (eq <= 0)
|
|
165
|
+
throw new TelemetryError(clientFlagInvalid("--md", spec, "must be NAME=path"));
|
|
166
|
+
const alias = spec.slice(0, eq);
|
|
167
|
+
const raw = spec.slice(eq + 1);
|
|
168
|
+
const abs = isAbsolute(raw) ? raw : resolve(cwd, raw);
|
|
169
|
+
try {
|
|
170
|
+
mdDocs.push({ alias, content: await readFile(abs, "utf8") });
|
|
171
|
+
}
|
|
172
|
+
catch (cause) {
|
|
173
|
+
throw new TelemetryError(clientFlagInvalid("--md", spec, `file not readable: ${cause instanceof Error ? cause.message : String(cause)}`));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
settings.mdDocs = mdDocs;
|
|
177
|
+
}
|
|
178
|
+
return settings;
|
|
179
|
+
};
|
|
180
|
+
// svc#235: discover.versions { service:{installed, latest?}, client:{latest?} }.
|
|
181
|
+
// The daemon polls npm; the client compares its OWN installed version against
|
|
182
|
+
// the advertised latest and renders both lines + an "(update available)"
|
|
183
|
+
// marker. The client never does registry IO — it just reads what discover says.
|
|
184
|
+
export const CLIENT_VERSION = createRequire(import.meta.url)("../package.json").version;
|
|
185
|
+
const isOlder = (a, b) => {
|
|
186
|
+
const pa = a.split(".").map(Number);
|
|
187
|
+
const pb = b.split(".").map(Number);
|
|
188
|
+
for (let i = 0; i < 3; i++) {
|
|
189
|
+
const x = pa[i] ?? 0, y = pb[i] ?? 0;
|
|
190
|
+
if (x < y)
|
|
191
|
+
return true;
|
|
192
|
+
if (x > y)
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
};
|
|
197
|
+
export const buildVersionNotice = (versions, clientInstalled) => {
|
|
198
|
+
if (versions === undefined)
|
|
199
|
+
return undefined;
|
|
200
|
+
const svc = versions.service?.installed;
|
|
201
|
+
const parts = [`plurnk client v${clientInstalled}`];
|
|
202
|
+
if (svc !== undefined)
|
|
203
|
+
parts.push(`plurnk-service v${svc}`);
|
|
204
|
+
const stale = (versions.client?.latest !== undefined && isOlder(clientInstalled, versions.client.latest))
|
|
205
|
+
|| (svc !== undefined && versions.service?.latest !== undefined && isOlder(svc, versions.service.latest));
|
|
206
|
+
return parts.join(", ") + (stale ? " (update available)" : "");
|
|
207
|
+
};
|
|
136
208
|
const attachOrCreateSession = async (rpc, opts) => {
|
|
209
|
+
const constraints = opts.constraints ?? [];
|
|
210
|
+
const settings = opts.settings ?? {};
|
|
137
211
|
if (opts.sessionName === undefined) {
|
|
138
|
-
|
|
212
|
+
// Seed overlay + open-context settings atomically at creation so turn-1's
|
|
213
|
+
// manifest/preview/docs are right with no follow-up RPC.
|
|
214
|
+
const params = { projectRoot: opts.projectRoot };
|
|
215
|
+
if (constraints.length > 0)
|
|
216
|
+
params.constraints = constraints;
|
|
217
|
+
if (Object.keys(settings).length > 0)
|
|
218
|
+
params.settings = settings;
|
|
219
|
+
return await rpc.call("session.create", params);
|
|
139
220
|
}
|
|
140
221
|
const { sessions } = await rpc.call("session.list");
|
|
141
222
|
const matches = sessions.filter((s) => s.name === opts.sessionName);
|
|
@@ -150,7 +231,16 @@ const attachOrCreateSession = async (rpc, opts) => {
|
|
|
150
231
|
const attachParams = { id: matches[0].id };
|
|
151
232
|
if (opts.runName !== undefined)
|
|
152
233
|
attachParams.runName = opts.runName;
|
|
153
|
-
|
|
234
|
+
const session = await rpc.call("session.attach", attachParams);
|
|
235
|
+
// An existing session takes the overlay flags live (session.create only
|
|
236
|
+
// seeds at birth). Settings (--manifest-items/--md) are session-create-only
|
|
237
|
+
// per svc#231 — there's no live setter, so flag-and-skip on attach.
|
|
238
|
+
for (const c of constraints)
|
|
239
|
+
await rpc.call("session.constrain", c);
|
|
240
|
+
if (Object.keys(settings).length > 0) {
|
|
241
|
+
process.stderr.write(" \x1b[2m--manifest-items/--md apply at session creation only; ignored on --session attach\x1b[0m\n");
|
|
242
|
+
}
|
|
243
|
+
return session;
|
|
154
244
|
};
|
|
155
245
|
// Parse a string-valued integer flag, throwing if non-numeric. Used for
|
|
156
246
|
// log.read filter flags (--loop / --turn / --since / --limit) since
|
|
@@ -247,11 +337,19 @@ export const main = async (argv) => {
|
|
|
247
337
|
run: { type: "string" },
|
|
248
338
|
model: { type: "string" },
|
|
249
339
|
"project-root": { type: "string" },
|
|
250
|
-
persona: { type: "string" },
|
|
251
340
|
yolo: { type: "boolean" },
|
|
252
341
|
flags: { type: "string" },
|
|
253
342
|
"max-turns": { type: "string" },
|
|
254
343
|
timeout: { type: "string" },
|
|
344
|
+
// membership overlay (svc#200) — repeatable globs; service vocabulary
|
|
345
|
+
pick: { type: "string", multiple: true },
|
|
346
|
+
hide: { type: "string", multiple: true },
|
|
347
|
+
view: { type: "string", multiple: true },
|
|
348
|
+
// session-open settings (svc#231) + tighten-only ceilings (svc#232)
|
|
349
|
+
"manifest-items": { type: "string" },
|
|
350
|
+
md: { type: "string", multiple: true },
|
|
351
|
+
"max-commands": { type: "string" },
|
|
352
|
+
"no-git": { type: "boolean" },
|
|
255
353
|
// log read filters
|
|
256
354
|
loop: { type: "string" },
|
|
257
355
|
turn: { type: "string" },
|
|
@@ -315,15 +413,6 @@ export const main = async (argv) => {
|
|
|
315
413
|
return dieWith(64, clientRuntimeError(cause));
|
|
316
414
|
}
|
|
317
415
|
})();
|
|
318
|
-
const persona = await (async () => {
|
|
319
|
-
try {
|
|
320
|
-
return await resolvePersona(values.persona ?? process.env.PLURNK_PERSONA);
|
|
321
|
-
}
|
|
322
|
-
catch (cause) {
|
|
323
|
-
const personaPath = values.persona ?? process.env.PLURNK_PERSONA ?? "(unknown)";
|
|
324
|
-
return dieWith(1, clientIoPersonaReadFailed(personaPath, cause));
|
|
325
|
-
}
|
|
326
|
-
})();
|
|
327
416
|
const url = process.env.PLURNK_URL ?? "ws://127.0.0.1:3044";
|
|
328
417
|
const rpc = new Rpc({ url });
|
|
329
418
|
try {
|
|
@@ -335,6 +424,7 @@ export const main = async (argv) => {
|
|
|
335
424
|
// Daemon staleness check (clients track HEAD, service SPEC §13.9): probe
|
|
336
425
|
// discover for wire markers this client depends on; warn bluntly when
|
|
337
426
|
// missing. One local round-trip; never fatal.
|
|
427
|
+
let versionNotice;
|
|
338
428
|
try {
|
|
339
429
|
const catalog = await rpc.call("discover");
|
|
340
430
|
const missing = [];
|
|
@@ -346,6 +436,7 @@ export const main = async (argv) => {
|
|
|
346
436
|
missing.push("stream/concluded");
|
|
347
437
|
if (missing.length > 0)
|
|
348
438
|
report(clientDaemonStale(missing));
|
|
439
|
+
versionNotice = buildVersionNotice(catalog.versions, CLIENT_VERSION); // svc#235
|
|
349
440
|
}
|
|
350
441
|
catch { /* discover failing will surface on the real call anyway */ }
|
|
351
442
|
try {
|
|
@@ -356,12 +447,19 @@ export const main = async (argv) => {
|
|
|
356
447
|
});
|
|
357
448
|
process.exit(exitCode);
|
|
358
449
|
}
|
|
359
|
-
const session = await attachOrCreateSession(rpc, {
|
|
450
|
+
const session = await attachOrCreateSession(rpc, {
|
|
451
|
+
sessionName, runName, projectRoot,
|
|
452
|
+
constraints: buildConstraints(values),
|
|
453
|
+
settings: await buildSettings(values, process.cwd()),
|
|
454
|
+
});
|
|
360
455
|
if (prompt.length === 0) {
|
|
361
|
-
await runTui(rpc, session, { modelAlias,
|
|
456
|
+
await runTui(rpc, session, { modelAlias, yolo, loopFlags, maxTurns, projectRoot, versionNotice });
|
|
362
457
|
process.exit(0);
|
|
363
458
|
}
|
|
364
|
-
|
|
459
|
+
// CLI: the version notice is narration → stderr (never pollutes stdout/--json).
|
|
460
|
+
if (versionNotice !== undefined && json === false)
|
|
461
|
+
process.stderr.write(`\x1b[2m${versionNotice}\x1b[0m\n`);
|
|
462
|
+
const exitCode = await runCli(rpc, prompt, session, { json, modelAlias, yolo, loopFlags, maxTurns, timeoutSec });
|
|
365
463
|
process.exit(exitCode);
|
|
366
464
|
}
|
|
367
465
|
catch (cause) {
|
|
@@ -370,12 +468,10 @@ export const main = async (argv) => {
|
|
|
370
468
|
await rpc.close();
|
|
371
469
|
process.exit(cause.exitCode);
|
|
372
470
|
}
|
|
373
|
-
// RPC
|
|
374
|
-
// method
|
|
375
|
-
//
|
|
376
|
-
|
|
377
|
-
// about.
|
|
378
|
-
report(clientRuntimeError(cause));
|
|
471
|
+
// A daemon-rejected RPC arrives as a typed RpcError carrying the failed
|
|
472
|
+
// method and the daemon's code/message — surface it as client:rpc:error.
|
|
473
|
+
// Anything else is a genuine non-RPC throw: the generic runtime fallback.
|
|
474
|
+
report(cause instanceof RpcError ? clientRpcError(cause.method, cause) : clientRuntimeError(cause));
|
|
379
475
|
await rpc.close();
|
|
380
476
|
process.exit(1);
|
|
381
477
|
}
|
package/dist/dispatcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/paste.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paste.d.ts","sourceRoot":"","sources":["../src/paste.ts"],"names":[],"mappings":"AA2BA,MAAM,CAAC,OAAO,OAAO,WAAW;;IAS5B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAiD3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAM9B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAS/B"}
|
package/dist/paste.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Bracketed-paste buffering for the readline TUI.
|
|
2
|
+
//
|
|
3
|
+
// Terminals wrap pasted text in ESC[200~ … ESC[201~ when ?2004 is enabled.
|
|
4
|
+
// Node readline doesn't understand this, so a multi-line paste fires one
|
|
5
|
+
// 'line' event (one loop.run) per pasted line — the bug. We interpose on
|
|
6
|
+
// stdin and collapse a multi-line paste into a single short marker
|
|
7
|
+
// (`[paste #N +K lines]`) so readline stays on one line (NO cursor/width
|
|
8
|
+
// math — the marker is a normal short token); on submit the marker expands
|
|
9
|
+
// back to the raw text. Single-line pastes pass straight through.
|
|
10
|
+
//
|
|
11
|
+
// We don't heuristically test paste size (pi does); the terminal's markers
|
|
12
|
+
// tell us exactly where a paste is — "always catch as []".
|
|
13
|
+
const START = "\x1b[200~";
|
|
14
|
+
const END = "\x1b[201~";
|
|
15
|
+
const MARKER = /\[paste #(\d+) \+\d+ lines\]/g;
|
|
16
|
+
// Longest suffix of `s` that is a proper prefix of `marker` — bytes to hold
|
|
17
|
+
// back in case a marker is split across reads.
|
|
18
|
+
const partialTail = (s, marker) => {
|
|
19
|
+
const max = Math.min(s.length, marker.length - 1);
|
|
20
|
+
for (let n = max; n > 0; n--) {
|
|
21
|
+
if (marker.startsWith(s.slice(s.length - n)))
|
|
22
|
+
return n;
|
|
23
|
+
}
|
|
24
|
+
return 0;
|
|
25
|
+
};
|
|
26
|
+
export default class PasteFilter {
|
|
27
|
+
#state = "normal";
|
|
28
|
+
#paste = "";
|
|
29
|
+
#carry = "";
|
|
30
|
+
#store = new Map();
|
|
31
|
+
#nextId = 1;
|
|
32
|
+
// Process a stdin chunk; return the bytes readline should see (multi-line
|
|
33
|
+
// pastes collapsed to markers). Completed pastes are stored for expand().
|
|
34
|
+
feed(chunk) {
|
|
35
|
+
let input = this.#carry + chunk;
|
|
36
|
+
this.#carry = "";
|
|
37
|
+
let out = "";
|
|
38
|
+
for (;;) {
|
|
39
|
+
if (this.#state === "normal") {
|
|
40
|
+
const i = input.indexOf(START);
|
|
41
|
+
if (i >= 0) {
|
|
42
|
+
out += input.slice(0, i);
|
|
43
|
+
input = input.slice(i + START.length);
|
|
44
|
+
this.#state = "pasting";
|
|
45
|
+
this.#paste = "";
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const hold = partialTail(input, START);
|
|
49
|
+
out += input.slice(0, input.length - hold);
|
|
50
|
+
this.#carry = input.slice(input.length - hold);
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
const j = input.indexOf(END);
|
|
54
|
+
if (j >= 0) {
|
|
55
|
+
this.#paste += input.slice(0, j);
|
|
56
|
+
input = input.slice(j + END.length);
|
|
57
|
+
this.#state = "normal";
|
|
58
|
+
out += this.#emit(this.#paste);
|
|
59
|
+
this.#paste = "";
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const hold = partialTail(input, END);
|
|
63
|
+
this.#paste += input.slice(0, input.length - hold);
|
|
64
|
+
this.#carry = input.slice(input.length - hold);
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Single-line paste passes through verbatim (readline handles it). A
|
|
69
|
+
// multi-line paste becomes a one-line marker expand() restores. CR/CRLF
|
|
70
|
+
// are normalized to LF so a lone CR can't sneak a submit past readline.
|
|
71
|
+
#emit(raw) {
|
|
72
|
+
const paste = raw.replace(/\r\n?/g, "\n");
|
|
73
|
+
if (!paste.includes("\n"))
|
|
74
|
+
return paste;
|
|
75
|
+
const id = this.#nextId++;
|
|
76
|
+
this.#store.set(id, paste);
|
|
77
|
+
return `[paste #${id} +${paste.split("\n").length} lines]`;
|
|
78
|
+
}
|
|
79
|
+
// Stash externally-supplied content (e.g. /import <path>) as if it were
|
|
80
|
+
// pasted; returns the marker to insert into the line. Single-line content
|
|
81
|
+
// comes back verbatim (no marker needed).
|
|
82
|
+
stash(content) {
|
|
83
|
+
return this.#emit(content);
|
|
84
|
+
}
|
|
85
|
+
// Replace paste markers in a submitted line with their stored text.
|
|
86
|
+
// Unknown ids (user edited the marker) are left literal.
|
|
87
|
+
expand(line) {
|
|
88
|
+
return line.replace(MARKER, (m, idStr) => {
|
|
89
|
+
const id = Number(idStr);
|
|
90
|
+
const stored = this.#store.get(id);
|
|
91
|
+
if (stored === undefined)
|
|
92
|
+
return m;
|
|
93
|
+
this.#store.delete(id);
|
|
94
|
+
return stored;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=paste.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paste.js","sourceRoot":"","sources":["../src/paste.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
CHANGED
|
@@ -14,17 +14,18 @@ export interface LogEntryWire {
|
|
|
14
14
|
status_rx: number;
|
|
15
15
|
tx: unknown;
|
|
16
16
|
rx: unknown;
|
|
17
|
-
loop_seq
|
|
18
|
-
turn_seq
|
|
19
|
-
sequence
|
|
17
|
+
loop_seq: number;
|
|
18
|
+
turn_seq: number;
|
|
19
|
+
sequence: number;
|
|
20
20
|
}
|
|
21
|
+
export declare const coordLabel: (loopSeq: number, turnSeq: number, sequence: number) => string;
|
|
21
22
|
export declare const extractSendBody: (txUnknown: unknown, prettify: boolean) => string;
|
|
22
23
|
export declare const isPromptEntry: (entry: LogEntryWire) => boolean;
|
|
23
24
|
export declare const renderLogEntry: (entry: LogEntryWire) => string;
|
|
24
25
|
export interface LoopUsage {
|
|
25
|
-
promptTokens
|
|
26
|
-
completionTokens
|
|
27
|
-
costPico
|
|
26
|
+
promptTokens: number;
|
|
27
|
+
completionTokens: number;
|
|
28
|
+
costPico: number;
|
|
28
29
|
}
|
|
29
|
-
export declare const renderSummary: (turns: number, wallMs: number,
|
|
30
|
+
export declare const renderSummary: (turns: number, wallMs: number, finalStatus: number, hitMaxTurns: boolean, usage?: LoopUsage) => string;
|
|
30
31
|
//# sourceMappingURL=render.d.ts.map
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAY5C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKhD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAS7C,CAAC;AAkEF,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IAGZ,QAAQ,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAY5C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKhD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAS7C,CAAC;AAkEF,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IAGZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAMD,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,EAAE,UAAU,MAAM,KAAG,MAG/E,CAAC;AAkCF,eAAO,MAAM,eAAe,GAAI,WAAW,OAAO,EAAE,UAAU,OAAO,KAAG,MAWvE,CAAC;AA+DF,eAAO,MAAM,aAAa,GAAI,OAAO,YAAY,KAAG,OACgD,CAAC;AAOrG,eAAO,MAAM,cAAc,GAAI,OAAO,YAAY,KAAG,MAuCpD,CAAC;AAEF,MAAM,WAAW,SAAS;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAKD,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,EAAE,aAAa,MAAM,EAAE,aAAa,OAAO,EAAE,QAAQ,SAAS,KAAG,MAS3H,CAAC"}
|
package/dist/render.js
CHANGED
|
@@ -21,7 +21,7 @@ export const OP_GLYPHS = {
|
|
|
21
21
|
export const ORIGIN_GLYPHS = {
|
|
22
22
|
model: "🤖",
|
|
23
23
|
client: "👤",
|
|
24
|
-
|
|
24
|
+
plurnk: "🧰", // the runtime actor (§14.7)
|
|
25
25
|
plugin: "🔌",
|
|
26
26
|
};
|
|
27
27
|
export const sendSubGlyph = (status) => {
|
|
@@ -104,16 +104,15 @@ const buildExtra = (entry) => {
|
|
|
104
104
|
return "";
|
|
105
105
|
}
|
|
106
106
|
};
|
|
107
|
-
// `01/02/03 ` coordinate
|
|
108
|
-
// alignment zen, growing naturally past 99.
|
|
109
|
-
// the
|
|
110
|
-
// NOT the user's loop/turn numbers
|
|
111
|
-
const
|
|
112
|
-
if (typeof entry.loop_seq !== "number" || typeof entry.turn_seq !== "number" || typeof entry.sequence !== "number")
|
|
113
|
-
return "";
|
|
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) => {
|
|
114
112
|
const p = (n) => String(n).padStart(2, "0");
|
|
115
|
-
return `${DIM}${p(
|
|
113
|
+
return `${DIM}${p(loopSeq)}/${p(turnSeq)}/${p(sequence)}${RESET} `;
|
|
116
114
|
};
|
|
115
|
+
const coordPrefix = (entry) => coordLabel(entry.loop_seq, entry.turn_seq, entry.sequence);
|
|
117
116
|
const BOLD = code("1");
|
|
118
117
|
const ITALIC = code("3");
|
|
119
118
|
// Heuristic: body looks like markdown if it carries any of the structural markers.
|
|
@@ -193,15 +192,21 @@ const renderBroadcast = (entry) => {
|
|
|
193
192
|
headerParts.push(statusText);
|
|
194
193
|
const header = ` ${coordPrefix(entry)}${headerParts.join(" ")}`;
|
|
195
194
|
const body = extractSendBody(entry.tx, /* prettify */ true);
|
|
195
|
+
const multiLine = body.includes("\n");
|
|
196
196
|
// Short single-line replies inline after the header (nvim's
|
|
197
197
|
// BROADCAST_INLINE_LIMIT convergence); longer/multi-line bodies
|
|
198
198
|
// start on the next line, indented under the speaker.
|
|
199
199
|
const lines = body.length === 0 ? [header]
|
|
200
|
-
: !
|
|
200
|
+
: !multiLine && body.length <= 80 ? [`${header} ${body}`]
|
|
201
201
|
: [header, ...body.split("\n").map((l) => ` ${l}`)];
|
|
202
202
|
const stripe = entry.origin === "model" ? MODEL_STRIPE
|
|
203
203
|
: entry.origin === "client" ? USER_STRIPE : "";
|
|
204
|
-
|
|
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);
|
|
205
210
|
};
|
|
206
211
|
// The prompt entry (system-origin EDIT against plurnk://prompt/<loop>/<turn>,
|
|
207
212
|
// service SPEC §15). The TUI SKIPS these in the live waterfall: the line the
|
|
@@ -211,8 +216,10 @@ const renderBroadcast = (entry) => {
|
|
|
211
216
|
// emoji/nerdfont prompts — the rabbit hole this client refuses to enter.
|
|
212
217
|
export const isPromptEntry = (entry) => entry.op === "EDIT" && entry.scheme === "plurnk" && (entry.pathname ?? "").startsWith("prompt/");
|
|
213
218
|
// Render a log entry as one waterfall line.
|
|
214
|
-
// Returns the full ANSI-formatted line WITHOUT trailing newline
|
|
215
|
-
//
|
|
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.
|
|
216
223
|
export const renderLogEntry = (entry) => {
|
|
217
224
|
// Broadcast SEND has no path at all (both scheme AND pathname null).
|
|
218
225
|
// A SEND directed at file:// would have scheme=null but pathname set —
|
|
@@ -251,21 +258,17 @@ export const renderLogEntry = (entry) => {
|
|
|
251
258
|
parts.push(extra);
|
|
252
259
|
return ` ${coordPrefix(entry)}${parts.join(" ")}`;
|
|
253
260
|
};
|
|
254
|
-
|
|
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) => {
|
|
255
265
|
const tag = hitMaxTurns ? "maxTurns" : finalStatus === 200 ? "done" : `final ${finalStatus}`;
|
|
256
266
|
const ms = wallMs >= 1000 ? `${(wallMs / 1000).toFixed(2)}s` : `${wallMs}ms`;
|
|
257
|
-
// Real provider usage (plurnk-service #197) when the daemon sends it:
|
|
258
|
-
// ↑prompt ↓completion + cost. Fallback: content tokens summed from the
|
|
259
|
-
// loop's log rows. Zero data → omit, never a fake gauge.
|
|
260
267
|
let tokenPart = "";
|
|
261
|
-
if (
|
|
268
|
+
if (usage !== undefined) {
|
|
262
269
|
tokenPart = ` · ↑${usage.promptTokens} ↓${usage.completionTokens}`;
|
|
263
|
-
if (
|
|
270
|
+
if (usage.costPico > 0)
|
|
264
271
|
tokenPart += ` · $${(usage.costPico / 1e12).toFixed(4)}`;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
else if (tokens > 0) {
|
|
268
|
-
tokenPart = ` · ${tokens} tokens`;
|
|
269
272
|
}
|
|
270
273
|
return `${DIM} ${tag} · ${turns} turn${turns === 1 ? "" : "s"} · ${ms}${tokenPart}${RESET}`;
|
|
271
274
|
};
|