@plurnk/plurnk 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +37 -3
- package/dist/cli.js.map +1 -1
- package/dist/proposal.d.ts +9 -0
- package/dist/proposal.d.ts.map +1 -1
- package/dist/proposal.js +5 -0
- package/dist/proposal.js.map +1 -1
- package/dist/stream.d.ts +21 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +46 -0
- package/dist/stream.js.map +1 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +28 -4
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAgBhD,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,CA6F5K,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
// prints each op as a plain trace line on stderr; only the terminal SEND
|
|
4
4
|
// body lands on stdout (§5.4). Suitable for piping to grep / awk / head / jq.
|
|
5
5
|
import { extractSendBody } from "./render.js";
|
|
6
|
-
import { reviewProposal } from "./proposal.js";
|
|
6
|
+
import { reviewProposal, isServerResolved } from "./proposal.js";
|
|
7
7
|
import { report, clientProposalNoTtyReview } from "./telemetry.js";
|
|
8
|
+
import { renderStreamEvent, renderStreamConcluded, reportStream } from "./stream.js";
|
|
8
9
|
export const formatPlain = (entry) => {
|
|
9
10
|
// Render what the wire says — no synthesis. Bare pathname when scheme
|
|
10
11
|
// is null; full URI when scheme is present.
|
|
@@ -57,14 +58,28 @@ export const runCli = async (rpc, prompt, session, opts) => {
|
|
|
57
58
|
const p = params;
|
|
58
59
|
report(p.event);
|
|
59
60
|
});
|
|
61
|
+
// stream/event + stream/concluded — daemon-pushed channel-growth and
|
|
62
|
+
// closure metadata per plurnk-service SPEC §13.6. Rendered as a one-
|
|
63
|
+
// line trace on stderr; content fetching is not done here (CLI is a
|
|
64
|
+
// trace viewer; plurnk.nvim does in-buffer content rendering).
|
|
65
|
+
rpc.onNotification("stream/event", (params) => {
|
|
66
|
+
reportStream(renderStreamEvent(params));
|
|
67
|
+
});
|
|
68
|
+
rpc.onNotification("stream/concluded", (params) => {
|
|
69
|
+
reportStream(renderStreamConcluded(params));
|
|
70
|
+
});
|
|
60
71
|
// Proposal lifecycle (plurnk-service #42): pause-and-review for side-effecting
|
|
61
|
-
// ops.
|
|
72
|
+
// ops. Four paths:
|
|
73
|
+
// - server-resolved (flags.yolo / flags.noProposals): the daemon settles the
|
|
74
|
+
// entry in-process; a client loop.resolve would race it. Skip entirely.
|
|
62
75
|
// - --yolo: auto-accept locally without prompting (server still sends the notification).
|
|
63
76
|
// - TTY: interactive review.
|
|
64
77
|
// - no TTY, no yolo: fail closed (reject) so the daemon doesn't hang for 5 minutes.
|
|
65
78
|
rpc.onNotification("loop/proposal", (params) => {
|
|
66
79
|
const p = params;
|
|
67
80
|
void (async () => {
|
|
81
|
+
if (isServerResolved(p))
|
|
82
|
+
return;
|
|
68
83
|
if (opts.yolo) {
|
|
69
84
|
await rpc.call("loop.resolve", { logEntryId: p.logEntryId, decision: "accept", outcome: "client_yolo" });
|
|
70
85
|
return;
|
|
@@ -88,7 +103,26 @@ export const runCli = async (rpc, prompt, session, opts) => {
|
|
|
88
103
|
loopParams.alias = opts.modelAlias;
|
|
89
104
|
if (opts.persona !== undefined)
|
|
90
105
|
loopParams.persona = opts.persona;
|
|
91
|
-
|
|
106
|
+
// First Ctrl-C cancels the run's active drain via loop.cancel
|
|
107
|
+
// (plurnk-service §13.5) — the pending loop.run resolves with
|
|
108
|
+
// finalStatus 499 and the normal exit-code path (3) applies. A second
|
|
109
|
+
// Ctrl-C force-exits in case the daemon never comes back.
|
|
110
|
+
let cancelRequested = false;
|
|
111
|
+
const onSigint = () => {
|
|
112
|
+
if (cancelRequested)
|
|
113
|
+
process.exit(3);
|
|
114
|
+
cancelRequested = true;
|
|
115
|
+
process.stderr.write("cancelling… (ctrl-c again to force quit)\n");
|
|
116
|
+
void rpc.call("loop.cancel", { reason: "user_sigint" });
|
|
117
|
+
};
|
|
118
|
+
process.on("SIGINT", onSigint);
|
|
119
|
+
let result;
|
|
120
|
+
try {
|
|
121
|
+
result = await rpc.call("loop.run", loopParams);
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
process.removeListener("SIGINT", onSigint);
|
|
125
|
+
}
|
|
92
126
|
const wallMs = Date.now() - start;
|
|
93
127
|
process.stderr.write(`\nfinal status: ${result.finalStatus}${result.hitMaxTurns ? " (maxTurns reached)" : ""}\n`);
|
|
94
128
|
process.stderr.write(`turns: ${result.turnIds.length}, wall: ${(wallMs / 1000).toFixed(2)}s\n`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,8EAA8E;AAI9E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/proposal.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export interface ProposalFlags {
|
|
2
|
+
yolo?: boolean;
|
|
3
|
+
mode?: string;
|
|
4
|
+
noWeb?: boolean;
|
|
5
|
+
noInteraction?: boolean;
|
|
6
|
+
noProposals?: boolean;
|
|
7
|
+
}
|
|
1
8
|
export interface ProposalParams {
|
|
2
9
|
logEntryId: number;
|
|
3
10
|
loopId: number;
|
|
@@ -9,7 +16,9 @@ export interface ProposalParams {
|
|
|
9
16
|
};
|
|
10
17
|
body: string;
|
|
11
18
|
attrs: unknown;
|
|
19
|
+
flags: ProposalFlags;
|
|
12
20
|
}
|
|
21
|
+
export declare const isServerResolved: ({ flags }: ProposalParams) => boolean;
|
|
13
22
|
export interface Resolution {
|
|
14
23
|
decision: "accept" | "reject" | "cancel";
|
|
15
24
|
body?: string;
|
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;
|
|
1
|
+
{"version":3,"file":"proposal.d.ts","sourceRoot":"","sources":["../src/proposal.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,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;IACf,KAAK,EAAE,aAAa,CAAC;CACxB;AAMD,eAAO,MAAM,gBAAgB,GAAI,WAAW,cAAc,KAAG,OACN,CAAC;AAExD,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
|
@@ -11,6 +11,11 @@ import { spawn } from "node:child_process";
|
|
|
11
11
|
import { writeFile, readFile, mkdtemp, rm } from "node:fs/promises";
|
|
12
12
|
import { tmpdir } from "node:os";
|
|
13
13
|
import { join } from "node:path";
|
|
14
|
+
// Server-resolved proposals: when the loop carries flags.yolo (server-side
|
|
15
|
+
// YOLO auto-accept) or flags.noProposals (server-side auto-reject), the
|
|
16
|
+
// daemon resolves the entry in-process before any human can react. Review UI
|
|
17
|
+
// and a client loop.resolve would race an already-settled proposal.
|
|
18
|
+
export const isServerResolved = ({ flags }) => flags?.yolo === true || flags?.noProposals === true;
|
|
14
19
|
const useColor = process.env.NO_COLOR !== "1" && process.env.NO_COLOR !== "true";
|
|
15
20
|
const ansi = (code) => useColor ? `\x1b[${code}m` : "";
|
|
16
21
|
const RESET = ansi("0");
|
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;
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../src/proposal.ts"],"names":[],"mappings":"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"}
|
package/dist/stream.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface StreamEventPayload {
|
|
2
|
+
entryId: number;
|
|
3
|
+
target: string;
|
|
4
|
+
channel: string;
|
|
5
|
+
state: string;
|
|
6
|
+
contentLength: number;
|
|
7
|
+
}
|
|
8
|
+
export interface StreamConcludedPayload {
|
|
9
|
+
entryId: number;
|
|
10
|
+
target: string;
|
|
11
|
+
subscriptionId: number;
|
|
12
|
+
scheme: string;
|
|
13
|
+
closeStatus: number;
|
|
14
|
+
summary: string;
|
|
15
|
+
wakeAction: string;
|
|
16
|
+
wakeLoopId?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const renderStreamEvent: (ev: StreamEventPayload) => string;
|
|
19
|
+
export declare const renderStreamConcluded: (ev: StreamConcludedPayload) => string;
|
|
20
|
+
export declare const reportStream: (line: string) => void;
|
|
21
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,iBAAiB,GAAI,IAAI,kBAAkB,KAAG,MAU1D,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,IAAI,sBAAsB,KAAG,MAalE,CAAC;AAIF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,IAE3C,CAAC"}
|
package/dist/stream.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Stream notification renderers for plurnk-service's stream/event and
|
|
2
|
+
// stream/concluded broadcasts (plurnk-service SPEC §7.1 / §13.6).
|
|
3
|
+
//
|
|
4
|
+
// Same `📡` glyph as TelemetryEvent (SPEC §8) — these are daemon-pushed
|
|
5
|
+
// metadata events the user should see, in the same channel posture
|
|
6
|
+
// (stderr in CLI, inline in TUI), distinguished by the discriminator.
|
|
7
|
+
//
|
|
8
|
+
// Content fetching (entry.read) is NOT done here — the CLI is a trace
|
|
9
|
+
// viewer. plurnk.nvim does in-buffer content rendering.
|
|
10
|
+
import process from "node:process";
|
|
11
|
+
const useColor = process.env.NO_COLOR !== "1" && process.env.NO_COLOR !== "true";
|
|
12
|
+
const code = (n) => useColor ? `\x1b[${n}m` : "";
|
|
13
|
+
const RESET = code("0");
|
|
14
|
+
const DIM = code("2");
|
|
15
|
+
const STREAM_GLYPH = "📡";
|
|
16
|
+
export const renderStreamEvent = (ev) => {
|
|
17
|
+
const parts = [
|
|
18
|
+
STREAM_GLYPH,
|
|
19
|
+
"stream/event",
|
|
20
|
+
ev.target,
|
|
21
|
+
`channel=${ev.channel}`,
|
|
22
|
+
`state=${ev.state}`,
|
|
23
|
+
`len=${ev.contentLength}`,
|
|
24
|
+
];
|
|
25
|
+
return ` ${parts.join(" ")}`;
|
|
26
|
+
};
|
|
27
|
+
export const renderStreamConcluded = (ev) => {
|
|
28
|
+
const parts = [
|
|
29
|
+
STREAM_GLYPH,
|
|
30
|
+
"stream/concluded",
|
|
31
|
+
ev.target,
|
|
32
|
+
`status=${ev.closeStatus}`,
|
|
33
|
+
`wake=${ev.wakeAction}`,
|
|
34
|
+
];
|
|
35
|
+
let line = ` ${parts.join(" ")}`;
|
|
36
|
+
if (ev.summary && ev.summary.length > 0) {
|
|
37
|
+
line += ` ${DIM}"${ev.summary}"${RESET}`;
|
|
38
|
+
}
|
|
39
|
+
return line;
|
|
40
|
+
};
|
|
41
|
+
// Write a stream event to stderr. Used by CLI mode; TUI mode renders
|
|
42
|
+
// inline in the waterfall with the readline-prompt-wipe prefix.
|
|
43
|
+
export const reportStream = (line) => {
|
|
44
|
+
process.stderr.write(`${line}\n`);
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,kEAAkE;AAClE,EAAE;AACF,wEAAwE;AACxE,mEAAmE;AACnE,sEAAsE;AACtE,EAAE;AACF,sEAAsE;AACtE,wDAAwD;AAExD,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;AACjF,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAEtB,MAAM,YAAY,GAAG,IAAI,CAAC;AAqB1B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAsB,EAAU,EAAE;IAChE,MAAM,KAAK,GAAG;QACV,YAAY;QACZ,cAAc;QACd,EAAE,CAAC,MAAM;QACT,WAAW,EAAE,CAAC,OAAO,EAAE;QACvB,SAAS,EAAE,CAAC,KAAK,EAAE;QACnB,OAAO,EAAE,CAAC,aAAa,EAAE;KAC5B,CAAC;IACF,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAA0B,EAAU,EAAE;IACxE,MAAM,KAAK,GAAG;QACV,YAAY;QACZ,kBAAkB;QAClB,EAAE,CAAC,MAAM;QACT,UAAU,EAAE,CAAC,WAAW,EAAE;QAC1B,QAAQ,EAAE,CAAC,UAAU,EAAE;KAC1B,CAAC;IACF,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,qEAAqE;AACrE,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAQ,EAAE;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC"}
|
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;
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAiBhC,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,CAkI3I,CAAC"}
|
package/dist/tui.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// Per TUI.md §3.
|
|
3
3
|
import readline from "node:readline";
|
|
4
4
|
import { renderLogEntry, renderSummary } from "./render.js";
|
|
5
|
-
import { reviewProposal } from "./proposal.js";
|
|
5
|
+
import { reviewProposal, isServerResolved } from "./proposal.js";
|
|
6
6
|
import { renderTelemetryEvent } from "./telemetry.js";
|
|
7
|
+
import { renderStreamEvent, renderStreamConcluded } from "./stream.js";
|
|
7
8
|
export const runTui = async (rpc, session, opts) => {
|
|
8
9
|
// Subscribe to log/entry notifications — render each as a waterfall line.
|
|
9
10
|
// `\r\x1b[2K` wipes any readline-redrawn prompt sitting on the current line
|
|
@@ -19,17 +20,28 @@ export const runTui = async (rpc, session, opts) => {
|
|
|
19
20
|
const p = params;
|
|
20
21
|
process.stdout.write(`\r\x1b[2K${renderTelemetryEvent(p.event)}\n`);
|
|
21
22
|
});
|
|
23
|
+
// stream/event + stream/concluded — daemon-pushed channel-growth and
|
|
24
|
+
// closure metadata. Inline in the waterfall with the same prompt-wipe.
|
|
25
|
+
rpc.onNotification("stream/event", (params) => {
|
|
26
|
+
process.stdout.write(`\r\x1b[2K${renderStreamEvent(params)}\n`);
|
|
27
|
+
});
|
|
28
|
+
rpc.onNotification("stream/concluded", (params) => {
|
|
29
|
+
process.stdout.write(`\r\x1b[2K${renderStreamConcluded(params)}\n`);
|
|
30
|
+
});
|
|
22
31
|
process.stdout.write(`\x1b[2mplurnk v0.1.0 · ctrl-c to quit · session: ${session.name}\x1b[0m\n\n`);
|
|
23
32
|
const rl = readline.createInterface({
|
|
24
33
|
input: process.stdin,
|
|
25
34
|
output: process.stdout,
|
|
26
35
|
prompt: "\x1b[1m> \x1b[0m",
|
|
27
36
|
});
|
|
28
|
-
// Proposal lifecycle:
|
|
29
|
-
//
|
|
37
|
+
// Proposal lifecycle: server-resolved proposals (flags.yolo/noProposals)
|
|
38
|
+
// settle in-process — skip; --yolo auto-accepts locally; otherwise pause
|
|
39
|
+
// readline, review, resolve, resume.
|
|
30
40
|
rpc.onNotification("loop/proposal", (params) => {
|
|
31
41
|
const p = params;
|
|
32
42
|
void (async () => {
|
|
43
|
+
if (isServerResolved(p))
|
|
44
|
+
return;
|
|
33
45
|
if (opts.yolo) {
|
|
34
46
|
await rpc.call("loop.resolve", { logEntryId: p.logEntryId, decision: "accept", outcome: "client_yolo" });
|
|
35
47
|
return;
|
|
@@ -48,6 +60,7 @@ export const runTui = async (rpc, session, opts) => {
|
|
|
48
60
|
rl.prompt();
|
|
49
61
|
return new Promise((resolve) => {
|
|
50
62
|
let inFlight = false;
|
|
63
|
+
let cancelRequested = false;
|
|
51
64
|
rl.on("line", async (line) => {
|
|
52
65
|
const trimmed = line.trim();
|
|
53
66
|
if (trimmed.length === 0) {
|
|
@@ -93,6 +106,7 @@ export const runTui = async (rpc, session, opts) => {
|
|
|
93
106
|
}
|
|
94
107
|
finally {
|
|
95
108
|
inFlight = false;
|
|
109
|
+
cancelRequested = false;
|
|
96
110
|
rl.prompt();
|
|
97
111
|
}
|
|
98
112
|
});
|
|
@@ -101,7 +115,17 @@ export const runTui = async (rpc, session, opts) => {
|
|
|
101
115
|
resolve();
|
|
102
116
|
});
|
|
103
117
|
rl.on("SIGINT", () => {
|
|
104
|
-
// Ctrl-C
|
|
118
|
+
// First Ctrl-C with a dispatch in flight: cancel the run's active
|
|
119
|
+
// drain via loop.cancel (plurnk-service §13.5); the pending
|
|
120
|
+
// loop.run resolves with finalStatus 499 and the REPL continues.
|
|
121
|
+
// Second Ctrl-C (or idle Ctrl-C) exits — escape hatch for
|
|
122
|
+
// dispatches a drain-cancel can't unblock (op.parse).
|
|
123
|
+
if (inFlight && !cancelRequested) {
|
|
124
|
+
cancelRequested = true;
|
|
125
|
+
process.stdout.write("\r\x1b[2K \x1b[2mcancelling… (ctrl-c again to quit)\x1b[0m\n");
|
|
126
|
+
void rpc.call("loop.cancel", { reason: "user_sigint" });
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
105
129
|
rl.close();
|
|
106
130
|
});
|
|
107
131
|
});
|
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;
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED