@plurnk/plurnk 0.1.0 → 0.3.1
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/bin/plurnk.js +1 -1
- package/dist/cli.d.ts +16 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +88 -117
- package/dist/cli.js.map +1 -1
- package/dist/dispatcher.d.ts +4 -0
- package/dist/dispatcher.d.ts.map +1 -0
- package/dist/dispatcher.js +297 -0
- package/dist/dispatcher.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/proposal.d.ts +2 -0
- package/dist/proposal.d.ts.map +1 -1
- package/dist/proposal.js +2 -2
- package/dist/proposal.js.map +1 -1
- package/dist/render.d.ts +4 -4
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +13 -5
- package/dist/render.js.map +1 -1
- package/dist/subcommands.d.ts +21 -0
- package/dist/subcommands.d.ts.map +1 -0
- package/dist/subcommands.js +109 -0
- package/dist/subcommands.js.map +1 -0
- package/dist/tui.d.ts +1 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +2 -0
- package/dist/tui.js.map +1 -1
- package/package.json +5 -2
- package/dist/oneshot.d.ts +0 -12
- package/dist/oneshot.d.ts.map +0 -1
- package/dist/oneshot.js +0 -82
- package/dist/oneshot.js.map +0 -1
package/bin/plurnk.js
CHANGED
package/dist/cli.d.ts
CHANGED
|
@@ -1,2 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
import type Rpc from "./rpc.ts";
|
|
2
|
+
import type { LogEntryWire } from "./render.ts";
|
|
3
|
+
interface SessionResult {
|
|
4
|
+
id: number;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const formatPlain: (entry: LogEntryWire) => string;
|
|
8
|
+
export declare const isTerminalBroadcast: (entry: LogEntryWire) => boolean;
|
|
9
|
+
export declare const formatJsonReply: (txUnknown: unknown) => string;
|
|
10
|
+
export declare const runCli: (rpc: Rpc, prompt: string, session: SessionResult, opts: {
|
|
11
|
+
json: boolean;
|
|
12
|
+
modelAlias?: string;
|
|
13
|
+
persona?: string;
|
|
14
|
+
yolo: boolean;
|
|
15
|
+
}) => Promise<number>;
|
|
16
|
+
export {};
|
|
2
17
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAYhD,UAAU,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAEpD,eAAO,MAAM,WAAW,GAAI,OAAO,YAAY,KAAG,MAWjD,CAAC;AAMF,eAAO,MAAM,mBAAmB,GAAI,OAAO,YAAY,KAAG,OAKL,CAAC;AAEtD,eAAO,MAAM,eAAe,GAAI,WAAW,OAAO,KAAG,MAOpD,CAAC;AAEF,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,QAAQ,MAAM,EAAE,SAAS,aAAa,EAAE,MAAM;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,MAAM,CAoD5K,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,122 +1,93 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
PLURNK_RUN resume (or create) a named run within that session
|
|
16
|
-
PLURNK_MODEL model alias to use for every loop.run on this invocation.
|
|
17
|
-
Shared with the daemon (user-level preference). --model
|
|
18
|
-
overrides for this invocation only.
|
|
19
|
-
PLURNK_YOLO when truthy, auto-accept every proposal without prompting.
|
|
20
|
-
Client-side only — proposals still go through the wire.
|
|
21
|
-
|
|
22
|
-
options:
|
|
23
|
-
-h, --help print this message and exit
|
|
24
|
-
--json emit the terminal answer as a JSON value on stdout
|
|
25
|
-
(compact, validated; non-JSON replies are wrapped as
|
|
26
|
-
JSON string literals). CLI mode only.
|
|
27
|
-
--session <name> resume the named session; without it, a fresh session
|
|
28
|
-
is created. Overrides PLURNK_SESSION.
|
|
29
|
-
--run <name> resume (or create) the named run within the session.
|
|
30
|
-
Requires --session. Overrides PLURNK_RUN.
|
|
31
|
-
--model <alias> model alias to pass on every loop.run. Resolved
|
|
32
|
-
server-side against PLURNK_MODEL_<alias>. Without
|
|
33
|
-
this (and PLURNK_MODEL unset), the daemon uses its
|
|
34
|
-
own boot-time PLURNK_MODEL.
|
|
35
|
-
--yolo auto-accept every proposal locally without prompting.
|
|
36
|
-
Overrides PLURNK_YOLO.
|
|
37
|
-
`;
|
|
38
|
-
const die = (code, message) => {
|
|
39
|
-
process.stderr.write(`${message}\n`);
|
|
40
|
-
process.exit(code);
|
|
41
|
-
};
|
|
42
|
-
// Resolve the session by name (via session.list filter) or create a fresh one.
|
|
43
|
-
// Names are the user-facing handle — ids are internals, not exposed via flags.
|
|
44
|
-
const attachOrCreateSession = async (rpc, opts) => {
|
|
45
|
-
if (opts.sessionName === undefined) {
|
|
46
|
-
return await rpc.call("session.create");
|
|
47
|
-
}
|
|
48
|
-
const { sessions } = await rpc.call("session.list");
|
|
49
|
-
const matches = sessions.filter((s) => s.name === opts.sessionName);
|
|
50
|
-
if (matches.length === 0) {
|
|
51
|
-
throw new Error(`no session named ${JSON.stringify(opts.sessionName)}; run without --session to create one`);
|
|
1
|
+
// CLI mode — single loop.run, plain text, no glyphs. Unix-tool posture
|
|
2
|
+
// per SPEC.md §2 / TUI.md §2. Subscribes to log/entry notifications and
|
|
3
|
+
// prints each op as a plain trace line on stderr; only the terminal SEND
|
|
4
|
+
// body lands on stdout (§5.4). Suitable for piping to grep / awk / head / jq.
|
|
5
|
+
import { extractSendBody } from "./render.js";
|
|
6
|
+
import { reviewProposal } from "./proposal.js";
|
|
7
|
+
export const formatPlain = (entry) => {
|
|
8
|
+
// Render what the wire says — no synthesis. Bare pathname when scheme
|
|
9
|
+
// is null; full URI when scheme is present.
|
|
10
|
+
let path = "";
|
|
11
|
+
if (entry.pathname !== null) {
|
|
12
|
+
path = entry.scheme !== null
|
|
13
|
+
? `${entry.scheme}://${entry.hostname ?? ""}${entry.pathname}${entry.fragment !== null ? `#${entry.fragment}` : ""}`
|
|
14
|
+
: entry.pathname;
|
|
52
15
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
const attachParams = { id: matches[0].id };
|
|
57
|
-
if (opts.runName !== undefined)
|
|
58
|
-
attachParams.runName = opts.runName;
|
|
59
|
-
return await rpc.call("session.attach", attachParams);
|
|
16
|
+
const sub = entry.op === "SEND" && typeof entry.signal === "number" ? `[${entry.signal}]` : "";
|
|
17
|
+
return `[${entry.status_rx}] ${entry.origin} ${entry.op}${sub} ${path}`.trim();
|
|
60
18
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
19
|
+
// Per plurnk-service Engine.ts, only SEND[200] and SEND[499] terminate a loop.
|
|
20
|
+
// Intermediate broadcasts (SEND[102] etc.) are protocol mechanics, not the answer.
|
|
21
|
+
// Broadcast = no target at all (both scheme AND pathname null), to distinguish
|
|
22
|
+
// from a SEND directed at file:// which has scheme=null but pathname set.
|
|
23
|
+
export const isTerminalBroadcast = (entry) => entry.op === "SEND"
|
|
24
|
+
&& entry.scheme === null
|
|
25
|
+
&& entry.pathname === null
|
|
26
|
+
&& typeof entry.signal === "number"
|
|
27
|
+
&& (entry.signal === 200 || entry.signal === 499);
|
|
28
|
+
export const formatJsonReply = (txUnknown) => {
|
|
29
|
+
const tx = txUnknown;
|
|
30
|
+
if (tx === null || tx === undefined || tx.body === null || tx.body === undefined)
|
|
31
|
+
return "";
|
|
32
|
+
const { raw, json } = tx.body;
|
|
33
|
+
if (json !== null && json !== undefined)
|
|
34
|
+
return JSON.stringify(json);
|
|
35
|
+
if (typeof raw !== "string")
|
|
36
|
+
return "";
|
|
37
|
+
return JSON.stringify(raw);
|
|
38
|
+
};
|
|
39
|
+
export const runCli = async (rpc, prompt, session, opts) => {
|
|
40
|
+
// stdout is the program's product (the terminal answer); stderr is its narration.
|
|
41
|
+
// Per SPEC.md §2: `plurnk "X" > answer.txt` captures just the terminal broadcast body.
|
|
42
|
+
process.stderr.write(`session: ${session.name}\n`);
|
|
43
|
+
process.stderr.write(`prompt: ${prompt}\n\n`);
|
|
44
|
+
rpc.onNotification("log/entry", (params) => {
|
|
45
|
+
const p = params;
|
|
46
|
+
process.stderr.write(`${formatPlain(p.entry)}\n`);
|
|
47
|
+
if (!isTerminalBroadcast(p.entry))
|
|
48
|
+
return;
|
|
49
|
+
const out = opts.json ? formatJsonReply(p.entry.tx) : extractSendBody(p.entry.tx, /* prettify */ false);
|
|
50
|
+
if (out.length > 0)
|
|
51
|
+
process.stdout.write(`${out}\n`);
|
|
77
52
|
});
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
finally {
|
|
119
|
-
await rpc.close();
|
|
120
|
-
}
|
|
53
|
+
// Proposal lifecycle (plurnk-service #42): pause-and-review for side-effecting
|
|
54
|
+
// ops. Three paths:
|
|
55
|
+
// - --yolo: auto-accept locally without prompting (server still sends the notification).
|
|
56
|
+
// - TTY: interactive review.
|
|
57
|
+
// - no TTY, no yolo: fail closed (reject) so the daemon doesn't hang for 5 minutes.
|
|
58
|
+
rpc.onNotification("loop/proposal", (params) => {
|
|
59
|
+
const p = params;
|
|
60
|
+
void (async () => {
|
|
61
|
+
if (opts.yolo) {
|
|
62
|
+
await rpc.call("loop.resolve", { logEntryId: p.logEntryId, decision: "accept", outcome: "client_yolo" });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (process.stdin.isTTY !== true) {
|
|
66
|
+
await rpc.call("loop.resolve", {
|
|
67
|
+
logEntryId: p.logEntryId,
|
|
68
|
+
decision: "reject",
|
|
69
|
+
outcome: "no_tty_review",
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const resolution = await reviewProposal(p);
|
|
74
|
+
await rpc.call("loop.resolve", { logEntryId: p.logEntryId, ...resolution });
|
|
75
|
+
})();
|
|
76
|
+
});
|
|
77
|
+
const start = Date.now();
|
|
78
|
+
const loopParams = { prompt };
|
|
79
|
+
if (opts.modelAlias !== undefined)
|
|
80
|
+
loopParams.alias = opts.modelAlias;
|
|
81
|
+
if (opts.persona !== undefined)
|
|
82
|
+
loopParams.persona = opts.persona;
|
|
83
|
+
const result = await rpc.call("loop.run", loopParams);
|
|
84
|
+
const wallMs = Date.now() - start;
|
|
85
|
+
process.stderr.write(`\nfinal status: ${result.finalStatus}${result.hitMaxTurns ? " (maxTurns reached)" : ""}\n`);
|
|
86
|
+
process.stderr.write(`turns: ${result.turnIds.length}, wall: ${(wallMs / 1000).toFixed(2)}s\n`);
|
|
87
|
+
if (result.finalStatus === 200)
|
|
88
|
+
return 0;
|
|
89
|
+
if (result.hitMaxTurns)
|
|
90
|
+
return 2;
|
|
91
|
+
return 3;
|
|
121
92
|
};
|
|
122
93
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const resolvePersona: (raw: string | undefined) => Promise<string | undefined>;
|
|
2
|
+
export declare const resolveProjectRoot: (raw: string | undefined) => string | null;
|
|
3
|
+
export declare const main: (argv: string[]) => Promise<void>;
|
|
4
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,cAAc,GAAU,KAAK,MAAM,GAAG,SAAS,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAIxF,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,IAKrE,CAAC;AAqKF,eAAO,MAAM,IAAI,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAmGvD,CAAC"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
// plurnk client entrypoint. Dispatches argv to CLI mode (positional args or
|
|
2
|
+
// piped stdin) or TUI REPL mode (no positionals, TTY stdin). Per SPEC.md
|
|
3
|
+
// §2 (CLI mode) and §3 (TUI mode).
|
|
4
|
+
import { parseArgs } from "node:util";
|
|
5
|
+
import { readFile } from "node:fs/promises";
|
|
6
|
+
import { isAbsolute, resolve } from "node:path";
|
|
7
|
+
import Rpc from "./rpc.js";
|
|
8
|
+
import { runCli } from "./cli.js";
|
|
9
|
+
import { runTui } from "./tui.js";
|
|
10
|
+
import { runModels, runSessionList, runSessionRuns, runLogRead } from "./subcommands.js";
|
|
11
|
+
// Read all of stdin to EOF. Called when stdin is piped (not a TTY) — never
|
|
12
|
+
// blocks an interactive session because we gate on isTTY upstream.
|
|
13
|
+
const readStdin = async () => {
|
|
14
|
+
let buf = "";
|
|
15
|
+
for await (const chunk of process.stdin)
|
|
16
|
+
buf += chunk;
|
|
17
|
+
return buf;
|
|
18
|
+
};
|
|
19
|
+
// Persona resolution: the flag/env value is a path to a markdown file.
|
|
20
|
+
// Personas are typically long; quoting multiline markdown on the command
|
|
21
|
+
// line is hostile. Path-only keeps the contract obvious.
|
|
22
|
+
export const resolvePersona = async (raw) => {
|
|
23
|
+
if (raw === undefined)
|
|
24
|
+
return undefined;
|
|
25
|
+
const abs = isAbsolute(raw) ? raw : resolve(process.cwd(), raw);
|
|
26
|
+
return await readFile(abs, "utf8");
|
|
27
|
+
};
|
|
28
|
+
// projectRoot resolution: empty string = explicit headless (null on wire);
|
|
29
|
+
// otherwise must be an absolute path. Caller passes cwd as default.
|
|
30
|
+
export const resolveProjectRoot = (raw) => {
|
|
31
|
+
if (raw === undefined)
|
|
32
|
+
return process.cwd();
|
|
33
|
+
if (raw.length === 0)
|
|
34
|
+
return null;
|
|
35
|
+
if (!isAbsolute(raw))
|
|
36
|
+
throw new Error(`plurnk: --project-root must be an absolute path (got ${JSON.stringify(raw)})`);
|
|
37
|
+
return raw;
|
|
38
|
+
};
|
|
39
|
+
const USAGE = `usage: plurnk [--json] [--session <name>] [--run <name>] [--model <alias>] [prompt...]
|
|
40
|
+
<piped stdin> | plurnk [options] [prompt...]
|
|
41
|
+
plurnk models [--json]
|
|
42
|
+
plurnk session list [--json]
|
|
43
|
+
plurnk session runs <name> [--json]
|
|
44
|
+
plurnk log read --session <name> [--run <name>]
|
|
45
|
+
[--loop <id>] [--turn <id>] [--since <id>] [--limit <n>] [--json]
|
|
46
|
+
|
|
47
|
+
Connects to the plurnk-service daemon. Run a single prompt one-shot
|
|
48
|
+
(positional args, piped stdin, or both — positionals come first, stdin
|
|
49
|
+
is appended after a blank line). With no positionals and a TTY stdin,
|
|
50
|
+
enters the interactive REPL. Read-only subcommands (models / session list /
|
|
51
|
+
log read) inspect daemon state without running a loop.
|
|
52
|
+
|
|
53
|
+
env:
|
|
54
|
+
PLURNK_URL daemon WebSocket URL (default ws://127.0.0.1:3044)
|
|
55
|
+
PLURNK_SESSION resume an existing session by name
|
|
56
|
+
PLURNK_RUN resume (or create) a named run within that session
|
|
57
|
+
PLURNK_MODEL model alias to use for every loop.run on this invocation.
|
|
58
|
+
Shared with the daemon (user-level preference). --model
|
|
59
|
+
overrides for this invocation only.
|
|
60
|
+
PLURNK_PROJECT_ROOT absolute path passed to session.create as the session's
|
|
61
|
+
project_root (workspace for file ops). Default: cwd.
|
|
62
|
+
Empty string = headless (no project_root, file ops 400).
|
|
63
|
+
PLURNK_PERSONA path to a persona file (text/markdown); contents are
|
|
64
|
+
passed on every loop.run.
|
|
65
|
+
PLURNK_YOLO when truthy, auto-accept every proposal without prompting.
|
|
66
|
+
Client-side only — proposals still go through the wire.
|
|
67
|
+
|
|
68
|
+
options:
|
|
69
|
+
-h, --help print this message and exit
|
|
70
|
+
--json emit the terminal answer as a JSON value on stdout
|
|
71
|
+
(compact, validated; non-JSON replies are wrapped as
|
|
72
|
+
JSON string literals). CLI mode only.
|
|
73
|
+
--session <name> resume the named session; without it, a fresh session
|
|
74
|
+
is created. Overrides PLURNK_SESSION.
|
|
75
|
+
--run <name> resume (or create) the named run within the session.
|
|
76
|
+
Requires --session. Overrides PLURNK_RUN.
|
|
77
|
+
--model <alias> model alias to pass on every loop.run. Resolved
|
|
78
|
+
server-side against PLURNK_MODEL_<alias>. Without
|
|
79
|
+
this (and PLURNK_MODEL unset), the daemon uses its
|
|
80
|
+
own boot-time PLURNK_MODEL.
|
|
81
|
+
--project-root <p> absolute path. Sent on session.create only; ignored
|
|
82
|
+
on --session attach (daemon preserves stored value).
|
|
83
|
+
Default: cwd. Empty string = headless. Overrides
|
|
84
|
+
PLURNK_PROJECT_ROOT.
|
|
85
|
+
--persona <path> path to a persona file (text/markdown); contents are
|
|
86
|
+
passed on every loop.run. Overrides PLURNK_PERSONA.
|
|
87
|
+
--yolo auto-accept every proposal locally without prompting.
|
|
88
|
+
Overrides PLURNK_YOLO.
|
|
89
|
+
--loop <id> (log read) filter to a single loop id
|
|
90
|
+
--turn <id> (log read) filter to a single turn id
|
|
91
|
+
--since <id> (log read) return entries with id > <id>
|
|
92
|
+
--limit <n> (log read) max entries to return (default 100)
|
|
93
|
+
|
|
94
|
+
subcommands:
|
|
95
|
+
models list configured model aliases (providers.list)
|
|
96
|
+
session list list sessions on the daemon (session.list)
|
|
97
|
+
session runs <name> list runs in the named session (session.runs)
|
|
98
|
+
log read --session ... read log entries from the named session's run
|
|
99
|
+
`;
|
|
100
|
+
const die = (code, message) => {
|
|
101
|
+
process.stderr.write(`${message}\n`);
|
|
102
|
+
process.exit(code);
|
|
103
|
+
};
|
|
104
|
+
// Resolve the session by name (via session.list filter) or create a fresh one.
|
|
105
|
+
// Names are the user-facing handle — ids are internals, not exposed via flags.
|
|
106
|
+
// projectRoot is sent on creation only; attach inherits the daemon-stored value.
|
|
107
|
+
const attachOrCreateSession = async (rpc, opts) => {
|
|
108
|
+
if (opts.sessionName === undefined) {
|
|
109
|
+
return await rpc.call("session.create", { projectRoot: opts.projectRoot });
|
|
110
|
+
}
|
|
111
|
+
const { sessions } = await rpc.call("session.list");
|
|
112
|
+
const matches = sessions.filter((s) => s.name === opts.sessionName);
|
|
113
|
+
if (matches.length === 0) {
|
|
114
|
+
throw new Error(`no session named ${JSON.stringify(opts.sessionName)}; run without --session to create one`);
|
|
115
|
+
}
|
|
116
|
+
if (matches.length > 1) {
|
|
117
|
+
throw new Error(`${matches.length} sessions named ${JSON.stringify(opts.sessionName)}; pick a unique name`);
|
|
118
|
+
}
|
|
119
|
+
const attachParams = { id: matches[0].id };
|
|
120
|
+
if (opts.runName !== undefined)
|
|
121
|
+
attachParams.runName = opts.runName;
|
|
122
|
+
return await rpc.call("session.attach", attachParams);
|
|
123
|
+
};
|
|
124
|
+
// Parse a string-valued integer flag, throwing if non-numeric. Used for
|
|
125
|
+
// log.read filter flags (--loop / --turn / --since / --limit) since
|
|
126
|
+
// parseArgs stores their raw string values regardless of intent.
|
|
127
|
+
const parseIntFlag = (raw, name) => {
|
|
128
|
+
if (raw === undefined)
|
|
129
|
+
return undefined;
|
|
130
|
+
const n = Number(raw);
|
|
131
|
+
if (!Number.isInteger(n) || n < 0)
|
|
132
|
+
throw new Error(`${name} must be a non-negative integer, got ${JSON.stringify(raw)}`);
|
|
133
|
+
return n;
|
|
134
|
+
};
|
|
135
|
+
// Dispatch a positional-driven subcommand. Caller has already connected the
|
|
136
|
+
// Rpc. Returns the exit code the dispatcher should propagate.
|
|
137
|
+
const runSubcommand = async (rpc, positionals, opts) => {
|
|
138
|
+
const verb = positionals[0];
|
|
139
|
+
const sub = positionals[1];
|
|
140
|
+
if (verb === "models") {
|
|
141
|
+
if (positionals.length > 1)
|
|
142
|
+
die(64, `plurnk models: unexpected arguments after 'models': ${positionals.slice(1).join(" ")}`);
|
|
143
|
+
return await runModels(rpc, { json: opts.json });
|
|
144
|
+
}
|
|
145
|
+
if (verb === "session") {
|
|
146
|
+
if (sub === "list") {
|
|
147
|
+
if (positionals.length > 2)
|
|
148
|
+
die(64, `plurnk session list: unexpected arguments: ${positionals.slice(2).join(" ")}`);
|
|
149
|
+
return await runSessionList(rpc, { json: opts.json });
|
|
150
|
+
}
|
|
151
|
+
if (sub === "runs") {
|
|
152
|
+
const name = positionals[2];
|
|
153
|
+
if (name === undefined)
|
|
154
|
+
die(64, "plurnk session runs: missing session name. Usage: plurnk session runs <name>");
|
|
155
|
+
if (positionals.length > 3)
|
|
156
|
+
die(64, `plurnk session runs: unexpected arguments: ${positionals.slice(3).join(" ")}`);
|
|
157
|
+
return await runSessionRuns(rpc, name, { json: opts.json });
|
|
158
|
+
}
|
|
159
|
+
die(64, `plurnk session: unknown subcommand '${sub ?? "(missing)"}'. Available: list, runs`);
|
|
160
|
+
}
|
|
161
|
+
if (verb === "log") {
|
|
162
|
+
if (sub !== "read") {
|
|
163
|
+
die(64, `plurnk log: unknown subcommand '${sub ?? "(missing)"}'. Available: read`);
|
|
164
|
+
}
|
|
165
|
+
if (opts.sessionName === undefined) {
|
|
166
|
+
die(64, "plurnk log read: requires --session / PLURNK_SESSION (the log lives on a specific session's run)");
|
|
167
|
+
}
|
|
168
|
+
// log.read requires an attached session — same resolution as the loop flows.
|
|
169
|
+
await attachOrCreateSession(rpc, {
|
|
170
|
+
sessionName: opts.sessionName,
|
|
171
|
+
runName: opts.runName,
|
|
172
|
+
projectRoot: opts.projectRoot,
|
|
173
|
+
});
|
|
174
|
+
const filters = {};
|
|
175
|
+
const loopId = parseIntFlag(opts.values.loop, "--loop");
|
|
176
|
+
const turnId = parseIntFlag(opts.values.turn, "--turn");
|
|
177
|
+
const sinceId = parseIntFlag(opts.values.since, "--since");
|
|
178
|
+
const limit = parseIntFlag(opts.values.limit, "--limit");
|
|
179
|
+
if (loopId !== undefined)
|
|
180
|
+
filters.loopId = loopId;
|
|
181
|
+
if (turnId !== undefined)
|
|
182
|
+
filters.turnId = turnId;
|
|
183
|
+
if (sinceId !== undefined)
|
|
184
|
+
filters.sinceId = sinceId;
|
|
185
|
+
if (limit !== undefined)
|
|
186
|
+
filters.limit = limit;
|
|
187
|
+
return await runLogRead(rpc, { json: opts.json, filters });
|
|
188
|
+
}
|
|
189
|
+
return die(64, `plurnk: unknown subcommand '${verb ?? "(missing)"}'`);
|
|
190
|
+
};
|
|
191
|
+
export const main = async (argv) => {
|
|
192
|
+
try {
|
|
193
|
+
process.loadEnvFile(".env");
|
|
194
|
+
}
|
|
195
|
+
catch { /* .env is optional */ }
|
|
196
|
+
const { positionals, values } = parseArgs({
|
|
197
|
+
args: argv.slice(2),
|
|
198
|
+
allowPositionals: true,
|
|
199
|
+
options: {
|
|
200
|
+
help: { type: "boolean", short: "h" },
|
|
201
|
+
json: { type: "boolean" },
|
|
202
|
+
session: { type: "string" },
|
|
203
|
+
run: { type: "string" },
|
|
204
|
+
model: { type: "string" },
|
|
205
|
+
"project-root": { type: "string" },
|
|
206
|
+
persona: { type: "string" },
|
|
207
|
+
yolo: { type: "boolean" },
|
|
208
|
+
// log read filters
|
|
209
|
+
loop: { type: "string" },
|
|
210
|
+
turn: { type: "string" },
|
|
211
|
+
since: { type: "string" },
|
|
212
|
+
limit: { type: "string" },
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
if (values.help) {
|
|
216
|
+
process.stdout.write(USAGE);
|
|
217
|
+
process.exit(0);
|
|
218
|
+
}
|
|
219
|
+
// Subcommand routing happens BEFORE prompt assembly: if positionals[0] is
|
|
220
|
+
// a known read-only subcommand (models / session / log), we skip stdin
|
|
221
|
+
// reading and prompt construction entirely.
|
|
222
|
+
const SUBCOMMANDS = ["models", "session", "log"];
|
|
223
|
+
const subcommand = positionals[0];
|
|
224
|
+
const isSubcommand = subcommand !== undefined && SUBCOMMANDS.includes(subcommand);
|
|
225
|
+
// Assemble the prompt only if we're NOT running a subcommand.
|
|
226
|
+
let prompt = "";
|
|
227
|
+
if (!isSubcommand) {
|
|
228
|
+
const positionalPrompt = positionals.join(" ");
|
|
229
|
+
const stdinPrompt = process.stdin.isTTY === true ? "" : (await readStdin()).trim();
|
|
230
|
+
prompt = positionalPrompt.length > 0 && stdinPrompt.length > 0
|
|
231
|
+
? `${positionalPrompt}\n\n${stdinPrompt}`
|
|
232
|
+
: positionalPrompt || stdinPrompt;
|
|
233
|
+
if (values.json === true && prompt.length === 0) {
|
|
234
|
+
die(64, "plurnk: --json requires a prompt (CLI mode only)");
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// CLI flag overrides env; env overrides nothing.
|
|
238
|
+
const sessionName = values.session ?? process.env.PLURNK_SESSION;
|
|
239
|
+
const runName = values.run ?? process.env.PLURNK_RUN;
|
|
240
|
+
const modelAlias = values.model ?? process.env.PLURNK_MODEL;
|
|
241
|
+
const yolo = values.yolo === true || ["1", "true", "yes", "on"].includes((process.env.PLURNK_YOLO ?? "").toLowerCase());
|
|
242
|
+
if (runName !== undefined && sessionName === undefined) {
|
|
243
|
+
die(64, "plurnk: --run / PLURNK_RUN requires --session / PLURNK_SESSION");
|
|
244
|
+
}
|
|
245
|
+
const projectRootRaw = values["project-root"] ?? process.env.PLURNK_PROJECT_ROOT;
|
|
246
|
+
const projectRoot = (() => {
|
|
247
|
+
try {
|
|
248
|
+
return resolveProjectRoot(projectRootRaw);
|
|
249
|
+
}
|
|
250
|
+
catch (cause) {
|
|
251
|
+
return die(64, cause instanceof Error ? cause.message : String(cause));
|
|
252
|
+
}
|
|
253
|
+
})();
|
|
254
|
+
const persona = await (async () => {
|
|
255
|
+
try {
|
|
256
|
+
return await resolvePersona(values.persona ?? process.env.PLURNK_PERSONA);
|
|
257
|
+
}
|
|
258
|
+
catch (cause) {
|
|
259
|
+
return die(1, `plurnk: cannot read persona file: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
260
|
+
}
|
|
261
|
+
})();
|
|
262
|
+
const url = process.env.PLURNK_URL ?? "ws://127.0.0.1:3044";
|
|
263
|
+
const rpc = new Rpc({ url });
|
|
264
|
+
try {
|
|
265
|
+
await rpc.connect();
|
|
266
|
+
}
|
|
267
|
+
catch (cause) {
|
|
268
|
+
die(1, `plurnk: cannot connect to daemon at ${url}\n ${cause instanceof Error ? cause.message : String(cause)}\n\nIs the daemon running? Start it from plurnk-service with:\n node bin/plurnk-service.js start`);
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
const json = values.json === true;
|
|
272
|
+
if (isSubcommand) {
|
|
273
|
+
const exitCode = await runSubcommand(rpc, positionals, {
|
|
274
|
+
json, sessionName, runName, projectRoot, values,
|
|
275
|
+
});
|
|
276
|
+
process.exit(exitCode);
|
|
277
|
+
}
|
|
278
|
+
const session = await attachOrCreateSession(rpc, { sessionName, runName, projectRoot });
|
|
279
|
+
if (prompt.length === 0) {
|
|
280
|
+
await runTui(rpc, session, { modelAlias, persona, yolo });
|
|
281
|
+
process.exit(0);
|
|
282
|
+
}
|
|
283
|
+
const exitCode = await runCli(rpc, prompt, session, { json, modelAlias, persona, yolo });
|
|
284
|
+
process.exit(exitCode);
|
|
285
|
+
}
|
|
286
|
+
catch (cause) {
|
|
287
|
+
process.stderr.write(`plurnk: ${cause instanceof Error ? cause.message : String(cause)}\n`);
|
|
288
|
+
if (cause instanceof Error && cause.cause !== undefined) {
|
|
289
|
+
process.stderr.write(` cause: ${cause.cause instanceof Error ? cause.cause.message : String(cause.cause)}\n`);
|
|
290
|
+
}
|
|
291
|
+
process.exit(1);
|
|
292
|
+
}
|
|
293
|
+
finally {
|
|
294
|
+
await rpc.close();
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/proposal.d.ts
CHANGED
|
@@ -15,5 +15,7 @@ export interface Resolution {
|
|
|
15
15
|
body?: string;
|
|
16
16
|
outcome?: string;
|
|
17
17
|
}
|
|
18
|
+
export declare const renderBody: (op: string, body: string) => string;
|
|
19
|
+
export declare const formatTarget: ({ scheme, pathname }: ProposalParams["target"]) => string;
|
|
18
20
|
export declare const reviewProposal: (params: ProposalParams) => Promise<Resolution>;
|
|
19
21
|
//# sourceMappingURL=proposal.d.ts.map
|
package/dist/proposal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal.d.ts","sourceRoot":"","sources":["../src/proposal.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"proposal.d.ts","sourceRoot":"","sources":["../src/proposal.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,EAAE,MAAM,MAAM,KAAG,MASrD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,sBAAsB,cAAc,CAAC,QAAQ,CAAC,KAAG,MAG7E,CAAC;AA2CF,eAAO,MAAM,cAAc,GAAU,QAAQ,cAAc,KAAG,OAAO,CAAC,UAAU,CAyB/E,CAAC"}
|
package/dist/proposal.js
CHANGED
|
@@ -20,7 +20,7 @@ const GREEN = ansi("32");
|
|
|
20
20
|
const RED = ansi("31");
|
|
21
21
|
const CYAN = ansi("36");
|
|
22
22
|
// Color udiff lines for EDIT proposals. Anything else renders plain.
|
|
23
|
-
const renderBody = (op, body) => {
|
|
23
|
+
export const renderBody = (op, body) => {
|
|
24
24
|
if (op !== "EDIT")
|
|
25
25
|
return body;
|
|
26
26
|
return body.split("\n").map((line) => {
|
|
@@ -35,7 +35,7 @@ const renderBody = (op, body) => {
|
|
|
35
35
|
return line;
|
|
36
36
|
}).join("\n");
|
|
37
37
|
};
|
|
38
|
-
const formatTarget = ({ scheme, pathname }) => {
|
|
38
|
+
export const formatTarget = ({ scheme, pathname }) => {
|
|
39
39
|
if (scheme === null)
|
|
40
40
|
return "(no target)";
|
|
41
41
|
return `${scheme}://${pathname ?? ""}`;
|
package/dist/proposal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../src/proposal.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,mEAAmE;AACnE,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,yEAAyE;AACzE,8BAA8B;AAE9B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAkBjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;AACjF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACvE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAExB,qEAAqE;AACrE,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,IAAY,EAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../src/proposal.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
CHANGED
|
@@ -7,10 +7,10 @@ export interface LogEntryWire {
|
|
|
7
7
|
suffix: string;
|
|
8
8
|
origin: string;
|
|
9
9
|
signal: unknown;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
scheme: string | null;
|
|
11
|
+
pathname: string | null;
|
|
12
|
+
hostname: string | null;
|
|
13
|
+
fragment: string | null;
|
|
14
14
|
status_rx: number;
|
|
15
15
|
tx: unknown;
|
|
16
16
|
rx: unknown;
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAU5C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKhD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAQ7C,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,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAU5C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKhD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAQ7C,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;CACf;AAgCD,eAAO,MAAM,eAAe,GAAI,WAAW,OAAO,EAAE,UAAU,OAAO,KAAG,MAWvE,CAAC;AA4BF,eAAO,MAAM,cAAc,GAAI,OAAO,YAAY,KAAG,MAiCpD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE,aAAa,MAAM,EAAE,aAAa,OAAO,KAAG,MAIxH,CAAC"}
|
package/dist/render.js
CHANGED
|
@@ -86,8 +86,8 @@ const buildExtra = (entry) => {
|
|
|
86
86
|
return content.length > 0 ? `${DIM}"${ellipsize(content.replace(/\n/g, " "), 40)}"${RESET}` : "";
|
|
87
87
|
}
|
|
88
88
|
case "SEND": {
|
|
89
|
-
// Broadcast (
|
|
90
|
-
return `${DIM}→ ${entry.
|
|
89
|
+
// Broadcast (scheme === null) is handled by renderBroadcast — not reached here.
|
|
90
|
+
return `${DIM}→ ${entry.scheme}://${entry.pathname ?? ""}${RESET}`;
|
|
91
91
|
}
|
|
92
92
|
case "EXEC": {
|
|
93
93
|
const body = typeof tx.body === "string" ? tx.body : "";
|
|
@@ -165,16 +165,24 @@ const renderBroadcast = (entry) => {
|
|
|
165
165
|
// Returns the full ANSI-formatted line WITHOUT trailing newline,
|
|
166
166
|
// EXCEPT for broadcast SEND which returns a multi-line block with its own surrounding blank lines.
|
|
167
167
|
export const renderLogEntry = (entry) => {
|
|
168
|
-
|
|
168
|
+
// Broadcast SEND has no path at all (both scheme AND pathname null).
|
|
169
|
+
// A SEND directed at file:// would have scheme=null but pathname set —
|
|
170
|
+
// not a broadcast.
|
|
171
|
+
if (entry.op === "SEND" && entry.scheme === null && entry.pathname === null)
|
|
169
172
|
return renderBroadcast(entry);
|
|
170
173
|
const origin = ORIGIN_GLYPHS[entry.origin] ?? "?";
|
|
171
174
|
const opGlyph = OP_GLYPHS[entry.op] ?? "?";
|
|
172
175
|
const subGlyph = entry.op === "SEND" && typeof entry.signal === "number" ? sendSubGlyph(entry.signal) : "";
|
|
173
176
|
const statusColor = colorForStatus(entry.status_rx);
|
|
174
177
|
const statusText = `${statusColor}${entry.status_rx}${RESET}`;
|
|
178
|
+
// Render whatever target the daemon supplied — no synthesis. If scheme
|
|
179
|
+
// is null but pathname is set, that's the daemon's choice (e.g. file://
|
|
180
|
+
// shortcut) and we render the bare path.
|
|
175
181
|
let pathText = "";
|
|
176
|
-
if (entry.
|
|
177
|
-
const path =
|
|
182
|
+
if (entry.pathname !== null) {
|
|
183
|
+
const path = entry.scheme !== null
|
|
184
|
+
? `${entry.scheme}://${entry.hostname ?? ""}${entry.pathname}${entry.fragment !== null ? `#${entry.fragment}` : ""}`
|
|
185
|
+
: entry.pathname;
|
|
178
186
|
pathText = `${CYAN}${path}${RESET}`;
|
|
179
187
|
}
|
|
180
188
|
const extra = buildExtra(entry);
|
package/dist/render.js.map
CHANGED
|
@@ -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":"AAAA,6DAA6D;AAC7D,0DAA0D;AAE1D,MAAM,CAAC,MAAM,SAAS,GAA2B;IAC7C,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAA2B;IACjD,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAU,EAAE;IACnD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAC/B,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAC/B,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,GAAG,CAAC;IAC9C,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,2DAA2D;AAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;AAEjF,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;AACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAEhC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAU,EAAE;IAC9C,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACrE,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,GAAG,CAAC;IAC9C,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,UAAU,CAAC;IACrD,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,GAAW,EAAU,EAAE;IACjD,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACrC,CAAC,CAAC;AAEF,yDAAyD;AACzD,MAAM,UAAU,GAAG,CAAC,KAAmB,EAAU,EAAE;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,EAA8E,CAAC;IAChG,MAAM,EAAE,GAAG,KAAK,CAAC,EAAoC,CAAC;IACtD,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAE3B,QAAQ,KAAK,CAAC,EAAE,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,CAAC;QACD,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,EAAE,CAAC,IAA+B,CAAC;YAChD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,GAAG,GAAG,YAAY,KAAK,EAAE,CAAC;YACpD,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QAC/C,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,OAAO,GAAG,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAChG,OAAO,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;QACtE,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,OAAO,GAAG,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,gFAAgF;YAChF,OAAO,GAAG,GAAG,KAAK,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,QAAQ,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QACvE,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,CAAC;QACD;YACI,OAAO,EAAE,CAAC;IAClB,CAAC;AACL,CAAC,CAAC;AAiBF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAEzB,mFAAmF;AACnF,wFAAwF;AACxF,8CAA8C;AAC9C,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAW,EAAE,CAC7C,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACb,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAElC,qFAAqF;AACrF,MAAM,cAAc,GAAG,CAAC,CAAS,EAAU,EAAE;IACzC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;IACrF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IAC1E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IACvG,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IACnE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,oEAAoE;AACpE,4EAA4E;AAC5E,EAAE;AACF,uEAAuE;AACvE,oFAAoF;AACpF,gEAAgE;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAkB,EAAE,QAAiB,EAAU,EAAE;IAC7E,MAAM,EAAE,GAAG,SAAuE,CAAC;IACnF,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;IACzB,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3D,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,2EAA2E;AAC3E,4FAA4F;AAC5F,0EAA0E;AAC1E,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAU,EAAE;IACpD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAClD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;IAC/B,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;IAE9D,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QAC7B,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAClE,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,OAAO,MAAM,GAAG,SAAS,IAAI,CAAC;AACzC,CAAC,CAAC;AAEF,4CAA4C;AAC5C,iEAAiE;AACjE,mGAAmG;AACnG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAmB,EAAU,EAAE;IAC1D,qEAAqE;IACrE,uEAAuE;IACvE,mBAAmB;IACnB,IAAI,KAAK,CAAC,EAAE,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAE3G,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAClD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3G,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;IAE9D,uEAAuE;IACvE,wEAAwE;IACxE,yCAAyC;IACzC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI;YAC9B,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,QAAQ,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YACpH,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrB,QAAQ,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,MAAc,EAAE,WAAmB,EAAE,WAAoB,EAAU,EAAE;IAC9H,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC;IAC7F,MAAM,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAC7E,OAAO,GAAG,GAAG,KAAK,GAAG,MAAM,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,MAAM,UAAU,KAAK,EAAE,CAAC;AACxG,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type Rpc from "./rpc.ts";
|
|
2
|
+
export declare const runModels: (rpc: Rpc, opts: {
|
|
3
|
+
json: boolean;
|
|
4
|
+
}) => Promise<number>;
|
|
5
|
+
export declare const runSessionList: (rpc: Rpc, opts: {
|
|
6
|
+
json: boolean;
|
|
7
|
+
}) => Promise<number>;
|
|
8
|
+
export declare const runSessionRuns: (rpc: Rpc, sessionName: string, opts: {
|
|
9
|
+
json: boolean;
|
|
10
|
+
}) => Promise<number>;
|
|
11
|
+
export interface LogReadFilters {
|
|
12
|
+
loopId?: number;
|
|
13
|
+
turnId?: number;
|
|
14
|
+
sinceId?: number;
|
|
15
|
+
limit?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare const runLogRead: (rpc: Rpc, opts: {
|
|
18
|
+
json: boolean;
|
|
19
|
+
filters: LogReadFilters;
|
|
20
|
+
}) => Promise<number>;
|
|
21
|
+
//# sourceMappingURL=subcommands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subcommands.d.ts","sourceRoot":"","sources":["../src/subcommands.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAwBhC,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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Read-only subcommands: `plurnk models`, `plurnk session list`, `plurnk log read`.
|
|
2
|
+
// Each is a thin wrapper around a daemon RPC plus a small renderer; output
|
|
3
|
+
// goes to stdout (the product), trace/errors to stderr — same posture as CLI
|
|
4
|
+
// mode per SPEC.md §2.1.
|
|
5
|
+
import { formatPlain } from "./cli.js";
|
|
6
|
+
// ─── Shared rendering helpers ─────────────────────────────────────────
|
|
7
|
+
// Simple column-aligned table. Renders header + rows; no header borders.
|
|
8
|
+
const renderTable = (headers, rows) => {
|
|
9
|
+
const widths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] ?? "").length)));
|
|
10
|
+
const fmt = (cells) => cells.map((c, i) => c.padEnd(widths[i] ?? 0)).join(" ").trimEnd();
|
|
11
|
+
return [fmt(headers), ...rows.map(fmt)].join("\n");
|
|
12
|
+
};
|
|
13
|
+
export const runModels = async (rpc, opts) => {
|
|
14
|
+
const { aliases } = await rpc.call("providers.list");
|
|
15
|
+
if (opts.json) {
|
|
16
|
+
process.stdout.write(`${JSON.stringify(aliases)}\n`);
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
if (aliases.length === 0) {
|
|
20
|
+
process.stdout.write("(no model aliases configured; set PLURNK_MODEL_<alias>=<provider>/<model> on the daemon)\n");
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
const rows = aliases.map((a) => [
|
|
24
|
+
a.alias,
|
|
25
|
+
a.provider,
|
|
26
|
+
a.model,
|
|
27
|
+
a.active ? "*" : "",
|
|
28
|
+
]);
|
|
29
|
+
process.stdout.write(`${renderTable(["alias", "provider", "model", "active"], rows)}\n`);
|
|
30
|
+
return 0;
|
|
31
|
+
};
|
|
32
|
+
const formatCost = (picoUsd) => {
|
|
33
|
+
if (picoUsd === 0)
|
|
34
|
+
return "0";
|
|
35
|
+
const usd = picoUsd / 1e12;
|
|
36
|
+
if (usd < 0.01)
|
|
37
|
+
return `$${(usd * 100).toFixed(4)}¢`;
|
|
38
|
+
return `$${usd.toFixed(4)}`;
|
|
39
|
+
};
|
|
40
|
+
export const runSessionList = async (rpc, opts) => {
|
|
41
|
+
const { sessions } = await rpc.call("session.list");
|
|
42
|
+
if (opts.json) {
|
|
43
|
+
process.stdout.write(`${JSON.stringify(sessions)}\n`);
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
if (sessions.length === 0) {
|
|
47
|
+
process.stdout.write("(no sessions; run `plurnk` to create one)\n");
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
const rows = sessions.map((s) => [
|
|
51
|
+
s.name,
|
|
52
|
+
s.project_root ?? "(headless)",
|
|
53
|
+
s.created_at,
|
|
54
|
+
formatCost(s.cost_pico),
|
|
55
|
+
]);
|
|
56
|
+
process.stdout.write(`${renderTable(["name", "project_root", "created", "cost"], rows)}\n`);
|
|
57
|
+
return 0;
|
|
58
|
+
};
|
|
59
|
+
export const runSessionRuns = async (rpc, sessionName, opts) => {
|
|
60
|
+
// Look up the session id by name without attaching — session.runs accepts
|
|
61
|
+
// an explicit id, so we don't need to spend an attach on a read-only call.
|
|
62
|
+
const { sessions } = await rpc.call("session.list");
|
|
63
|
+
const matches = sessions.filter((s) => s.name === sessionName);
|
|
64
|
+
if (matches.length === 0) {
|
|
65
|
+
process.stderr.write(`plurnk session runs: no session named ${JSON.stringify(sessionName)}\n`);
|
|
66
|
+
return 1;
|
|
67
|
+
}
|
|
68
|
+
if (matches.length > 1) {
|
|
69
|
+
process.stderr.write(`plurnk session runs: ${matches.length} sessions named ${JSON.stringify(sessionName)}; pick a unique name\n`);
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
const { runs } = await rpc.call("session.runs", { id: matches[0].id });
|
|
73
|
+
if (opts.json) {
|
|
74
|
+
process.stdout.write(`${JSON.stringify(runs)}\n`);
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
if (runs.length === 0) {
|
|
78
|
+
process.stdout.write(`(session ${JSON.stringify(sessionName)} has no runs)\n`);
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
const rows = runs.map((r) => [r.name, r.created_at, formatCost(r.cost_pico)]);
|
|
82
|
+
process.stdout.write(`${renderTable(["name", "created", "cost"], rows)}\n`);
|
|
83
|
+
return 0;
|
|
84
|
+
};
|
|
85
|
+
export const runLogRead = async (rpc, opts) => {
|
|
86
|
+
const params = {};
|
|
87
|
+
if (opts.filters.loopId !== undefined)
|
|
88
|
+
params.loopId = opts.filters.loopId;
|
|
89
|
+
if (opts.filters.turnId !== undefined)
|
|
90
|
+
params.turnId = opts.filters.turnId;
|
|
91
|
+
if (opts.filters.sinceId !== undefined)
|
|
92
|
+
params.sinceId = opts.filters.sinceId;
|
|
93
|
+
if (opts.filters.limit !== undefined)
|
|
94
|
+
params.limit = opts.filters.limit;
|
|
95
|
+
const { entries } = await rpc.call("log.read", params);
|
|
96
|
+
if (opts.json) {
|
|
97
|
+
process.stdout.write(`${JSON.stringify(entries)}\n`);
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
if (entries.length === 0) {
|
|
101
|
+
process.stdout.write("(no entries match)\n");
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
for (const entry of entries) {
|
|
105
|
+
process.stdout.write(`${formatPlain(entry)}\n`);
|
|
106
|
+
}
|
|
107
|
+
return 0;
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=subcommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subcommands.js","sourceRoot":"","sources":["../src/subcommands.ts"],"names":[],"mappings":"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"}
|
package/dist/tui.d.ts
CHANGED
package/dist/tui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAahC,UAAU,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAEpD,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,SAAS,aAAa,EAAE,MAAM;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAahC,UAAU,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAEpD,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,SAAS,aAAa,EAAE,MAAM;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAmG3I,CAAC"}
|
package/dist/tui.js
CHANGED
|
@@ -68,6 +68,8 @@ export const runTui = async (rpc, session, opts) => {
|
|
|
68
68
|
const loopParams = { prompt: trimmed };
|
|
69
69
|
if (opts.modelAlias !== undefined)
|
|
70
70
|
loopParams.alias = opts.modelAlias;
|
|
71
|
+
if (opts.persona !== undefined)
|
|
72
|
+
loopParams.persona = opts.persona;
|
|
71
73
|
const result = await rpc.call("loop.run", loopParams);
|
|
72
74
|
finalStatus = result.finalStatus;
|
|
73
75
|
hitMaxTurns = result.hitMaxTurns;
|
package/dist/tui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,iBAAiB;AAEjB,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAY/C,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAQ,EAAE,OAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plurnk/plurnk",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Plurnk client app — CLI/TUI consuming plurnk-service. Type prompts at a terminal, drive real model loops through the protocol.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"node": ">=25"
|
|
12
12
|
},
|
|
13
13
|
"bin": {
|
|
14
|
-
"plurnk": "
|
|
14
|
+
"plurnk": "bin/plurnk.js"
|
|
15
15
|
},
|
|
16
16
|
"files": [
|
|
17
17
|
"bin/plurnk.js",
|
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
22
|
"test:lint": "tsc --noEmit",
|
|
23
|
+
"test:unit": "node --test 'src/**/*.test.ts'",
|
|
24
|
+
"test:intg": "node --test --env-file-if-exists=.env 'test/intg/**/*.test.ts'",
|
|
25
|
+
"test": "npm run test:lint && npm run test:unit",
|
|
23
26
|
"build:dist": "tsc -p tsconfig.build.json",
|
|
24
27
|
"build": "npm run build:dist",
|
|
25
28
|
"prepare": "npm run build"
|
package/dist/oneshot.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type Rpc from "./rpc.ts";
|
|
2
|
-
interface SessionResult {
|
|
3
|
-
id: number;
|
|
4
|
-
name: string;
|
|
5
|
-
}
|
|
6
|
-
export declare const runOneShot: (rpc: Rpc, prompt: string, session: SessionResult, opts: {
|
|
7
|
-
json: boolean;
|
|
8
|
-
modelAlias?: string;
|
|
9
|
-
yolo: boolean;
|
|
10
|
-
}) => Promise<number>;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=oneshot.d.ts.map
|
package/dist/oneshot.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oneshot.d.ts","sourceRoot":"","sources":["../src/oneshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAahC,UAAU,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AA2BpD,eAAO,MAAM,UAAU,GAAU,KAAK,GAAG,EAAE,QAAQ,MAAM,EAAE,SAAS,aAAa,EAAE,MAAM;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,MAAM,CAmD9J,CAAC"}
|
package/dist/oneshot.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
// One-shot CLI mode. Plain text, no glyphs (per TUI.md §2 — Unix tool posture).
|
|
2
|
-
// Subscribes to log/entry notifications and prints each op as a plain line.
|
|
3
|
-
// Suitable for piping to grep / awk / head.
|
|
4
|
-
import { extractSendBody } from "./render.js";
|
|
5
|
-
import { reviewProposal } from "./proposal.js";
|
|
6
|
-
const formatPlain = (entry) => {
|
|
7
|
-
const path = entry.target_scheme !== null
|
|
8
|
-
? `${entry.target_scheme}://${entry.target_hostname ?? ""}${entry.target_pathname ?? ""}${entry.target_fragment !== null ? `#${entry.target_fragment}` : ""}`
|
|
9
|
-
: "";
|
|
10
|
-
const sub = entry.op === "SEND" && typeof entry.signal === "number" ? `[${entry.signal}]` : "";
|
|
11
|
-
return `[${entry.status_rx}] ${entry.origin} ${entry.op}${sub} ${path}`.trim();
|
|
12
|
-
};
|
|
13
|
-
// Per plurnk-service Engine.ts, only SEND[200] and SEND[499] terminate a loop.
|
|
14
|
-
// Intermediate broadcasts (SEND[102] etc.) are protocol mechanics, not the answer.
|
|
15
|
-
const isTerminalBroadcast = (entry) => entry.op === "SEND"
|
|
16
|
-
&& entry.target_scheme === null
|
|
17
|
-
&& typeof entry.signal === "number"
|
|
18
|
-
&& (entry.signal === 200 || entry.signal === 499);
|
|
19
|
-
const formatJsonReply = (txUnknown) => {
|
|
20
|
-
const tx = txUnknown;
|
|
21
|
-
if (tx === null || tx === undefined || tx.body === null || tx.body === undefined)
|
|
22
|
-
return "";
|
|
23
|
-
const { raw, json } = tx.body;
|
|
24
|
-
if (json !== null && json !== undefined)
|
|
25
|
-
return JSON.stringify(json);
|
|
26
|
-
if (typeof raw !== "string")
|
|
27
|
-
return "";
|
|
28
|
-
return JSON.stringify(raw);
|
|
29
|
-
};
|
|
30
|
-
export const runOneShot = async (rpc, prompt, session, opts) => {
|
|
31
|
-
// stdout is the program's product (the terminal answer); stderr is its narration.
|
|
32
|
-
// Per SPEC.md §2: `plurnk "X" > answer.txt` captures just the terminal broadcast body.
|
|
33
|
-
process.stderr.write(`session: ${session.name}\n`);
|
|
34
|
-
process.stderr.write(`prompt: ${prompt}\n\n`);
|
|
35
|
-
rpc.onNotification("log/entry", (params) => {
|
|
36
|
-
const p = params;
|
|
37
|
-
process.stderr.write(`${formatPlain(p.entry)}\n`);
|
|
38
|
-
if (!isTerminalBroadcast(p.entry))
|
|
39
|
-
return;
|
|
40
|
-
const out = opts.json ? formatJsonReply(p.entry.tx) : extractSendBody(p.entry.tx, /* prettify */ false);
|
|
41
|
-
if (out.length > 0)
|
|
42
|
-
process.stdout.write(`${out}\n`);
|
|
43
|
-
});
|
|
44
|
-
// Proposal lifecycle (plurnk-service #42): pause-and-review for side-effecting
|
|
45
|
-
// ops. Three paths:
|
|
46
|
-
// - --yolo: auto-accept locally without prompting (server still sends the notification).
|
|
47
|
-
// - TTY: interactive review.
|
|
48
|
-
// - no TTY, no yolo: fail closed (reject) so the daemon doesn't hang for 5 minutes.
|
|
49
|
-
rpc.onNotification("loop/proposal", (params) => {
|
|
50
|
-
const p = params;
|
|
51
|
-
void (async () => {
|
|
52
|
-
if (opts.yolo) {
|
|
53
|
-
await rpc.call("loop.resolve", { logEntryId: p.logEntryId, decision: "accept", outcome: "client_yolo" });
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (process.stdin.isTTY !== true) {
|
|
57
|
-
await rpc.call("loop.resolve", {
|
|
58
|
-
logEntryId: p.logEntryId,
|
|
59
|
-
decision: "reject",
|
|
60
|
-
outcome: "no_tty_review",
|
|
61
|
-
});
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const resolution = await reviewProposal(p);
|
|
65
|
-
await rpc.call("loop.resolve", { logEntryId: p.logEntryId, ...resolution });
|
|
66
|
-
})();
|
|
67
|
-
});
|
|
68
|
-
const start = Date.now();
|
|
69
|
-
const loopParams = { prompt };
|
|
70
|
-
if (opts.modelAlias !== undefined)
|
|
71
|
-
loopParams.alias = opts.modelAlias;
|
|
72
|
-
const result = await rpc.call("loop.run", loopParams);
|
|
73
|
-
const wallMs = Date.now() - start;
|
|
74
|
-
process.stderr.write(`\nfinal status: ${result.finalStatus}${result.hitMaxTurns ? " (maxTurns reached)" : ""}\n`);
|
|
75
|
-
process.stderr.write(`turns: ${result.turnIds.length}, wall: ${(wallMs / 1000).toFixed(2)}s\n`);
|
|
76
|
-
if (result.finalStatus === 200)
|
|
77
|
-
return 0;
|
|
78
|
-
if (result.hitMaxTurns)
|
|
79
|
-
return 2;
|
|
80
|
-
return 3;
|
|
81
|
-
};
|
|
82
|
-
//# sourceMappingURL=oneshot.js.map
|
package/dist/oneshot.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oneshot.js","sourceRoot":"","sources":["../src/oneshot.ts"],"names":[],"mappings":"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"}
|