chivgent 0.19.0 → 1.0.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/repl.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { TuiInput } from "./tui/input.js";
2
+ import { InputMenu } from "./tui/menu.js";
2
3
  import { createInterface, emitKeypressEvents } from "node:readline";
3
4
  import { formatTokens } from "./providers/usage.js";
4
5
  export const REPL_PROMPT = "› ";
@@ -10,16 +11,22 @@ export const BUILT_IN_COMMANDS = [
10
11
  "exit",
11
12
  "quit",
12
13
  "login",
14
+ "provider",
15
+ "model",
16
+ "endpoint",
13
17
  ];
14
18
  const HELP = `Commands:
15
19
  /help Show this help
16
20
  /session Show the current session id, workspace, and size
17
21
  /tools List the tools available to the model
18
22
  /clear Start a new transcript in the same session
19
- /login Store an API key for this Provider
20
- /exit Leave chivgent (Ctrl+D also works)
23
+ /provider Choose a Provider (↑↓ and Enter in the TUI)
24
+ /model Show or change the current model: /model MODEL
25
+ /endpoint Set the URL for an OpenAI-compatible Provider
26
+ /login Store a key for the current Provider; /login NAME switches first
27
+ /exit Leave chivgent (Ctrl+C or Ctrl+D also works)
21
28
 
22
- Anything else is sent to the model. Ctrl+C stops the answer in progress.
29
+ Anything else is sent to the model. Ctrl+C stops a running answer; at the prompt it exits.
23
30
  `;
24
31
  function helpText(context) {
25
32
  const extras = context.extensionCommands ?? [];
@@ -56,12 +63,42 @@ export function handleSlashCommand(line, context) {
56
63
  context.session.clear();
57
64
  context.write("Transcript cleared.\n");
58
65
  return "handled";
66
+ case "/provider":
67
+ if (context.providers === undefined) {
68
+ context.write("Provider switching is unavailable in this session.\n");
69
+ return "handled";
70
+ }
71
+ if (trimmed === "/provider") {
72
+ context.write(context.providers.describe());
73
+ return "handled";
74
+ }
75
+ return { kind: "provider", argument: trimmed.slice("/provider".length).trim() };
76
+ case "/model":
77
+ if (context.providers === undefined) {
78
+ context.write("Model switching is unavailable in this session.\n");
79
+ return "handled";
80
+ }
81
+ if (trimmed === "/model") {
82
+ context.write(`Current model: ${context.providers.model ?? "not set"}. Use /model MODEL to change it.\n`);
83
+ return "handled";
84
+ }
85
+ return { kind: "model", argument: trimmed.slice("/model".length).trim() };
86
+ case "/endpoint":
87
+ if (context.providers === undefined) {
88
+ context.write("Endpoint configuration is unavailable in this session.\n");
89
+ return "handled";
90
+ }
91
+ if (trimmed === "/endpoint") {
92
+ context.write("Use /endpoint https://api.example.com/v1 for an OpenAI-compatible Provider.\n");
93
+ return "handled";
94
+ }
95
+ return { kind: "endpoint", argument: trimmed.slice("/endpoint".length).trim() };
59
96
  case "/login":
60
97
  if (context.signIn === undefined) {
61
98
  context.write("This session cannot store a key; it is attached to a server that already has one.\n");
62
99
  return "handled";
63
100
  }
64
- return { kind: "login" };
101
+ return { kind: "login", providerArgument: trimmed.slice("/login".length).trim() };
65
102
  case "/exit":
66
103
  case "/quit":
67
104
  return "exit";
@@ -130,11 +167,7 @@ async function withoutEcho(readline, read) {
130
167
  }
131
168
  }
132
169
  async function runSignIn(readline, readNextLine, write, signIn) {
133
- write([
134
- `Paste an API key for ${signIn.provider}. It is not echoed.`,
135
- `It will be stored in ${signIn.authFile}, readable only by you.`,
136
- "API key: ",
137
- ].join("\n"));
170
+ write(`API key for ${signIn.provider} (hidden, saved locally; Enter skips): `);
138
171
  // The key is read from the same line source the loop uses. readline's
139
172
  // question() competes with the loop's own iterator for input, so the answer
140
173
  // would be swallowed or never arrive.
@@ -153,12 +186,13 @@ async function runSignIn(readline, readNextLine, write, signIn) {
153
186
  write(`${failure}\n`);
154
187
  return;
155
188
  }
156
- write(`Stored the key for ${signIn.provider}. The key is not checked until your next prompt.\n`);
189
+ write(signIn.ready()
190
+ ? `Stored the key for ${signIn.provider}. Ready for your next prompt.\n`
191
+ : `Stored the key for ${signIn.provider}. ${signIn.unavailableMessage?.() ?? "Finish Provider setup before sending a prompt."}\n`);
157
192
  }
158
193
  /**
159
- * Reads prompts until the user leaves. One run at a time: Ctrl+C cancels the
160
- * answer in progress instead of killing the process, so the transcript and the
161
- * session log survive an interrupt.
194
+ * Reads prompts until the user leaves. Ctrl+C cancels a running answer, keeping
195
+ * its transcript and log; at an idle prompt it closes the REPL.
162
196
  */
163
197
  export async function runRepl(options) {
164
198
  const write = (text) => {
@@ -175,24 +209,113 @@ export async function runRepl(options) {
175
209
  output: options.output,
176
210
  terminal: true,
177
211
  prompt: REPL_PROMPT,
178
- ...(options.tui ? {
179
- completer: (line) => {
180
- const commands = [...BUILT_IN_COMMANDS, ...(options.extensionCommands ?? []).map((command) => command.name)];
181
- const matches = line.startsWith("/") && !/\s/.test(line)
182
- ? [...new Set(commands)].map((name) => `/${name}`).filter((name) => name.startsWith(line))
183
- : [];
184
- return [matches, line];
185
- },
186
- } : {}),
187
212
  });
213
+ const menu = tuiInput === undefined ? undefined : new InputMenu(readline, options.output);
214
+ let dismissedLine;
215
+ let refreshQueued = false;
216
+ const commands = [...BUILT_IN_COMMANDS, ...(options.extensionCommands ?? []).map((command) => command.name)]
217
+ .filter((name, index, all) => all.indexOf(name) === index)
218
+ .map((name) => ({ value: name, label: `/${name}${name === "provider" ? " · choose a Provider" : name === "model" ? " · change model" : ""}` }));
219
+ const menuItems = (line) => {
220
+ if (line === "/provider" || line.startsWith("/provider ")) {
221
+ const query = line.slice("/provider".length).trim().toLowerCase();
222
+ return (options.providers?.providerIds() ?? []).filter((id) => id.includes(query))
223
+ .map((id) => ({ value: `provider ${id}`, label: `${id === options.providers?.provider ? "●" : "○"} ${id}` }));
224
+ }
225
+ if (line.startsWith("/") && !/\s/.test(line)) {
226
+ return commands.filter((item) => item.label.startsWith(line));
227
+ }
228
+ return [];
229
+ };
230
+ const refreshMenu = () => {
231
+ if (menu === undefined || inputClosed || signingIn || controller !== undefined)
232
+ return;
233
+ const line = readline.line;
234
+ menu.show(line === dismissedLine ? [] : menuItems(line), true);
235
+ };
236
+ const queueRefresh = () => {
237
+ if (refreshQueued)
238
+ return;
239
+ refreshQueued = true;
240
+ setImmediate(() => { refreshQueued = false; refreshMenu(); });
241
+ };
242
+ const replaceDraft = (value) => {
243
+ menu?.reset();
244
+ readline.write(null, { ctrl: true, name: "a" });
245
+ readline.write(null, { ctrl: true, name: "k" });
246
+ readline.write(value);
247
+ };
188
248
  let controller;
189
249
  let promptVisible = false;
250
+ let inputClosed = false;
251
+ let signingIn = false;
252
+ let interrupted = false;
253
+ if (tuiInput !== undefined) {
254
+ tuiInput.setMenuControls(() => {
255
+ menu?.clear();
256
+ dismissedLine = undefined;
257
+ }, (key) => {
258
+ if (signingIn || controller !== undefined)
259
+ return false;
260
+ if (key === "enter" && !menu?.active && readline.line === "/provider" && options.providers !== undefined) {
261
+ menu?.show(menuItems(readline.line));
262
+ return true;
263
+ }
264
+ if (key === "tab" && !menu?.active) {
265
+ const first = menuItems(readline.line)[0]?.value;
266
+ if (first !== undefined) {
267
+ replaceDraft(`/${first}${first === "model" || first === "endpoint" ? " " : ""}`);
268
+ queueRefresh();
269
+ return true;
270
+ }
271
+ }
272
+ if (!menu?.active)
273
+ return false;
274
+ if (key === "up" || key === "down") {
275
+ menu.move(key === "up" ? -1 : 1);
276
+ return true;
277
+ }
278
+ if (key === "escape") {
279
+ dismissedLine = readline.line;
280
+ menu.clear();
281
+ return true;
282
+ }
283
+ const chosen = menu.selection;
284
+ if (chosen === undefined)
285
+ return false;
286
+ const replacement = `/${chosen}`;
287
+ if (key === "tab") {
288
+ replaceDraft(replacement + (chosen === "model" || chosen === "endpoint" ? " " : ""));
289
+ queueRefresh();
290
+ return true;
291
+ }
292
+ if (key === "enter") {
293
+ replaceDraft(replacement);
294
+ if (chosen === "provider" || chosen === "model" || chosen === "endpoint") {
295
+ if (chosen !== "provider")
296
+ readline.write(" ");
297
+ queueRefresh();
298
+ }
299
+ else {
300
+ tuiInput.markSubmitted();
301
+ readline.write("\r");
302
+ }
303
+ return true;
304
+ }
305
+ return false;
306
+ });
307
+ tuiInput.on("keypress", queueRefresh);
308
+ }
190
309
  const showPrompt = () => {
310
+ if (inputClosed)
311
+ return;
191
312
  promptVisible = true;
192
313
  readline.prompt();
193
314
  };
194
- readline.on("line", () => { promptVisible = false; });
315
+ readline.on("line", () => { menu?.reset(); promptVisible = false; });
195
316
  readline.on("close", () => {
317
+ menu?.reset();
318
+ inputClosed = true;
196
319
  controller?.abort();
197
320
  if (options.tui && promptVisible) {
198
321
  // Ctrl+D closes an empty input line without printing a newline.
@@ -203,14 +326,15 @@ export async function runRepl(options) {
203
326
  readline.on("SIGINT", () => {
204
327
  if (controller === undefined) {
205
328
  if (options.tui) {
206
- // Use readline's editing operations so wrapped input is also erased.
329
+ // Erase wrapped drafts before removing the prompt on close.
207
330
  readline.write(null, { ctrl: true, name: "e" });
208
331
  readline.write(null, { ctrl: true, name: "u" });
209
332
  }
210
333
  else {
211
- write("Press Ctrl+D or /exit to leave.\n");
334
+ options.output.write("\n");
212
335
  }
213
- showPrompt();
336
+ interrupted = true;
337
+ readline.close();
214
338
  return;
215
339
  }
216
340
  controller.abort();
@@ -225,6 +349,29 @@ export async function runRepl(options) {
225
349
  const next = await lines.next();
226
350
  return next.done === true ? undefined : next.value;
227
351
  };
352
+ const signInAfterProviderSelection = async () => {
353
+ if (!options.tui || options.signIn === undefined)
354
+ return;
355
+ let missingKey;
356
+ try {
357
+ missingKey = options.signIn.needsApiKey === undefined
358
+ ? !options.signIn.ready()
359
+ : await options.signIn.needsApiKey();
360
+ }
361
+ catch (error) {
362
+ write(`Could not check saved API key: ${error instanceof Error ? error.message : String(error)}\n`);
363
+ return;
364
+ }
365
+ if (!missingKey)
366
+ return;
367
+ signingIn = true;
368
+ try {
369
+ await runSignIn(readline, readNextLine, write, options.signIn);
370
+ }
371
+ finally {
372
+ signingIn = false;
373
+ }
374
+ };
228
375
  try {
229
376
  for (;;) {
230
377
  const line = await readNextLine();
@@ -245,13 +392,46 @@ export async function runRepl(options) {
245
392
  ? {}
246
393
  : { extensionCommands: options.extensionCommands }),
247
394
  ...(options.signIn === undefined ? {} : { signIn: options.signIn }),
395
+ ...(options.providers === undefined ? {} : { providers: options.providers }),
248
396
  });
249
397
  if (outcome === "exit") {
250
398
  break;
251
399
  }
252
400
  if (typeof outcome === "object" && outcome.kind === "login") {
401
+ if (outcome.providerArgument.length > 0) {
402
+ if (options.providers === undefined) {
403
+ write("Provider switching is unavailable in this session.\n");
404
+ showPrompt();
405
+ continue;
406
+ }
407
+ const selected = await options.providers.select(outcome.providerArgument);
408
+ write(selected.message);
409
+ if (!selected.ok) {
410
+ showPrompt();
411
+ continue;
412
+ }
413
+ }
253
414
  if (options.signIn !== undefined) {
254
- await runSignIn(readline, readNextLine, write, options.signIn);
415
+ signingIn = true;
416
+ try {
417
+ await runSignIn(readline, readNextLine, write, options.signIn);
418
+ }
419
+ finally {
420
+ signingIn = false;
421
+ }
422
+ }
423
+ showPrompt();
424
+ continue;
425
+ }
426
+ if (typeof outcome === "object" && (outcome.kind === "provider" || outcome.kind === "model" || outcome.kind === "endpoint")) {
427
+ if (options.providers !== undefined) {
428
+ const selected = outcome.kind === "provider"
429
+ ? await options.providers.select(outcome.argument)
430
+ : outcome.kind === "model" ? await options.providers.changeModel(outcome.argument)
431
+ : await options.providers.changeEndpoint(outcome.argument);
432
+ write(selected.message);
433
+ if (selected.ok && outcome.kind === "provider")
434
+ await signInAfterProviderSelection();
255
435
  }
256
436
  showPrompt();
257
437
  continue;
@@ -280,7 +460,7 @@ export async function runRepl(options) {
280
460
  if (options.signIn !== undefined && !options.signIn.ready()) {
281
461
  // Saying this before the run starts is clearer than letting the Provider
282
462
  // call fail and reporting it as an agent failure.
283
- write("No API key yet. Run /login to add one.\n");
463
+ write(`${options.providers?.unavailableMessage?.() ?? `No API key for ${options.signIn.provider}. Run /login or use /provider to switch.`}\n`);
284
464
  showPrompt();
285
465
  continue;
286
466
  }
@@ -309,6 +489,6 @@ export async function runRepl(options) {
309
489
  readline.close();
310
490
  tuiInput?.dispose();
311
491
  }
312
- return 0;
492
+ return interrupted ? 130 : 0;
313
493
  }
314
494
  //# sourceMappingURL=repl.js.map
package/dist/repl.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}
@@ -14,11 +14,17 @@ export declare class TuiInput extends PassThrough {
14
14
  private busy;
15
15
  private submitted;
16
16
  private afterCR;
17
+ private escapePrefix;
18
+ private escapeTimer?;
19
+ private beforeEdit?;
20
+ private menuKey?;
17
21
  constructor(source: TerminalInput);
18
22
  setRawMode(enabled: boolean): this;
19
23
  setBusy(busy: boolean): void;
24
+ setMenuControls(beforeEdit: () => void, menuKey: (key: "up" | "down" | "enter" | "escape" | "tab") => boolean): void;
20
25
  /** Called only when the REPL is ready to read its next line. */
21
26
  acceptLine(): void;
27
+ markSubmitted(): void;
22
28
  dispose(): void;
23
29
  private readonly receive;
24
30
  private readonly ended;
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/tui/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,aAAa,GAAG,MAAM,CAAC,cAAc,GAAG;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;CAC5C,CAAC;AAEF;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,WAAW;IAM3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IAExB,YAA6B,MAAM,EAAE,aAAa,EAMjD;IAED,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAGjC;IAED,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE3B;IAED,gEAAgE;IAChE,UAAU,IAAI,IAAI,CAEjB;IAED,OAAO,IAAI,IAAI,CAOd;IAED,OAAO,CAAC,QAAQ,CAAC,OAAO,CAsBtB;IAEF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoD;CAC5E"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/tui/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,aAAa,GAAG,MAAM,CAAC,cAAc,GAAG;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;CAC5C,CAAC;AAOF;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,WAAW;IAU3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IATnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,OAAO,CAAC,CAA+D;IAE/E,YAA6B,MAAM,EAAE,aAAa,EAMjD;IAED,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAGjC;IAED,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE3B;IAED,eAAe,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,KAAK,OAAO,GAAG,IAAI,CAGnH;IAED,gEAAgE;IAChE,UAAU,IAAI,IAAI,CAEjB;IAED,aAAa,IAAI,IAAI,CAEpB;IAED,OAAO,IAAI,IAAI,CAQd;IAED,OAAO,CAAC,QAAQ,CAAC,OAAO,CAuEtB;IAEF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAIpB;IACF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoD;CAC5E"}
package/dist/tui/input.js CHANGED
@@ -1,4 +1,8 @@
1
1
  import { PassThrough } from "node:stream";
2
+ const menuKeys = new Map([
3
+ ["\u001b[A", "up"], ["\u001bOA", "up"], ["\u001b[B", "down"], ["\u001bOB", "down"],
4
+ ["\r", "enter"], ["\n", "enter"], ["\u001b", "escape"], ["\t", "tab"],
5
+ ]);
2
6
  /**
3
7
  * Readline keeps its normal editing and history. During a run, only Ctrl+C
4
8
  * reaches it: typing must neither echo into the live region nor queue prompts.
@@ -10,6 +14,10 @@ export class TuiInput extends PassThrough {
10
14
  busy = false;
11
15
  submitted = false;
12
16
  afterCR = false;
17
+ escapePrefix = Buffer.alloc(0);
18
+ escapeTimer;
19
+ beforeEdit;
20
+ menuKey;
13
21
  constructor(source) {
14
22
  super();
15
23
  this.source = source;
@@ -25,11 +33,20 @@ export class TuiInput extends PassThrough {
25
33
  setBusy(busy) {
26
34
  this.busy = busy;
27
35
  }
36
+ setMenuControls(beforeEdit, menuKey) {
37
+ this.beforeEdit = beforeEdit;
38
+ this.menuKey = menuKey;
39
+ }
28
40
  /** Called only when the REPL is ready to read its next line. */
29
41
  acceptLine() {
30
42
  this.submitted = false;
31
43
  }
44
+ markSubmitted() {
45
+ this.submitted = true;
46
+ }
32
47
  dispose() {
48
+ if (this.escapeTimer !== undefined)
49
+ clearTimeout(this.escapeTimer);
33
50
  this.source.off("data", this.receive);
34
51
  this.source.off("end", this.ended);
35
52
  this.source.off("error", this.failed);
@@ -39,6 +56,13 @@ export class TuiInput extends PassThrough {
39
56
  }
40
57
  receive = (chunk) => {
41
58
  let bytes = typeof chunk === "string" ? Buffer.from(chunk) : chunk;
59
+ if (this.escapePrefix.length > 0) {
60
+ bytes = Buffer.concat([this.escapePrefix, bytes]);
61
+ this.escapePrefix = Buffer.alloc(0);
62
+ if (this.escapeTimer !== undefined)
63
+ clearTimeout(this.escapeTimer);
64
+ this.escapeTimer = undefined;
65
+ }
42
66
  if (bytes.length === 0)
43
67
  return;
44
68
  if (this.afterCR && bytes[0] === 10)
@@ -51,20 +75,82 @@ export class TuiInput extends PassThrough {
51
75
  this.write("\u0003");
52
76
  return;
53
77
  }
54
- // Stop at the first submission *before* readline receives the chunk.
55
- // Its async iterator can otherwise queue later lines before runRepl has
56
- // entered the busy state. Keep bytes intact for split UTF-8 characters.
57
- const end = bytes.findIndex((byte) => byte === 10 || byte === 13);
58
- if (end === -1) {
59
- this.write(bytes);
60
- }
61
- else {
62
- this.submitted = true;
63
- this.afterCR = bytes[end] === 13 && end === bytes.length - 1;
64
- this.write(bytes.subarray(0, end + 1));
78
+ // A terminal may deliver Arrow+Enter in one chunk. Parse control keys in
79
+ // order, while forwarding ordinary text as intact bytes for split UTF-8.
80
+ let offset = 0;
81
+ const forward = (part) => {
82
+ if (part.length === 0)
83
+ return;
84
+ this.beforeEdit?.();
85
+ this.write(part);
86
+ };
87
+ const holdEscape = (part) => {
88
+ this.escapePrefix = Buffer.from(part);
89
+ this.escapeTimer = setTimeout(() => {
90
+ const pending = this.escapePrefix;
91
+ this.escapePrefix = Buffer.alloc(0);
92
+ this.escapeTimer = undefined;
93
+ if (pending.length === 1 && this.menuKey?.("escape"))
94
+ return;
95
+ forward(pending);
96
+ }, 30);
97
+ };
98
+ while (offset < bytes.length && !this.submitted) {
99
+ const byte = bytes[offset];
100
+ if (byte === 27 || byte === 9 || byte === 10 || byte === 13) {
101
+ let size = 1;
102
+ if (byte === 27) {
103
+ if (offset + 1 === bytes.length) {
104
+ holdEscape(bytes.subarray(offset));
105
+ return;
106
+ }
107
+ if (bytes[offset + 1] === 91) {
108
+ let end = offset + 2;
109
+ while (end < bytes.length && ((bytes[end] ?? 0) < 64 || (bytes[end] ?? 0) > 126))
110
+ end++;
111
+ if (end === bytes.length) {
112
+ holdEscape(bytes.subarray(offset));
113
+ return;
114
+ }
115
+ size = end - offset + 1;
116
+ }
117
+ else if (bytes[offset + 1] === 79) {
118
+ if (offset + 2 === bytes.length) {
119
+ holdEscape(bytes.subarray(offset));
120
+ return;
121
+ }
122
+ size = 3;
123
+ }
124
+ }
125
+ const part = bytes.subarray(offset, offset + size);
126
+ const key = menuKeys.get(part.toString());
127
+ if (key !== undefined && this.menuKey?.(key)) {
128
+ offset += size;
129
+ continue;
130
+ }
131
+ if (byte === 10 || byte === 13) {
132
+ this.submitted = true;
133
+ this.afterCR = byte === 13 && offset + 1 === bytes.length;
134
+ forward(part);
135
+ return;
136
+ }
137
+ forward(part);
138
+ offset += size;
139
+ continue;
140
+ }
141
+ const start = offset;
142
+ while (offset < bytes.length && ![9, 10, 13, 27].includes(bytes[offset] ?? -1))
143
+ offset++;
144
+ forward(bytes.subarray(start, offset));
65
145
  }
66
146
  };
67
- ended = () => { this.end(); };
147
+ ended = () => {
148
+ if (this.escapeTimer !== undefined)
149
+ clearTimeout(this.escapeTimer);
150
+ if (this.escapePrefix.length > 0)
151
+ this.write(this.escapePrefix);
152
+ this.end();
153
+ };
68
154
  failed = (error) => { this.destroy(error); };
69
155
  }
70
156
  //# sourceMappingURL=input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tui/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO1C;;;;GAIG;AACH,MAAM,OAAO,QAAS,SAAQ,WAAW;IAMV,MAAM;IAL1B,KAAK,CAAU;IAChB,IAAI,GAAG,KAAK,CAAC;IACb,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,GAAG,KAAK,CAAC;IAExB,YAA6B,MAAqB;QAChD,KAAK,EAAE,CAAC;sBADmB,MAAM;QAEjC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,OAAgB;QACzB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAa;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,gEAAgE;IAChE,UAAU;QACR,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEgB,OAAO,GAAG,CAAC,KAAsB,EAAQ,EAAE;QAC1D,IAAI,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE;YAAE,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QAClE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC;IAEe,KAAK,GAAG,GAAS,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,GAAG,CAAC,KAAY,EAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5E"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tui/input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Interface } from "node:readline";
2
+ export interface MenuItem {
3
+ readonly value: string;
4
+ readonly label: string;
5
+ }
6
+ /** A small transient region beneath readline, with the cursor left in the draft. */
7
+ export declare class InputMenu {
8
+ private readonly readline;
9
+ private readonly output;
10
+ private items;
11
+ private selected;
12
+ private reserved;
13
+ private painted;
14
+ constructor(readline: Interface, output: NodeJS.WritableStream & {
15
+ columns?: number;
16
+ rows?: number;
17
+ });
18
+ get active(): boolean;
19
+ get selection(): string | undefined;
20
+ show(items: readonly MenuItem[], preserveSelection?: boolean): void;
21
+ move(delta: number): void;
22
+ clear(): void;
23
+ reset(): void;
24
+ private belowInput;
25
+ }
26
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/tui/menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,oFAAoF;AACpF,qBAAa,SAAS;IAOlB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAK;IAEpB,YACmB,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAClF;IAEJ,IAAI,MAAM,IAAI,OAAO,CAAkC;IACvD,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAA6C;IAEhF,IAAI,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,iBAAiB,UAAQ,GAAG,IAAI,CAyBhE;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxB;IAED,KAAK,IAAI,IAAI,CAWZ;IAED,KAAK,IAAI,IAAI,CAGZ;IAED,OAAO,CAAC,UAAU;CAMnB"}