@duyquangnvx/agent-cli 0.3.0 → 0.5.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/CHANGELOG.md +68 -0
- package/dist/agent-cli.d.ts +2 -2
- package/dist/agent-cli.js +1 -1
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent.d.ts +5 -3
- package/dist/agent.js +31 -10
- package/dist/agent.js.map +1 -1
- package/dist/built-ins.d.ts +6 -1
- package/dist/built-ins.js +3 -3
- package/dist/built-ins.js.map +1 -1
- package/dist/command-spec.d.ts +5 -0
- package/dist/command-spec.js +14 -3
- package/dist/command-spec.js.map +1 -1
- package/dist/confirm.js +6 -2
- package/dist/confirm.js.map +1 -1
- package/dist/context.d.ts +102 -0
- package/dist/context.js +2 -0
- package/dist/context.js.map +1 -0
- package/dist/cost.js +2 -2
- package/dist/cost.js.map +1 -1
- package/dist/define.d.ts +42 -75
- package/dist/define.js +6 -1
- package/dist/define.js.map +1 -1
- package/dist/doctor-rows.d.ts +2 -1
- package/dist/doctor-rows.js +18 -10
- package/dist/doctor-rows.js.map +1 -1
- package/dist/doctor.d.ts +2 -1
- package/dist/doctor.js +29 -18
- package/dist/doctor.js.map +1 -1
- package/dist/errno.d.ts +11 -4
- package/dist/errno.js +34 -7
- package/dist/errno.js.map +1 -1
- package/dist/errors.d.ts +2 -1
- package/dist/errors.js +4 -0
- package/dist/errors.js.map +1 -1
- package/dist/execute.d.ts +9 -4
- package/dist/execute.js +10 -3
- package/dist/execute.js.map +1 -1
- package/dist/exit-classes.js +5 -1
- package/dist/exit-classes.js.map +1 -1
- package/dist/files.d.ts +42 -3
- package/dist/files.js +132 -10
- package/dist/files.js.map +1 -1
- package/dist/flags.d.ts +5 -1
- package/dist/flags.js +17 -2
- package/dist/flags.js.map +1 -1
- package/dist/help-json.d.ts +1 -1
- package/dist/help-json.js +4 -1
- package/dist/help-json.js.map +1 -1
- package/dist/help.d.ts +1 -1
- package/dist/help.js +11 -7
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +10 -0
- package/dist/input.js +54 -3
- package/dist/input.js.map +1 -1
- package/dist/interrupts.d.ts +3 -1
- package/dist/interrupts.js +4 -3
- package/dist/interrupts.js.map +1 -1
- package/dist/invocation.d.ts +10 -5
- package/dist/invocation.js +24 -11
- package/dist/invocation.js.map +1 -1
- package/dist/list.js +5 -2
- package/dist/list.js.map +1 -1
- package/dist/npm.d.ts +5 -2
- package/dist/npm.js +23 -31
- package/dist/npm.js.map +1 -1
- package/dist/operator.d.ts +5 -0
- package/dist/operator.js +15 -0
- package/dist/operator.js.map +1 -0
- package/dist/output.d.ts +4 -1
- package/dist/output.js +4 -0
- package/dist/output.js.map +1 -1
- package/dist/outputs.d.ts +24 -1
- package/dist/outputs.js +58 -2
- package/dist/outputs.js.map +1 -1
- package/dist/parse-input.d.ts +11 -2
- package/dist/parse-input.js +92 -19
- package/dist/parse-input.js.map +1 -1
- package/dist/planned.d.ts +6 -0
- package/dist/planned.js +5 -0
- package/dist/planned.js.map +1 -0
- package/dist/project.d.ts +1 -1
- package/dist/route.d.ts +1 -1
- package/dist/route.js +2 -1
- package/dist/route.js.map +1 -1
- package/dist/run-cli.d.ts +16 -2
- package/dist/run-cli.js +116 -58
- package/dist/run-cli.js.map +1 -1
- package/dist/run-process.js +3 -2
- package/dist/run-process.js.map +1 -1
- package/dist/secrets.d.ts +9 -2
- package/dist/secrets.js +7 -5
- package/dist/secrets.js.map +1 -1
- package/dist/skill-source.d.ts +4 -0
- package/dist/skill-source.js +42 -0
- package/dist/skill-source.js.map +1 -0
- package/dist/skills.d.ts +2 -1
- package/dist/skills.js +4 -0
- package/dist/skills.js.map +1 -1
- package/dist/spawn.d.ts +22 -5
- package/dist/spawn.js +126 -29
- package/dist/spawn.js.map +1 -1
- package/dist/spill.d.ts +4 -3
- package/dist/spill.js +1 -2
- package/dist/spill.js.map +1 -1
- package/dist/stdin.d.ts +13 -0
- package/dist/stdin.js +55 -0
- package/dist/stdin.js.map +1 -0
- package/dist/style.d.ts +1 -1
- package/dist/tokenize.d.ts +3 -0
- package/dist/tokenize.js +5 -4
- package/dist/tokenize.js.map +1 -1
- package/dist/tools.d.ts +6 -3
- package/dist/tools.js +18 -11
- package/dist/tools.js.map +1 -1
- package/dist/update.d.ts +2 -1
- package/dist/update.js +3 -3
- package/dist/update.js.map +1 -1
- package/package.json +1 -1
package/dist/parse-input.js
CHANGED
|
@@ -3,11 +3,12 @@ import { UsageError } from "./errors.js";
|
|
|
3
3
|
import { CONFIRM_FLAG, DRY_RUN_FLAG, FORCE_FLAG, HELP_FLAG, VERSION_FLAG, YES_FLAG, } from "./flags.js";
|
|
4
4
|
import { commandLineRenaming } from "./invocation.js";
|
|
5
5
|
import { PAGE_INPUT, selectedFields } from "./list.js";
|
|
6
|
+
import { STDIN_OPERAND } from "./stdin.js";
|
|
6
7
|
import { closestFlag } from "./suggest.js";
|
|
7
8
|
import { tokenize } from "./tokenize.js";
|
|
8
9
|
import { INVALID_INPUT, invalidInputError, unknownOptionError } from "./usage.js";
|
|
9
10
|
const NO_INPUT = z.object({});
|
|
10
|
-
function knownFlags(spec) {
|
|
11
|
+
export function knownFlags(spec) {
|
|
11
12
|
return [
|
|
12
13
|
...spec.options.map((field) => ({
|
|
13
14
|
flag: field.label,
|
|
@@ -25,8 +26,12 @@ function unknownOptionsOf(words, candidates) {
|
|
|
25
26
|
return { flag, suggestion: closestFlag(flag, candidates) };
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
|
-
// A `--no-` switch turns its option off.
|
|
29
|
-
function optionValue(field,
|
|
29
|
+
// A `--no-` switch turns its option off; a repeated scalar flag keeps its last value.
|
|
30
|
+
function optionValue(field, all) {
|
|
31
|
+
if (field.variadic) {
|
|
32
|
+
return variadicValue(field, (all ?? []).filter((value) => value !== true));
|
|
33
|
+
}
|
|
34
|
+
const raw = all?.[all.length - 1];
|
|
30
35
|
return field.type === "boolean" && raw === true && field.label === `--no-${field.name}`
|
|
31
36
|
? false
|
|
32
37
|
: raw;
|
|
@@ -34,19 +39,26 @@ function optionValue(field, raw) {
|
|
|
34
39
|
// Strings that read as numbers are converted so authors can write `z.number()`; anything else
|
|
35
40
|
// stays a string for Zod to reject with the caller's own value.
|
|
36
41
|
function converted(field, raw) {
|
|
42
|
+
if (Array.isArray(raw)) {
|
|
43
|
+
return raw.map((element) => converted(field, element));
|
|
44
|
+
}
|
|
37
45
|
if (field.type !== "number" || typeof raw !== "string" || raw.trim() === "") {
|
|
38
46
|
return raw;
|
|
39
47
|
}
|
|
40
48
|
const number = Number(raw);
|
|
41
49
|
return Number.isNaN(number) ? raw : number;
|
|
42
50
|
}
|
|
51
|
+
// No values for an optional array leave it out, so its default applies.
|
|
52
|
+
function variadicValue(field, values) {
|
|
53
|
+
return values.length === 0 && !field.required ? undefined : values;
|
|
54
|
+
}
|
|
43
55
|
function parse(schema, values) {
|
|
44
56
|
const input = Object.fromEntries([...values]
|
|
45
57
|
.filter(([, raw]) => raw !== undefined)
|
|
46
58
|
.map(([field, raw]) => [field.key, converted(field, raw)]));
|
|
47
59
|
return schema.safeParse(input);
|
|
48
60
|
}
|
|
49
|
-
function issueLines(result, values, howToPass, reported) {
|
|
61
|
+
function issueLines(result, values, { howToPass, arrayIssueLine, reported = [], fromStdin }) {
|
|
50
62
|
if (result.success) {
|
|
51
63
|
return [];
|
|
52
64
|
}
|
|
@@ -59,11 +71,37 @@ function issueLines(result, values, howToPass, reported) {
|
|
|
59
71
|
return [];
|
|
60
72
|
}
|
|
61
73
|
const raw = values.get(field);
|
|
62
|
-
|
|
63
|
-
|
|
74
|
+
if (raw === undefined) {
|
|
75
|
+
return [` ${field.label}: required, ${howToPass(field)}`];
|
|
76
|
+
}
|
|
77
|
+
// Text from stdin may be long, so it is named by where it came from instead of quoted.
|
|
78
|
+
if (field === fromStdin) {
|
|
79
|
+
return [` ${field.label} from stdin: ${issue.message}`];
|
|
80
|
+
}
|
|
81
|
+
return Array.isArray(raw)
|
|
82
|
+
? [arrayIssueLine(field, raw, issue)]
|
|
64
83
|
: [` ${field.label} ${JSON.stringify(raw)}: ${issue.message}`];
|
|
65
84
|
});
|
|
66
85
|
}
|
|
86
|
+
function flagValuesIssueLine(field, raw, issue) {
|
|
87
|
+
const [, element] = issue.path;
|
|
88
|
+
if (typeof element === "number") {
|
|
89
|
+
return ` ${field.label} ${JSON.stringify(raw[element])}: ${issue.message}`;
|
|
90
|
+
}
|
|
91
|
+
return raw.length === 0
|
|
92
|
+
? ` ${field.label}: ${issue.message}, pass ${field.usage}`
|
|
93
|
+
: ` ${field.label} ${JSON.stringify(raw)}: ${issue.message}`;
|
|
94
|
+
}
|
|
95
|
+
// `first` is the 1-based position of the field's first operand on the command line.
|
|
96
|
+
function operandsIssueLine(field, raw, issue, first) {
|
|
97
|
+
const [, element] = issue.path;
|
|
98
|
+
if (typeof element === "number") {
|
|
99
|
+
return ` ${field.label} ${JSON.stringify(raw[element])} (argument ${first + element}): ${issue.message}`;
|
|
100
|
+
}
|
|
101
|
+
return raw.length === 0
|
|
102
|
+
? ` ${field.label}: ${issue.message}, pass them as arguments from ${first}`
|
|
103
|
+
: ` ${field.label} ${JSON.stringify(raw)}: ${issue.message}`;
|
|
104
|
+
}
|
|
67
105
|
function unknownLine({ flag, suggestion }) {
|
|
68
106
|
return ` unknown option '${flag}'${suggestion === undefined ? "" : ` (did you mean ${suggestion}?)`}`;
|
|
69
107
|
}
|
|
@@ -82,21 +120,50 @@ function invalidInput(commandLine, invocation, unknown, otherLines) {
|
|
|
82
120
|
: `run \`${commandLine} --help\` to see the expected input`,
|
|
83
121
|
});
|
|
84
122
|
}
|
|
85
|
-
function
|
|
123
|
+
async function stdinTextOf(spec, operands, read) {
|
|
124
|
+
const index = spec.args.findIndex((field) => field.stdin);
|
|
125
|
+
const field = spec.args[index];
|
|
126
|
+
if (field === undefined || operands[index]?.value !== STDIN_OPERAND)
|
|
127
|
+
return undefined;
|
|
128
|
+
return { field, text: await read(field) };
|
|
129
|
+
}
|
|
130
|
+
async function parseInput(spec, words, invocation, readStdin) {
|
|
86
131
|
const { command, args: argFields, options: optionFields } = spec;
|
|
87
132
|
const pageFields = spec.list?.pageFields ?? [];
|
|
88
133
|
const known = knownFlags(spec);
|
|
89
|
-
const { operands, unknownOptions, values } = tokenize(words, known);
|
|
134
|
+
const { operands, unknownOptions, values, occurrences } = tokenize(words, known);
|
|
135
|
+
const stdin = await stdinTextOf(spec, operands, readStdin);
|
|
90
136
|
if (values.get(CONFIRM_FLAG.flag) === true) {
|
|
91
137
|
throw invalidInputError(spec.commandLine, `option '${CONFIRM_FLAG.usage}' argument missing`);
|
|
92
138
|
}
|
|
93
139
|
// A value option given without a value is collected as `true`.
|
|
94
|
-
const missing = [...optionFields, ...pageFields].filter((field) => field.type !== "boolean" &&
|
|
95
|
-
|
|
140
|
+
const missing = [...optionFields, ...pageFields].filter((field) => field.type !== "boolean" &&
|
|
141
|
+
(field.variadic
|
|
142
|
+
? occurrences.get(field.label)?.includes(true)
|
|
143
|
+
: values.get(field.label) === true));
|
|
144
|
+
const argValue = (field, index) => {
|
|
145
|
+
if (field === stdin?.field)
|
|
146
|
+
return stdin.text;
|
|
147
|
+
if (!field.variadic)
|
|
148
|
+
return operands[index]?.value;
|
|
149
|
+
return variadicValue(field, operands
|
|
150
|
+
.slice(index)
|
|
151
|
+
.filter((operand) => !operand.afterUnknownOption)
|
|
152
|
+
.map((operand) => operand.value));
|
|
153
|
+
};
|
|
154
|
+
const argValues = new Map(argFields.map((field, index) => [field, argValue(field, index)]));
|
|
155
|
+
const extraOperands = argFields.some((field) => field.variadic)
|
|
156
|
+
? []
|
|
157
|
+
: operands.slice(argFields.length);
|
|
96
158
|
const valuesOf = (fields) => new Map(fields.map((field) => [
|
|
97
159
|
field,
|
|
98
|
-
missing.includes(field) ? undefined : optionValue(field,
|
|
160
|
+
missing.includes(field) ? undefined : optionValue(field, occurrences.get(field.label)),
|
|
99
161
|
]));
|
|
162
|
+
const flagWording = {
|
|
163
|
+
howToPass: (field) => `pass ${field.usage}`,
|
|
164
|
+
arrayIssueLine: flagValuesIssueLine,
|
|
165
|
+
reported: missing,
|
|
166
|
+
};
|
|
100
167
|
const optionValues = valuesOf(optionFields);
|
|
101
168
|
const pageValues = valuesOf(pageFields);
|
|
102
169
|
const args = parse(command.args ?? NO_INPUT, argValues);
|
|
@@ -105,14 +172,17 @@ function parseInput(spec, words, invocation) {
|
|
|
105
172
|
const unknown = unknownOptionsOf(unknownOptions, candidateFlags(known));
|
|
106
173
|
const otherLines = [
|
|
107
174
|
...missing.map((field) => ` ${field.label}: missing value, pass ${field.usage}`),
|
|
108
|
-
...
|
|
109
|
-
.slice(argFields.length)
|
|
175
|
+
...extraOperands
|
|
110
176
|
// A word right after an unknown flag may be its value, so it isn't an extra arg.
|
|
111
177
|
.filter((operand) => !operand.afterUnknownOption)
|
|
112
178
|
.map((operand) => ` unexpected argument ${JSON.stringify(operand.value)}`),
|
|
113
|
-
...issueLines(args, argValues,
|
|
114
|
-
|
|
115
|
-
|
|
179
|
+
...issueLines(args, argValues, {
|
|
180
|
+
howToPass: (field) => `pass it as argument ${argFields.indexOf(field) + 1}`,
|
|
181
|
+
arrayIssueLine: (field, raw, issue) => operandsIssueLine(field, raw, issue, argFields.indexOf(field) + 1),
|
|
182
|
+
fromStdin: stdin?.field,
|
|
183
|
+
}),
|
|
184
|
+
...issueLines(options, optionValues, flagWording),
|
|
185
|
+
...issueLines(page, pageValues, flagWording),
|
|
116
186
|
];
|
|
117
187
|
if (unknown.length === 0 &&
|
|
118
188
|
otherLines.length === 0 &&
|
|
@@ -127,9 +197,12 @@ function parseInput(spec, words, invocation) {
|
|
|
127
197
|
}
|
|
128
198
|
throw invalidInput(spec.commandLine, invocation, unknown, otherLines);
|
|
129
199
|
}
|
|
130
|
-
/**
|
|
131
|
-
|
|
132
|
-
|
|
200
|
+
/**
|
|
201
|
+
* The validated input and Standard flag values of the routed Command, or one usage error; the arg
|
|
202
|
+
* given `-` takes its text from `readStdin`.
|
|
203
|
+
*/
|
|
204
|
+
export async function parseCommand({ spec, words, json }, invocation, readStdin) {
|
|
205
|
+
const { input, page, values } = await parseInput(spec, words, invocation, readStdin);
|
|
133
206
|
const confirm = values.get(CONFIRM_FLAG.flag);
|
|
134
207
|
return {
|
|
135
208
|
input,
|
package/dist/parse-input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-input.js","sourceRoot":"","sources":["../src/parse-input.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-input.js","sourceRoot":"","sources":["../src/parse-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Command } from "./define.js";
|
|
2
|
+
export type PlannedCommand = Extract<Command, {
|
|
3
|
+
readonly effect: "write" | "destructive";
|
|
4
|
+
}>;
|
|
5
|
+
/** Whether `command` changes something through a Plan: a write or destructive Command. */
|
|
6
|
+
export declare function hasPlan(command: Command): command is PlannedCommand;
|
package/dist/planned.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planned.js","sourceRoot":"","sources":["../src/planned.ts"],"names":[],"mappings":"AAIA,0FAA0F;AAC1F,MAAM,UAAU,OAAO,CAAC,OAAgB;IACtC,OAAO,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC;AACxE,CAAC"}
|
package/dist/project.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Project, ProjectFile } from "./
|
|
1
|
+
import type { Project, ProjectFile } from "./context.js";
|
|
2
2
|
export declare const PROJECT_INVALID = "PROJECT_INVALID";
|
|
3
3
|
/** The nearest Project file at or above `cwd`, parsed by its schema; undefined when there is none. */
|
|
4
4
|
export declare function projectOf<Settings>(projectFile: ProjectFile<Settings>, cwd: string): Project<Settings> | undefined;
|
package/dist/route.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type CommandSpec, type SpecNode } from "./command-spec.js";
|
|
2
2
|
import type { UsageError } from "./errors.js";
|
|
3
3
|
import { type Invocation } from "./invocation.js";
|
|
4
4
|
/** Where the command line leads; `json` is set when the caller passed `--json` before any `--`. */
|
package/dist/route.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { visibleCommands, } from "./command-spec.js";
|
|
1
2
|
import { HELP_FLAG, HELP_SHORT, JSON_FLAG, VERSION_FLAG } from "./flags.js";
|
|
2
3
|
import { END_OF_OPTIONS } from "./invocation.js";
|
|
3
4
|
import { closestFlags, closestNames } from "./suggest.js";
|
|
@@ -54,7 +55,7 @@ function walk(node, words, json, invocation) {
|
|
|
54
55
|
return unknownCommand(node, first, json);
|
|
55
56
|
}
|
|
56
57
|
function unknownCommand(group, name, json) {
|
|
57
|
-
const suggestions = closestNames(name, Object.keys(group
|
|
58
|
+
const suggestions = closestNames(name, Object.keys(visibleCommands(group)));
|
|
58
59
|
return {
|
|
59
60
|
kind: "usage error",
|
|
60
61
|
error: unknownCommandError(group.commandLine, name, suggestions),
|
package/dist/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAmB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErE,kFAAkF;AAClF,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AAuB9D,SAAS,SAAS,CAAC,KAAwB;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,KAAwB;IACzC,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,OAAO,CAAC,KAAgB,EAAE,IAAY;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,4EAA4E;AAC5E,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,IAAI,CACX,IAAc,EACd,KAAwB,EACxB,IAAa,EACb,UAAsB;IAEtB,MAAM,IAAI,GAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IACD,yEAAyE;IACzE,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACnF,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,KAAgB,EAAE,IAAY,EAAE,IAAa;IACnE,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC;QAChE,IAAI,EAAE,KAAK;QACX,IAAI;KACL,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,KAAK,CAAC,IAAc,EAAE,UAAsB;IAC1D,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;IAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/run-cli.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type Clock } from "./clock.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { Env } from "./context.js";
|
|
3
|
+
import type { Cli, NoPorts } from "./define.js";
|
|
3
4
|
import { type Files } from "./files.js";
|
|
4
5
|
import { type RunResult } from "./output.js";
|
|
5
6
|
import { type Spawn } from "./spawn.js";
|
|
7
|
+
import { type StdinSource } from "./stdin.js";
|
|
6
8
|
export interface RunOptions<Ports = NoPorts> {
|
|
7
9
|
readonly env: Env;
|
|
8
10
|
readonly cwd: string;
|
|
@@ -17,6 +19,11 @@ export interface RunOptions<Ports = NoPorts> {
|
|
|
17
19
|
* global install. Absent, the CLI counts as run from source.
|
|
18
20
|
*/
|
|
19
21
|
readonly bin?: string;
|
|
22
|
+
/**
|
|
23
|
+
* The Node running the CLI, as `process.execPath`; `doctor` and `update` run the npm beside it,
|
|
24
|
+
* which installs into that Node. Absent, or with no npm beside it, they run the npm on PATH.
|
|
25
|
+
*/
|
|
26
|
+
readonly node?: string;
|
|
20
27
|
/** Replaces the ports the CLI's factory builds, for a test. */
|
|
21
28
|
readonly ports?: Ports;
|
|
22
29
|
/** Replaces the real clock, for a test that runs deadlines and waits instantly. */
|
|
@@ -25,6 +32,13 @@ export interface RunOptions<Ports = NoPorts> {
|
|
|
25
32
|
readonly files?: Files;
|
|
26
33
|
/** Replaces the real child processes, for a test of a tool that fails. */
|
|
27
34
|
readonly spawn?: Spawn;
|
|
35
|
+
/** What an arg given `-` reads; absent, it reads an empty text. */
|
|
36
|
+
readonly stdin?: StdinSource;
|
|
37
|
+
/**
|
|
38
|
+
* Replaces `process.platform` in picking the wording of hints, such as `PERMISSION_DENIED`'s and
|
|
39
|
+
* how to end stdin, for a test of the Windows wording.
|
|
40
|
+
*/
|
|
41
|
+
readonly platform?: NodeJS.Platform;
|
|
28
42
|
}
|
|
29
43
|
/** Where output that cannot wait for the run's end is written as it happens. */
|
|
30
44
|
export interface Writers {
|
|
@@ -32,4 +46,4 @@ export interface Writers {
|
|
|
32
46
|
stderr(text: string): void;
|
|
33
47
|
}
|
|
34
48
|
export declare function runCli<Ports, Settings>(cli: Cli<Ports, Settings>, argv: readonly string[], options: RunOptions<NoInfer<Ports>>): Promise<RunResult>;
|
|
35
|
-
export declare function runWithProgress(cli: Cli, argv: readonly string[], options: RunOptions<unknown>, write: Writers): Promise<RunResult>;
|
|
49
|
+
export declare function runWithProgress(cli: Cli, argv: readonly string[], options: RunOptions<unknown>, write: Writers, stopNotice?: string): Promise<RunResult>;
|
package/dist/run-cli.js
CHANGED
|
@@ -1,90 +1,95 @@
|
|
|
1
|
-
import { resolve } from "node:path";
|
|
2
1
|
import { isAgent } from "./agent.js";
|
|
3
2
|
import { builtInCommands } from "./built-ins.js";
|
|
4
3
|
import { poll, realClock } from "./clock.js";
|
|
5
4
|
import { commandSpec, groupSpec } from "./command-spec.js";
|
|
6
|
-
import {
|
|
5
|
+
import { fileErrorOf } from "./errno.js";
|
|
7
6
|
import { deliveredOutcome, execute } from "./execute.js";
|
|
8
|
-
import { realFiles } from "./files.js";
|
|
7
|
+
import { classifiedFiles, realFiles } from "./files.js";
|
|
9
8
|
import { RunControl } from "./interrupts.js";
|
|
10
9
|
import { commandLineOf } from "./invocation.js";
|
|
11
|
-
import {
|
|
10
|
+
import { checkOperator } from "./operator.js";
|
|
11
|
+
import { commandResult, errorResult, helpResult, progressLine, STOPPED_RESULT, startedOutput, textHelp, versionResult, } from "./output.js";
|
|
12
|
+
import { outputsGuard } from "./outputs.js";
|
|
12
13
|
import { packageRootOf } from "./package-root.js";
|
|
13
|
-
import { parseCommand } from "./parse-input.js";
|
|
14
|
+
import { knownFlags, parseCommand } from "./parse-input.js";
|
|
14
15
|
import { projectOf } from "./project.js";
|
|
15
16
|
import { route } from "./route.js";
|
|
16
17
|
import { secretOf } from "./secrets.js";
|
|
17
18
|
import { contextSpawn, realSpawn } from "./spawn.js";
|
|
18
19
|
import { spillTo } from "./spill.js";
|
|
20
|
+
import { isTerminal, readingLine, readStdin } from "./stdin.js";
|
|
19
21
|
import { styleFor } from "./style.js";
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return {
|
|
23
|
-
exists: async (path) => {
|
|
24
|
-
const target = resolve(base.cwd, path);
|
|
25
|
-
try {
|
|
26
|
-
return await files.exists(target);
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
throw classifyErrno(error, { path: target, callerLine, env: base.env });
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
write: async (path, data) => {
|
|
33
|
-
const target = resolve(base.cwd, path);
|
|
34
|
-
try {
|
|
35
|
-
await files.write(target, data);
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
throw classifyErrno(error, { path: target, callerLine, env: base.env });
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
};
|
|
22
|
+
function stdinNeverEndedHint(callerLine) {
|
|
23
|
+
return `stdin never ended: pipe the text into \`${callerLine}\`, or redirect a file into it`;
|
|
42
24
|
}
|
|
43
|
-
async function runCommand(routed, { base, writeStdout, signal, format: baseFormat, ports, clock, files, spawn, projectFile }) {
|
|
25
|
+
async function runCommand(routed, { base, writeStdout, signal, format: baseFormat, ports, clock, files, spawn, projectFile, stdin, platform, }) {
|
|
44
26
|
const { command, commandLine } = routed.spec;
|
|
45
|
-
const
|
|
46
|
-
const { invocation }
|
|
27
|
+
const invocation = { ...baseFormat.invocation, flags: knownFlags(routed.spec) };
|
|
28
|
+
const format = { ...baseFormat, json: routed.json, invocation };
|
|
29
|
+
const typedLine = (change) => commandLineOf(invocation, change);
|
|
30
|
+
// Set once the input is parsed; a deadline before that can only have cut off the stdin read.
|
|
31
|
+
let resumeHint;
|
|
32
|
+
// Created before the input is parsed, so Ctrl-C and the run deadline also bound the stdin read.
|
|
33
|
+
const control = new RunControl({
|
|
34
|
+
commandLine,
|
|
35
|
+
outer: signal,
|
|
36
|
+
clock,
|
|
37
|
+
progress: base.progress,
|
|
38
|
+
runDeadline: command.deadline === undefined
|
|
39
|
+
? undefined
|
|
40
|
+
: {
|
|
41
|
+
ms: command.deadline.ms,
|
|
42
|
+
hint: () => resumeHint ?? stdinNeverEndedHint(typedLine()),
|
|
43
|
+
},
|
|
44
|
+
});
|
|
47
45
|
let parsed;
|
|
48
46
|
let project;
|
|
49
47
|
try {
|
|
50
|
-
|
|
48
|
+
checkOperator(routed.spec, base.env, typedLine());
|
|
49
|
+
parsed = await parseCommand(routed, invocation, (field) => {
|
|
50
|
+
if (isTerminal(stdin))
|
|
51
|
+
base.progress(readingLine(field.name, platform));
|
|
52
|
+
return readStdin(stdin, control.signal);
|
|
53
|
+
});
|
|
51
54
|
project = projectFile === undefined ? undefined : projectOf(projectFile, base.cwd);
|
|
52
55
|
}
|
|
53
56
|
catch (error) {
|
|
57
|
+
control.close();
|
|
54
58
|
return errorResult(error, format);
|
|
55
59
|
}
|
|
56
60
|
const { input, flags } = parsed;
|
|
57
|
-
|
|
58
|
-
commandLine,
|
|
59
|
-
outer: signal,
|
|
60
|
-
clock,
|
|
61
|
-
progress: base.progress,
|
|
62
|
-
runDeadline: command.deadline === undefined
|
|
63
|
-
? undefined
|
|
64
|
-
: { ms: command.deadline.ms, hint: command.deadline.resume(input) },
|
|
65
|
-
});
|
|
61
|
+
resumeHint = command.deadline?.resume(input, typedLine);
|
|
66
62
|
let delivered;
|
|
67
|
-
const
|
|
68
|
-
const
|
|
63
|
+
const { fileError } = base;
|
|
64
|
+
const outputs = outputsGuard(classifiedFiles(files, { cwd: base.cwd, fileError }), base.cwd);
|
|
69
65
|
const spill = spillTo({
|
|
70
66
|
cliName: format.cliName,
|
|
71
67
|
commandName: command.name,
|
|
72
68
|
env: base.env,
|
|
73
69
|
clock,
|
|
74
|
-
files:
|
|
75
|
-
|
|
70
|
+
files: outputs.files,
|
|
71
|
+
fileError,
|
|
76
72
|
});
|
|
77
|
-
const
|
|
73
|
+
const portsBase = {
|
|
78
74
|
...base,
|
|
79
75
|
signal: control.signal,
|
|
76
|
+
clock,
|
|
77
|
+
files: outputs.files,
|
|
78
|
+
spawn: contextSpawn(spawn, { cwd: base.cwd, env: base.env, signal: control.signal, progress: base.progress }, fileError),
|
|
79
|
+
};
|
|
80
|
+
const builtPorts = once(() => ports(portsBase));
|
|
81
|
+
const ctx = {
|
|
82
|
+
...portsBase,
|
|
80
83
|
deadline: (ms) => control.deadline(ms),
|
|
81
84
|
runToEnd: (name, work) => control.runToEnd(name, work),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
// Built on first read, so a factory that throws fails only what needs the ports, never `doctor`.
|
|
86
|
+
get ports() {
|
|
87
|
+
return builtPorts();
|
|
88
|
+
},
|
|
86
89
|
project,
|
|
87
|
-
|
|
90
|
+
force: flags.force,
|
|
91
|
+
commandLine: typedLine,
|
|
92
|
+
poll: (check, { intervalMs, signal: stop }) => poll(clock, check, intervalMs, stop === undefined ? control.signal : AbortSignal.any([control.signal, stop])),
|
|
88
93
|
deliver: (data) => {
|
|
89
94
|
delivered = deliveredOutcome(command, data);
|
|
90
95
|
},
|
|
@@ -96,7 +101,6 @@ async function runCommand(routed, { base, writeStdout, signal, format: baseForma
|
|
|
96
101
|
dryRun: flags.dryRun,
|
|
97
102
|
confirm: flags.confirm,
|
|
98
103
|
yes: flags.yes,
|
|
99
|
-
force: flags.force,
|
|
100
104
|
page: flags.page,
|
|
101
105
|
invocation,
|
|
102
106
|
commandLine,
|
|
@@ -104,6 +108,8 @@ async function runCommand(routed, { base, writeStdout, signal, format: baseForma
|
|
|
104
108
|
writeStdout(await startedOutput(outcome, format, spill));
|
|
105
109
|
served = true;
|
|
106
110
|
},
|
|
111
|
+
files,
|
|
112
|
+
guardOutputs: outputs.guard,
|
|
107
113
|
}));
|
|
108
114
|
settled = { ok: true, outcome };
|
|
109
115
|
}
|
|
@@ -119,6 +125,23 @@ async function runCommand(routed, { base, writeStdout, signal, format: baseForma
|
|
|
119
125
|
}
|
|
120
126
|
return commandResult(settled, { ...format, fields: flags.fields }, spill);
|
|
121
127
|
}
|
|
128
|
+
/** `build` runs on the first call; later calls give its value or throw its error again. */
|
|
129
|
+
function once(build) {
|
|
130
|
+
let outcome;
|
|
131
|
+
return () => {
|
|
132
|
+
if (outcome === undefined) {
|
|
133
|
+
try {
|
|
134
|
+
outcome = { ok: true, value: build() };
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
outcome = { ok: false, error };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (outcome.ok)
|
|
141
|
+
return outcome.value;
|
|
142
|
+
throw outcome.error;
|
|
143
|
+
};
|
|
144
|
+
}
|
|
122
145
|
export async function runCli(cli, argv, options) {
|
|
123
146
|
const stdout = [];
|
|
124
147
|
const stderr = [];
|
|
@@ -132,28 +155,55 @@ export async function runCli(cli, argv, options) {
|
|
|
132
155
|
stderr: stderr.join("") + result.stderr,
|
|
133
156
|
};
|
|
134
157
|
}
|
|
158
|
+
function selfOf(name, bin) {
|
|
159
|
+
return bin === undefined ? [name] : [process.execPath, ...process.execArgv, bin];
|
|
160
|
+
}
|
|
135
161
|
function portsOf(cli, replacement) {
|
|
136
162
|
if (replacement !== undefined)
|
|
137
163
|
return () => replacement;
|
|
138
164
|
return cli.ports ?? (() => ({}));
|
|
139
165
|
}
|
|
166
|
+
// Without --json, the leading newline moves the notice off the terminal's echoed ^C.
|
|
167
|
+
function stopLine(notice, json) {
|
|
168
|
+
return json ? progressLine(notice, true) : `\n${notice}\n`;
|
|
169
|
+
}
|
|
170
|
+
/** Calls `onStop` if `signal` aborts while `work` runs. */
|
|
171
|
+
async function whileStopping(signal, onStop, work) {
|
|
172
|
+
if (signal === undefined || onStop === undefined)
|
|
173
|
+
return work();
|
|
174
|
+
signal.addEventListener("abort", onStop, { once: true });
|
|
175
|
+
try {
|
|
176
|
+
return await work();
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
signal.removeEventListener("abort", onStop);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
140
182
|
// Progress is written as it happens: a Coding agent kills a process that stays silent too long.
|
|
141
183
|
// A serve Command's data is too, since the caller uses it while the Command runs.
|
|
142
|
-
export async function runWithProgress(cli, argv, options, write) {
|
|
184
|
+
export async function runWithProgress(cli, argv, options, write, stopNotice) {
|
|
143
185
|
const format = {
|
|
144
186
|
cliName: cli.name,
|
|
145
187
|
env: options.env,
|
|
146
188
|
style: styleFor(options.env, options.stdoutIsTTY === true),
|
|
147
|
-
invocation: { cliName: cli.name, argv },
|
|
189
|
+
invocation: { cliName: cli.name, argv, flags: [] },
|
|
148
190
|
json: false,
|
|
149
191
|
errors: cli.errors ?? {},
|
|
150
192
|
stop: options.signal,
|
|
151
193
|
};
|
|
152
|
-
const builtIns = cli.commands === undefined
|
|
194
|
+
const builtIns = cli.commands === undefined
|
|
195
|
+
? {}
|
|
196
|
+
: builtInCommands(cli, { bin: options.bin, node: options.node });
|
|
153
197
|
const root = cli.commands === undefined
|
|
154
198
|
? commandSpec(cli.name, cli.command)
|
|
155
199
|
: groupSpec(cli.name, { ...cli.commands, ...builtIns });
|
|
156
200
|
const routed = route(root, format.invocation);
|
|
201
|
+
const platform = options.platform ?? process.platform;
|
|
202
|
+
const fileError = fileErrorOf({
|
|
203
|
+
callerLine: commandLineOf(format.invocation),
|
|
204
|
+
env: options.env,
|
|
205
|
+
platform,
|
|
206
|
+
});
|
|
157
207
|
const misused = (node) => isAgent(options.env)
|
|
158
208
|
? { ...format, usageHelp: textHelp(node, root, cli, format.style) }
|
|
159
209
|
: format;
|
|
@@ -165,13 +215,19 @@ export async function runWithProgress(cli, argv, options, write) {
|
|
|
165
215
|
case "usage error":
|
|
166
216
|
return errorResult(routed.error, { ...misused(routed.node), json: routed.json });
|
|
167
217
|
case "command":
|
|
168
|
-
return
|
|
218
|
+
return whileStopping(options.signal, stopNotice === undefined
|
|
219
|
+
? undefined
|
|
220
|
+
: () => write.stderr(stopLine(stopNotice, routed.json)), () => runCommand(routed, {
|
|
169
221
|
base: {
|
|
170
222
|
cwd: options.cwd,
|
|
171
223
|
env: options.env,
|
|
172
224
|
packageRoot: packageRootOf(options.bin, options.cwd),
|
|
173
|
-
progress: (message) => write.stderr(
|
|
174
|
-
secret: (name) => secretOf(cli.name, options.env, name),
|
|
225
|
+
progress: (message) => write.stderr(progressLine(message, routed.json)),
|
|
226
|
+
secret: (name) => secretOf({ cliName: cli.name, env: options.env, fileError }, name),
|
|
227
|
+
fileError,
|
|
228
|
+
version: cli.version,
|
|
229
|
+
build: cli.build,
|
|
230
|
+
self: selfOf(cli.name, options.bin),
|
|
175
231
|
},
|
|
176
232
|
writeStdout: (text) => write.stdout(text),
|
|
177
233
|
signal: options.signal,
|
|
@@ -184,7 +240,9 @@ export async function runWithProgress(cli, argv, options, write) {
|
|
|
184
240
|
projectFile: Object.values(builtIns).includes(routed.spec.command)
|
|
185
241
|
? undefined
|
|
186
242
|
: cli.project,
|
|
187
|
-
|
|
243
|
+
stdin: options.stdin ?? "",
|
|
244
|
+
platform,
|
|
245
|
+
}));
|
|
188
246
|
}
|
|
189
247
|
}
|
|
190
248
|
//# sourceMappingURL=run-cli.js.map
|