@duyquangnvx/agent-cli 0.2.1 → 0.4.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 +71 -0
- package/dist/abort.d.ts +2 -0
- package/dist/abort.js +11 -0
- package/dist/abort.js.map +1 -0
- package/dist/agent-cli.d.ts +17 -0
- package/dist/agent-cli.js +28 -0
- package/dist/agent-cli.js.map +1 -0
- package/dist/agent.d.ts +4 -0
- package/dist/agent.js +14 -0
- package/dist/agent.js.map +1 -0
- package/dist/built-ins.d.ts +1 -2
- package/dist/built-ins.js +0 -10
- package/dist/built-ins.js.map +1 -1
- package/dist/clock.d.ts +10 -0
- package/dist/clock.js +35 -0
- package/dist/clock.js.map +1 -0
- package/dist/command-spec.js +12 -1
- package/dist/command-spec.js.map +1 -1
- package/dist/confirm.d.ts +2 -0
- package/dist/confirm.js +4 -2
- package/dist/confirm.js.map +1 -1
- package/dist/cost.d.ts +9 -0
- package/dist/cost.js +16 -0
- package/dist/cost.js.map +1 -0
- package/dist/define.d.ts +145 -32
- package/dist/define.js +9 -2
- package/dist/define.js.map +1 -1
- package/dist/doctor-rows.d.ts +2 -2
- package/dist/doctor-rows.js +45 -5
- package/dist/doctor-rows.js.map +1 -1
- package/dist/doctor.d.ts +2 -1
- package/dist/doctor.js +31 -29
- package/dist/doctor.js.map +1 -1
- package/dist/errno.d.ts +15 -0
- package/dist/errno.js +50 -0
- package/dist/errno.js.map +1 -0
- package/dist/error-table.d.ts +34 -0
- package/dist/error-table.js +10 -0
- package/dist/error-table.js.map +1 -0
- package/dist/errors.d.ts +17 -12
- package/dist/errors.js +59 -38
- package/dist/errors.js.map +1 -1
- package/dist/execute.d.ts +7 -3
- package/dist/execute.js +38 -5
- package/dist/execute.js.map +1 -1
- package/dist/exit-classes.d.ts +31 -0
- package/dist/exit-classes.js +108 -0
- package/dist/exit-classes.js.map +1 -0
- package/dist/files.d.ts +31 -0
- package/dist/files.js +95 -0
- package/dist/files.js.map +1 -0
- package/dist/flags.d.ts +21 -3
- package/dist/flags.js +41 -4
- package/dist/flags.js.map +1 -1
- package/dist/global-install.d.ts +1 -0
- package/dist/global-install.js +2 -2
- package/dist/global-install.js.map +1 -1
- package/dist/help-json.d.ts +2 -1
- package/dist/help-json.js +18 -2
- package/dist/help-json.js.map +1 -1
- package/dist/help.d.ts +4 -2
- package/dist/help.js +62 -6
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +4 -0
- package/dist/input.js +24 -2
- package/dist/input.js.map +1 -1
- package/dist/interrupts.d.ts +17 -3
- package/dist/interrupts.js +43 -25
- package/dist/interrupts.js.map +1 -1
- package/dist/invocation.d.ts +7 -2
- package/dist/invocation.js +11 -3
- package/dist/invocation.js.map +1 -1
- package/dist/list.d.ts +1 -0
- package/dist/list.js +4 -2
- package/dist/list.js.map +1 -1
- package/dist/npm.d.ts +5 -0
- package/dist/npm.js +19 -17
- package/dist/npm.js.map +1 -1
- package/dist/output.d.ts +18 -4
- package/dist/output.js +65 -23
- package/dist/output.js.map +1 -1
- package/dist/outputs.d.ts +11 -0
- package/dist/outputs.js +22 -0
- package/dist/outputs.js.map +1 -0
- package/dist/package-root.d.ts +6 -0
- package/dist/package-root.js +17 -0
- package/dist/package-root.js.map +1 -0
- package/dist/parse-input.d.ts +2 -0
- package/dist/parse-input.js +41 -8
- 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 +4 -0
- package/dist/project.js +48 -0
- package/dist/project.js.map +1 -0
- package/dist/route.d.ts +2 -0
- package/dist/route.js +2 -1
- package/dist/route.js.map +1 -1
- package/dist/run-cli.d.ts +24 -5
- package/dist/run-cli.js +126 -18
- package/dist/run-cli.js.map +1 -1
- package/dist/run-process.js +6 -3
- package/dist/run-process.js.map +1 -1
- package/dist/secrets.d.ts +19 -0
- package/dist/secrets.js +32 -0
- package/dist/secrets.js.map +1 -0
- package/dist/spawn.d.ts +29 -0
- package/dist/spawn.js +79 -0
- package/dist/spawn.js.map +1 -0
- package/dist/spill.d.ts +16 -0
- package/dist/spill.js +65 -0
- package/dist/spill.js.map +1 -0
- package/dist/style.js +5 -12
- package/dist/style.js.map +1 -1
- package/dist/tail.d.ts +2 -0
- package/dist/tail.js +5 -0
- package/dist/tail.js.map +1 -0
- package/dist/tools.d.ts +6 -0
- package/dist/tools.js +69 -0
- package/dist/tools.js.map +1 -0
- package/dist/update.js +7 -7
- package/dist/update.js.map +1 -1
- package/dist/usage.d.ts +3 -0
- package/dist/usage.js +6 -3
- package/dist/usage.js.map +1 -1
- package/package.json +1 -1
package/dist/run-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../src/run-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"run-cli.js","sourceRoot":"","sources":["../src/run-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/run-process.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { SIGNAL_EXIT_CODES } from "./exit-classes.js";
|
|
1
2
|
import { runWithProgress } from "./run-cli.js";
|
|
2
|
-
const SIGNAL_EXIT_CODES = { SIGINT: 130, SIGTERM: 143 };
|
|
3
3
|
function written(stream, text) {
|
|
4
4
|
return new Promise((resolve) => stream.write(text, () => resolve()));
|
|
5
5
|
}
|
|
@@ -11,7 +11,7 @@ export async function runProcess(cli) {
|
|
|
11
11
|
process.exit(SIGNAL_EXIT_CODES[signal]);
|
|
12
12
|
}
|
|
13
13
|
process.stderr.write("\nstopping… (Ctrl-C again to quit now)\n");
|
|
14
|
-
stop.abort();
|
|
14
|
+
stop.abort(signal);
|
|
15
15
|
};
|
|
16
16
|
process.on("SIGINT", onSignal);
|
|
17
17
|
process.on("SIGTERM", onSignal);
|
|
@@ -22,7 +22,10 @@ export async function runProcess(cli) {
|
|
|
22
22
|
stdoutIsTTY: process.stdout.isTTY === true,
|
|
23
23
|
signal: stop.signal,
|
|
24
24
|
bin: process.argv[1],
|
|
25
|
-
},
|
|
25
|
+
}, {
|
|
26
|
+
stdout: (text) => process.stdout.write(text),
|
|
27
|
+
stderr: (text) => process.stderr.write(text),
|
|
28
|
+
});
|
|
26
29
|
await written(process.stdout, result.stdout);
|
|
27
30
|
await written(process.stderr, result.stderr);
|
|
28
31
|
process.exitCode = result.exitCode;
|
package/dist/run-process.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-process.js","sourceRoot":"","sources":["../src/run-process.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"run-process.js","sourceRoot":"","sources":["../src/run-process.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,SAAS,OAAO,CAAC,MAA0B,EAAE,IAAY;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAQ;IACvC,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,iGAAiG;IACjG,MAAM,QAAQ,GAAG,CAAC,MAAkB,EAAQ,EAAE;QAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,GAAG,EACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACrB;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;YAC1C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SACrB,EACD;YACE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;SAC7C,CACF,CAAC;QACF,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACrC,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,mGAAmG;IACnG,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Env } from "./define.js";
|
|
2
|
+
export type SecretOrigin = {
|
|
3
|
+
readonly kind: "env";
|
|
4
|
+
} | {
|
|
5
|
+
readonly kind: "file";
|
|
6
|
+
readonly path: string;
|
|
7
|
+
};
|
|
8
|
+
export interface Secret {
|
|
9
|
+
readonly value: string;
|
|
10
|
+
readonly origin: SecretOrigin;
|
|
11
|
+
}
|
|
12
|
+
export interface SecretScope {
|
|
13
|
+
readonly cliName: string;
|
|
14
|
+
readonly env: Env;
|
|
15
|
+
/** Goes into the hint when the `.env` cannot be read. */
|
|
16
|
+
readonly callerLine: string;
|
|
17
|
+
}
|
|
18
|
+
/** Looks `name` up in the env, then in `$XDG_CONFIG_HOME/<cli>/.env`; an empty value counts as unset. */
|
|
19
|
+
export declare function secretOf({ cliName, env, callerLine }: SecretScope, name: string): Secret | undefined;
|
package/dist/secrets.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { parseEnv } from "node:util";
|
|
5
|
+
import { classifyErrno } from "./errno.js";
|
|
6
|
+
import { isMissingFile } from "./errors.js";
|
|
7
|
+
function dotenvPath(cliName, env) {
|
|
8
|
+
const config = env.XDG_CONFIG_HOME || join(env.HOME || homedir(), ".config");
|
|
9
|
+
return join(config, cliName, ".env");
|
|
10
|
+
}
|
|
11
|
+
function readDotenv(path, env, callerLine) {
|
|
12
|
+
let text;
|
|
13
|
+
try {
|
|
14
|
+
text = readFileSync(path, "utf8");
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (isMissingFile(error))
|
|
18
|
+
return {};
|
|
19
|
+
throw classifyErrno(error, { path, access: "read", callerLine, env });
|
|
20
|
+
}
|
|
21
|
+
return parseEnv(text);
|
|
22
|
+
}
|
|
23
|
+
/** Looks `name` up in the env, then in `$XDG_CONFIG_HOME/<cli>/.env`; an empty value counts as unset. */
|
|
24
|
+
export function secretOf({ cliName, env, callerLine }, name) {
|
|
25
|
+
const fromEnv = env[name];
|
|
26
|
+
if (fromEnv)
|
|
27
|
+
return { value: fromEnv, origin: { kind: "env" } };
|
|
28
|
+
const path = dotenvPath(cliName, env);
|
|
29
|
+
const fromFile = readDotenv(path, env, callerLine)[name];
|
|
30
|
+
return fromFile ? { value: fromFile, origin: { kind: "file", path } } : undefined;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAW5C,SAAS,UAAU,CAAC,OAAe,EAAE,GAAQ;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,UAAU,CACjB,IAAY,EACZ,GAAQ,EACR,UAAkB;IAElB,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AASD,yGAAyG;AACzG,MAAM,UAAU,QAAQ,CACtB,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAe,EACzC,IAAY;IAEZ,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC"}
|
package/dist/spawn.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Env } from "./define.js";
|
|
2
|
+
export declare const TOOL_FAILED = "TOOL_FAILED";
|
|
3
|
+
export interface SpawnResult {
|
|
4
|
+
readonly stdout: string;
|
|
5
|
+
readonly stderr: string;
|
|
6
|
+
readonly exitCode: number;
|
|
7
|
+
}
|
|
8
|
+
/** Runs a child process to its end; a test replaces it through `runCli`. */
|
|
9
|
+
export type Spawn = (command: string, args: readonly string[], options: {
|
|
10
|
+
readonly cwd: string;
|
|
11
|
+
readonly env: Env;
|
|
12
|
+
readonly signal: AbortSignal;
|
|
13
|
+
}) => Promise<SpawnResult>;
|
|
14
|
+
export interface SpawnOptions {
|
|
15
|
+
/** `ctx.cwd` when absent. */
|
|
16
|
+
readonly cwd?: string;
|
|
17
|
+
/** `ctx.env` when absent. */
|
|
18
|
+
readonly env?: Env;
|
|
19
|
+
/** Fails the run with `TOOL_FAILED` and the tail of the child's stderr when it exits non-zero. */
|
|
20
|
+
readonly check?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export type ContextSpawn = (command: string, args?: readonly string[], options?: SpawnOptions) => Promise<SpawnResult>;
|
|
23
|
+
export declare const realSpawn: Spawn;
|
|
24
|
+
/** `ctx.spawn`: `spawn` bound to the run, its start failures classified by errno. */
|
|
25
|
+
export declare function contextSpawn(run: Spawn, defaults: {
|
|
26
|
+
readonly cwd: string;
|
|
27
|
+
readonly env: Env;
|
|
28
|
+
readonly signal: AbortSignal;
|
|
29
|
+
}, callerLine: string): ContextSpawn;
|
package/dist/spawn.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { constants } from "node:os";
|
|
3
|
+
import { classifyErrno } from "./errno.js";
|
|
4
|
+
import { CliError, isMissingFile } from "./errors.js";
|
|
5
|
+
import { lastLines } from "./tail.js";
|
|
6
|
+
import { TOOL_MISSING } from "./tools.js";
|
|
7
|
+
export const TOOL_FAILED = "TOOL_FAILED";
|
|
8
|
+
const STDERR_TAIL_LINES = 20;
|
|
9
|
+
// A shell reports a child killed by a signal as 128 plus the signal's number.
|
|
10
|
+
const SIGNAL_EXIT_BASE = 128;
|
|
11
|
+
// The child is killed on abort, and the promise settles only once it has exited.
|
|
12
|
+
export const realSpawn = (command, args, { cwd, env, signal }) => new Promise((resolve, reject) => {
|
|
13
|
+
signal.throwIfAborted();
|
|
14
|
+
const child = spawn(command, args, { cwd, env, stdio: ["ignore", "pipe", "pipe"] });
|
|
15
|
+
const stdout = [];
|
|
16
|
+
const stderr = [];
|
|
17
|
+
child.stdout.on("data", (chunk) => stdout.push(chunk));
|
|
18
|
+
child.stderr.on("data", (chunk) => stderr.push(chunk));
|
|
19
|
+
const kill = () => {
|
|
20
|
+
child.kill();
|
|
21
|
+
};
|
|
22
|
+
signal.addEventListener("abort", kill, { once: true });
|
|
23
|
+
child.on("error", (error) => {
|
|
24
|
+
signal.removeEventListener("abort", kill);
|
|
25
|
+
reject(error);
|
|
26
|
+
});
|
|
27
|
+
child.on("close", (code, killedBy) => {
|
|
28
|
+
signal.removeEventListener("abort", kill);
|
|
29
|
+
if (signal.aborted) {
|
|
30
|
+
reject(signal.reason);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
resolve({
|
|
34
|
+
stdout: Buffer.concat(stdout).toString(),
|
|
35
|
+
stderr: Buffer.concat(stderr).toString(),
|
|
36
|
+
exitCode: code ?? SIGNAL_EXIT_BASE + (killedBy === null ? 0 : constants.signals[killedBy]),
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
function failedError(command, { exitCode, stderr }) {
|
|
41
|
+
const tail = lastLines(stderr, STDERR_TAIL_LINES);
|
|
42
|
+
return new CliError({
|
|
43
|
+
code: TOOL_FAILED,
|
|
44
|
+
message: tail === ""
|
|
45
|
+
? `${command} exited with ${exitCode} and wrote nothing to stderr`
|
|
46
|
+
: `${command} exited with ${exitCode}; its stderr ends:\n${tail}`,
|
|
47
|
+
hint: `the output of ${command} above says why it failed`,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function missingError(command, cause) {
|
|
51
|
+
return new CliError({
|
|
52
|
+
code: TOOL_MISSING,
|
|
53
|
+
message: `${command} could not be started: it is not on PATH`,
|
|
54
|
+
hint: `install ${command}, then run the same command again`,
|
|
55
|
+
}, { cause });
|
|
56
|
+
}
|
|
57
|
+
/** `ctx.spawn`: `spawn` bound to the run, its start failures classified by errno. */
|
|
58
|
+
export function contextSpawn(run, defaults, callerLine) {
|
|
59
|
+
return async (command, args = [], options = {}) => {
|
|
60
|
+
let result;
|
|
61
|
+
try {
|
|
62
|
+
result = await run(command, args, {
|
|
63
|
+
cwd: options.cwd ?? defaults.cwd,
|
|
64
|
+
env: options.env ?? defaults.env,
|
|
65
|
+
signal: defaults.signal,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (isMissingFile(error))
|
|
70
|
+
throw missingError(command, error);
|
|
71
|
+
throw classifyErrno(error, { path: command, access: "read", callerLine, env: defaults.env });
|
|
72
|
+
}
|
|
73
|
+
if (options.check === true && result.exitCode !== 0) {
|
|
74
|
+
throw failedError(command, result);
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AAEzC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,8EAA8E;AAC9E,MAAM,gBAAgB,GAAG,GAAG,CAAC;AA8B7B,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GAAU,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CACtE,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACpF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;QACnC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,OAAO,CAAC;YACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;YACxC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;YACxC,QAAQ,EAAE,IAAI,IAAI,gBAAgB,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC3F,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,SAAS,WAAW,CAAC,OAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAe;IACrE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAClD,OAAO,IAAI,QAAQ,CAAC;QAClB,IAAI,EAAE,WAAW;QACjB,OAAO,EACL,IAAI,KAAK,EAAE;YACT,CAAC,CAAC,GAAG,OAAO,gBAAgB,QAAQ,8BAA8B;YAClE,CAAC,CAAC,GAAG,OAAO,gBAAgB,QAAQ,uBAAuB,IAAI,EAAE;QACrE,IAAI,EAAE,iBAAiB,OAAO,2BAA2B;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,KAAc;IACnD,OAAO,IAAI,QAAQ,CACjB;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,GAAG,OAAO,0CAA0C;QAC7D,IAAI,EAAE,WAAW,OAAO,mCAAmC;KAC5D,EACD,EAAE,KAAK,EAAE,CACV,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAC1B,GAAU,EACV,QAAmF,EACnF,UAAkB;IAElB,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;QAChD,IAAI,MAAmB,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;gBAChC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG;gBAChC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG;gBAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,aAAa,CAAC,KAAK,CAAC;gBAAE,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/spill.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Clock } from "./clock.js";
|
|
2
|
+
import type { Env } from "./define.js";
|
|
3
|
+
import type { Files } from "./files.js";
|
|
4
|
+
export interface SpillTarget {
|
|
5
|
+
readonly cliName: string;
|
|
6
|
+
readonly commandName: string;
|
|
7
|
+
readonly env: Env;
|
|
8
|
+
readonly clock: Clock;
|
|
9
|
+
/** Writes the spill file; its failures are already classified. */
|
|
10
|
+
readonly files: Files;
|
|
11
|
+
/** The caller's command line, for the hint of a file system error. */
|
|
12
|
+
readonly callerLine: string;
|
|
13
|
+
}
|
|
14
|
+
/** Turns printed data into what stdout carries: the data itself, or where it was spilled. */
|
|
15
|
+
export type Spill = (printed: string, json: boolean) => Promise<string>;
|
|
16
|
+
export declare function spillTo(target: SpillTarget): Spill;
|
package/dist/spill.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { mkdir, readdir, rm, stat } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { classifyErrno } from "./errno.js";
|
|
5
|
+
import { isMissingFile } from "./errors.js";
|
|
6
|
+
const STDOUT_BUDGET_CHARS = 30_000;
|
|
7
|
+
const SPILL_RETENTION_MS = 7 * 24 * 60 * 60 * 1000;
|
|
8
|
+
const PREVIEW_CHARS = 2_000;
|
|
9
|
+
// The time's colons become dashes: Windows forbids a colon in a file name.
|
|
10
|
+
const SPILL_FILE = /^\d{4}-\d\d-\d\dT\d\d-\d\d-\d\d\.\d{3}Z-.+\.(json|txt)$/;
|
|
11
|
+
function spillName(now, commandName, json) {
|
|
12
|
+
const time = new Date(now).toISOString().replaceAll(":", "-");
|
|
13
|
+
return `${time}-${commandName}.${json ? "json" : "txt"}`;
|
|
14
|
+
}
|
|
15
|
+
// Another run pruning the same folder may remove a file between readdir and stat.
|
|
16
|
+
async function pruneOne(path, cutoff) {
|
|
17
|
+
try {
|
|
18
|
+
if ((await stat(path)).mtimeMs < cutoff)
|
|
19
|
+
await rm(path, { force: true });
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (!isMissingFile(error))
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function pruneOld(folder, cutoff) {
|
|
27
|
+
const names = (await readdir(folder)).filter((name) => SPILL_FILE.test(name));
|
|
28
|
+
await Promise.all(names.map((name) => pruneOne(join(folder, name), cutoff)));
|
|
29
|
+
}
|
|
30
|
+
async function prepare(folder, cutoff, target) {
|
|
31
|
+
try {
|
|
32
|
+
await mkdir(folder, { recursive: true });
|
|
33
|
+
await pruneOld(folder, cutoff);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw classifyErrno(error, {
|
|
37
|
+
path: folder,
|
|
38
|
+
access: "write",
|
|
39
|
+
callerLine: target.callerLine,
|
|
40
|
+
env: target.env,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// An empty TMPDIR means unset, as it does to the shell.
|
|
45
|
+
function tempRoot(env) {
|
|
46
|
+
const { TMPDIR } = env;
|
|
47
|
+
return TMPDIR === undefined || TMPDIR === "" ? tmpdir() : TMPDIR;
|
|
48
|
+
}
|
|
49
|
+
export function spillTo(target) {
|
|
50
|
+
return async (printed, json) => {
|
|
51
|
+
if (printed.length <= STDOUT_BUDGET_CHARS)
|
|
52
|
+
return printed;
|
|
53
|
+
const now = target.clock.now();
|
|
54
|
+
const folder = join(tempRoot(target.env), target.cliName);
|
|
55
|
+
await prepare(folder, now - SPILL_RETENTION_MS, target);
|
|
56
|
+
const file = join(folder, spillName(now, target.commandName, json));
|
|
57
|
+
await target.files.write(file, printed);
|
|
58
|
+
const bytes = Buffer.byteLength(printed);
|
|
59
|
+
const preview = printed.slice(0, PREVIEW_CHARS);
|
|
60
|
+
return json
|
|
61
|
+
? `${JSON.stringify({ file, bytes, preview })}\n`
|
|
62
|
+
: `file: ${file}\nbytes: ${bytes}\npreview:\n${preview}\n`;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=spill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spill.js","sourceRoot":"","sources":["../src/spill.ts"],"names":[],"mappings":"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"}
|
package/dist/style.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
const AGENT_VARIABLES = [
|
|
3
|
-
"CLAUDECODE",
|
|
4
|
-
"CODEX_CI",
|
|
5
|
-
"CODEX_SANDBOX",
|
|
6
|
-
"GEMINI_CLI",
|
|
7
|
-
"CURSOR_AGENT",
|
|
8
|
-
"CI",
|
|
9
|
-
];
|
|
1
|
+
import { isAgent } from "./agent.js";
|
|
10
2
|
function colourEnabled(env, stdoutIsTTY) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
if (env.NO_COLOR !== undefined && env.NO_COLOR !== "")
|
|
4
|
+
return false;
|
|
5
|
+
const forced = env.FORCE_COLOR !== undefined && env.FORCE_COLOR !== "" && env.FORCE_COLOR !== "0";
|
|
6
|
+
return forced || (stdoutIsTTY && !isAgent(env));
|
|
14
7
|
}
|
|
15
8
|
function sgr(open, close) {
|
|
16
9
|
return (text) => `\u001b[${open}m${text}\u001b[${close}m`;
|
package/dist/style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"style.js","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAerC,SAAS,aAAa,CAAC,GAAQ,EAAE,WAAoB;IACnD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACpE,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,EAAE,IAAI,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC;IAClG,OAAO,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa;IACtC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,GAAG,CAAC;AAC5D,CAAC;AAED,MAAM,QAAQ,GAAU;IACtB,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IAChB,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IACf,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,KAAK,GAAU,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;AAEpC,MAAM,KAAK,GAAU;IACnB,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,GAAQ,EAAE,WAAoB;IACrD,OAAO,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC"}
|
package/dist/tail.d.ts
ADDED
package/dist/tail.js
ADDED
package/dist/tail.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail.js","sourceRoot":"","sources":["../src/tail.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,KAAa;IACrD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Commands, type DoctorCheck, type Env, type Tool } from "./define.js";
|
|
2
|
+
export declare const TOOL_MISSING = "TOOL_MISSING";
|
|
3
|
+
/** Fails with `TOOL_MISSING`, naming every missing tool at once, unless all are on `PATH`. */
|
|
4
|
+
export declare function checkTools(tools: readonly Tool[], env: Env): Promise<void>;
|
|
5
|
+
/** One `doctor` row per distinct tool the Commands declare, with its install command as the fix. */
|
|
6
|
+
export declare function toolRows(commands: Commands): DoctorCheck[];
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { access } from "node:fs/promises";
|
|
3
|
+
import { delimiter, join } from "node:path";
|
|
4
|
+
import { isCommand, } from "./define.js";
|
|
5
|
+
import { CliError, errnoOf } from "./errors.js";
|
|
6
|
+
export const TOOL_MISSING = "TOOL_MISSING";
|
|
7
|
+
const WINDOWS_EXTENSIONS = ".COM;.EXE;.BAT;.CMD";
|
|
8
|
+
// ENOTDIR: a PATH entry that is a file holds no tool.
|
|
9
|
+
const NOT_EXECUTABLE = new Set(["ENOENT", "ENOTDIR", "EACCES"]);
|
|
10
|
+
function pathOf(env) {
|
|
11
|
+
const key = Object.keys(env).find((name) => name.toUpperCase() === "PATH") ?? "PATH";
|
|
12
|
+
return env[key] ?? "";
|
|
13
|
+
}
|
|
14
|
+
function extensionsOf(env) {
|
|
15
|
+
return process.platform === "win32" ? (env.PATHEXT ?? WINDOWS_EXTENSIONS).split(";") : [""];
|
|
16
|
+
}
|
|
17
|
+
async function isExecutable(file) {
|
|
18
|
+
try {
|
|
19
|
+
await access(file, constants.X_OK);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (NOT_EXECUTABLE.has(errnoOf(error) ?? ""))
|
|
24
|
+
return false;
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Where `name` is found on `PATH` from `env`, or undefined. */
|
|
29
|
+
async function findTool(name, env) {
|
|
30
|
+
const folders = pathOf(env)
|
|
31
|
+
.split(delimiter)
|
|
32
|
+
.filter((folder) => folder !== "");
|
|
33
|
+
const candidates = folders.flatMap((folder) => extensionsOf(env).map((extension) => join(folder, `${name}${extension}`)));
|
|
34
|
+
for (const file of candidates) {
|
|
35
|
+
if (await isExecutable(file))
|
|
36
|
+
return file;
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
/** Fails with `TOOL_MISSING`, naming every missing tool at once, unless all are on `PATH`. */
|
|
41
|
+
export async function checkTools(tools, env) {
|
|
42
|
+
const found = await Promise.all(tools.map((tool) => findTool(tool.name, env)));
|
|
43
|
+
const missing = tools.filter((_tool, index) => found[index] === undefined);
|
|
44
|
+
if (missing.length === 0)
|
|
45
|
+
return;
|
|
46
|
+
const names = missing.map(({ name }) => name).join(", ");
|
|
47
|
+
throw new CliError({
|
|
48
|
+
code: TOOL_MISSING,
|
|
49
|
+
message: `${missing.length === 1 ? "a tool it runs is" : "tools it runs are"} not on PATH: ${names}`,
|
|
50
|
+
hint: `install ${missing.length === 1 ? "it" : "them"}, then run the same command again: ${missing.map(({ install }) => install).join("; ")}`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function toolsIn(node) {
|
|
54
|
+
return isCommand(node) ? [...(node.tools ?? [])] : Object.values(node).flatMap(toolsIn);
|
|
55
|
+
}
|
|
56
|
+
/** One `doctor` row per distinct tool the Commands declare, with its install command as the fix. */
|
|
57
|
+
export function toolRows(commands) {
|
|
58
|
+
const byName = new Map(toolsIn(commands).map((tool) => [tool.name, tool]));
|
|
59
|
+
return [...byName.values()].map(({ name, install }) => ({
|
|
60
|
+
name,
|
|
61
|
+
run: async (ctx) => {
|
|
62
|
+
const file = await findTool(name, ctx.env);
|
|
63
|
+
return file === undefined
|
|
64
|
+
? { state: "problem", message: `${name} is not on PATH`, fix: install }
|
|
65
|
+
: { state: "ok", message: `found at ${file}` };
|
|
66
|
+
},
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/update.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
2
|
import { defineCommand } from "./define.js";
|
|
3
|
-
import {
|
|
3
|
+
import { CliError } from "./errors.js";
|
|
4
4
|
import { globalInstallOf } from "./global-install.js";
|
|
5
5
|
import { INTERRUPTED } from "./interrupts.js";
|
|
6
6
|
import { installGlobally, latestVersion, npmContext } from "./npm.js";
|
|
@@ -32,13 +32,12 @@ function renderUpdate(cli, install, update) {
|
|
|
32
32
|
].join("\n");
|
|
33
33
|
}
|
|
34
34
|
// The install ran to its end, so the run reports it rather than asking for a rerun.
|
|
35
|
-
function interruptedAfterInstall(plan
|
|
36
|
-
return new
|
|
35
|
+
function interruptedAfterInstall(plan) {
|
|
36
|
+
return new CliError({
|
|
37
37
|
code: INTERRUPTED,
|
|
38
38
|
message: `interrupted, but ${plan.package}@${plan.latest} had already been installed with the npm under ${plan.prefix}, replacing ${plan.from}`,
|
|
39
39
|
hint: "nothing to run again: run the commands under next",
|
|
40
|
-
|
|
41
|
-
}, update);
|
|
40
|
+
});
|
|
42
41
|
}
|
|
43
42
|
/** The built-in `update`, for a CLI installed globally with npm. */
|
|
44
43
|
export function updateCommand(cli, install, bin) {
|
|
@@ -69,7 +68,7 @@ export function updateCommand(cli, install, bin) {
|
|
|
69
68
|
}
|
|
70
69
|
ctx.signal.throwIfAborted();
|
|
71
70
|
ctx.progress(`installing ${plan.package}@${latest} with the npm under ${prefix}…`);
|
|
72
|
-
await ctx.runToEnd(() => installGlobally(latest, npmContext(cli, install, ctx)));
|
|
71
|
+
await ctx.runToEnd(`installing ${plan.package}@${latest}`, () => installGlobally(latest, npmContext(cli, install, ctx)));
|
|
73
72
|
const update = {
|
|
74
73
|
from,
|
|
75
74
|
latest,
|
|
@@ -78,7 +77,8 @@ export function updateCommand(cli, install, bin) {
|
|
|
78
77
|
next: [skillUpdateCommand(cli.name)],
|
|
79
78
|
};
|
|
80
79
|
if (ctx.signal.aborted) {
|
|
81
|
-
|
|
80
|
+
ctx.deliver(update);
|
|
81
|
+
throw interruptedAfterInstall(plan);
|
|
82
82
|
}
|
|
83
83
|
return update;
|
|
84
84
|
},
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAqC,aAAa,EAAsB,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/dist/usage.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { UsageError } from "./errors.js";
|
|
2
2
|
import { type Invocation } from "./invocation.js";
|
|
3
|
+
export declare const INVALID_INPUT = "INVALID_INPUT";
|
|
4
|
+
export declare const UNKNOWN_OPTION = "UNKNOWN_OPTION";
|
|
5
|
+
export declare const UNKNOWN_COMMAND = "UNKNOWN_COMMAND";
|
|
3
6
|
export declare function unknownOptionError(commandLine: string, invocation: Invocation, flag: string, suggestions: readonly string[]): UsageError;
|
|
4
7
|
export declare function unknownCommandError(commandLine: string, name: string, suggestions: readonly string[]): UsageError;
|
|
5
8
|
export declare function invalidInputError(commandLine: string, problem: string): UsageError;
|
package/dist/usage.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { UsageError } from "./errors.js";
|
|
2
2
|
import { commandLineRenaming } from "./invocation.js";
|
|
3
|
+
export const INVALID_INPUT = "INVALID_INPUT";
|
|
4
|
+
export const UNKNOWN_OPTION = "UNKNOWN_OPTION";
|
|
5
|
+
export const UNKNOWN_COMMAND = "UNKNOWN_COMMAND";
|
|
3
6
|
function unknownError({ code, problem, commandLine, corrections, listed }) {
|
|
4
7
|
return new UsageError({
|
|
5
8
|
code,
|
|
@@ -11,7 +14,7 @@ function unknownError({ code, problem, commandLine, corrections, listed }) {
|
|
|
11
14
|
}
|
|
12
15
|
export function unknownOptionError(commandLine, invocation, flag, suggestions) {
|
|
13
16
|
return unknownError({
|
|
14
|
-
code:
|
|
17
|
+
code: UNKNOWN_OPTION,
|
|
15
18
|
problem: `unknown option '${flag}'`,
|
|
16
19
|
commandLine,
|
|
17
20
|
corrections: suggestions.map((name) => commandLineRenaming(invocation, new Map([[flag, name]]))),
|
|
@@ -20,7 +23,7 @@ export function unknownOptionError(commandLine, invocation, flag, suggestions) {
|
|
|
20
23
|
}
|
|
21
24
|
export function unknownCommandError(commandLine, name, suggestions) {
|
|
22
25
|
return unknownError({
|
|
23
|
-
code:
|
|
26
|
+
code: UNKNOWN_COMMAND,
|
|
24
27
|
problem: `unknown command '${name}'`,
|
|
25
28
|
commandLine,
|
|
26
29
|
corrections: suggestions.map((suggestion) => `${commandLine} ${suggestion}`),
|
|
@@ -29,7 +32,7 @@ export function unknownCommandError(commandLine, name, suggestions) {
|
|
|
29
32
|
}
|
|
30
33
|
export function invalidInputError(commandLine, problem) {
|
|
31
34
|
return new UsageError({
|
|
32
|
-
code:
|
|
35
|
+
code: INVALID_INPUT,
|
|
33
36
|
message: problem,
|
|
34
37
|
hint: `run \`${commandLine} --help\` to see the expected input`,
|
|
35
38
|
});
|
package/dist/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAmB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAmB,MAAM,iBAAiB,CAAC;AAEvE,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAUjD,SAAS,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAW;IAChF,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI;QACJ,OAAO,EAAE,GAAG,OAAO,UAAU,WAAW,IAAI;QAC5C,IAAI,EACF,WAAW,CAAC,MAAM,KAAK,CAAC;YACtB,CAAC,CAAC,SAAS,WAAW,wBAAwB,MAAM,EAAE;YACtD,CAAC,CAAC,gBAAgB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;KAC3F,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,UAAsB,EACtB,IAAY,EACZ,WAA8B;IAE9B,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,mBAAmB,IAAI,GAAG;QACnC,WAAW;QACX,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpC,mBAAmB,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACzD;QACD,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,IAAY,EACZ,WAA8B;IAE9B,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,oBAAoB,IAAI,GAAG;QACpC,WAAW;QACX,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,WAAW,IAAI,UAAU,EAAE,CAAC;QAC5E,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,OAAe;IACpE,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,SAAS,WAAW,qCAAqC;KAChE,CAAC,CAAC;AACL,CAAC"}
|