inquirer-ai 0.2.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.
Files changed (81) hide show
  1. package/dist/agent.d.ts +7 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +143 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/choice.d.ts +18 -0
  6. package/dist/choice.d.ts.map +1 -0
  7. package/dist/choice.js +29 -0
  8. package/dist/choice.js.map +1 -0
  9. package/dist/errors.d.ts +16 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +31 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/index.d.ts +43 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +66 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/mode.d.ts +2 -0
  18. package/dist/mode.d.ts.map +1 -0
  19. package/dist/mode.js +10 -0
  20. package/dist/mode.js.map +1 -0
  21. package/dist/prompts/autocomplete.d.ts +13 -0
  22. package/dist/prompts/autocomplete.d.ts.map +1 -0
  23. package/dist/prompts/autocomplete.js +29 -0
  24. package/dist/prompts/autocomplete.js.map +1 -0
  25. package/dist/prompts/base.d.ts +27 -0
  26. package/dist/prompts/base.d.ts.map +1 -0
  27. package/dist/prompts/base.js +107 -0
  28. package/dist/prompts/base.js.map +1 -0
  29. package/dist/prompts/checkbox.d.ts +22 -0
  30. package/dist/prompts/checkbox.d.ts.map +1 -0
  31. package/dist/prompts/checkbox.js +168 -0
  32. package/dist/prompts/checkbox.js.map +1 -0
  33. package/dist/prompts/confirm.d.ts +12 -0
  34. package/dist/prompts/confirm.d.ts.map +1 -0
  35. package/dist/prompts/confirm.js +40 -0
  36. package/dist/prompts/confirm.js.map +1 -0
  37. package/dist/prompts/editor.d.ts +13 -0
  38. package/dist/prompts/editor.d.ts.map +1 -0
  39. package/dist/prompts/editor.js +54 -0
  40. package/dist/prompts/editor.js.map +1 -0
  41. package/dist/prompts/expand.d.ts +19 -0
  42. package/dist/prompts/expand.d.ts.map +1 -0
  43. package/dist/prompts/expand.js +72 -0
  44. package/dist/prompts/expand.js.map +1 -0
  45. package/dist/prompts/number.d.ts +17 -0
  46. package/dist/prompts/number.d.ts.map +1 -0
  47. package/dist/prompts/number.js +73 -0
  48. package/dist/prompts/number.js.map +1 -0
  49. package/dist/prompts/password.d.ts +14 -0
  50. package/dist/prompts/password.d.ts.map +1 -0
  51. package/dist/prompts/password.js +30 -0
  52. package/dist/prompts/password.js.map +1 -0
  53. package/dist/prompts/path.d.ts +13 -0
  54. package/dist/prompts/path.d.ts.map +1 -0
  55. package/dist/prompts/path.js +29 -0
  56. package/dist/prompts/path.js.map +1 -0
  57. package/dist/prompts/rawlist.d.ts +15 -0
  58. package/dist/prompts/rawlist.d.ts.map +1 -0
  59. package/dist/prompts/rawlist.js +55 -0
  60. package/dist/prompts/rawlist.js.map +1 -0
  61. package/dist/prompts/search.d.ts +17 -0
  62. package/dist/prompts/search.d.ts.map +1 -0
  63. package/dist/prompts/search.js +85 -0
  64. package/dist/prompts/search.js.map +1 -0
  65. package/dist/prompts/select.d.ts +22 -0
  66. package/dist/prompts/select.d.ts.map +1 -0
  67. package/dist/prompts/select.js +137 -0
  68. package/dist/prompts/select.js.map +1 -0
  69. package/dist/prompts/text.d.ts +10 -0
  70. package/dist/prompts/text.d.ts.map +1 -0
  71. package/dist/prompts/text.js +21 -0
  72. package/dist/prompts/text.js.map +1 -0
  73. package/dist/terminal.d.ts +21 -0
  74. package/dist/terminal.d.ts.map +1 -0
  75. package/dist/terminal.js +155 -0
  76. package/dist/terminal.js.map +1 -0
  77. package/dist/theme.d.ts +22 -0
  78. package/dist/theme.d.ts.map +1 -0
  79. package/dist/theme.js +32 -0
  80. package/dist/theme.js.map +1 -0
  81. package/package.json +54 -0
@@ -0,0 +1,29 @@
1
+ import { formatQuestion, readLine } from "../terminal.js";
2
+ import { BasePrompt } from "./base.js";
3
+ export class PathPrompt extends BasePrompt {
4
+ onlyDirectories;
5
+ constructor(config) {
6
+ super(config);
7
+ this.onlyDirectories = config.onlyDirectories ?? false;
8
+ }
9
+ get promptType() {
10
+ return "path";
11
+ }
12
+ validateAnswer(value) {
13
+ if (value == null)
14
+ return this.defaultValue ?? "";
15
+ return String(value);
16
+ }
17
+ toAgentDict() {
18
+ return { ...super.toAgentDict(), only_directories: this.onlyDirectories };
19
+ }
20
+ async executeTerminal() {
21
+ const suffix = this.defaultValue != null ? ` (${this.defaultValue})` : "";
22
+ const prompt = formatQuestion(this.message, suffix);
23
+ const result = await readLine(prompt);
24
+ if (!result && this.defaultValue != null)
25
+ return this.defaultValue;
26
+ return result;
27
+ }
28
+ }
29
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/prompts/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAmB,UAAU,EAAE,MAAM,WAAW,CAAC;AAMxD,MAAM,OAAO,UAAW,SAAQ,UAAkB;IACxC,eAAe,CAAU;IAEjC,YAAY,MAAkB;QAC5B,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC;IACzD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,cAAc,CAAC,KAAc;QACrC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEkB,WAAW;QAC5B,OAAO,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;IAC5E,CAAC;IAES,KAAK,CAAC,eAAe;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QACnE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { type RawChoice } from "../choice.js";
2
+ import { type BaseConfig, BasePrompt } from "./base.js";
3
+ export interface RawlistConfig extends BaseConfig<unknown> {
4
+ choices: RawChoice[];
5
+ }
6
+ export declare class RawlistPrompt extends BasePrompt<unknown> {
7
+ private choices;
8
+ constructor(config: RawlistConfig);
9
+ get promptType(): string;
10
+ protected validateAnswer(value: unknown): unknown;
11
+ protected formatAnswer(value: unknown): string;
12
+ protected toAgentDict(): Record<string, unknown>;
13
+ protected executeTerminal(): Promise<unknown>;
14
+ }
15
+ //# sourceMappingURL=rawlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawlist.d.ts","sourceRoot":"","sources":["../../src/prompts/rawlist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGnG,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,aAAc,SAAQ,UAAU,CAAC,OAAO,CAAC;IACxD,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,qBAAa,aAAc,SAAQ,UAAU,CAAC,OAAO,CAAC;IACpD,OAAO,CAAC,OAAO,CAAW;gBAEd,MAAM,EAAE,aAAa;IASjC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAUjD,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;cAO3B,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;cAIzC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;CAgBpD"}
@@ -0,0 +1,55 @@
1
+ import { choiceToDict, isSeparator, parseChoice } from "../choice.js";
2
+ import { InvalidChoiceError, ValidationError } from "../errors.js";
3
+ import { formatError, formatQuestion, readLine } from "../terminal.js";
4
+ import { BasePrompt } from "./base.js";
5
+ export class RawlistPrompt extends BasePrompt {
6
+ choices;
7
+ constructor(config) {
8
+ super(config);
9
+ if (!config.choices.length)
10
+ throw new InvalidChoiceError("choices cannot be empty");
11
+ this.choices = config.choices
12
+ .map(parseChoice)
13
+ .filter((c) => !isSeparator(c));
14
+ if (!this.choices.length)
15
+ throw new InvalidChoiceError("choices cannot be empty");
16
+ }
17
+ get promptType() {
18
+ return "rawlist";
19
+ }
20
+ validateAnswer(value) {
21
+ if (typeof value === "number" && value >= 1 && value <= this.choices.length) {
22
+ return this.choices[value - 1]?.value;
23
+ }
24
+ for (const c of this.choices) {
25
+ if (value === c.value || value === c.name)
26
+ return c.value;
27
+ }
28
+ throw new ValidationError(`Invalid choice: ${JSON.stringify(value)}`);
29
+ }
30
+ formatAnswer(value) {
31
+ for (const c of this.choices) {
32
+ if (c.value === value)
33
+ return c.short ?? c.name;
34
+ }
35
+ return String(value);
36
+ }
37
+ toAgentDict() {
38
+ return { ...super.toAgentDict(), choices: this.choices.map(choiceToDict) };
39
+ }
40
+ async executeTerminal() {
41
+ for (let i = 0; i < this.choices.length; i++) {
42
+ process.stderr.write(` ${i + 1}) ${this.choices[i]?.name}\n`);
43
+ }
44
+ const prompt = formatQuestion(this.message);
45
+ while (true) {
46
+ const raw = await readLine(prompt);
47
+ const idx = parseInt(raw, 10);
48
+ if (!Number.isNaN(idx) && idx >= 1 && idx <= this.choices.length) {
49
+ return this.choices[idx - 1]?.value;
50
+ }
51
+ process.stderr.write(`${formatError(`Please enter a number between 1 and ${this.choices.length}`)}\n`);
52
+ }
53
+ }
54
+ }
55
+ //# sourceMappingURL=rawlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawlist.js","sourceRoot":"","sources":["../../src/prompts/rawlist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type RawChoice } from "../choice.js";
2
+ import { type BaseConfig, BasePrompt } from "./base.js";
3
+ export interface SearchConfig extends BaseConfig<unknown> {
4
+ source: (term: string) => RawChoice[];
5
+ pageSize?: number;
6
+ }
7
+ export declare class SearchPrompt extends BasePrompt<unknown> {
8
+ private source;
9
+ private pageSize;
10
+ constructor(config: SearchConfig);
11
+ get promptType(): string;
12
+ protected validateAnswer(value: unknown): unknown;
13
+ protected toAgentDict(): Record<string, unknown>;
14
+ protected executeTerminal(): Promise<unknown>;
15
+ private getFiltered;
16
+ }
17
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/prompts/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAInG,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,YAAa,SAAQ,UAAU,CAAC,OAAO,CAAC;IACvD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAa,SAAQ,UAAU,CAAC,OAAO,CAAC;IACnD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,YAAY;IAMhC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;cAI9B,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;cAWzC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IA+CnD,OAAO,CAAC,WAAW;CAKpB"}
@@ -0,0 +1,85 @@
1
+ import { choiceToDict, isSeparator, parseChoice } from "../choice.js";
2
+ import { PromptAbortedError } from "../errors.js";
3
+ import { runListPrompt } from "../terminal.js";
4
+ import { ansi, getTheme, RESET } from "../theme.js";
5
+ import { BasePrompt } from "./base.js";
6
+ export class SearchPrompt extends BasePrompt {
7
+ source;
8
+ pageSize;
9
+ constructor(config) {
10
+ super(config);
11
+ this.source = config.source;
12
+ this.pageSize = config.pageSize ?? 10;
13
+ }
14
+ get promptType() {
15
+ return "search";
16
+ }
17
+ validateAnswer(value) {
18
+ return value;
19
+ }
20
+ toAgentDict() {
21
+ const initial = this.source("")
22
+ .map(parseChoice)
23
+ .filter((c) => !isSeparator(c) && !c.disabled);
24
+ return {
25
+ ...super.toAgentDict(),
26
+ searchable: true,
27
+ choices: initial.map(choiceToDict),
28
+ };
29
+ }
30
+ async executeTerminal() {
31
+ const t = getTheme();
32
+ const filtered = this.getFiltered("");
33
+ let cursor = 0;
34
+ const getItems = () => {
35
+ const end = Math.min(filtered.length, this.pageSize);
36
+ const result = [];
37
+ for (let i = 0; i < end; i++) {
38
+ const c = filtered[i];
39
+ if (i === cursor) {
40
+ result.push({ text: `${t.symPointer} ${c.name}`, style: ansi(t.highlight) });
41
+ }
42
+ else {
43
+ result.push({ text: ` ${c.name}`, style: "" });
44
+ }
45
+ }
46
+ if (!filtered.length) {
47
+ result.push({ text: ` ${ansi(t.muted)}No matches${RESET}`, style: "" });
48
+ }
49
+ return result;
50
+ };
51
+ const raw = await runListPrompt({
52
+ message: this.message,
53
+ getItems,
54
+ onKey: (key) => {
55
+ if (key === "up") {
56
+ if (filtered.length)
57
+ cursor = (cursor - 1 + filtered.length) % filtered.length;
58
+ return { done: false };
59
+ }
60
+ if (key === "down") {
61
+ if (filtered.length)
62
+ cursor = (cursor + 1) % filtered.length;
63
+ return { done: false };
64
+ }
65
+ if (key === "enter") {
66
+ if (filtered.length)
67
+ return { done: true, result: filtered[cursor]?.value };
68
+ return { done: true, result: null };
69
+ }
70
+ if (key === "ctrl-c")
71
+ return { done: true, result: null };
72
+ return { done: false };
73
+ },
74
+ });
75
+ if (raw === null)
76
+ throw new PromptAbortedError("Prompt aborted by user");
77
+ return raw;
78
+ }
79
+ getFiltered(term) {
80
+ return this.source(term)
81
+ .map(parseChoice)
82
+ .filter((c) => !isSeparator(c) && !c.disabled);
83
+ }
84
+ }
85
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/prompts/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,WAAW,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAiB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAmB,UAAU,EAAE,MAAM,WAAW,CAAC;AAOxD,MAAM,OAAO,YAAa,SAAQ,UAAmB;IAC3C,MAAM,CAAgC;IACtC,QAAQ,CAAS;IAEzB,YAAY,MAAoB;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,QAAQ,CAAC;IAClB,CAAC;IAES,cAAc,CAAC,KAAc;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAEkB,WAAW;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;aAC5B,GAAG,CAAC,WAAW,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9D,OAAO;YACL,GAAG,KAAK,CAAC,WAAW,EAAE;YACtB,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;SACnC,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,eAAe;QAC7B,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,MAAM,QAAQ,GAAG,GAAe,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ;YACR,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBACb,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACjB,IAAI,QAAQ,CAAC,MAAM;wBAAE,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC/E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACzB,CAAC;gBACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACnB,IAAI,QAAQ,CAAC,MAAM;wBAAE,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACzB,CAAC;gBACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;oBACpB,IAAI,QAAQ,CAAC,MAAM;wBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;oBAC5E,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACtC,CAAC;gBACD,IAAI,GAAG,KAAK,QAAQ;oBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACzB,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;QACzE,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;aACrB,GAAG,CAAC,WAAW,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { type RawChoice } from "../choice.js";
2
+ import { type BaseConfig, BasePrompt } from "./base.js";
3
+ export interface SelectConfig<V = unknown> extends BaseConfig<V> {
4
+ choices: RawChoice<V>[];
5
+ pageSize?: number;
6
+ loop?: boolean;
7
+ }
8
+ export declare class SelectPrompt<V = unknown> extends BasePrompt<V> {
9
+ private items;
10
+ private choices;
11
+ private pageSize;
12
+ private loop;
13
+ constructor(config: SelectConfig<V>);
14
+ get promptType(): string;
15
+ protected validateAnswer(value: unknown): V;
16
+ protected formatAnswer(value: V): string;
17
+ protected toAgentDict(): Record<string, unknown>;
18
+ private selectableIndices;
19
+ private moveCursor;
20
+ protected executeTerminal(): Promise<V>;
21
+ }
22
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/prompts/select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIpH,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IAC9D,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,YAAY,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAU;gBAEV,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAYnC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAS3C,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;cAOrB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzD,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,UAAU;cAaF,eAAe,IAAI,OAAO,CAAC,CAAC,CAAC;CAoE9C"}
@@ -0,0 +1,137 @@
1
+ import { choiceToDict, isSeparator, parseChoice } from "../choice.js";
2
+ import { InvalidChoiceError, PromptAbortedError, ValidationError } from "../errors.js";
3
+ import { runListPrompt } from "../terminal.js";
4
+ import { ansi, getTheme, RESET } from "../theme.js";
5
+ import { BasePrompt } from "./base.js";
6
+ export class SelectPrompt extends BasePrompt {
7
+ items;
8
+ choices;
9
+ pageSize;
10
+ loop;
11
+ constructor(config) {
12
+ super(config);
13
+ if (!config.choices.length)
14
+ throw new InvalidChoiceError("choices cannot be empty");
15
+ this.items = config.choices.map(parseChoice);
16
+ this.choices = this.items.filter((c) => !isSeparator(c));
17
+ if (!this.choices.some((c) => !c.disabled)) {
18
+ throw new InvalidChoiceError("choices must contain at least one selectable item");
19
+ }
20
+ this.pageSize = config.pageSize ?? 10;
21
+ this.loop = config.loop ?? true;
22
+ }
23
+ get promptType() {
24
+ return "select";
25
+ }
26
+ validateAnswer(value) {
27
+ for (const c of this.choices) {
28
+ if (c.disabled)
29
+ continue;
30
+ if (value === c.value || value === c.name)
31
+ return c.value;
32
+ }
33
+ const valid = this.choices.filter((c) => !c.disabled).map((c) => c.value);
34
+ throw new ValidationError(`Invalid choice: ${JSON.stringify(value)}. Valid: ${JSON.stringify(valid)}`);
35
+ }
36
+ formatAnswer(value) {
37
+ for (const c of this.choices) {
38
+ if (c.value === value)
39
+ return c.short ?? c.name;
40
+ }
41
+ return String(value);
42
+ }
43
+ toAgentDict() {
44
+ return { ...super.toAgentDict(), choices: this.items.map(choiceToDict) };
45
+ }
46
+ selectableIndices() {
47
+ return this.items.reduce((acc, item, i) => {
48
+ if (!isSeparator(item) && !item.disabled)
49
+ acc.push(i);
50
+ return acc;
51
+ }, []);
52
+ }
53
+ moveCursor(current, direction) {
54
+ const indices = this.selectableIndices();
55
+ let pos = indices.indexOf(current);
56
+ if (pos === -1)
57
+ return indices[0];
58
+ pos += direction;
59
+ if (this.loop) {
60
+ pos = ((pos % indices.length) + indices.length) % indices.length;
61
+ }
62
+ else {
63
+ pos = Math.max(0, Math.min(pos, indices.length - 1));
64
+ }
65
+ return indices[pos];
66
+ }
67
+ async executeTerminal() {
68
+ const t = getTheme();
69
+ const indices = this.selectableIndices();
70
+ let cursor = indices[0];
71
+ if (this.defaultValue != null) {
72
+ for (let i = 0; i < this.items.length; i++) {
73
+ const item = this.items[i];
74
+ if (!isSeparator(item) && !item.disabled && (item.value === this.defaultValue || item.name === String(this.defaultValue))) {
75
+ cursor = i;
76
+ break;
77
+ }
78
+ }
79
+ }
80
+ const getItems = () => {
81
+ const total = this.items.length;
82
+ const ps = Math.min(this.pageSize, total);
83
+ const start = Math.max(0, Math.min(cursor - Math.floor(ps / 2), total - ps));
84
+ const end = start + ps;
85
+ const result = [];
86
+ if (start > 0)
87
+ result.push({ text: ` ${ansi(t.muted)}(more above)${RESET}`, style: "" });
88
+ for (let i = start; i < end; i++) {
89
+ const item = this.items[i];
90
+ if (isSeparator(item)) {
91
+ result.push({ text: ` ${item.text}`, style: ansi(t.muted) });
92
+ }
93
+ else if (item.disabled) {
94
+ const reason = typeof item.disabled === "string" ? ` (${item.disabled})` : "";
95
+ result.push({ text: ` ${item.name}${reason} (disabled)`, style: ansi(t.muted) });
96
+ }
97
+ else if (i === cursor) {
98
+ const desc = item.description ? ` - ${item.description}` : "";
99
+ result.push({ text: `${t.symPointer} ${item.name}${desc}`, style: ansi(t.highlight) });
100
+ }
101
+ else {
102
+ result.push({ text: ` ${item.name}`, style: "" });
103
+ }
104
+ }
105
+ if (end < total)
106
+ result.push({ text: ` ${ansi(t.muted)}(more below)${RESET}`, style: "" });
107
+ return result;
108
+ };
109
+ const raw = await runListPrompt({
110
+ message: this.message,
111
+ getItems,
112
+ onKey: (key) => {
113
+ if (key === "up" || key === "k") {
114
+ cursor = this.moveCursor(cursor, -1);
115
+ return { done: false };
116
+ }
117
+ if (key === "down" || key === "j") {
118
+ cursor = this.moveCursor(cursor, 1);
119
+ return { done: false };
120
+ }
121
+ if (key === "enter") {
122
+ const item = this.items[cursor];
123
+ if (!isSeparator(item))
124
+ return { done: true, result: item.value };
125
+ return { done: false };
126
+ }
127
+ if (key === "ctrl-c")
128
+ return { done: true, result: null };
129
+ return { done: false };
130
+ },
131
+ });
132
+ if (raw === null)
133
+ throw new PromptAbortedError("Prompt aborted by user");
134
+ return raw;
135
+ }
136
+ }
137
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/prompts/select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type BaseConfig, BasePrompt } from "./base.js";
2
+ export interface TextConfig extends BaseConfig<string> {
3
+ default?: string | null;
4
+ }
5
+ export declare class TextPrompt extends BasePrompt<string> {
6
+ get promptType(): string;
7
+ protected validateAnswer(value: unknown): string;
8
+ protected executeTerminal(): Promise<string>;
9
+ }
10
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/prompts/text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,UAAW,SAAQ,UAAU,CAAC,MAAM,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,qBAAa,UAAW,SAAQ,UAAU,CAAC,MAAM,CAAC;IAEhD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;cAKhC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;CAOnD"}
@@ -0,0 +1,21 @@
1
+ import { formatQuestion, readLine } from "../terminal.js";
2
+ import { BasePrompt } from "./base.js";
3
+ export class TextPrompt extends BasePrompt {
4
+ get promptType() {
5
+ return "input";
6
+ }
7
+ validateAnswer(value) {
8
+ if (value == null)
9
+ return this.defaultValue ?? "";
10
+ return String(value);
11
+ }
12
+ async executeTerminal() {
13
+ const suffix = this.defaultValue != null ? ` (${this.defaultValue})` : "";
14
+ const prompt = formatQuestion(this.message, suffix);
15
+ const result = await readLine(prompt);
16
+ if (!result && this.defaultValue != null)
17
+ return this.defaultValue;
18
+ return result;
19
+ }
20
+ }
21
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/prompts/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAmB,UAAU,EAAE,MAAM,WAAW,CAAC;AAMxD,MAAM,OAAO,UAAW,SAAQ,UAAkB;IAEhD,IAAI,UAAU;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,cAAc,CAAC,KAAc;QACrC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAES,KAAK,CAAC,eAAe;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QACnE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ export declare function readLine(prompt: string): Promise<string>;
2
+ export declare function readPassword(prompt: string, mask?: string | null): Promise<string>;
3
+ export declare function formatQuestion(message: string, suffix?: string): string;
4
+ export declare function formatSuccess(message: string, answer: string): string;
5
+ export declare function formatError(msg: string): string;
6
+ export interface ListItem {
7
+ text: string;
8
+ style: string;
9
+ }
10
+ export interface ListConfig {
11
+ message: string;
12
+ getItems: () => ListItem[];
13
+ onKey: (key: string) => {
14
+ done: false;
15
+ } | {
16
+ done: true;
17
+ result: unknown;
18
+ };
19
+ }
20
+ export declare function runListPrompt(config: ListConfig): Promise<unknown>;
21
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAIA,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9D;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDxF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAGnE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,QAAQ,EAAE,CAAC;IAC3B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3E;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAwDxE"}
@@ -0,0 +1,155 @@
1
+ import * as readline from "node:readline";
2
+ import { Writable } from "node:stream";
3
+ import { ansi, BOLD, getTheme, RESET } from "./theme.js";
4
+ export async function readLine(prompt) {
5
+ const rl = readline.createInterface({
6
+ input: process.stdin,
7
+ output: process.stderr,
8
+ terminal: true,
9
+ });
10
+ try {
11
+ return await new Promise((resolve) => {
12
+ rl.question(prompt, (answer) => resolve(answer));
13
+ });
14
+ }
15
+ finally {
16
+ rl.close();
17
+ }
18
+ }
19
+ export async function readPassword(prompt, mask) {
20
+ const mutableOutput = new Writable({
21
+ write(_chunk, _encoding, callback) {
22
+ callback();
23
+ },
24
+ });
25
+ const rl = readline.createInterface({
26
+ input: process.stdin,
27
+ output: mutableOutput,
28
+ terminal: true,
29
+ });
30
+ process.stderr.write(prompt);
31
+ return new Promise((resolve) => {
32
+ const chars = [];
33
+ process.stdin.setRawMode(true);
34
+ process.stdin.resume();
35
+ const onData = (buf) => {
36
+ const ch = buf.toString("utf8");
37
+ if (ch === "\r" || ch === "\n") {
38
+ process.stdin.setRawMode(false);
39
+ process.stdin.removeListener("data", onData);
40
+ process.stderr.write("\n");
41
+ rl.close();
42
+ resolve(chars.join(""));
43
+ return;
44
+ }
45
+ if (ch === "\x03") {
46
+ process.stdin.setRawMode(false);
47
+ process.stdin.removeListener("data", onData);
48
+ rl.close();
49
+ process.stderr.write("\n");
50
+ resolve("");
51
+ return;
52
+ }
53
+ if (ch === "\x7f" || ch === "\b") {
54
+ if (chars.length > 0) {
55
+ chars.pop();
56
+ if (mask) {
57
+ process.stderr.write("\b \b");
58
+ }
59
+ }
60
+ return;
61
+ }
62
+ chars.push(ch);
63
+ if (mask) {
64
+ process.stderr.write(mask);
65
+ }
66
+ };
67
+ process.stdin.on("data", onData);
68
+ });
69
+ }
70
+ export function formatQuestion(message, suffix = "") {
71
+ const t = getTheme();
72
+ return `${ansi(t.question)}${t.symQuestion}${RESET} ${BOLD}${message}${suffix}:${RESET} `;
73
+ }
74
+ export function formatSuccess(message, answer) {
75
+ const t = getTheme();
76
+ return `${ansi(t.success)}${t.symSuccess}${RESET} ${message} ${ansi(t.answer)}${answer}${RESET}`;
77
+ }
78
+ export function formatError(msg) {
79
+ const t = getTheme();
80
+ return `${ansi(t.error)} ${msg}${RESET}`;
81
+ }
82
+ export async function runListPrompt(config) {
83
+ const { stdin } = process;
84
+ if (!stdin.setRawMode)
85
+ throw new Error("Terminal does not support raw mode");
86
+ stdin.setRawMode(true);
87
+ stdin.resume();
88
+ stdin.setEncoding("utf8");
89
+ let renderedLines = 0;
90
+ const render = () => {
91
+ if (renderedLines > 0) {
92
+ process.stderr.write(`\x1b[${renderedLines}A`);
93
+ }
94
+ const t = getTheme();
95
+ const header = `${ansi(t.question)}${t.symQuestion}${RESET} ${BOLD}${config.message}${RESET}`;
96
+ const items = config.getItems();
97
+ const lines = [header, ...items.map((it) => `${it.style}${it.text}${RESET}`)];
98
+ for (let i = 0; i < lines.length; i++) {
99
+ process.stderr.write(`\x1b[2K${lines[i]}\n`);
100
+ }
101
+ if (renderedLines > lines.length) {
102
+ for (let i = lines.length; i < renderedLines; i++) {
103
+ process.stderr.write("\x1b[2K\n");
104
+ }
105
+ process.stderr.write(`\x1b[${renderedLines - lines.length}A`);
106
+ }
107
+ renderedLines = lines.length;
108
+ };
109
+ process.stderr.write("\x1b[?25l");
110
+ render();
111
+ return new Promise((resolve) => {
112
+ const onData = (data) => {
113
+ const key = parseKey(typeof data === "string" ? data : data.toString("utf8"));
114
+ const result = config.onKey(key);
115
+ if (result.done) {
116
+ stdin.setRawMode(false);
117
+ stdin.removeListener("data", onData);
118
+ stdin.pause();
119
+ process.stderr.write("\x1b[?25h");
120
+ if (renderedLines > 0) {
121
+ process.stderr.write(`\x1b[${renderedLines}A`);
122
+ for (let i = 0; i < renderedLines; i++) {
123
+ process.stderr.write("\x1b[2K\n");
124
+ }
125
+ process.stderr.write(`\x1b[${renderedLines}A`);
126
+ }
127
+ resolve(result.result);
128
+ }
129
+ else {
130
+ render();
131
+ }
132
+ };
133
+ stdin.on("data", onData);
134
+ });
135
+ }
136
+ function parseKey(data) {
137
+ if (data === "\x1b[A")
138
+ return "up";
139
+ if (data === "\x1b[B")
140
+ return "down";
141
+ if (data === "\r" || data === "\n")
142
+ return "enter";
143
+ if (data === " ")
144
+ return "space";
145
+ if (data === "\x03")
146
+ return "ctrl-c";
147
+ if (data === "\x1b[H" || data === "\x1b[1~")
148
+ return "home";
149
+ if (data === "\x1b[F" || data === "\x1b[4~")
150
+ return "end";
151
+ if (data.length === 1)
152
+ return data;
153
+ return "";
154
+ }
155
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}