inquirer-ai 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +2 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +44 -26
- package/dist/agent.js.map +1 -1
- package/dist/choice.d.ts +17 -0
- package/dist/choice.d.ts.map +1 -1
- package/dist/choice.js +40 -0
- package/dist/choice.js.map +1 -1
- package/dist/mode.d.ts +12 -0
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js +22 -4
- package/dist/mode.js.map +1 -1
- package/dist/prompts/base.d.ts +6 -0
- package/dist/prompts/base.d.ts.map +1 -1
- package/dist/prompts/base.js +91 -24
- package/dist/prompts/base.js.map +1 -1
- package/dist/prompts/checkbox.d.ts.map +1 -1
- package/dist/prompts/checkbox.js +7 -11
- package/dist/prompts/checkbox.js.map +1 -1
- package/dist/prompts/confirm.d.ts.map +1 -1
- package/dist/prompts/confirm.js +4 -0
- package/dist/prompts/confirm.js.map +1 -1
- package/dist/prompts/editor.d.ts +6 -0
- package/dist/prompts/editor.d.ts.map +1 -1
- package/dist/prompts/editor.js +84 -12
- package/dist/prompts/editor.js.map +1 -1
- package/dist/prompts/expand.d.ts.map +1 -1
- package/dist/prompts/expand.js +4 -1
- package/dist/prompts/expand.js.map +1 -1
- package/dist/prompts/number.d.ts.map +1 -1
- package/dist/prompts/number.js +21 -3
- package/dist/prompts/number.js.map +1 -1
- package/dist/prompts/rawlist.d.ts.map +1 -1
- package/dist/prompts/rawlist.js +18 -6
- package/dist/prompts/rawlist.js.map +1 -1
- package/dist/prompts/search.d.ts +2 -3
- package/dist/prompts/search.d.ts.map +1 -1
- package/dist/prompts/search.js +21 -52
- package/dist/prompts/search.js.map +1 -1
- package/dist/prompts/select.d.ts.map +1 -1
- package/dist/prompts/select.js +5 -3
- package/dist/prompts/select.js.map +1 -1
- package/dist/socket.d.ts +11 -3
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +310 -137
- package/dist/socket.js.map +1 -1
- package/package.json +1 -1
package/dist/agent.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare function resetAgent(): void;
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function agentNextStep(): number;
|
|
3
|
+
export declare function agentSend(payload: Record<string, unknown>, step: number): Promise<void>;
|
|
3
4
|
export declare function agentSendValidationError(message: string): void;
|
|
4
5
|
export declare function agentSendError(message: string): void;
|
|
5
6
|
export declare function getHandshakeAck(): Record<string, unknown> | null;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAYA,wBAAgB,UAAU,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAYA,wBAAgB,UAAU,IAAI,IAAI,CAcjC;AA+HD,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEhE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAkCrD"}
|
package/dist/agent.js
CHANGED
|
@@ -12,7 +12,8 @@ export function resetAgent() {
|
|
|
12
12
|
handshakeSent = false;
|
|
13
13
|
handshakeAck = null;
|
|
14
14
|
agentStep = 0;
|
|
15
|
-
|
|
15
|
+
outputFd = null;
|
|
16
|
+
outputFdResolved = false;
|
|
16
17
|
if (rl) {
|
|
17
18
|
rl.removeAllListeners();
|
|
18
19
|
rl.close();
|
|
@@ -22,24 +23,19 @@ export function resetAgent() {
|
|
|
22
23
|
waiters = [];
|
|
23
24
|
closed = false;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
+
// Resolve the configured output fd (INQUIRER_AI_FD_OUT) once. When set, output
|
|
27
|
+
// is written synchronously with fs.writeSync so data is flushed to the OS before
|
|
28
|
+
// the process can exit (R10); otherwise we fall back to process.stdout.
|
|
29
|
+
function getOutputFd() {
|
|
26
30
|
const fdOut = process.env.INQUIRER_AI_FD_OUT;
|
|
27
|
-
if (fdOut)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
try {
|
|
34
|
-
return fs.createWriteStream("", { fd });
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
38
|
-
process.stderr.write(`[inquirer-ai] Warning: failed to open fd ${fd} for output: ${msg}, falling back to stdout\n`);
|
|
39
|
-
return process.stdout;
|
|
40
|
-
}
|
|
31
|
+
if (!fdOut)
|
|
32
|
+
return null;
|
|
33
|
+
const fd = parseInt(fdOut, 10);
|
|
34
|
+
if (Number.isNaN(fd)) {
|
|
35
|
+
process.stderr.write(`[inquirer-ai] Warning: invalid INQUIRER_AI_FD_OUT="${fdOut}", falling back to stdout\n`);
|
|
36
|
+
return null;
|
|
41
37
|
}
|
|
42
|
-
return
|
|
38
|
+
return fd;
|
|
43
39
|
}
|
|
44
40
|
function getInputStream() {
|
|
45
41
|
const fdIn = process.env.INQUIRER_AI_FD_IN;
|
|
@@ -60,12 +56,27 @@ function getInputStream() {
|
|
|
60
56
|
}
|
|
61
57
|
return process.stdin;
|
|
62
58
|
}
|
|
63
|
-
let
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
59
|
+
let outputFd = null;
|
|
60
|
+
let outputFdResolved = false;
|
|
61
|
+
function writeOutput(text) {
|
|
62
|
+
if (!outputFdResolved) {
|
|
63
|
+
outputFd = getOutputFd();
|
|
64
|
+
outputFdResolved = true;
|
|
65
|
+
}
|
|
66
|
+
if (outputFd !== null) {
|
|
67
|
+
// Synchronous write: guarantees the line reaches the OS before any exit so
|
|
68
|
+
// a buffered fd stream cannot drop the final message (R10).
|
|
69
|
+
try {
|
|
70
|
+
fs.writeSync(outputFd, text);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
75
|
+
process.stderr.write(`[inquirer-ai] Warning: failed to write to fd ${outputFd}: ${msg}, falling back to stdout\n`);
|
|
76
|
+
outputFd = null;
|
|
77
|
+
}
|
|
67
78
|
}
|
|
68
|
-
|
|
79
|
+
process.stdout.write(text);
|
|
69
80
|
}
|
|
70
81
|
function ensureRL() {
|
|
71
82
|
if (rl)
|
|
@@ -92,7 +103,7 @@ function ensureRL() {
|
|
|
92
103
|
});
|
|
93
104
|
}
|
|
94
105
|
function writeLine(data) {
|
|
95
|
-
|
|
106
|
+
writeOutput(`${JSON.stringify(data)}\n`);
|
|
96
107
|
}
|
|
97
108
|
function sendHandshake() {
|
|
98
109
|
if (handshakeSent)
|
|
@@ -124,12 +135,19 @@ function readLine() {
|
|
|
124
135
|
waiters.push(resolve);
|
|
125
136
|
});
|
|
126
137
|
}
|
|
127
|
-
|
|
138
|
+
// Advance the logical prompt counter by one and return the new step value.
|
|
139
|
+
// Called ONCE per logical prompt; validation re-sends reuse the returned value
|
|
140
|
+
// by passing it to agentSend(), so a re-sent prompt keeps the same step (the
|
|
141
|
+
// "step" must be identical for a prompt and all of its validation re-sends).
|
|
142
|
+
export function agentNextStep() {
|
|
143
|
+
agentStep++;
|
|
144
|
+
return agentStep;
|
|
145
|
+
}
|
|
146
|
+
export async function agentSend(payload, step) {
|
|
128
147
|
if (!handshakeSent) {
|
|
129
148
|
sendHandshake();
|
|
130
149
|
}
|
|
131
|
-
|
|
132
|
-
writeLine({ kind: "prompt", step: agentStep, total: null, ...payload });
|
|
150
|
+
writeLine({ kind: "prompt", step, total: null, ...payload });
|
|
133
151
|
}
|
|
134
152
|
export function agentSendValidationError(message) {
|
|
135
153
|
writeLine({ kind: "validation_error", message });
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,YAAY,GAAmC,IAAI,CAAC;AACxD,IAAI,EAAE,GAA8B,IAAI,CAAC;AACzC,IAAI,UAAU,GAAa,EAAE,CAAC;AAC9B,IAAI,OAAO,GAAyC,EAAE,CAAC;AACvD,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,MAAM,UAAU,UAAU;IACxB,aAAa,GAAG,KAAK,CAAC;IACtB,YAAY,GAAG,IAAI,CAAC;IACpB,SAAS,GAAG,CAAC,CAAC;IACd,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/choice.d.ts
CHANGED
|
@@ -12,6 +12,23 @@ export interface Separator {
|
|
|
12
12
|
export type ChoiceItem<V = unknown> = Choice<V> | Separator;
|
|
13
13
|
export type RawChoice<V = unknown> = string | Choice<V> | Separator;
|
|
14
14
|
export declare function isSeparator(item: ChoiceItem): item is Separator;
|
|
15
|
+
/**
|
|
16
|
+
* Type-aware value matching (R4). An answer matches a choice's value only if it
|
|
17
|
+
* has the same JSON type and value. JS strict equality already refuses to
|
|
18
|
+
* cross-match types (`"42" !== 42`, `true !== 1`, `0 !== false`), so we never
|
|
19
|
+
* string-coerce. Arrays/objects are compared structurally via canonical JSON.
|
|
20
|
+
*/
|
|
21
|
+
export declare function valuesMatch(a: unknown, b: unknown): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Build the canonical "Invalid choice" validation message shared across the
|
|
24
|
+
* select / checkbox / rawlist / expand prompts. The rejected answer and each
|
|
25
|
+
* valid option are encoded as compact JSON, and the valid options are joined by
|
|
26
|
+
* ", " (comma + single space). This string is byte-identical across all four
|
|
27
|
+
* language implementations (conformance parity), e.g.
|
|
28
|
+
* Invalid choice: "rs". Valid: ["py", "go"]
|
|
29
|
+
* Invalid choice: 1.5. Valid: ["313", "311"]
|
|
30
|
+
*/
|
|
31
|
+
export declare function invalidChoiceMessage(answer: unknown, validValues: unknown[]): string;
|
|
15
32
|
export declare function createSeparator(text?: string): Separator;
|
|
16
33
|
export declare function parseChoice<V = unknown>(raw: RawChoice<V>): ChoiceItem<V>;
|
|
17
34
|
export declare function choiceToDict(item: ChoiceItem): Record<string, unknown>;
|
package/dist/choice.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choice.d.ts","sourceRoot":"","sources":["../src/choice.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,OAAO;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAEpE,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,IAAI,SAAS,CAE/D;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAa,GAAG,SAAS,CAE5D;AAED,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"choice.d.ts","sourceRoot":"","sources":["../src/choice.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,OAAO;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAEpE,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,IAAI,SAAS,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAa3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAGpF;AAED,wBAAgB,eAAe,CAAC,IAAI,SAAa,GAAG,SAAS,CAE5D;AAED,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAezE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAStE"}
|
package/dist/choice.js
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
export function isSeparator(item) {
|
|
2
2
|
return "type" in item && item.type === "separator";
|
|
3
3
|
}
|
|
4
|
+
/**
|
|
5
|
+
* Type-aware value matching (R4). An answer matches a choice's value only if it
|
|
6
|
+
* has the same JSON type and value. JS strict equality already refuses to
|
|
7
|
+
* cross-match types (`"42" !== 42`, `true !== 1`, `0 !== false`), so we never
|
|
8
|
+
* string-coerce. Arrays/objects are compared structurally via canonical JSON.
|
|
9
|
+
*/
|
|
10
|
+
export function valuesMatch(a, b) {
|
|
11
|
+
if (a === b)
|
|
12
|
+
return true;
|
|
13
|
+
// Distinguish primitives strictly: only fall back to structural comparison
|
|
14
|
+
// when both sides are non-null objects of the same kind.
|
|
15
|
+
if (typeof a !== "object" || typeof b !== "object" || a === null || b === null) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (Array.isArray(a) !== Array.isArray(b))
|
|
19
|
+
return false;
|
|
20
|
+
try {
|
|
21
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build the canonical "Invalid choice" validation message shared across the
|
|
29
|
+
* select / checkbox / rawlist / expand prompts. The rejected answer and each
|
|
30
|
+
* valid option are encoded as compact JSON, and the valid options are joined by
|
|
31
|
+
* ", " (comma + single space). This string is byte-identical across all four
|
|
32
|
+
* language implementations (conformance parity), e.g.
|
|
33
|
+
* Invalid choice: "rs". Valid: ["py", "go"]
|
|
34
|
+
* Invalid choice: 1.5. Valid: ["313", "311"]
|
|
35
|
+
*/
|
|
36
|
+
export function invalidChoiceMessage(answer, validValues) {
|
|
37
|
+
const valid = validValues.map((v) => JSON.stringify(v)).join(", ");
|
|
38
|
+
return `Invalid choice: ${JSON.stringify(answer)}. Valid: [${valid}]`;
|
|
39
|
+
}
|
|
4
40
|
export function createSeparator(text = "────────") {
|
|
5
41
|
return { type: "separator", text };
|
|
6
42
|
}
|
|
@@ -14,6 +50,10 @@ export function parseChoice(raw) {
|
|
|
14
50
|
if ("type" in raw && raw.type === "separator") {
|
|
15
51
|
return raw;
|
|
16
52
|
}
|
|
53
|
+
// A choice with a missing value defaults its value to its name (R4).
|
|
54
|
+
if (!("value" in raw) || raw.value === undefined) {
|
|
55
|
+
return { ...raw, value: raw.name };
|
|
56
|
+
}
|
|
17
57
|
return raw;
|
|
18
58
|
}
|
|
19
59
|
export function choiceToDict(item) {
|
package/dist/choice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choice.js","sourceRoot":"","sources":["../src/choice.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,OAAO,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAI,GAAG,UAAU;IAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAc,GAAiB;IACxD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,iEAAiE;QACjE,qEAAqE;QACrE,mDAAmD;QACnD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAQ,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,CAAC,GAA4B,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1E,IAAI,IAAI,CAAC,QAAQ;QAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC9C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7C,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;QAAE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/D,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
1
|
+
{"version":3,"file":"choice.js","sourceRoot":"","sources":["../src/choice.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,OAAO,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,CAAU,EAAE,CAAU;IAChD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,2EAA2E;IAC3E,yDAAyD;IACzD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAe,EAAE,WAAsB;IAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,OAAO,mBAAmB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,KAAK,GAAG,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAI,GAAG,UAAU;IAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAc,GAAiB;IACxD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,iEAAiE;QACjE,qEAAqE;QACrE,mDAAmD;QACnD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAQ,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,qEAAqE;IACrE,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,IAAK,GAAiB,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,EAAE,GAAI,GAAiB,EAAE,KAAK,EAAG,GAAiB,CAAC,IAAoB,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,CAAC,GAA4B,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1E,IAAI,IAAI,CAAC,QAAQ;QAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC9C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7C,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;QAAE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/D,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/mode.d.ts
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
|
+
/** True if INQUIRER_AI_MODE == "human" (case-insensitive). */
|
|
2
|
+
export declare function isHumanMode(): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* A socket transport is requested when INQUIRER_AI_SOCKET is set & non-empty,
|
|
5
|
+
* OR INQUIRER_AI_MODE == "agent" (case-insensitive) (R3).
|
|
6
|
+
*/
|
|
7
|
+
export declare function isSocketRequested(): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Agent (non-interactive) mode. is_agent = (not human) AND
|
|
10
|
+
* (socket_requested OR stdin-is-not-a-TTY). A plain piped non-TTY with no
|
|
11
|
+
* MODE/SOCKET stays in agent (stdio) mode for backwards compatibility (R3).
|
|
12
|
+
*/
|
|
1
13
|
export declare function isAgentMode(): boolean;
|
|
2
14
|
//# sourceMappingURL=mode.d.ts.map
|
package/dist/mode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAIrC"}
|
package/dist/mode.js
CHANGED
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
import * as tty from "node:tty";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/** True if INQUIRER_AI_MODE == "human" (case-insensitive). */
|
|
3
|
+
export function isHumanMode() {
|
|
4
|
+
return (process.env.INQUIRER_AI_MODE ?? "").toLowerCase() === "human";
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* A socket transport is requested when INQUIRER_AI_SOCKET is set & non-empty,
|
|
8
|
+
* OR INQUIRER_AI_MODE == "agent" (case-insensitive) (R3).
|
|
9
|
+
*/
|
|
10
|
+
export function isSocketRequested() {
|
|
11
|
+
const sock = process.env.INQUIRER_AI_SOCKET;
|
|
12
|
+
if (sock !== undefined && sock !== "")
|
|
5
13
|
return true;
|
|
6
|
-
|
|
14
|
+
return (process.env.INQUIRER_AI_MODE ?? "").toLowerCase() === "agent";
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Agent (non-interactive) mode. is_agent = (not human) AND
|
|
18
|
+
* (socket_requested OR stdin-is-not-a-TTY). A plain piped non-TTY with no
|
|
19
|
+
* MODE/SOCKET stays in agent (stdio) mode for backwards compatibility (R3).
|
|
20
|
+
*/
|
|
21
|
+
export function isAgentMode() {
|
|
22
|
+
if (isHumanMode())
|
|
7
23
|
return false;
|
|
24
|
+
if (isSocketRequested())
|
|
25
|
+
return true;
|
|
8
26
|
return !tty.isatty(0);
|
|
9
27
|
}
|
|
10
28
|
//# sourceMappingURL=mode.js.map
|
package/dist/mode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,MAAM,UAAU,WAAW;IACzB,
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,8DAA8D;AAC9D,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC5C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,WAAW,EAAE;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,iBAAiB,EAAE;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC"}
|
package/dist/prompts/base.d.ts
CHANGED
|
@@ -20,6 +20,12 @@ export declare abstract class BasePrompt<T> {
|
|
|
20
20
|
protected abstract validateAnswer(value: unknown): T;
|
|
21
21
|
protected formatAnswer(value: T): string;
|
|
22
22
|
protected toAgentDict(): Record<string, unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* Async variant of {@link toAgentDict}. Defaults to the synchronous payload,
|
|
25
|
+
* but prompts with async-resolved data (e.g. search with an async source)
|
|
26
|
+
* override this so the socket transport advertises the resolved payload (R6).
|
|
27
|
+
*/
|
|
28
|
+
protected buildAgentDict(): Promise<Record<string, unknown>>;
|
|
23
29
|
protected executeAgent(): Promise<T>;
|
|
24
30
|
protected runUserValidation(value: T): string | null;
|
|
25
31
|
execute(): Promise<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/prompts/base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/prompts/base.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAC9E,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1C,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;AAEpD,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CAChC;AAED,8BAAsB,UAAU,CAAC,CAAC;IAChC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjC,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;gBAE/B,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAQjC,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,CAAC,CAAC;IAChD,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAEpD,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAIxC,SAAS,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQhD;;;;OAIG;cACa,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;cAIlD,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC;IAyE1C,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI;IAe9C,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;CA4D5B"}
|
package/dist/prompts/base.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { agentReceive, agentSend, agentSendValidationError } from "../agent.js";
|
|
1
|
+
import { agentNextStep, agentReceive, agentSend, agentSendError, agentSendValidationError, } from "../agent.js";
|
|
2
2
|
import { PromptAbortedError, ValidationError } from "../errors.js";
|
|
3
3
|
import { isAgentMode } from "../mode.js";
|
|
4
4
|
import { getSocketTransport } from "../socket.js";
|
|
@@ -27,29 +27,87 @@ export class BasePrompt {
|
|
|
27
27
|
default: this.defaultValue,
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Async variant of {@link toAgentDict}. Defaults to the synchronous payload,
|
|
32
|
+
* but prompts with async-resolved data (e.g. search with an async source)
|
|
33
|
+
* override this so the socket transport advertises the resolved payload (R6).
|
|
34
|
+
*/
|
|
35
|
+
async buildAgentDict() {
|
|
36
|
+
return this.toAgentDict();
|
|
37
|
+
}
|
|
30
38
|
async executeAgent() {
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
// Single unified budget: MAX_AGENT_RETRIES total answer attempts per prompt.
|
|
40
|
+
// Type-coercion validation AND user validate() failures share this counter,
|
|
41
|
+
// mirroring the socket transport's promptCycle (R1).
|
|
42
|
+
const dict = await this.buildAgentDict();
|
|
43
|
+
// Advance the logical prompt counter ONCE; every re-send within this retry
|
|
44
|
+
// loop reuses the same step value so a prompt and all of its validation
|
|
45
|
+
// re-sends share an identical "step".
|
|
46
|
+
const step = agentNextStep();
|
|
47
|
+
for (let attempt = 1; attempt <= MAX_AGENT_RETRIES; attempt++) {
|
|
48
|
+
await agentSend(dict, step);
|
|
33
49
|
let answer;
|
|
34
50
|
try {
|
|
35
51
|
answer = await agentReceive();
|
|
36
52
|
}
|
|
37
53
|
catch (err) {
|
|
54
|
+
// Empty line / EOF / closed stdin / malformed protocol line = immediate
|
|
55
|
+
// fatal abort (not a retry); emit a fatal error frame (R1).
|
|
38
56
|
const msg = err instanceof Error ? err.message : String(err);
|
|
57
|
+
agentSendError(msg);
|
|
39
58
|
if (msg.includes("stdin closed"))
|
|
40
59
|
throw new PromptAbortedError(msg);
|
|
41
60
|
throw new ValidationError(msg);
|
|
42
61
|
}
|
|
62
|
+
let result;
|
|
43
63
|
try {
|
|
44
|
-
|
|
64
|
+
result = this.validateAnswer(answer);
|
|
45
65
|
}
|
|
46
66
|
catch (err) {
|
|
47
|
-
if (err instanceof ValidationError
|
|
48
|
-
|
|
49
|
-
|
|
67
|
+
if (err instanceof ValidationError) {
|
|
68
|
+
// Attempts 1 & 2 -> validation_error; attempt 3 -> fatal error (R1).
|
|
69
|
+
if (attempt < MAX_AGENT_RETRIES) {
|
|
70
|
+
agentSendValidationError(err.message);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
agentSendError(err.message);
|
|
50
74
|
}
|
|
51
75
|
throw err;
|
|
52
76
|
}
|
|
77
|
+
// User validation runs on the coerced value and shares the same unified
|
|
78
|
+
// budget as type coercion (R1, R11). A validate() that RETURNS a
|
|
79
|
+
// string/false, or THROWS a ValidationError, is a retryable validation
|
|
80
|
+
// failure. A validate() that THROWS a non-ValidationError is fatal: it is
|
|
81
|
+
// reported as {"kind":"error"} and re-thrown (R10).
|
|
82
|
+
if (this.validateFn) {
|
|
83
|
+
let error = null;
|
|
84
|
+
try {
|
|
85
|
+
const r = this.validateFn(result);
|
|
86
|
+
if (typeof r === "string")
|
|
87
|
+
error = r;
|
|
88
|
+
else if (r === false)
|
|
89
|
+
error = "Validation failed";
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
if (err instanceof ValidationError) {
|
|
93
|
+
error = err.message;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
97
|
+
agentSendError(msg);
|
|
98
|
+
throw new ValidationError(msg);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (error) {
|
|
102
|
+
if (attempt < MAX_AGENT_RETRIES) {
|
|
103
|
+
agentSendValidationError(error);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
agentSendError(error);
|
|
107
|
+
throw new ValidationError(error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
53
111
|
}
|
|
54
112
|
// Should not reach here, but satisfy TypeScript
|
|
55
113
|
throw new ValidationError("Maximum validation retries exceeded");
|
|
@@ -77,14 +135,33 @@ export class BasePrompt {
|
|
|
77
135
|
// Socket transport takes priority when available
|
|
78
136
|
const transport = getSocketTransport();
|
|
79
137
|
if (transport) {
|
|
80
|
-
|
|
138
|
+
const dict = await this.buildAgentDict();
|
|
139
|
+
return transport.promptCycle({ kind: "prompt", ...dict }, (value) => this.validateAnswer(value), this.filterFn ?? null, this.validateFn ?? null);
|
|
81
140
|
}
|
|
82
141
|
const agent = isAgentMode();
|
|
83
|
-
|
|
142
|
+
if (agent) {
|
|
143
|
+
// executeAgent runs type coercion AND user validation under a single
|
|
144
|
+
// unified retry budget (R1). Filter is applied only on the accepted value.
|
|
145
|
+
let result;
|
|
146
|
+
try {
|
|
147
|
+
result = await this.executeAgent();
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
if (err instanceof PromptAbortedError)
|
|
151
|
+
throw err;
|
|
152
|
+
if (err instanceof ValidationError)
|
|
153
|
+
throw err;
|
|
154
|
+
throw new PromptAbortedError("Prompt aborted (stdin closed)");
|
|
155
|
+
}
|
|
156
|
+
if (this.filterFn) {
|
|
157
|
+
result = this.filterFn(result);
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
84
161
|
while (true) {
|
|
85
162
|
let result;
|
|
86
163
|
try {
|
|
87
|
-
result =
|
|
164
|
+
result = await this.executeTerminal();
|
|
88
165
|
}
|
|
89
166
|
catch (err) {
|
|
90
167
|
if (err instanceof PromptAbortedError)
|
|
@@ -95,26 +172,16 @@ export class BasePrompt {
|
|
|
95
172
|
}
|
|
96
173
|
const error = this.runUserValidation(result);
|
|
97
174
|
if (error) {
|
|
98
|
-
if (agent) {
|
|
99
|
-
userValidationRetries++;
|
|
100
|
-
if (userValidationRetries > MAX_AGENT_RETRIES) {
|
|
101
|
-
throw new ValidationError(error);
|
|
102
|
-
}
|
|
103
|
-
agentSendValidationError(error);
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
175
|
process.stderr.write(`${formatError(error)}\n`);
|
|
107
176
|
continue;
|
|
108
177
|
}
|
|
109
178
|
if (this.filterFn) {
|
|
110
179
|
result = this.filterFn(result);
|
|
111
180
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
process.stderr.write(`${formatSuccess(this.message, display)}\n`);
|
|
117
|
-
}
|
|
181
|
+
const display = this.transformerFn
|
|
182
|
+
? this.transformerFn(result)
|
|
183
|
+
: this.formatAnswer(result);
|
|
184
|
+
process.stderr.write(`${formatSuccess(this.message, display)}\n`);
|
|
118
185
|
return result;
|
|
119
186
|
}
|
|
120
187
|
}
|
package/dist/prompts/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/prompts/base.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/prompts/base.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,cAAc,EACd,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAc5B,MAAM,OAAgB,UAAU;IACpB,OAAO,CAAS;IAChB,YAAY,CAAW;IACvB,UAAU,CAAiB;IAC3B,QAAQ,CAAe;IACvB,aAAa,CAAoB;IAE3C,YAAY,MAAqB;QAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC;IAC1C,CAAC;IAMS,YAAY,CAAC,KAAQ;QAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAES,WAAW;QACnB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,YAAY;SAC3B,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,cAAc;QAC5B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAES,KAAK,CAAC,YAAY;QAC1B,6EAA6E;QAC7E,4EAA4E;QAC5E,qDAAqD;QACrD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,2EAA2E;QAC3E,wEAAwE;QACxE,sCAAsC;QACtC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,iBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9D,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,wEAAwE;gBACxE,4DAA4D;gBAC5D,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,cAAc,CAAC,GAAG,CAAC,CAAC;gBACpB,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAAE,MAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBACpE,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,MAAS,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;oBACnC,qEAAqE;oBACrE,IAAI,OAAO,GAAG,iBAAiB,EAAE,CAAC;wBAChC,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBACtC,SAAS;oBACX,CAAC;oBACD,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,wEAAwE;YACxE,iEAAiE;YACjE,uEAAuE;YACvE,0EAA0E;YAC1E,oDAAoD;YACpD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,GAAkB,IAAI,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAClC,IAAI,OAAO,CAAC,KAAK,QAAQ;wBAAE,KAAK,GAAG,CAAC,CAAC;yBAChC,IAAI,CAAC,KAAK,KAAK;wBAAE,KAAK,GAAG,mBAAmB,CAAC;gBACpD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;wBACnC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;oBACtB,CAAC;yBAAM,CAAC;wBACN,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC7D,cAAc,CAAC,GAAG,CAAC,CAAC;wBACpB,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;gBACD,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,OAAO,GAAG,iBAAiB,EAAE,CAAC;wBAChC,wBAAwB,CAAC,KAAK,CAAC,CAAC;wBAChC,SAAS;oBACX,CAAC;oBACD,cAAc,CAAC,KAAK,CAAC,CAAC;oBACtB,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,gDAAgD;QAChD,MAAM,IAAI,eAAe,CAAC,qCAAqC,CAAC,CAAC;IACnE,CAAC;IAES,iBAAiB,CAAC,KAAQ;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,MAA2C,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,MAAM,GAAG,CAAC;YAC9C,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5E,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;QAC9C,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,iDAAiD;QACjD,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC,WAAW,CAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAC3B,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAC9C,IAAI,CAAC,QAAQ,IAAI,IAAI,EACrB,IAAI,CAAC,UAAU,IAAI,IAAI,CACxB,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAE5B,IAAI,KAAK,EAAE,CAAC;YACV,qEAAqE;YACrE,2EAA2E;YAC3E,IAAI,MAAS,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,kBAAkB;oBAAE,MAAM,GAAG,CAAC;gBACjD,IAAI,GAAG,YAAY,eAAe;oBAAE,MAAM,GAAG,CAAC;gBAC9C,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,MAAS,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,kBAAkB;oBAAE,MAAM,GAAG,CAAC;gBACjD,IAAI,GAAG,YAAY,eAAe;oBAAE,MAAM,GAAG,CAAC;gBAC9C,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa;gBAChC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBAC5B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAElE,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/prompts/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/prompts/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8F,KAAK,SAAS,EAAe,MAAM,cAAc,CAAC;AAIvJ,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,UAAU,CAAC,CAAC,EAAE,CAAC;IAClE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED,qBAAa,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,UAAU,CAAC,CAAC,EAAE,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,QAAQ,CAAmB;gBAEvB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAarC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE;IAuB7C,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM;cAKvB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzD,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,UAAU;cAeF,eAAe,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;CAuFhD"}
|
package/dist/prompts/checkbox.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { choiceToDict, isSeparator, parseChoice } from "../choice.js";
|
|
1
|
+
import { choiceToDict, invalidChoiceMessage, isSeparator, parseChoice, valuesMatch } from "../choice.js";
|
|
2
2
|
import { InvalidChoiceError, PromptAbortedError, ValidationError } from "../errors.js";
|
|
3
3
|
import { runListPrompt } from "../terminal.js";
|
|
4
4
|
import { ansi, getTheme, RESET } from "../theme.js";
|
|
@@ -29,20 +29,16 @@ export class CheckboxPrompt extends BasePrompt {
|
|
|
29
29
|
if (!Array.isArray(value))
|
|
30
30
|
throw new ValidationError(`Expected an array, got ${typeof value}`);
|
|
31
31
|
const enabled = this.choices.filter((c) => !c.disabled);
|
|
32
|
-
const validValues =
|
|
33
|
-
const validNames = new Set(enabled.map((c) => c.name));
|
|
32
|
+
const validValues = enabled.map((c) => c.value);
|
|
34
33
|
const result = [];
|
|
35
34
|
for (const v of value) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const match = enabled.find((c) => c.name === v);
|
|
41
|
-
if (match)
|
|
42
|
-
result.push(match.value);
|
|
35
|
+
// Type-aware value match OR exact string-name match; never string-coerce (R4).
|
|
36
|
+
const match = enabled.find((c) => valuesMatch(v, c.value) || (typeof v === "string" && v === c.name));
|
|
37
|
+
if (match) {
|
|
38
|
+
result.push(match.value);
|
|
43
39
|
}
|
|
44
40
|
else {
|
|
45
|
-
throw new ValidationError(
|
|
41
|
+
throw new ValidationError(invalidChoiceMessage(v, validValues));
|
|
46
42
|
}
|
|
47
43
|
}
|
|
48
44
|
if (this.required && result.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/prompts/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/prompts/checkbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/prompts/confirm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,aAAc,SAAQ,UAAU,CAAC,OAAO,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,aAAc,SAAQ,UAAU,CAAC,OAAO,CAAC;gBACxC,MAAM,EAAE,aAAa;IAIjC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/prompts/confirm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,aAAc,SAAQ,UAAU,CAAC,OAAO,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,aAAc,SAAQ,UAAU,CAAC,OAAO,CAAC;gBACxC,MAAM,EAAE,aAAa;IAIjC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAcjD,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;cAI9B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;CAYpD"}
|