@plurnk/plurnk 0.4.0 → 0.12.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/tui.js CHANGED
@@ -1,35 +1,139 @@
1
1
  // TUI mode — interactive REPL with glyph waterfall. Vanilla ANSI + readline.
2
2
  // Per TUI.md §3.
3
+ //
4
+ // Line language (converged with plurnk.nvim — one vocabulary, two surfaces):
5
+ // /verb [args] command verbs (see VERBS); never call loop.run
6
+ // << raw DSL op.parse
7
+ // ! cmd op.exec via the daemon
8
+ // ? text ask — loop.run with flags.mode="ask"
9
+ // : text act (the default)
10
+ // text prompt
11
+ // The readline prompt is `: ` — it rhymes with nvim's cmdline; when an
12
+ // ask-default toggle exists (nvim first), the prompt char flips to `? `.
3
13
  import readline from "node:readline";
4
- import { renderLogEntry, renderSummary } from "./render.js";
5
- import { reviewProposal } from "./proposal.js";
6
- import { renderTelemetryEvent } from "./telemetry.js";
14
+ import { readFile } from "node:fs/promises";
15
+ import { isAbsolute, resolve } from "node:path";
16
+ import { renderLogEntry, renderSummary, isPromptEntry } from "./render.js";
17
+ import { reviewProposal, isServerResolved } from "./proposal.js";
18
+ import { renderTelemetryEvent, report, clientSubcommandUnknownVerb } from "./telemetry.js";
19
+ import StreamTrace, { inlineable, renderInline } from "./stream.js";
20
+ import { runModels, runSessionList, runSessionRuns, runLogRead } from "./subcommands.js";
21
+ // One verb vocabulary across nvim's :AI/, the TUI, and (where they exist)
22
+ // the argv subcommands. Convergence is policy: divergence needs a reason.
23
+ export const VERBS = [
24
+ "help", "models", "sessions", "runs", "log", "model",
25
+ "persona", "yolo", "new", "stop", "quit",
26
+ ];
27
+ export const TUI_HELP = [
28
+ " /models /sessions /runs /log [n] inspect (same tables as the CLI)",
29
+ " /model <alias> model for subsequent loops",
30
+ " /persona <path> persona file for subsequent loops",
31
+ " /yolo toggle local auto-accept",
32
+ " /new [name] new session (reconnects)",
33
+ " /stop cancel the running loop",
34
+ " /quit exit",
35
+ " << raw DSL ! cmd (exec) ? text (ask) : text (act)",
36
+ ].join("\n") + "\n";
37
+ export const parseSlash = (line) => {
38
+ const m = line.match(/^\/(\S*)\s*(.*)$/);
39
+ return { verb: m?.[1] ?? "", rest: (m?.[2] ?? "").trim() };
40
+ };
41
+ // readline completer — verbs after `/`, model aliases after `/model `.
42
+ // Plain readline machinery only; no screen takeover, no terminal hell.
43
+ export const makeCompleter = (getAliases) => (line) => {
44
+ const verbFrag = line.match(/^\/(\w*)$/);
45
+ if (verbFrag) {
46
+ const hits = VERBS.map((v) => `/${v}`).filter((v) => v.startsWith(line));
47
+ return [hits, line];
48
+ }
49
+ const aliasFrag = line.match(/^\/model\s+(\S*)$/);
50
+ if (aliasFrag) {
51
+ const hits = getAliases().filter((a) => a.startsWith(aliasFrag[1]));
52
+ return [hits, aliasFrag[1]];
53
+ }
54
+ return [[], line];
55
+ };
7
56
  export const runTui = async (rpc, session, opts) => {
57
+ let current = session;
58
+ // Tokens for the summary line: summed from each dispatch's log/entry
59
+ // rows (log_entries.tokens). Reset per dispatch in the line handler.
60
+ let dispatchTokens = 0;
8
61
  // Subscribe to log/entry notifications — render each as a waterfall line.
9
62
  // `\r\x1b[2K` wipes any readline-redrawn prompt sitting on the current line
10
- // before our output, otherwise the first trace line lands beside `> `.
63
+ // before our output, otherwise the first trace line lands beside the prompt.
11
64
  rpc.onNotification("log/entry", (params) => {
12
65
  const p = params;
66
+ if (typeof p.entry.tokens === "number")
67
+ dispatchTokens += p.entry.tokens;
68
+ // The typed line at the prompt is the user's record — rendering the
69
+ // prompt broadcast too would duplicate it (see isPromptEntry).
70
+ if (isPromptEntry(p.entry))
71
+ return;
13
72
  process.stdout.write(`\r\x1b[2K${renderLogEntry(p.entry)}\n`);
14
73
  });
15
- // telemetry/event — interleaved with the trace waterfall. Same line-wipe
16
- // dance as log/entry so the rendered event doesn't collide with the
17
- // readline prompt.
74
+ // telemetry/event — interleaved with the trace waterfall.
18
75
  rpc.onNotification("telemetry/event", (params) => {
19
76
  const p = params;
20
77
  process.stdout.write(`\r\x1b[2K${renderTelemetryEvent(p.event)}\n`);
21
78
  });
22
- process.stdout.write(`\x1b[2mplurnk v0.1.0 · ctrl-c to quit · session: ${session.name}\x1b[0m\n\n`);
79
+ // Streams, coalesced: one start line, one conclusion line, and tiny
80
+ // concluded outputs inlined (the single bounded content fetch the TUI
81
+ // makes — SPEC §5.3; the content IS the optics at two lines).
82
+ const streams = new StreamTrace();
83
+ rpc.onNotification("stream/event", (params) => {
84
+ const line = streams.event(params);
85
+ if (line !== null)
86
+ process.stdout.write(`\r\x1b[2K${line}\n`);
87
+ });
88
+ rpc.onNotification("stream/concluded", (params) => {
89
+ const p = params;
90
+ process.stdout.write(`\r\x1b[2K${streams.concluded(p)}\n`);
91
+ void rpc.call("entry.read", { target: p.target }).then((r) => {
92
+ const channels = r.entry?.channels ?? {};
93
+ for (const name of ["stdout", "stderr"]) {
94
+ const content = channels[name]?.content;
95
+ if (typeof content === "string" && inlineable(content)) {
96
+ process.stdout.write(`\r\x1b[2K${renderInline(name, content)}\n`);
97
+ }
98
+ }
99
+ }).catch(() => { });
100
+ });
101
+ process.stdout.write(`\x1b[2mplurnk · /help for the language · ctrl-c to quit · session: ${current.name}\x1b[0m\n\n`);
102
+ // Alias cache for /model completion — one cheap RPC, refreshed never
103
+ // (aliases are daemon-boot-time config).
104
+ let aliasCache = [];
105
+ void rpc.call("providers.list").then((r) => {
106
+ const aliases = r.aliases;
107
+ if (Array.isArray(aliases))
108
+ aliasCache = aliases.map((a) => a.alias);
109
+ }).catch(() => { });
110
+ // The prompt is the user's row, restricted to WIDTH-STABLE glyphs —
111
+ // settled empirically in two rounds. Round 1 (` 👤 ✉️ ✅ 201 : `)
112
+ // drifted by exactly one column: ✉️ is U+2709+VS16, the variation-
113
+ // selector class terminals genuinely cell-count differently; readline
114
+ // repositions the cursor at its own computed width on every
115
+ // history-nav/backspace/completion refresh, so the disagreement shows
116
+ // as text shift. Round 2 (bare ` : `) fixed the drift but destroyed
117
+ // the row identity. 👤 (U+1F464) and ✅ (U+2705) are plain East-Asian-
118
+ // Wide — width 2 in node AND every major terminal — so they stay; the
119
+ // 201 is the contract constant (the prompt row is always a 201 EDIT);
120
+ // 💬 (U+1F4AC, stable-wide) fills the op slot the toxic ✉️ vacated.
121
+ // Policy: VS16/ambiguous glyphs are banned from the ENTIRE palette
122
+ // (render.ts) — stable widths are also what make columns align.
23
123
  const rl = readline.createInterface({
24
124
  input: process.stdin,
25
125
  output: process.stdout,
26
- prompt: "\x1b[1m> \x1b[0m",
126
+ prompt: " 👤 💬 ✅ \x1b[32m201\x1b[0m \x1b[1m: \x1b[0m",
127
+ completer: makeCompleter(() => aliasCache),
27
128
  });
28
- // Proposal lifecycle: --yolo auto-accepts locally; otherwise pause readline,
29
- // review, resolve, resume.
129
+ // Proposal lifecycle: server-resolved proposals (flags.yolo/noProposals)
130
+ // settle in-process — skip; --yolo auto-accepts locally; otherwise pause
131
+ // readline, review, resolve, resume.
30
132
  rpc.onNotification("loop/proposal", (params) => {
31
133
  const p = params;
32
134
  void (async () => {
135
+ if (isServerResolved(p))
136
+ return;
33
137
  if (opts.yolo) {
34
138
  await rpc.call("loop.resolve", { logEntryId: p.logEntryId, decision: "accept", outcome: "client_yolo" });
35
139
  return;
@@ -45,47 +149,164 @@ export const runTui = async (rpc, session, opts) => {
45
149
  }
46
150
  })();
47
151
  });
152
+ // Verbs never call loop.run; they are run-tab furniture, not conversation.
153
+ // Returns once the verb is fully rendered.
154
+ const handleVerb = async (line) => {
155
+ const { verb, rest } = parseSlash(line);
156
+ switch (verb) {
157
+ case "":
158
+ case "help":
159
+ process.stdout.write(TUI_HELP);
160
+ return;
161
+ case "models":
162
+ await runModels(rpc, { json: false });
163
+ return;
164
+ case "sessions":
165
+ await runSessionList(rpc, { json: false });
166
+ return;
167
+ case "runs":
168
+ await runSessionRuns(rpc, current.name, { json: false });
169
+ return;
170
+ case "log": {
171
+ const limit = rest.length > 0 ? Number(rest) : undefined;
172
+ const filters = Number.isInteger(limit) && limit > 0 ? { limit: limit } : {};
173
+ await runLogRead(rpc, { json: false, filters });
174
+ return;
175
+ }
176
+ case "model":
177
+ if (rest.length === 0) {
178
+ process.stdout.write(` model: ${opts.modelAlias ?? "(daemon default)"}\n`);
179
+ return;
180
+ }
181
+ opts.modelAlias = rest;
182
+ process.stdout.write(` model: ${rest}\n`);
183
+ return;
184
+ case "persona": {
185
+ if (rest.length === 0) {
186
+ process.stdout.write(" usage: /persona <path>\n");
187
+ return;
188
+ }
189
+ const abs = isAbsolute(rest) ? rest : resolve(process.cwd(), rest);
190
+ try {
191
+ opts.persona = await readFile(abs, "utf8");
192
+ process.stdout.write(` persona: ${abs}\n`);
193
+ }
194
+ catch {
195
+ process.stdout.write(` persona file not readable: ${abs}\n`);
196
+ }
197
+ return;
198
+ }
199
+ case "yolo":
200
+ opts.yolo = !opts.yolo;
201
+ process.stdout.write(` yolo: ${opts.yolo ? "ON" : "OFF"}\n`);
202
+ return;
203
+ case "new": {
204
+ // One session per connection (service §13.5) — a new session
205
+ // means a fresh socket, same as plurnk.nvim's reconnect dance.
206
+ await rpc.close();
207
+ await rpc.connect();
208
+ const params = {};
209
+ if (rest.length > 0)
210
+ params.name = rest;
211
+ if (opts.projectRoot !== undefined)
212
+ params.projectRoot = opts.projectRoot;
213
+ current = await rpc.call("session.create", params);
214
+ process.stdout.write(` session: ${current.name}\n`);
215
+ return;
216
+ }
217
+ case "stop":
218
+ await rpc.call("loop.cancel", { reason: "user_stop" });
219
+ return;
220
+ case "quit":
221
+ return "quit";
222
+ default:
223
+ report(clientSubcommandUnknownVerb(`/${verb}`, [...VERBS]));
224
+ return;
225
+ }
226
+ };
48
227
  rl.prompt();
49
228
  return new Promise((resolve) => {
50
229
  let inFlight = false;
230
+ let cancelRequested = false;
51
231
  rl.on("line", async (line) => {
52
232
  const trimmed = line.trim();
53
233
  if (trimmed.length === 0) {
54
234
  rl.prompt();
55
235
  return;
56
236
  }
237
+ // Verbs: /stop and /help stay reachable while a loop is in
238
+ // flight — /stop is precisely the mid-loop verb.
239
+ if (trimmed.startsWith("/")) {
240
+ const { verb } = parseSlash(trimmed);
241
+ if (inFlight && verb !== "stop" && verb !== "help" && verb !== "") {
242
+ process.stdout.write(" \x1b[2m(busy; /stop to cancel, /help for the language)\x1b[0m\n");
243
+ rl.prompt();
244
+ return;
245
+ }
246
+ try {
247
+ if (await handleVerb(trimmed) === "quit") {
248
+ rl.close();
249
+ return;
250
+ }
251
+ }
252
+ catch (cause) {
253
+ const msg = cause instanceof Error ? cause.message : String(cause);
254
+ process.stdout.write(` \x1b[31merror: ${msg}\x1b[0m\n`);
255
+ }
256
+ rl.prompt();
257
+ return;
258
+ }
57
259
  if (inFlight) {
58
- process.stdout.write(" \x1b[2m(busy; wait for current dispatch to finish)\x1b[0m\n");
260
+ process.stdout.write(" \x1b[2m(busy; /stop to cancel)\x1b[0m\n");
59
261
  rl.prompt();
60
262
  return;
61
263
  }
62
264
  inFlight = true;
63
265
  const start = Date.now();
64
- let tokenCount = 0;
266
+ dispatchTokens = 0;
65
267
  let turnCount = 0;
66
268
  let finalStatus = 0;
67
269
  let hitMaxTurns = false;
270
+ let usage;
68
271
  try {
69
272
  if (trimmed.startsWith("<<")) {
70
273
  // Raw DSL: send to op.parse
71
274
  const result = await rpc.call("op.parse", { text: trimmed });
72
275
  finalStatus = result.results[result.results.length - 1]?.status ?? 0;
73
276
  }
277
+ else if (trimmed.startsWith("!")) {
278
+ // `! cmd` — exec via the daemon (proposal-gated like any
279
+ // side effect; output streams as stream/event traces).
280
+ const command = trimmed.replace(/^!+\s*/, "");
281
+ const result = await rpc.call("op.exec", { command });
282
+ finalStatus = result.status;
283
+ }
74
284
  else {
75
- // Prompt: send to loop.run
76
- const loopParams = { prompt: trimmed };
285
+ // Prompt. `? ` = ask (read-only loop, flags.mode="ask");
286
+ // `: ` = act. Per-line prefix overrides --flags mode.
287
+ let lineFlags = opts.loopFlags;
288
+ const prefix = trimmed[0];
289
+ if (prefix === "?" || prefix === ":") {
290
+ lineFlags = { ...(opts.loopFlags ?? {}), mode: prefix === "?" ? "ask" : "act" };
291
+ }
292
+ const promptText = trimmed.replace(/^[?:]+\s*/, "");
293
+ const loopParams = { prompt: promptText };
77
294
  if (opts.modelAlias !== undefined)
78
295
  loopParams.alias = opts.modelAlias;
79
296
  if (opts.persona !== undefined)
80
297
  loopParams.persona = opts.persona;
298
+ if (lineFlags !== undefined && Object.keys(lineFlags).length > 0)
299
+ loopParams.flags = lineFlags;
300
+ if (opts.maxTurns !== undefined)
301
+ loopParams.maxTurns = opts.maxTurns;
81
302
  const result = await rpc.call("loop.run", loopParams);
82
303
  finalStatus = result.finalStatus;
83
304
  hitMaxTurns = result.hitMaxTurns;
84
305
  turnCount = result.turnIds.length;
85
- // Token count would come from log.read; for now we just don't have it
306
+ usage = result.usage;
86
307
  }
87
308
  const wallMs = Date.now() - start;
88
- process.stdout.write(`${renderSummary(turnCount, wallMs, tokenCount, finalStatus, hitMaxTurns)}\n`);
309
+ process.stdout.write(`${renderSummary(turnCount, wallMs, dispatchTokens, finalStatus, hitMaxTurns, usage)}\n`);
89
310
  }
90
311
  catch (cause) {
91
312
  const msg = cause instanceof Error ? cause.message : String(cause);
@@ -93,6 +314,7 @@ export const runTui = async (rpc, session, opts) => {
93
314
  }
94
315
  finally {
95
316
  inFlight = false;
317
+ cancelRequested = false;
96
318
  rl.prompt();
97
319
  }
98
320
  });
@@ -101,7 +323,17 @@ export const runTui = async (rpc, session, opts) => {
101
323
  resolve();
102
324
  });
103
325
  rl.on("SIGINT", () => {
104
- // Ctrl-C: exit cleanly. Future: cancel in-flight run via SEND[499].
326
+ // First Ctrl-C with a dispatch in flight: cancel the run's active
327
+ // drain via loop.cancel (plurnk-service §13.5); the pending
328
+ // loop.run resolves with finalStatus 499 and the REPL continues.
329
+ // Second Ctrl-C (or idle Ctrl-C) exits — escape hatch for
330
+ // dispatches a drain-cancel can't unblock (op.parse).
331
+ if (inFlight && !cancelRequested) {
332
+ cancelRequested = true;
333
+ process.stdout.write("\r\x1b[2K \x1b[2mcancelling… (ctrl-c again to quit)\x1b[0m\n");
334
+ void rpc.call("loop.cancel", { reason: "user_sigint" });
335
+ return;
336
+ }
105
337
  rl.close();
106
338
  });
107
339
  });
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;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAYtD,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAQ,EAAE,OAAsB,EAAE,IAA8D,EAAiB,EAAE;IAC5I,0EAA0E;IAC1E,4EAA4E;IAC5E,uEAAuE;IACvE,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE;QACvC,MAAM,CAAC,GAAG,MAAiC,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,oEAAoE;IACpE,mBAAmB;IACnB,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7C,MAAM,CAAC,GAAG,MAAmD,CAAC;QAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,OAAO,CAAC,IAAI,aAAa,CAAC,CAAC;IAEpG,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,kBAAkB;KAC7B,CAAC,CAAC;IAEH,6EAA6E;IAC7E,2BAA2B;IAC3B,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,MAAwB,CAAC;QACnC,KAAK,CAAC,KAAK,IAAI,EAAE;YACb,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;gBACzG,OAAO;YACX,CAAC;YACD,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC;gBACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;YAChF,CAAC;oBAAS,CAAC;gBACP,EAAE,CAAC,MAAM,EAAE,CAAC;gBACZ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,MAAM,EAAE,CAAC;IAEZ,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,EAAE,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACX,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;gBACtF,EAAE,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACX,CAAC;YAED,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,WAAW,GAAG,KAAK,CAAC;YAExB,IAAI,CAAC;gBACD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,4BAA4B;oBAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAA2C,CAAC;oBACvG,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;gBACzE,CAAC;qBAAM,CAAC;oBACJ,2BAA2B;oBAC3B,MAAM,UAAU,GAAyD,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;oBAC7F,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;wBAAE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;oBACtE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;wBAAE,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;oBAClE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAkB,CAAC;oBACvE,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;oBACjC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;oBACjC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;oBAClC,sEAAsE;gBAC1E,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YACxG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,WAAW,CAAC,CAAC;YAC7D,CAAC;oBAAS,CAAC;gBACP,QAAQ,GAAG,KAAK,CAAC;gBACjB,EAAE,CAAC,MAAM,EAAE,CAAC;YAChB,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACjB,oEAAoE;YACpE,EAAE,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"}
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.4.0",
3
+ "version": "0.12.0",
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",