@plurnk/plurnk 0.12.0 → 0.23.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 +37 -1
- package/dist/dispatcher.d.ts.map +1 -1
- package/dist/dispatcher.js +141 -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 +229 -104
- 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,20 @@ 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
|
+
--repo <glob> membership overlay: declare a git repo folder (its
|
|
109
|
+
ls-files join membership), relative to project root. Repeatable.
|
|
110
|
+
--manifest-items <n> session-open preview: -1 full / 0 off / N first-N
|
|
111
|
+
items of plurnk://manifest.json at turn 0. Create-time.
|
|
112
|
+
--md <name=path> pin a markdown doc into the session (read at turn 0);
|
|
113
|
+
merges with operator PLURNK_MD_*. Repeatable. Create-time.
|
|
114
|
+
--max-commands <n> ceiling on ops per emission for the session (min with the
|
|
115
|
+
daemon's PLURNK_MAX_COMMANDS — can only tighten). Create-time.
|
|
116
|
+
--no-git deny git membership + telemetry for the session (never
|
|
117
|
+
re-enables past the operator lockout). Create-time.
|
|
116
118
|
--loop <id> (log read) filter to a single loop id
|
|
117
119
|
--turn <id> (log read) filter to a single turn id
|
|
118
120
|
--since <id> (log read) return entries with id > <id>
|
|
@@ -130,12 +132,96 @@ const dieWith = (code, event) => {
|
|
|
130
132
|
report(event);
|
|
131
133
|
process.exit(code);
|
|
132
134
|
};
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
//
|
|
135
|
+
// Map the repeatable membership flags (--pick/--hide/--view/--repo) to
|
|
136
|
+
// constraints. repo (svc#242) declares a git repo folder (its ls-files join
|
|
137
|
+
// membership), addressed relative to the project root.
|
|
138
|
+
export const buildConstraints = (values) => [
|
|
139
|
+
...(values.pick ?? []).map((glob) => ({ effect: "pick", glob })),
|
|
140
|
+
...(values.hide ?? []).map((glob) => ({ effect: "hide", glob })),
|
|
141
|
+
...(values.view ?? []).map((glob) => ({ effect: "view", glob })),
|
|
142
|
+
...(values.repo ?? []).map((glob) => ({ effect: "repo", glob })),
|
|
143
|
+
];
|
|
144
|
+
export const buildSettings = async (values, cwd) => {
|
|
145
|
+
const settings = {};
|
|
146
|
+
const mc = values["max-commands"];
|
|
147
|
+
if (mc !== undefined) {
|
|
148
|
+
const n = Number(mc);
|
|
149
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
150
|
+
throw new TelemetryError(clientFlagInvalid("--max-commands", mc, "must be a positive integer"));
|
|
151
|
+
}
|
|
152
|
+
settings.maxCommands = n;
|
|
153
|
+
}
|
|
154
|
+
if (values["no-git"] === true)
|
|
155
|
+
settings.git = false;
|
|
156
|
+
const mi = values["manifest-items"];
|
|
157
|
+
if (mi !== undefined) {
|
|
158
|
+
const n = Number(mi);
|
|
159
|
+
if (!Number.isInteger(n) || n < -1) {
|
|
160
|
+
throw new TelemetryError(clientFlagInvalid("--manifest-items", mi, "must be -1 (full), 0 (off), or a positive integer"));
|
|
161
|
+
}
|
|
162
|
+
settings.manifestItems = n;
|
|
163
|
+
}
|
|
164
|
+
const mdSpecs = values.md ?? [];
|
|
165
|
+
if (mdSpecs.length > 0) {
|
|
166
|
+
const mdDocs = [];
|
|
167
|
+
for (const spec of mdSpecs) {
|
|
168
|
+
const eq = spec.indexOf("=");
|
|
169
|
+
if (eq <= 0)
|
|
170
|
+
throw new TelemetryError(clientFlagInvalid("--md", spec, "must be NAME=path"));
|
|
171
|
+
const alias = spec.slice(0, eq);
|
|
172
|
+
const raw = spec.slice(eq + 1);
|
|
173
|
+
const abs = isAbsolute(raw) ? raw : resolve(cwd, raw);
|
|
174
|
+
try {
|
|
175
|
+
mdDocs.push({ alias, content: await readFile(abs, "utf8") });
|
|
176
|
+
}
|
|
177
|
+
catch (cause) {
|
|
178
|
+
throw new TelemetryError(clientFlagInvalid("--md", spec, `file not readable: ${cause instanceof Error ? cause.message : String(cause)}`));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
settings.mdDocs = mdDocs;
|
|
182
|
+
}
|
|
183
|
+
return settings;
|
|
184
|
+
};
|
|
185
|
+
// svc#235: discover.versions { service:{installed, latest?}, client:{latest?} }.
|
|
186
|
+
// The daemon polls npm; the client compares its OWN installed version against
|
|
187
|
+
// the advertised latest and renders both lines + an "(update available)"
|
|
188
|
+
// marker. The client never does registry IO — it just reads what discover says.
|
|
189
|
+
export const CLIENT_VERSION = createRequire(import.meta.url)("../package.json").version;
|
|
190
|
+
const isOlder = (a, b) => {
|
|
191
|
+
const pa = a.split(".").map(Number);
|
|
192
|
+
const pb = b.split(".").map(Number);
|
|
193
|
+
for (let i = 0; i < 3; i++) {
|
|
194
|
+
const x = pa[i] ?? 0, y = pb[i] ?? 0;
|
|
195
|
+
if (x < y)
|
|
196
|
+
return true;
|
|
197
|
+
if (x > y)
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
return false;
|
|
201
|
+
};
|
|
202
|
+
export const buildVersionNotice = (versions, clientInstalled) => {
|
|
203
|
+
if (versions === undefined)
|
|
204
|
+
return undefined;
|
|
205
|
+
const svc = versions.service?.installed;
|
|
206
|
+
const parts = [`plurnk client v${clientInstalled}`];
|
|
207
|
+
if (svc !== undefined)
|
|
208
|
+
parts.push(`plurnk-service v${svc}`);
|
|
209
|
+
const stale = (versions.client?.latest !== undefined && isOlder(clientInstalled, versions.client.latest))
|
|
210
|
+
|| (svc !== undefined && versions.service?.latest !== undefined && isOlder(svc, versions.service.latest));
|
|
211
|
+
return parts.join(", ") + (stale ? " (update available)" : "");
|
|
212
|
+
};
|
|
136
213
|
const attachOrCreateSession = async (rpc, opts) => {
|
|
214
|
+
const constraints = opts.constraints ?? [];
|
|
215
|
+
const settings = opts.settings ?? {};
|
|
137
216
|
if (opts.sessionName === undefined) {
|
|
138
|
-
|
|
217
|
+
// Seed overlay + open-context settings atomically at creation so turn-1's
|
|
218
|
+
// manifest/preview/docs are right with no follow-up RPC.
|
|
219
|
+
const params = { projectRoot: opts.projectRoot };
|
|
220
|
+
if (constraints.length > 0)
|
|
221
|
+
params.constraints = constraints;
|
|
222
|
+
if (Object.keys(settings).length > 0)
|
|
223
|
+
params.settings = settings;
|
|
224
|
+
return await rpc.call("session.create", params);
|
|
139
225
|
}
|
|
140
226
|
const { sessions } = await rpc.call("session.list");
|
|
141
227
|
const matches = sessions.filter((s) => s.name === opts.sessionName);
|
|
@@ -150,7 +236,16 @@ const attachOrCreateSession = async (rpc, opts) => {
|
|
|
150
236
|
const attachParams = { id: matches[0].id };
|
|
151
237
|
if (opts.runName !== undefined)
|
|
152
238
|
attachParams.runName = opts.runName;
|
|
153
|
-
|
|
239
|
+
const session = await rpc.call("session.attach", attachParams);
|
|
240
|
+
// An existing session takes the overlay flags live (session.create only
|
|
241
|
+
// seeds at birth). Settings (--manifest-items/--md) are session-create-only
|
|
242
|
+
// per svc#231 — there's no live setter, so flag-and-skip on attach.
|
|
243
|
+
for (const c of constraints)
|
|
244
|
+
await rpc.call("session.constrain", c);
|
|
245
|
+
if (Object.keys(settings).length > 0) {
|
|
246
|
+
process.stderr.write(" \x1b[2m--manifest-items/--md apply at session creation only; ignored on --session attach\x1b[0m\n");
|
|
247
|
+
}
|
|
248
|
+
return session;
|
|
154
249
|
};
|
|
155
250
|
// Parse a string-valued integer flag, throwing if non-numeric. Used for
|
|
156
251
|
// log.read filter flags (--loop / --turn / --since / --limit) since
|
|
@@ -247,11 +342,20 @@ export const main = async (argv) => {
|
|
|
247
342
|
run: { type: "string" },
|
|
248
343
|
model: { type: "string" },
|
|
249
344
|
"project-root": { type: "string" },
|
|
250
|
-
persona: { type: "string" },
|
|
251
345
|
yolo: { type: "boolean" },
|
|
252
346
|
flags: { type: "string" },
|
|
253
347
|
"max-turns": { type: "string" },
|
|
254
348
|
timeout: { type: "string" },
|
|
349
|
+
// membership overlay (svc#200/#242) — repeatable globs; service vocabulary
|
|
350
|
+
pick: { type: "string", multiple: true },
|
|
351
|
+
hide: { type: "string", multiple: true },
|
|
352
|
+
view: { type: "string", multiple: true },
|
|
353
|
+
repo: { type: "string", multiple: true },
|
|
354
|
+
// session-open settings (svc#231) + tighten-only ceilings (svc#232)
|
|
355
|
+
"manifest-items": { type: "string" },
|
|
356
|
+
md: { type: "string", multiple: true },
|
|
357
|
+
"max-commands": { type: "string" },
|
|
358
|
+
"no-git": { type: "boolean" },
|
|
255
359
|
// log read filters
|
|
256
360
|
loop: { type: "string" },
|
|
257
361
|
turn: { type: "string" },
|
|
@@ -315,15 +419,6 @@ export const main = async (argv) => {
|
|
|
315
419
|
return dieWith(64, clientRuntimeError(cause));
|
|
316
420
|
}
|
|
317
421
|
})();
|
|
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
422
|
const url = process.env.PLURNK_URL ?? "ws://127.0.0.1:3044";
|
|
328
423
|
const rpc = new Rpc({ url });
|
|
329
424
|
try {
|
|
@@ -335,6 +430,7 @@ export const main = async (argv) => {
|
|
|
335
430
|
// Daemon staleness check (clients track HEAD, service SPEC §13.9): probe
|
|
336
431
|
// discover for wire markers this client depends on; warn bluntly when
|
|
337
432
|
// missing. One local round-trip; never fatal.
|
|
433
|
+
let versionNotice;
|
|
338
434
|
try {
|
|
339
435
|
const catalog = await rpc.call("discover");
|
|
340
436
|
const missing = [];
|
|
@@ -346,6 +442,7 @@ export const main = async (argv) => {
|
|
|
346
442
|
missing.push("stream/concluded");
|
|
347
443
|
if (missing.length > 0)
|
|
348
444
|
report(clientDaemonStale(missing));
|
|
445
|
+
versionNotice = buildVersionNotice(catalog.versions, CLIENT_VERSION); // svc#235
|
|
349
446
|
}
|
|
350
447
|
catch { /* discover failing will surface on the real call anyway */ }
|
|
351
448
|
try {
|
|
@@ -356,12 +453,19 @@ export const main = async (argv) => {
|
|
|
356
453
|
});
|
|
357
454
|
process.exit(exitCode);
|
|
358
455
|
}
|
|
359
|
-
const session = await attachOrCreateSession(rpc, {
|
|
456
|
+
const session = await attachOrCreateSession(rpc, {
|
|
457
|
+
sessionName, runName, projectRoot,
|
|
458
|
+
constraints: buildConstraints(values),
|
|
459
|
+
settings: await buildSettings(values, process.cwd()),
|
|
460
|
+
});
|
|
360
461
|
if (prompt.length === 0) {
|
|
361
|
-
await runTui(rpc, session, { modelAlias,
|
|
462
|
+
await runTui(rpc, session, { modelAlias, yolo, loopFlags, maxTurns, projectRoot, versionNotice });
|
|
362
463
|
process.exit(0);
|
|
363
464
|
}
|
|
364
|
-
|
|
465
|
+
// CLI: the version notice is narration → stderr (never pollutes stdout/--json).
|
|
466
|
+
if (versionNotice !== undefined && json === false)
|
|
467
|
+
process.stderr.write(`\x1b[2m${versionNotice}\x1b[0m\n`);
|
|
468
|
+
const exitCode = await runCli(rpc, prompt, session, { json, modelAlias, yolo, loopFlags, maxTurns, timeoutSec });
|
|
365
469
|
process.exit(exitCode);
|
|
366
470
|
}
|
|
367
471
|
catch (cause) {
|
|
@@ -370,12 +474,10 @@ export const main = async (argv) => {
|
|
|
370
474
|
await rpc.close();
|
|
371
475
|
process.exit(cause.exitCode);
|
|
372
476
|
}
|
|
373
|
-
// RPC
|
|
374
|
-
// method
|
|
375
|
-
//
|
|
376
|
-
|
|
377
|
-
// about.
|
|
378
|
-
report(clientRuntimeError(cause));
|
|
477
|
+
// A daemon-rejected RPC arrives as a typed RpcError carrying the failed
|
|
478
|
+
// method and the daemon's code/message — surface it as client:rpc:error.
|
|
479
|
+
// Anything else is a genuine non-RPC throw: the generic runtime fallback.
|
|
480
|
+
report(cause instanceof RpcError ? clientRpcError(cause.method, cause) : clientRuntimeError(cause));
|
|
379
481
|
await rpc.close();
|
|
380
482
|
process.exit(1);
|
|
381
483
|
}
|
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
|
};
|