@duyquangnvx/agent-cli 0.13.0 → 0.14.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 +23 -0
- package/dist/agent-cli.js +6 -1
- package/dist/agent-cli.js.map +1 -1
- package/dist/built-ins/commands.d.ts +4 -1
- package/dist/built-ins/commands.js +8 -1
- package/dist/built-ins/commands.js.map +1 -1
- package/dist/built-ins/dependency-install.d.ts +5 -0
- package/dist/built-ins/dependency-install.js +49 -18
- package/dist/built-ins/dependency-install.js.map +1 -1
- package/dist/built-ins/doctor-rows.js +13 -2
- package/dist/built-ins/doctor-rows.js.map +1 -1
- package/dist/built-ins/doctor.js +13 -5
- package/dist/built-ins/doctor.js.map +1 -1
- package/dist/built-ins/npm.d.ts +4 -2
- package/dist/built-ins/npm.js +16 -7
- package/dist/built-ins/npm.js.map +1 -1
- package/dist/built-ins/packaged-skill.d.ts +38 -0
- package/dist/built-ins/packaged-skill.js +80 -0
- package/dist/built-ins/packaged-skill.js.map +1 -0
- package/dist/built-ins/skill-install.d.ts +3 -0
- package/dist/built-ins/skill-install.js +168 -0
- package/dist/built-ins/skill-install.js.map +1 -0
- package/dist/built-ins/skills.d.ts +4 -1
- package/dist/built-ins/skills.js +4 -3
- package/dist/built-ins/skills.js.map +1 -1
- package/dist/built-ins/update.js +8 -3
- package/dist/built-ins/update.js.map +1 -1
- package/dist/context.d.ts +24 -3
- package/dist/define.d.ts +22 -6
- package/dist/define.js.map +1 -1
- package/dist/errno.js +2 -2
- package/dist/errno.js.map +1 -1
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -1
- package/dist/execute.js +14 -4
- package/dist/execute.js.map +1 -1
- package/dist/help-json.d.ts +1 -1
- package/dist/help-json.js +4 -8
- package/dist/help-json.js.map +1 -1
- package/dist/help.js +1 -1
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interrupts.d.ts +3 -1
- package/dist/interrupts.js +14 -6
- package/dist/interrupts.js.map +1 -1
- package/dist/invocation.d.ts +4 -3
- package/dist/invocation.js +6 -6
- package/dist/invocation.js.map +1 -1
- package/dist/output.d.ts +3 -1
- package/dist/output.js +9 -2
- package/dist/output.js.map +1 -1
- package/dist/project.d.ts +6 -1
- package/dist/project.js +11 -11
- package/dist/project.js.map +1 -1
- package/dist/run-as.d.ts +6 -0
- package/dist/run-as.js +8 -0
- package/dist/run-as.js.map +1 -0
- package/dist/run-cli.js +5 -3
- package/dist/run-cli.js.map +1 -1
- package/dist/run-command.js +31 -11
- package/dist/run-command.js.map +1 -1
- package/dist/run-options.d.ts +6 -1
- package/dist/spawn.d.ts +28 -1
- package/dist/spawn.js +54 -10
- package/dist/spawn.js.map +1 -1
- package/dist/tools.d.ts +1 -1
- package/dist/tools.js +2 -2
- package/dist/tools.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,29 @@ What changed in each release of `@duyquangnvx/agent-cli` (the Runtime) and `@duy
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## v0.14.0 (2026-10-27)
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- `ctx.notice(text)` tells the caller something beside the data, such as that a copy is behind: a plain line on stderr, or one `{"notice":"..."}` JSON line under `--json`, written when called and in order with progress. It never changes stdout or the exit code.
|
|
12
|
+
- `ctx.spawnDetached(command, args, { cwd, env })` starts a child that outlives the run, such as a Daemon, and resolves with `{ pid }` once it has started. The child gets no stdio, is not stopped on an interrupt and, on POSIX, leaves the terminal's process group; one that cannot start fails with the same codes as `ctx.spawn` (`TOOL_MISSING`, `PERMISSION_DENIED`). `runCli` takes a fake as `spawnDetached`; given a fake `spawn` without one, a Command that starts a detached child fails as a bug rather than start a real one.
|
|
13
|
+
- A serve Command's ctx has `ctx.end()`, which ends the run with exit 0 and prints nothing more, so a Daemon that a newer one replaces can stop itself. Its type is the new `ServeContext`.
|
|
14
|
+
- `skill: { packaged: "<folder>" }` declares a Packaged skill, one shipped inside the CLI's package, beside `skill: { source }` for a Skill Hub. It earns a Built-in `skill install`, a write Command that copies the folder to `.claude/skills/<name>` at the package manager's project root (removing files the package no longer has), refreshing a copy of another `metadata.version` at once but asking for `--force` to replace or remove a file of a copy at the package's version, which someone edited, writes the CLI's `AGENTS.md` block between `<!-- BEGIN:<name> -->` and `<!-- END:<name> -->`, and names the `@AGENTS.md` line `CLAUDE.md` lacks without editing it. `doctor`'s `skill` row then finds the Skill copy from the project root, so from a workspace package too, and reports as an advisory problem a missing copy or one whose `metadata.version` differs from the package's (fix: `<run-as> skill install`) and a copy under `~/.claude/skills/<name>`, which Claude Code prefers; under `--json` the row carries `skill: { copy, copyVersion, packageVersion, home? }`. A one-Command CLI declaring a Packaged skill makes `defineCli` throw. `update` of a Global install with a Packaged skill gives the same `<name> skill install` under `next` when the copy differs from the installed package's. A Skill Hub CLI's row is unchanged.
|
|
15
|
+
- The Scaffolder's `--dependency` starts a per-project CLI: a Dependency install, `install: { mode: "dependency", package }`, with a Packaged skill, `skill: { packaged: "skills/<name>" }`, and `skills` in `package.json` `files`. Its examples, test assertions, skill, README and setup reference run it as `npx -q --no-install <name>`; the README adds it with `pnpm add -D <package>`, then copies the skill with `npx -q --no-install <name> skill install`. When npx reports the package missing, the setup reference runs the project's install line if a `package.json` lists it, else the add line. It refuses `--skill-hub` beside it. Without `--dependency` it starts a Global install, as before. The scaffolded skill reads `{"notice":"..."}` lines on stderr beside progress.
|
|
16
|
+
- The agent-cli skill covers the run-as of a Dependency install (start `examples` and hand-written hints with it), the two sources of a CLI's skill, `skill install` and the `AGENTS.md` block it writes, the `skill` row of a Packaged skill, `ctx.notice`, a Daemon started through `ctx.spawnDetached`, and a serve Command that ends itself with `ctx.end()`.
|
|
17
|
+
- `runAsOf(cli)` is exported, returning a CLI's run-as.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- The agent-cli skill's references point at the `skill` JSDoc of `defineCli` for how `skill install` and a Packaged skill's `doctor` row behave, instead of restating it.
|
|
22
|
+
- **Breaking:** every command line the Runtime gives a Dependency install's caller now starts with `npx -q --no-install <bin>` instead of the bare name, which a Coding agent's shell cannot run: hints, help, the Command names of help JSON (its root keeps the bare name beside the version, as the text header does), `ctx.commandLine()`, the next page of a List Command, `NEEDS_OPERATOR`'s `! <line>`, the `--force`, `--yes` and `doctor` reruns, and `INTERRUPTED`. A Global install and a CLI with no install keep the bare name. The `install` row's fix for another copy than the project's is now `<run-as> doctor`, which runs the project's copy, with every package manager, instead of `pnpm exec <bin>` or `npx <bin>`. A project that has not installed the package gets its install line (`pnpm install`, `npm install`) when a `package.json` from the working directory up to the lockfile's root lists it in `dependencies` or `devDependencies`, and the add line (`pnpm add -D <package>`, `npm install -D <package>`) only when none does, so no fix moves the pinned version; with yarn or bun the row gives no line.
|
|
23
|
+
|
|
24
|
+
## v0.13.1 (2026-10-23)
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- The hints of `INTERRUPTED`, `DEADLINE_EXCEEDED`, `DISK_FULL`, `PERMISSION_DENIED` on Windows, `PROJECT_INVALID`, `TOOL_MISSING`, the npm errors of `update` and `doctor`, and a `doctor` row's fix now name the command line to run again, in backticks like the install and login lines they name, instead of "run the command again". `INTERRUPTED` adds that a run stopped on purpose needs no rerun, and a `ctx.timeout` hint says the call may have been billed, so ask the user before running it again.
|
|
29
|
+
|
|
7
30
|
## v0.13.0 (2026-10-23)
|
|
8
31
|
|
|
9
32
|
### Changed
|
package/dist/agent-cli.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { builtInCommands } from "./built-ins/commands.js";
|
|
2
|
+
import { packagedFolderOf } from "./built-ins/packaged-skill.js";
|
|
2
3
|
import { defineCommandFor, } from "./define.js";
|
|
3
4
|
import { runtimeCodesIn } from "./exit-classes.js";
|
|
4
5
|
function checkOwnCodes(cli) {
|
|
@@ -9,8 +10,12 @@ function checkOwnCodes(cli) {
|
|
|
9
10
|
}
|
|
10
11
|
function defineCli(cli) {
|
|
11
12
|
checkOwnCodes(cli);
|
|
12
|
-
if (cli.commands === undefined)
|
|
13
|
+
if (cli.commands === undefined) {
|
|
14
|
+
if (packagedFolderOf(cli) !== undefined) {
|
|
15
|
+
throw new Error(`${cli.name} declares a Packaged skill, which only a CLI with several Commands can install`);
|
|
16
|
+
}
|
|
13
17
|
return cli;
|
|
18
|
+
}
|
|
14
19
|
const { commands } = cli;
|
|
15
20
|
const taken = Object.keys(builtInCommands(cli, { bin: undefined, node: undefined })).filter((name) => commands[name] !== undefined);
|
|
16
21
|
if (taken.length > 0) {
|
package/dist/agent-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAIL,gBAAgB,GAGjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAgBnD,SAAS,aAAa,CAAkB,GAAyB;IAC/D,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,CAAC,IAAI,aAAa,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAkB,GAAyB;IAC3D,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;
|
|
1
|
+
{"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAIL,gBAAgB,GAGjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAgBnD,SAAS,aAAa,CAAkB,GAAyB;IAC/D,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,CAAC,IAAI,aAAa,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAkB,GAAyB;IAC3D,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,CAAC,IAAI,gFAAgF,CAC5F,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CACzF,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CACvC,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,CAAC,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAChF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAmB,EAAE,SAAS,EAAE,CAAC;AAC3E,CAAC"}
|
|
@@ -4,5 +4,8 @@ export interface Launch {
|
|
|
4
4
|
readonly bin: string | undefined;
|
|
5
5
|
readonly node: string | undefined;
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* The Commands the Runtime adds to a multi-Command CLI: `update` only for a Global install, and
|
|
9
|
+
* `skill install` only for a Packaged skill.
|
|
10
|
+
*/
|
|
8
11
|
export declare function builtInCommands(cli: CommandTreeCli, launch: Launch): Commands;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { doctorCommand } from "./doctor.js";
|
|
2
|
+
import { packagedFolderOf } from "./packaged-skill.js";
|
|
3
|
+
import { skillInstallCommand } from "./skill-install.js";
|
|
2
4
|
import { updateCommand } from "./update.js";
|
|
3
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* The Commands the Runtime adds to a multi-Command CLI: `update` only for a Global install, and
|
|
7
|
+
* `skill install` only for a Packaged skill.
|
|
8
|
+
*/
|
|
4
9
|
export function builtInCommands(cli, launch) {
|
|
10
|
+
const packaged = packagedFolderOf(cli);
|
|
5
11
|
return {
|
|
6
12
|
doctor: doctorCommand(cli, launch),
|
|
7
13
|
...(cli.install?.mode === "global" ? { update: updateCommand(cli, cli.install, launch) } : {}),
|
|
14
|
+
...(packaged === undefined ? {} : { skill: { install: skillInstallCommand(cli, packaged) } }),
|
|
8
15
|
};
|
|
9
16
|
}
|
|
10
17
|
//# sourceMappingURL=commands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/built-ins/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/built-ins/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAmB,EAAE,MAAc;IACjE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;KAC9F,CAAC;AACJ,CAAC"}
|
|
@@ -20,6 +20,9 @@ type CopyStanding = {
|
|
|
20
20
|
readonly kind: "source";
|
|
21
21
|
} | {
|
|
22
22
|
readonly kind: "missing";
|
|
23
|
+
} | {
|
|
24
|
+
readonly kind: "listed";
|
|
25
|
+
readonly manifest: string;
|
|
23
26
|
} | {
|
|
24
27
|
readonly kind: "unreadable";
|
|
25
28
|
readonly manifest: string;
|
|
@@ -41,6 +44,8 @@ export interface DependencySurvey {
|
|
|
41
44
|
readonly root: LockfileRoot | undefined;
|
|
42
45
|
readonly standing: CopyStanding;
|
|
43
46
|
}
|
|
47
|
+
/** The package manager's project root: the folder of the nearest lockfile, or `cwd` without one. */
|
|
48
|
+
export declare function projectRootOf(cwd: string): Promise<string>;
|
|
44
49
|
export declare function surveyDependency(install: DependencyInstall, bin: string | undefined, cwd: string): Promise<DependencySurvey>;
|
|
45
50
|
/** The `install` row of a Dependency install. */
|
|
46
51
|
export declare function dependencyInstallFinding(cli: CommandTreeCli, install: DependencyInstall, { cwd, root, standing }: DependencySurvey): DoctorFinding;
|
|
@@ -2,6 +2,7 @@ import { readFile, realpath, stat } from "node:fs/promises";
|
|
|
2
2
|
import { dirname, join, sep } from "node:path";
|
|
3
3
|
import * as z from "zod";
|
|
4
4
|
import { isMissingFile, messageOf } from "../errors.js";
|
|
5
|
+
import { runAsOf } from "../run-as.js";
|
|
5
6
|
import { isInside } from "./global-install.js";
|
|
6
7
|
import { scopeOf } from "./npm.js";
|
|
7
8
|
const MANAGERS = ["pnpm", "npm", "yarn", "bun"];
|
|
@@ -17,17 +18,19 @@ const LINES = {
|
|
|
17
18
|
pnpm: {
|
|
18
19
|
upgrade: (packages) => `pnpm up --latest ${packages.join(" ")}`,
|
|
19
20
|
add: (packages) => `pnpm add -D ${packages.join(" ")}`,
|
|
20
|
-
|
|
21
|
-
exec: (cli) => `pnpm exec ${cli}`,
|
|
21
|
+
install: "pnpm install",
|
|
22
22
|
},
|
|
23
23
|
npm: {
|
|
24
24
|
upgrade: (packages) => `npm install ${packages.map((name) => `${name}@latest`).join(" ")}`,
|
|
25
25
|
add: (packages) => `npm install -D ${packages.join(" ")}`,
|
|
26
|
-
|
|
27
|
-
exec: (cli) => `npx ${cli}`,
|
|
26
|
+
install: "npm install",
|
|
28
27
|
},
|
|
29
28
|
};
|
|
30
|
-
const manifestSchema = z.object({
|
|
29
|
+
const manifestSchema = z.object({
|
|
30
|
+
packageManager: z.string().optional(),
|
|
31
|
+
dependencies: z.record(z.string(), z.unknown()).optional(),
|
|
32
|
+
devDependencies: z.record(z.string(), z.unknown()).optional(),
|
|
33
|
+
});
|
|
31
34
|
const packageSchema = z.object({ version: z.string() });
|
|
32
35
|
/** `dir` and every folder above it, nearest first. */
|
|
33
36
|
function ancestorsOf(dir) {
|
|
@@ -45,8 +48,8 @@ async function exists(path) {
|
|
|
45
48
|
throw error;
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
// An unreadable package.json names no package manager; the lockfile still
|
|
49
|
-
async function
|
|
51
|
+
// An unreadable package.json names no package manager and lists no package; the lockfile still names the manager.
|
|
52
|
+
async function manifestIn(dir) {
|
|
50
53
|
let text;
|
|
51
54
|
try {
|
|
52
55
|
text = await readFile(join(dir, "package.json"), "utf8");
|
|
@@ -63,9 +66,25 @@ async function declaredManager(dir) {
|
|
|
63
66
|
catch {
|
|
64
67
|
return undefined;
|
|
65
68
|
}
|
|
66
|
-
|
|
69
|
+
return manifestSchema.safeParse(manifest).data;
|
|
70
|
+
}
|
|
71
|
+
async function declaredManager(dir) {
|
|
72
|
+
const name = (await manifestIn(dir))?.packageManager?.split("@")[0];
|
|
67
73
|
return MANAGERS.find((manager) => manager === name);
|
|
68
74
|
}
|
|
75
|
+
// The fix runs at the lockfile's root, so a package.json above it is outside the project. Without a lockfile no fix is given, and the nearest listing still names the project.
|
|
76
|
+
async function manifestListing(name, cwd, root) {
|
|
77
|
+
const dirs = ancestorsOf(cwd);
|
|
78
|
+
const top = root === undefined ? dirs.length : dirs.indexOf(root.dir) + 1;
|
|
79
|
+
for (const dir of dirs.slice(0, top)) {
|
|
80
|
+
const manifest = await manifestIn(dir);
|
|
81
|
+
if (manifest?.dependencies?.[name] !== undefined ||
|
|
82
|
+
manifest?.devDependencies?.[name] !== undefined) {
|
|
83
|
+
return join(dir, "package.json");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
69
88
|
async function lockfileRootOf(cwd) {
|
|
70
89
|
for (const dir of ancestorsOf(cwd)) {
|
|
71
90
|
for (const [file, kind] of LOCKFILES) {
|
|
@@ -76,6 +95,10 @@ async function lockfileRootOf(cwd) {
|
|
|
76
95
|
}
|
|
77
96
|
return undefined;
|
|
78
97
|
}
|
|
98
|
+
/** The package manager's project root: the folder of the nearest lockfile, or `cwd` without one. */
|
|
99
|
+
export async function projectRootOf(cwd) {
|
|
100
|
+
return (await lockfileRootOf(cwd))?.dir ?? cwd;
|
|
101
|
+
}
|
|
79
102
|
async function versionIn(manifest) {
|
|
80
103
|
try {
|
|
81
104
|
return packageSchema.parse(JSON.parse(await readFile(manifest, "utf8"))).version;
|
|
@@ -87,7 +110,7 @@ async function versionIn(manifest) {
|
|
|
87
110
|
throw error;
|
|
88
111
|
}
|
|
89
112
|
}
|
|
90
|
-
async function standingOf(install, bin, cwd) {
|
|
113
|
+
async function standingOf(install, bin, cwd, root) {
|
|
91
114
|
if (bin === undefined)
|
|
92
115
|
return { kind: "source" };
|
|
93
116
|
for (const projectDir of ancestorsOf(cwd)) {
|
|
@@ -110,11 +133,12 @@ async function standingOf(install, bin, cwd) {
|
|
|
110
133
|
? { kind: "installed", copy }
|
|
111
134
|
: { kind: "other", copy, runningFrom };
|
|
112
135
|
}
|
|
113
|
-
|
|
136
|
+
const manifest = await manifestListing(install.package, cwd, root);
|
|
137
|
+
return manifest === undefined ? { kind: "missing" } : { kind: "listed", manifest };
|
|
114
138
|
}
|
|
115
139
|
export async function surveyDependency(install, bin, cwd) {
|
|
116
|
-
const
|
|
117
|
-
return { cwd, root, standing };
|
|
140
|
+
const root = await lockfileRootOf(cwd);
|
|
141
|
+
return { cwd, root, standing: await standingOf(install, bin, cwd, root) };
|
|
118
142
|
}
|
|
119
143
|
function packagesOf(install) {
|
|
120
144
|
return [install.package, ...(install.lockstep ?? [])];
|
|
@@ -129,6 +153,11 @@ function skippedFor(cli, install, standing) {
|
|
|
129
153
|
: `not checked: ${install.package} links to ${standing.copy.realDir}, so the workspace decides its version`;
|
|
130
154
|
return { state: "skipped", message };
|
|
131
155
|
}
|
|
156
|
+
function searchedFrom(cwd, root) {
|
|
157
|
+
if (root === undefined)
|
|
158
|
+
return `at or above ${cwd}`;
|
|
159
|
+
return root.dir === cwd ? `at ${cwd}` : `from ${cwd} up to ${root.dir}`;
|
|
160
|
+
}
|
|
132
161
|
function problem(message, fix) {
|
|
133
162
|
return fix === undefined ? { state: "problem", message } : { state: "problem", message, fix };
|
|
134
163
|
}
|
|
@@ -140,12 +169,14 @@ export function dependencyInstallFinding(cli, install, { cwd, root, standing })
|
|
|
140
169
|
case "linked":
|
|
141
170
|
return skippedFor(cli, install, standing);
|
|
142
171
|
case "missing":
|
|
143
|
-
return problem(`no package
|
|
172
|
+
return problem(`no package ${searchedFrom(cwd, root)} depends on ${install.package}`, lines?.add(packagesOf(install)));
|
|
173
|
+
case "listed":
|
|
174
|
+
return problem(`${standing.manifest} lists ${install.package}, but no copy of it is installed at or above ${cwd}`, lines?.install);
|
|
144
175
|
case "unreadable":
|
|
145
|
-
return problem(`${standing.manifest} is not a package.json with a version: ${standing.reason}`, lines?.
|
|
176
|
+
return problem(`${standing.manifest} is not a package.json with a version: ${standing.reason}`, lines?.install);
|
|
146
177
|
case "other": {
|
|
147
178
|
const { copy, runningFrom } = standing;
|
|
148
|
-
return problem(`${cli.name} runs from ${runningFrom}, not from this project's ${install.package} ${copy.version} at ${copy.realDir}`,
|
|
179
|
+
return problem(`${cli.name} runs from ${runningFrom}, not from this project's ${install.package} ${copy.version} at ${copy.realDir}`, `${runAsOf(cli)} doctor`);
|
|
149
180
|
}
|
|
150
181
|
case "installed": {
|
|
151
182
|
const { copy } = standing;
|
|
@@ -162,9 +193,9 @@ function registryOf({ package: name }, root) {
|
|
|
162
193
|
label: `the registry npm uses for ${name}`,
|
|
163
194
|
flags: [],
|
|
164
195
|
unreachableHint: scope === undefined
|
|
165
|
-
? "check the network or VPN
|
|
166
|
-
: `check the network or VPN and the ${scope}:registry that ${npmrc} sets
|
|
167
|
-
loginHint: `log in to it (npm login${scope === undefined ? "" : ` --scope=${scope}`}) or set its token in ${npmrc}
|
|
196
|
+
? "check the network or VPN"
|
|
197
|
+
: `check the network or VPN and the ${scope}:registry that ${npmrc} sets`,
|
|
198
|
+
loginHint: `log in to it (\`npm login${scope === undefined ? "" : ` --scope=${scope}`}\`) or set its token in ${npmrc}`,
|
|
168
199
|
missingHint: scope === undefined
|
|
169
200
|
? `check that ${name} is published on the registry ${npmrc} names`
|
|
170
201
|
: `check that ${name} is published, and that ${npmrc} maps ${scope} to its registry: ${scope}:registry=<url>`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-install.js","sourceRoot":"","sources":["../../src/built-ins/dependency-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAiB,OAAO,EAAE,MAAM,UAAU,CAAC;AAElD,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAIzD,MAAM,SAAS,GAAmD;IAChE,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,mBAAmB,EAAE,KAAK,CAAC;IAC5B,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,UAAU,EAAE,KAAK,CAAC;IACnB,CAAC,WAAW,EAAE,KAAK,CAAC;CACrB,CAAC;
|
|
1
|
+
{"version":3,"file":"dependency-install.js","sourceRoot":"","sources":["../../src/built-ins/dependency-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { versionLine } from "../version.js";
|
|
|
6
6
|
import { dependencyInstallFinding, dependencyRelease, surveyDependency, } from "./dependency-install.js";
|
|
7
7
|
import { globalInstallOf, NOT_GLOBAL_INSTALL } from "./global-install.js";
|
|
8
8
|
import { globalNpm, installCommandLine, latestVersion, npmContext, } from "./npm.js";
|
|
9
|
+
import { packagedFolderOf, packagedSkillFinding } from "./packaged-skill.js";
|
|
9
10
|
import { engineMinimum, meetsMinimum, standingOf } from "./semver.js";
|
|
10
11
|
import { skillReport } from "./skills.js";
|
|
11
12
|
function ok(message) {
|
|
@@ -57,7 +58,13 @@ export function readProject(projectFile, ctx) {
|
|
|
57
58
|
if (projectFile === undefined)
|
|
58
59
|
return { ok: true, project: undefined };
|
|
59
60
|
try {
|
|
60
|
-
return {
|
|
61
|
+
return {
|
|
62
|
+
ok: true,
|
|
63
|
+
project: projectOf(projectFile, ctx.cwd, {
|
|
64
|
+
fileError: ctx.fileError,
|
|
65
|
+
callerLine: ctx.commandLine(),
|
|
66
|
+
}),
|
|
67
|
+
};
|
|
61
68
|
}
|
|
62
69
|
catch (error) {
|
|
63
70
|
return { ok: false, error };
|
|
@@ -161,11 +168,15 @@ const SKILL_STATE_NOTES = {
|
|
|
161
168
|
function describeCopy({ path, version, state }) {
|
|
162
169
|
return `${path}${version === undefined ? "" : ` ${version}`} (${SKILL_STATE_NOTES[state]})`;
|
|
163
170
|
}
|
|
164
|
-
// A skill describes the CLI but never stops it working
|
|
171
|
+
// A skill describes the CLI but never stops it working: a Skill Hub's row is always ok, and a Packaged skill's problems are advisory.
|
|
165
172
|
function skillRow(cli) {
|
|
173
|
+
const packaged = packagedFolderOf(cli);
|
|
166
174
|
return {
|
|
167
175
|
name: "skill",
|
|
176
|
+
advisory: true,
|
|
168
177
|
run: async (ctx) => {
|
|
178
|
+
if (packaged !== undefined)
|
|
179
|
+
return packagedSkillFinding(cli, packaged, ctx);
|
|
169
180
|
const { copies, fix } = await skillReport(cli, cli.version, ctx);
|
|
170
181
|
const message = copies.length === 0
|
|
171
182
|
? `no copy of the ${cli.name} skill is installed`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-rows.js","sourceRoot":"","sources":["../../src/built-ins/doctor-rows.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doctor-rows.js","sourceRoot":"","sources":["../../src/built-ins/doctor-rows.ts"],"names":[],"mappings":"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"}
|
package/dist/built-ins/doctor.js
CHANGED
|
@@ -2,7 +2,9 @@ import * as z from "zod";
|
|
|
2
2
|
import { untilAborted } from "../abort.js";
|
|
3
3
|
import { defineCommand, } from "../define.js";
|
|
4
4
|
import { CliError } from "../errors.js";
|
|
5
|
+
import { runAsOf } from "../run-as.js";
|
|
5
6
|
import { doctorChecks, problemOfError, readProject } from "./doctor-rows.js";
|
|
7
|
+
import { packagedSkillDetailsSchema } from "./packaged-skill.js";
|
|
6
8
|
export const DOCTOR_PROBLEMS = "DOCTOR_PROBLEMS";
|
|
7
9
|
const DEFAULT_DEADLINE_MS = 10_000;
|
|
8
10
|
const MS_PER_SECOND = 1000;
|
|
@@ -13,6 +15,7 @@ const rowSchema = z.object({
|
|
|
13
15
|
message: z.string(),
|
|
14
16
|
fix: z.string().optional(),
|
|
15
17
|
code: z.string().optional(),
|
|
18
|
+
skill: packagedSkillDetailsSchema.optional(),
|
|
16
19
|
});
|
|
17
20
|
const reportSchema = z.object({
|
|
18
21
|
rows: z.array(rowSchema),
|
|
@@ -76,11 +79,13 @@ function render({ rows, next }, style) {
|
|
|
76
79
|
return [...lines, ...next.map((fix) => `${"next".padEnd(width)}${fix}`)].join("\n");
|
|
77
80
|
}
|
|
78
81
|
// One error per problem row, so the exit follows the class that must act first (ADR 0005).
|
|
79
|
-
function failure(cliName, problems) {
|
|
82
|
+
function failure(cliName, callerLine, problems) {
|
|
80
83
|
const errors = problems.map(({ check, message, fix, code }) => new CliError({
|
|
81
84
|
code: code ?? DOCTOR_PROBLEMS,
|
|
82
85
|
message: `${cliName} doctor found a problem in ${check}: ${message}`,
|
|
83
|
-
hint: fix === undefined
|
|
86
|
+
hint: fix === undefined
|
|
87
|
+
? "the row says what is wrong"
|
|
88
|
+
: `run \`${fix}\`, then run \`${callerLine}\` again`,
|
|
84
89
|
}));
|
|
85
90
|
return new AggregateError(errors);
|
|
86
91
|
}
|
|
@@ -90,8 +95,11 @@ export function doctorCommand(cli, launch) {
|
|
|
90
95
|
name: "doctor",
|
|
91
96
|
description: "check the setup and say what fixes each problem",
|
|
92
97
|
examples: [
|
|
93
|
-
{
|
|
94
|
-
|
|
98
|
+
{
|
|
99
|
+
command: `${runAsOf(cli)} doctor`,
|
|
100
|
+
note: "check the setup and list the commands that fix it",
|
|
101
|
+
},
|
|
102
|
+
{ command: `${runAsOf(cli)} doctor --json`, note: "get the rows and fixes as data" },
|
|
95
103
|
],
|
|
96
104
|
effect: "read",
|
|
97
105
|
output: reportSchema,
|
|
@@ -110,7 +118,7 @@ export function doctorCommand(cli, launch) {
|
|
|
110
118
|
.map(({ row }) => row);
|
|
111
119
|
if (problems.length > 0) {
|
|
112
120
|
ctx.deliver(report);
|
|
113
|
-
throw failure(cli.name, problems);
|
|
121
|
+
throw failure(cli.name, ctx.commandLine(), problems);
|
|
114
122
|
}
|
|
115
123
|
return report;
|
|
116
124
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/built-ins/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAKL,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/built-ins/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/built-ins/npm.d.ts
CHANGED
|
@@ -12,9 +12,9 @@ export interface Registry {
|
|
|
12
12
|
readonly label: string;
|
|
13
13
|
/** Flags that point npm at it; none when npm's own config names it. */
|
|
14
14
|
readonly flags: readonly string[];
|
|
15
|
-
/** What to check when npm cannot reach it. */
|
|
15
|
+
/** What to check when npm cannot reach it, before the run is tried again. */
|
|
16
16
|
readonly unreachableHint: string;
|
|
17
|
-
/** How to get npm's credentials accepted. */
|
|
17
|
+
/** How to get npm's credentials accepted, before the run is tried again. */
|
|
18
18
|
readonly loginHint: string;
|
|
19
19
|
/** What to check when it has no release of the package. */
|
|
20
20
|
readonly missingHint: string;
|
|
@@ -22,6 +22,8 @@ export interface Registry {
|
|
|
22
22
|
/** What every npm call needs: the CLI it serves, the registry, and where and how npm runs. */
|
|
23
23
|
export interface NpmContext {
|
|
24
24
|
readonly cliName: string;
|
|
25
|
+
/** The caller's command line, ready to paste, that a failure's hint asks to run again. */
|
|
26
|
+
readonly callerLine: string;
|
|
25
27
|
readonly registry: Registry;
|
|
26
28
|
/** The folder npm runs in, whose `.npmrc` it reads. */
|
|
27
29
|
readonly cwd: string;
|
package/dist/built-ins/npm.js
CHANGED
|
@@ -12,7 +12,15 @@ export const INSTALL_FAILED = "INSTALL_FAILED";
|
|
|
12
12
|
export const NPM_FAILED = "NPM_FAILED";
|
|
13
13
|
export const NO_LATEST = "NO_LATEST";
|
|
14
14
|
export function npmContext(cli, registry, ctx, node, cwd) {
|
|
15
|
-
return {
|
|
15
|
+
return {
|
|
16
|
+
cliName: cli.name,
|
|
17
|
+
callerLine: ctx.commandLine(),
|
|
18
|
+
registry,
|
|
19
|
+
cwd,
|
|
20
|
+
env: ctx.env,
|
|
21
|
+
signal: ctx.signal,
|
|
22
|
+
node,
|
|
23
|
+
};
|
|
16
24
|
}
|
|
17
25
|
const NPMJS = "https://registry.npmjs.org/";
|
|
18
26
|
const STDERR_TAIL_LINES = 10;
|
|
@@ -47,8 +55,8 @@ export function globalRegistry(install) {
|
|
|
47
55
|
package: name,
|
|
48
56
|
label: registry,
|
|
49
57
|
flags: registryFlags(install),
|
|
50
|
-
unreachableHint: "check the network or VPN
|
|
51
|
-
loginHint: `log in to ${registry} (npm login --registry=${registry}) or set its token in ~/.npmrc
|
|
58
|
+
unreachableHint: "check the network or VPN",
|
|
59
|
+
loginHint: `log in to ${registry} (\`npm login --registry=${registry}\`) or set its token in ~/.npmrc`,
|
|
52
60
|
missingHint: `check that ${name} is published on ${registry}`,
|
|
53
61
|
};
|
|
54
62
|
}
|
|
@@ -89,18 +97,19 @@ function failureOf(call, answer, ctx) {
|
|
|
89
97
|
const { label: registry, package: name, loginHint, unreachableHint } = ctx.registry;
|
|
90
98
|
const code = NPM_CODE.exec(answer.stderr)?.[1];
|
|
91
99
|
const output = tail(answer.stderr);
|
|
100
|
+
const rerun = `run \`${ctx.callerLine}\` again`;
|
|
92
101
|
if (code !== undefined && NETWORK_CODES.has(code)) {
|
|
93
102
|
return new CliError({
|
|
94
103
|
code: REGISTRY_UNREACHABLE,
|
|
95
104
|
message: `npm could not reach ${registry} (${code})${output}`,
|
|
96
|
-
hint: unreachableHint,
|
|
105
|
+
hint: `${unreachableHint}, then ${rerun}`,
|
|
97
106
|
});
|
|
98
107
|
}
|
|
99
108
|
if (code !== undefined && AUTH_CODES.has(code)) {
|
|
100
109
|
return new CliError({
|
|
101
110
|
code: REGISTRY_AUTH,
|
|
102
111
|
message: `${registry} refused npm's credentials (${code})${output}`,
|
|
103
|
-
hint: loginHint,
|
|
112
|
+
hint: `${loginHint}, then ${rerun}`,
|
|
104
113
|
});
|
|
105
114
|
}
|
|
106
115
|
if (call === "view" && code === "E404") {
|
|
@@ -110,13 +119,13 @@ function failureOf(call, answer, ctx) {
|
|
|
110
119
|
return new CliError({
|
|
111
120
|
code: INSTALL_FAILED,
|
|
112
121
|
message: `npm could not install ${name}${code === undefined ? "" : ` (${code})`}${output}`,
|
|
113
|
-
hint: `fix what npm reports, then
|
|
122
|
+
hint: `fix what npm reports, then ${rerun}, or install it yourself: \`${installCommandLine(ctx.registry)}\``,
|
|
114
123
|
});
|
|
115
124
|
}
|
|
116
125
|
return new CliError({
|
|
117
126
|
code: NPM_FAILED,
|
|
118
127
|
message: `npm ${call} failed with exit code ${answer.exitCode}${output}`,
|
|
119
|
-
hint:
|
|
128
|
+
hint: `fix what npm reports, then ${rerun}`,
|
|
120
129
|
});
|
|
121
130
|
}
|
|
122
131
|
function noLatest(ctx, message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/built-ins/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAoB,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/built-ins/npm.ts"],"names":[],"mappings":"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"}
|