@duyquangnvx/agent-cli 0.23.0 → 0.25.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 +41 -0
- package/dist/agent-cli.js +16 -12
- package/dist/agent-cli.js.map +1 -1
- package/dist/built-ins/commands.d.ts +2 -2
- package/dist/built-ins/commands.js +2 -2
- package/dist/built-ins/doctor.js +0 -2
- package/dist/built-ins/doctor.js.map +1 -1
- package/dist/built-ins/install/global-npm.d.ts +2 -0
- package/dist/built-ins/install/global-npm.js +7 -3
- package/dist/built-ins/install/global-npm.js.map +1 -1
- package/dist/built-ins/install/global.d.ts +1 -1
- package/dist/built-ins/install/global.js +9 -7
- package/dist/built-ins/install/global.js.map +1 -1
- package/dist/built-ins/install/install.d.ts +4 -2
- package/dist/built-ins/install/install.js.map +1 -1
- package/dist/built-ins/npm.d.ts +5 -3
- package/dist/built-ins/npm.js +7 -3
- package/dist/built-ins/npm.js.map +1 -1
- package/dist/built-ins/setup.d.ts +6 -0
- package/dist/built-ins/setup.js +168 -0
- package/dist/built-ins/setup.js.map +1 -0
- package/dist/built-ins/skill/home.d.ts +28 -0
- package/dist/built-ins/skill/home.js +116 -0
- package/dist/built-ins/skill/home.js.map +1 -0
- package/dist/built-ins/skill/install-command.d.ts +0 -13
- package/dist/built-ins/skill/install-command.js +7 -58
- package/dist/built-ins/skill/install-command.js.map +1 -1
- package/dist/built-ins/skill/project.d.ts +5 -0
- package/dist/built-ins/skill/project.js +46 -0
- package/dist/built-ins/skill/project.js.map +1 -0
- package/dist/built-ins/skill/skill.d.ts +7 -31
- package/dist/built-ins/skill/skill.js +18 -6
- package/dist/built-ins/skill/skill.js.map +1 -1
- package/dist/built-ins/skill/sync.d.ts +16 -0
- package/dist/built-ins/skill/sync.js +35 -0
- package/dist/built-ins/skill/sync.js.map +1 -0
- package/dist/built-ins/update.d.ts +2 -2
- package/dist/built-ins/update.js +23 -20
- package/dist/built-ins/update.js.map +1 -1
- package/dist/built-ins/upgrades.d.ts +1 -0
- package/dist/built-ins/upgrades.js +5 -0
- package/dist/built-ins/upgrades.js.map +1 -1
- package/dist/context/tools.d.ts +1 -0
- package/dist/context/tools.js +1 -1
- package/dist/context/tools.js.map +1 -1
- package/dist/define.d.ts +28 -34
- package/dist/define.js.map +1 -1
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +6 -1
- package/dist/errors.js.map +1 -1
- package/dist/exit-classes.d.ts +1 -0
- package/dist/exit-classes.js +4 -0
- package/dist/exit-classes.js.map +1 -1
- package/dist/help.js +1 -1
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/output.js +7 -4
- package/dist/output.js.map +1 -1
- package/dist/run-cli.js +2 -6
- package/dist/run-cli.js.map +1 -1
- package/dist/run-command.js +2 -7
- package/dist/run-command.js.map +1 -1
- package/dist/runtime-codes.d.ts +1 -0
- package/dist/runtime-codes.js +2 -0
- package/dist/runtime-codes.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/example/archive.test.ts +1 -1
- package/docs/getting-started.md +6 -6
- package/docs/guides/doctor.md +3 -4
- package/docs/guides/errors.md +3 -1
- package/docs/guides/shipping.md +32 -24
- package/docs/guides/testing.md +1 -1
- package/docs/principles.md +2 -2
- package/docs/reference.md +1 -0
- package/package.json +1 -1
- package/dist/built-ins/skill/hub.d.ts +0 -8
- package/dist/built-ins/skill/hub.js +0 -114
- package/dist/built-ins/skill/hub.js.map +0 -1
- package/dist/built-ins/skill/packaged.d.ts +0 -13
- package/dist/built-ins/skill/packaged.js +0 -97
- package/dist/built-ins/skill/packaged.js.map +0 -1
- package/dist/built-ins/skill/usage-hint.d.ts +0 -4
- package/dist/built-ins/skill/usage-hint.js +0 -28
- package/dist/built-ins/skill/usage-hint.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,47 @@ What changed in each release of `@duyquangnvx/agent-cli` (the Runtime) and `@duy
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## v0.25.0 (2026-11-05)
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **Breaking:** a failure of Exit class `wait`, such as `DEADLINE_EXCEEDED` or a pending approval, prints `wait:` rather than `error:` in text mode, in yellow, since nothing is broken yet. Its exit code, hint, Next steps and `--json` form stay as they were. Root help describes exit 75 as "not done yet: do what the hint says, then run it again". A CLI whose tests pin these strings updates them.
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- The Scaffolder's README sentence to paste keeps its `<your task>` placeholder when rendered. A CLI that exists already adds the backticks to that line in its README.
|
|
16
|
+
|
|
17
|
+
## v0.24.0 (2026-11-05)
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- A Global install of a CLI with several Commands has the Built-in `setup`, run as `npx -y <package>@latest setup` before the CLI is on the machine: it installs the latest release, copies the skill to `~/.claude/skills/<name>` and `~/.agents/skills/<name>`, and names the CLI docs. `setupLineOf` builds that line. It fails with the new `NOT_ON_PATH` (exit 2) when the global bin folder is off this shell's `PATH`.
|
|
22
|
+
- The Scaffolder's `bin` checks `engines.node` before it imports anything, and exits 2 naming the version needed. A CLI that exists already gets it by copying the template's `src/bin.ts`.
|
|
23
|
+
- `defineCli({ docs: "docs/cli" })` declares the CLI docs, a folder of pages shipped in the package, and `--version` prints `docs <path>` naming it, also when run from source.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- **Breaking:** `defineCli`'s `skill` is `{ folder, agents? }`, in place of `{ source }`, `{ add }` and `{ packaged }`: every skill ships in the package. It throws on a skill on a single-Command CLI, and on `agents` on a Global install.
|
|
28
|
+
- **Breaking:** `update` makes the home Skill copies match the release it leaves installed, and its `--json` gains `skill`.
|
|
29
|
+
- **Breaking:** on a Global install, `doctor`'s `install` row fix is the `setup` line, and its `skill` row looks under home only and reports a missing or stamped copy as an advisory problem whose fix is `<run-as> setup`. A CLI declaring no skill has that row skipped.
|
|
30
|
+
- **Breaking:** the Scaffolder always declares a skill, lists `skills` in `files`, refuses a name a skill cannot have, and opens a Global install's README with the sentence to paste.
|
|
31
|
+
- **Breaking:** the Scaffolder writes one kind of skill: a trigger with the description, the install line and a pointer to the `docs` line, stating no version. Workflows, the Recovering from errors table and the setup page move to a new `docs/cli/` folder, which `files` lists. `scripts/release.ts` names `skill` and `skillHub` together when there is a Hub and neither otherwise, on `@duyquangnvx/release` 0.9.0. Move a CLI's own skill to this shape: its `metadata.version` goes, and everything that changes with a release moves to CLI docs.
|
|
32
|
+
- **Breaking:** `doctor`'s `skill` row no longer compares versions. It reports whether a copy is there; a copy stating `metadata.version` gets `<run-as> setup`, or `<run-as> skill install` for a copy under the project. Under `--json` the row no longer carries `skill: { copy, copyVersion, packageVersion, home }`, and a copy under home is named in its message.
|
|
33
|
+
- **Breaking:** `skill install` always makes the copy match the package, and `--force` is gone: the project commits the copy, so git shows the change.
|
|
34
|
+
|
|
35
|
+
### Removed
|
|
36
|
+
|
|
37
|
+
- **Breaking:** the Scaffolder's `--skill-hub-git`, `--skill-hub-api` and `--skill-add`. A release that still wants a Skill Hub names `skill` and `skillHub` in `scripts/release.ts`.
|
|
38
|
+
- **Breaking:** `update`'s `next`, with the lines that brought Skill copies to a version.
|
|
39
|
+
- A Packaged skill's Notice before each Command, and the hint on `UNKNOWN_OPTION`, `UNKNOWN_COMMAND` and `INVALID_INPUT` naming a Skill copy of another version.
|
|
40
|
+
|
|
41
|
+
### Upgrade from v0.23.0
|
|
42
|
+
|
|
43
|
+
- Replace `skill: { source }`, `{ add }` or `{ packaged }` with `skill: { folder: "skills/<name>" }`, and on a Global install drop `agents`.
|
|
44
|
+
- List `skills` in `package.json` `files`.
|
|
45
|
+
- On a Global install, open the README with the sentence to paste, give the `setup` line in the skill and `docs/cli/setup.md`, and leave the skill's Hub install line out of them. `scripts/release.ts` may keep `skillHub`.
|
|
46
|
+
- A user's Skill copy from a Skill Hub is replaced by their next `setup` or `update`.
|
|
47
|
+
|
|
7
48
|
## v0.23.0 (2026-11-03)
|
|
8
49
|
|
|
9
50
|
### Added
|
package/dist/agent-cli.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
import { isAbsolute, normalize } from "node:path";
|
|
1
2
|
import { builtInCommands } from "./built-ins/commands.js";
|
|
2
|
-
import { installOf } from "./built-ins/install/install.js";
|
|
3
|
-
import { skillOf } from "./built-ins/skill/skill.js";
|
|
4
3
|
import { commandLabel } from "./command-spec.js";
|
|
5
4
|
import { isCommand, } from "./define.js";
|
|
6
5
|
import { checkCommand, defineCommandFor } from "./define-command.js";
|
|
@@ -21,25 +20,30 @@ function checkTree(commands, path, table) {
|
|
|
21
20
|
checkTree(node, at, table);
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
|
-
function
|
|
25
|
-
if (skill
|
|
23
|
+
function checkSkill({ name, skill, install, }) {
|
|
24
|
+
if (skill?.agents !== undefined && install?.mode === "global") {
|
|
25
|
+
throw new Error(`${name} declares an Agents section on a Global install, which has no repo to write it to`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function checkDocs({ name, docs }) {
|
|
29
|
+
if (docs === undefined)
|
|
26
30
|
return;
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
29
|
-
throw new Error(`${declares},
|
|
30
|
-
|
|
31
|
-
throw new Error(`${declares}, which holds a line break`);
|
|
31
|
+
const inside = docs !== "" && !isAbsolute(docs) && !normalize(docs).startsWith("..");
|
|
32
|
+
if (!inside) {
|
|
33
|
+
throw new Error(`${name} declares docs ${JSON.stringify(docs)}: name a folder inside its package, relative to the package root`);
|
|
34
|
+
}
|
|
32
35
|
}
|
|
33
36
|
function checkCli(cli) {
|
|
34
37
|
const table = errorTableOf(cli);
|
|
35
|
-
|
|
38
|
+
checkDocs(cli);
|
|
36
39
|
if (cli.commands === undefined) {
|
|
37
40
|
checkCommand(cli.command, commandLabel([], cli.name).join(" "), table);
|
|
38
|
-
if (
|
|
39
|
-
throw new Error(`${cli.name} declares a
|
|
41
|
+
if (cli.skill !== undefined) {
|
|
42
|
+
throw new Error(`${cli.name} declares a skill, which only a CLI with several Commands can install`);
|
|
40
43
|
}
|
|
41
44
|
return cli;
|
|
42
45
|
}
|
|
46
|
+
checkSkill(cli);
|
|
43
47
|
const { commands } = cli;
|
|
44
48
|
checkTree(commands, [], table);
|
|
45
49
|
const taken = Object.keys(builtInCommands(cli, { bin: undefined, node: undefined })).filter((name) => commands[name] !== undefined);
|
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,
|
|
1
|
+
{"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAML,SAAS,GAGV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAsB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAqB,UAAU,EAAmB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAuFnD,SAAS,aAAa,CAAC,MAAkB;IACvC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,4BAA4B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAChG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,QAAkB,EAAE,IAAuB,EAAE,KAAiB;IAC/E,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1B,IAAI,SAAS,CAAC,IAAI,CAAC;YAAE,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;;YACxD,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,IAAI,EACJ,KAAK,EACL,OAAO,GAC4C;IACnD,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,mFAAmF,CAC3F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAA8B;IAC3D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO;IAC/B,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kEAAkE,CAChH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAkB,GAAyB;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,SAAS,CAAC,GAAG,CAAC,CAAC;IACf,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,CAAC,IAAI,uEAAuE,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IACzB,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,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,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAe;IACxC,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpB,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,WAAW,CAClB,IAAY,EACZ,QAAqB,EACrB,OAA2B;IAE3B,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IACpF,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAAqB;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC;IAClD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,oFAAoF,CAC5F,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAkB,GAAoC;IACrE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,GAAG,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrF,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC;IACtE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IACtC,OAAO;QACL,GAAG,IAAI;QACP,GAAG,KAAK;QACR,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;KACpF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAItB,MAAM,GAA2C,EAAE;IACnD,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,OAAO;QACL,aAAa,EAAE,gBAAgB,EAA0B;QACzD,uFAAuF;QACvF,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QAC7D,QAAQ,EAAE,UAAU;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -5,7 +5,7 @@ export interface Launch {
|
|
|
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
|
|
9
|
-
* `skill install` only for a
|
|
8
|
+
* The Commands the Runtime adds to a multi-Command CLI: `setup` and `update` only for a Global
|
|
9
|
+
* install, and `skill install` only for a skill whose copy goes under the project.
|
|
10
10
|
*/
|
|
11
11
|
export declare function builtInCommands(cli: CommandTreeCli, launch: Launch): Commands;
|
|
@@ -2,8 +2,8 @@ import { doctorCommand } from "./doctor.js";
|
|
|
2
2
|
import { installOf } from "./install/install.js";
|
|
3
3
|
import { skillOf } from "./skill/skill.js";
|
|
4
4
|
/**
|
|
5
|
-
* The Commands the Runtime adds to a multi-Command CLI: `update` only for a Global
|
|
6
|
-
* `skill install` only for a
|
|
5
|
+
* The Commands the Runtime adds to a multi-Command CLI: `setup` and `update` only for a Global
|
|
6
|
+
* install, and `skill install` only for a skill whose copy goes under the project.
|
|
7
7
|
*/
|
|
8
8
|
export function builtInCommands(cli, launch) {
|
|
9
9
|
const install = installOf(cli);
|
package/dist/built-ins/doctor.js
CHANGED
|
@@ -6,7 +6,6 @@ import { runtimeError } from "../errors.js";
|
|
|
6
6
|
import { lineOf, wholeLine } from "../next-step.js";
|
|
7
7
|
import { doctorChecks, problemOfError, readProject } from "./doctor-rows.js";
|
|
8
8
|
import { runAsOf } from "./install/run-as.js";
|
|
9
|
-
import { packagedSkillDetailsSchema } from "./skill/packaged.js";
|
|
10
9
|
export const DOCTOR_PROBLEMS = "DOCTOR_PROBLEMS";
|
|
11
10
|
const DEFAULT_DEADLINE_MS = 10_000;
|
|
12
11
|
const MS_PER_SECOND = 1000;
|
|
@@ -17,7 +16,6 @@ const rowSchema = z.object({
|
|
|
17
16
|
message: z.string(),
|
|
18
17
|
fix: z.string().optional(),
|
|
19
18
|
code: z.string().optional(),
|
|
20
|
-
skill: packagedSkillDetailsSchema.optional(),
|
|
21
19
|
});
|
|
22
20
|
const reportSchema = z.object({
|
|
23
21
|
rows: z.array(rowSchema),
|
|
@@ -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;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAkB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/built-ins/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,5 +15,7 @@ export declare function globalModulesDir(prefix: string): string;
|
|
|
15
15
|
* `bin` is the script that started the CLI; throws `NOT_GLOBAL_INSTALL` when it is not inside that install.
|
|
16
16
|
*/
|
|
17
17
|
export declare function globalInstallOf(bin: string | undefined, ctx: NpmContext): Promise<InstalledCopy>;
|
|
18
|
+
/** The line that sets a Global install up, run before the CLI is on the machine. */
|
|
19
|
+
export declare function setupLineOf(install: GlobalInstall): string;
|
|
18
20
|
/** npm for a Global install, run in the working directory. */
|
|
19
21
|
export declare function globalNpm(cli: InstallCli, install: GlobalInstall, ctx: Context, node: string | undefined): NpmContext;
|
|
@@ -2,7 +2,7 @@ import { lstat, realpath } from "node:fs/promises";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { orMissing, runtimeError } from "../../errors.js";
|
|
4
4
|
import { wholeLine } from "../../next-step.js";
|
|
5
|
-
import { globalPrefix,
|
|
5
|
+
import { globalPrefix, npmContext, scopeOf, setupCommandLine, } from "../npm.js";
|
|
6
6
|
import { isInside } from "../project-root.js";
|
|
7
7
|
export const NOT_GLOBAL_INSTALL = "NOT_GLOBAL_INSTALL";
|
|
8
8
|
/** Where npm puts global packages under its global prefix. */
|
|
@@ -15,8 +15,8 @@ function notGlobal(ctx, message) {
|
|
|
15
15
|
return runtimeError({
|
|
16
16
|
code: NOT_GLOBAL_INSTALL,
|
|
17
17
|
message,
|
|
18
|
-
hint: "install it
|
|
19
|
-
next: [wholeLine(
|
|
18
|
+
hint: "install it by running the Next step, so its update Command can replace it",
|
|
19
|
+
next: [wholeLine(setupCommandLine(ctx.registry))],
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
@@ -48,6 +48,10 @@ function registryFlags({ package: name, registry }) {
|
|
|
48
48
|
const scope = scopeOf(name);
|
|
49
49
|
return [scope === undefined ? `--registry=${registry}` : `--${scope}:registry=${registry}`];
|
|
50
50
|
}
|
|
51
|
+
/** The line that sets a Global install up, run before the CLI is on the machine. */
|
|
52
|
+
export function setupLineOf(install) {
|
|
53
|
+
return setupCommandLine(globalRegistry(install));
|
|
54
|
+
}
|
|
51
55
|
function globalRegistry(install) {
|
|
52
56
|
const { package: name, registry } = install;
|
|
53
57
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-npm.js","sourceRoot":"","sources":["../../../src/built-ins/install/global-npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAiB,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"global-npm.js","sourceRoot":"","sources":["../../../src/built-ins/install/global-npm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { GlobalInstall } from "../../define.js";
|
|
2
2
|
import type { Install, InstallCli } from "./install.js";
|
|
3
|
-
/** The Install of a CLI installed once per machine with npm, which `update` replaces. */
|
|
3
|
+
/** The Install of a CLI installed once per machine with npm, which `setup` puts there and `update` replaces. */
|
|
4
4
|
export declare function globalInstall(cli: InstallCli, install: GlobalInstall): Install;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { CliError } from "../../errors.js";
|
|
2
|
-
import {
|
|
3
|
-
import { skillOf } from "../skill/skill.js";
|
|
2
|
+
import { setupCommand } from "../setup.js";
|
|
4
3
|
import { updateCommand } from "../update.js";
|
|
5
|
-
import { globalInstallOf, globalNpm, NOT_GLOBAL_INSTALL } from "./global-npm.js";
|
|
4
|
+
import { globalInstallOf, globalNpm, NOT_GLOBAL_INSTALL, setupLineOf } from "./global-npm.js";
|
|
6
5
|
import { releaseCheck } from "./release-check.js";
|
|
7
6
|
import { runAsOf } from "./run-as.js";
|
|
8
7
|
function checkOf(cli, install, { bin, node }) {
|
|
@@ -18,7 +17,7 @@ function checkOf(cli, install, { bin, node }) {
|
|
|
18
17
|
return {
|
|
19
18
|
state: "problem",
|
|
20
19
|
message: error.message,
|
|
21
|
-
fix:
|
|
20
|
+
fix: setupLineOf(install),
|
|
22
21
|
};
|
|
23
22
|
}
|
|
24
23
|
throw error;
|
|
@@ -30,12 +29,15 @@ function checkOf(cli, install, { bin, node }) {
|
|
|
30
29
|
},
|
|
31
30
|
};
|
|
32
31
|
}
|
|
33
|
-
/** The Install of a CLI installed once per machine with npm, which `update` replaces. */
|
|
32
|
+
/** The Install of a CLI installed once per machine with npm, which `setup` puts there and `update` replaces. */
|
|
34
33
|
export function globalInstall(cli, install) {
|
|
35
34
|
const adapter = {
|
|
36
35
|
runAs: runAsOf(cli),
|
|
37
|
-
builtIns: (launch) => ({
|
|
38
|
-
|
|
36
|
+
builtIns: (launch) => ({
|
|
37
|
+
setup: setupCommand(cli, install, launch),
|
|
38
|
+
update: updateCommand(cli, install, launch),
|
|
39
|
+
}),
|
|
40
|
+
// `setup` and `update` fail as the source's when the registry has no release.
|
|
39
41
|
exitClasses: ["source"],
|
|
40
42
|
check: (launch) => checkOf(cli, install, launch),
|
|
41
43
|
notice: (launch, ctx) => releaseCheck(cli, install, adapter.runAs, launch, ctx),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/built-ins/install/global.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/built-ins/install/global.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,SAAS,OAAO,CAAC,GAAe,EAAE,OAAsB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAU;IAC7E,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,GAAY,EAA0B,EAAE;YACtD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC7C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,8BAA8B,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACnE,OAAO;wBACL,KAAK,EAAE,SAAS;wBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC;qBAC1B,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;YAC9B,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC;YACjC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,aAAa,CAAC,GAAe,EAAE,OAAsB;IACnE,MAAM,OAAO,GAAY;QACvB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;QACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC;YACzC,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC;SAC5C,CAAC;QACF,8EAA8E;QAC9E,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC;QAChD,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;KAChF,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import type { Commands, CommandTreeCli, DoctorFinding } from "../../define.js";
|
|
|
3
3
|
import type { DeclaredExitClass } from "../../error-table.js";
|
|
4
4
|
import type { Launch } from "../commands.js";
|
|
5
5
|
import type { NpmContext } from "../npm.js";
|
|
6
|
-
import type { SkillCli
|
|
6
|
+
import type { SkillCli } from "../skill/skill.js";
|
|
7
7
|
export type InstallCli = SkillCli & Pick<CommandTreeCli, "install">;
|
|
8
8
|
/** What tells the operator how to move a build behind the latest release. */
|
|
9
9
|
export type Advice = {
|
|
@@ -35,6 +35,8 @@ export interface Install {
|
|
|
35
35
|
/** Run before a Command, so an agent that rarely runs `doctor` still hears of a newer release. */
|
|
36
36
|
readonly notice: (launch: NoticeLaunch, ctx: Context) => Promise<void>;
|
|
37
37
|
}
|
|
38
|
-
export
|
|
38
|
+
export interface NoticeLaunch extends Launch {
|
|
39
|
+
readonly builtIn: boolean;
|
|
40
|
+
}
|
|
39
41
|
export declare function installOf(cli: InstallCli): Install;
|
|
40
42
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/built-ins/install/install.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/built-ins/install/install.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAoCtC,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE,GAAE,CAAC,CAAC;AAE/C,SAAS,SAAS,CAAC,GAAe;IAChC,MAAM,OAAO,GAAG,KAAK,IAA4B,EAAE,CAAC,CAAC;QACnD,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,gBAAgB,GAAG,CAAC,IAAI,sBAAsB;KACxD,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;QACnB,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QACpB,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACZ,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,EAAE,EAAE,CAAC;SACpD,CAAC;QACF,MAAM,EAAE,QAAQ;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAe;IACvC,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IACxB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACnG,CAAC"}
|
package/dist/built-ins/npm.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Context, Env } from "../context.js";
|
|
2
2
|
import type { CommandTreeCli } from "../define.js";
|
|
3
|
-
import { type
|
|
3
|
+
import { type Step } from "../next-step.js";
|
|
4
4
|
export declare const REGISTRY_UNREACHABLE = "REGISTRY_UNREACHABLE";
|
|
5
5
|
export declare const REGISTRY_AUTH = "REGISTRY_AUTH";
|
|
6
6
|
export declare const INSTALL_FAILED = "INSTALL_FAILED";
|
|
@@ -23,8 +23,8 @@ export interface Registry {
|
|
|
23
23
|
/** What every npm call needs: the CLI it serves, the registry, and where and how npm runs. */
|
|
24
24
|
export interface NpmContext {
|
|
25
25
|
readonly cliName: string;
|
|
26
|
-
/** The
|
|
27
|
-
readonly rerun:
|
|
26
|
+
/** The line to run again, a failure's Next step once its cause is fixed. */
|
|
27
|
+
readonly rerun: Step;
|
|
28
28
|
readonly registry: Registry;
|
|
29
29
|
/** The folder npm runs in, whose `.npmrc` it reads. */
|
|
30
30
|
readonly cwd: string;
|
|
@@ -40,6 +40,8 @@ export declare function npmContext(cli: Pick<CommandTreeCli, "name">, registry:
|
|
|
40
40
|
export declare function scopeOf(name: string): string | undefined;
|
|
41
41
|
/** The command a person runs to install the CLI globally from its registry. */
|
|
42
42
|
export declare function installCommandLine(registry: Registry, version?: string): string;
|
|
43
|
+
/** The line that sets a Global install up, run before the CLI is on the machine. */
|
|
44
|
+
export declare function setupCommandLine({ package: name, flags }: Registry): string;
|
|
43
45
|
interface Npm {
|
|
44
46
|
/** A full path, or `npm` for the one on PATH. */
|
|
45
47
|
readonly path: string;
|
package/dist/built-ins/npm.js
CHANGED
|
@@ -48,6 +48,10 @@ export function scopeOf(name) {
|
|
|
48
48
|
export function installCommandLine(registry, version = "latest") {
|
|
49
49
|
return ["npm", "install", "--global", `${registry.package}@${version}`, ...registry.flags].join(" ");
|
|
50
50
|
}
|
|
51
|
+
/** The line that sets a Global install up, run before the CLI is on the machine. */
|
|
52
|
+
export function setupCommandLine({ package: name, flags }) {
|
|
53
|
+
return ["npx", "-y", ...flags, `${name}@latest`, "setup"].join(" ");
|
|
54
|
+
}
|
|
51
55
|
// Under nvm the first npm on PATH may belong to another Node, and install there.
|
|
52
56
|
export function npmOf(ctx, windows) {
|
|
53
57
|
const beside = ctx.node === undefined ? undefined : join(dirname(ctx.node), windows ? "npm.cmd" : "npm");
|
|
@@ -89,7 +93,7 @@ function failureOf(call, answer, ctx) {
|
|
|
89
93
|
const output = tail(answer.stderr);
|
|
90
94
|
const next = [ctx.rerun];
|
|
91
95
|
if (code !== undefined && NETWORK_CODES.has(code)) {
|
|
92
|
-
return
|
|
96
|
+
return runtimeError({
|
|
93
97
|
code: REGISTRY_UNREACHABLE,
|
|
94
98
|
message: `npm could not reach ${registry} (${code})${output}`,
|
|
95
99
|
hint: `${unreachableHint}, then ${RUN_AGAIN}`,
|
|
@@ -97,7 +101,7 @@ function failureOf(call, answer, ctx) {
|
|
|
97
101
|
});
|
|
98
102
|
}
|
|
99
103
|
if (code !== undefined && AUTH_CODES.has(code)) {
|
|
100
|
-
return
|
|
104
|
+
return runtimeError({
|
|
101
105
|
code: REGISTRY_AUTH,
|
|
102
106
|
message: `${registry} refused npm's credentials (${code})${output}`,
|
|
103
107
|
hint: authHint(code, ctx),
|
|
@@ -115,7 +119,7 @@ function failureOf(call, answer, ctx) {
|
|
|
115
119
|
next: [...next, wholeLine(installCommandLine(ctx.registry))],
|
|
116
120
|
});
|
|
117
121
|
}
|
|
118
|
-
return
|
|
122
|
+
return runtimeError({
|
|
119
123
|
code: NPM_FAILED,
|
|
120
124
|
message: `npm ${call} failed with exit code ${answer.exitCode}${output}`,
|
|
121
125
|
hint: `fix what npm reports, then ${RUN_AGAIN}`,
|
|
@@ -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;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAoB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/built-ins/npm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Command, GlobalInstall } from "../define.js";
|
|
2
|
+
import type { Launch } from "./commands.js";
|
|
3
|
+
import type { SkillCli } from "./skill/skill.js";
|
|
4
|
+
export declare const NOT_ON_PATH = "NOT_ON_PATH";
|
|
5
|
+
/** The built-in `setup`, which runs from any copy, such as npx's, so it never asks to be the global one. */
|
|
6
|
+
export declare function setupCommand(cli: SkillCli, install: GlobalInstall, { node }: Launch): Command;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { lstat, readFile, realpath } from "node:fs/promises";
|
|
2
|
+
import { delimiter, join, normalize } from "node:path";
|
|
3
|
+
import * as z from "zod";
|
|
4
|
+
import { DISK_FULL, PERMISSION_DENIED } from "../context/errno.js";
|
|
5
|
+
import { INTERRUPTED } from "../context/interrupts.js";
|
|
6
|
+
import { pathOf } from "../context/tools.js";
|
|
7
|
+
import { defineCommand } from "../define-command.js";
|
|
8
|
+
import { CliError, orMissing, runtimeError } from "../errors.js";
|
|
9
|
+
import { wholeLine } from "../next-step.js";
|
|
10
|
+
import { globalModulesDir, globalNpm, NOT_GLOBAL_INSTALL, setupLineOf, } from "./install/global-npm.js";
|
|
11
|
+
import { globalPrefix, INSTALL_FAILED, installGlobally, latestVersion, } from "./npm.js";
|
|
12
|
+
import { standingOf } from "./semver.js";
|
|
13
|
+
import { homeCopiesOf, homeSyncSchema, renderHomeSync, renderPlannedSync, syncHome, } from "./skill/home.js";
|
|
14
|
+
import { renderUpgrade, upgradeSchema, upgradesOf } from "./upgrades.js";
|
|
15
|
+
export const NOT_ON_PATH = "NOT_ON_PATH";
|
|
16
|
+
const setupSchema = z.object({
|
|
17
|
+
version: z.string(),
|
|
18
|
+
prefix: z.string(),
|
|
19
|
+
installed: z.boolean(),
|
|
20
|
+
skill: homeSyncSchema.nullable(),
|
|
21
|
+
upgrades: z.array(upgradeSchema),
|
|
22
|
+
docs: z.string().nullable(),
|
|
23
|
+
});
|
|
24
|
+
const installedManifest = z.object({ version: z.string() });
|
|
25
|
+
async function versionAt(packageDir) {
|
|
26
|
+
const text = await orMissing(readFile(join(packageDir, "package.json"), "utf8"));
|
|
27
|
+
if (text === undefined)
|
|
28
|
+
return null;
|
|
29
|
+
try {
|
|
30
|
+
const parsed = installedManifest.safeParse(JSON.parse(text));
|
|
31
|
+
return parsed.success ? parsed.data.version : null;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
// A manifest npm left unreadable is a broken install, which the install below replaces.
|
|
35
|
+
if (error instanceof SyntaxError)
|
|
36
|
+
return null;
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// The Run-as would not run yet, so every Next step is the line that started this.
|
|
41
|
+
function npmOfSetup(cli, install, ctx, node) {
|
|
42
|
+
return { ...globalNpm(cli, install, ctx, node), rerun: wholeLine(setupLineOf(install)) };
|
|
43
|
+
}
|
|
44
|
+
function needsInstall({ from, latest }) {
|
|
45
|
+
return from === null || standingOf(from, latest) === "behind";
|
|
46
|
+
}
|
|
47
|
+
function binDirOf(prefix) {
|
|
48
|
+
return process.platform === "win32" ? prefix : join(prefix, "bin");
|
|
49
|
+
}
|
|
50
|
+
// A PATH entry that cannot be resolved still compares as written, so it only fails to match.
|
|
51
|
+
async function canonical(path) {
|
|
52
|
+
return normalize(await realpath(path).catch(() => path));
|
|
53
|
+
}
|
|
54
|
+
// npx puts its own copy's bin on PATH, so only the global folder's place there tells a later shell finds it.
|
|
55
|
+
async function assertOnPath(cli, prefix, node, ctx) {
|
|
56
|
+
const binDir = binDirOf(prefix);
|
|
57
|
+
const wanted = await canonical(binDir);
|
|
58
|
+
const entries = pathOf(ctx.env).split(delimiter).filter(Boolean);
|
|
59
|
+
const found = await Promise.all(entries.map(canonical));
|
|
60
|
+
if (found.includes(wanted))
|
|
61
|
+
return;
|
|
62
|
+
throw runtimeError({
|
|
63
|
+
code: NOT_ON_PATH,
|
|
64
|
+
message: `${cli.name} is installed in ${binDir}, by the npm of ${node ?? "the Node on PATH"}, a folder not on this shell's PATH`,
|
|
65
|
+
hint: `add ${binDir} to PATH, or ask your user which Node their terminal runs and run this under it`,
|
|
66
|
+
next: [],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const REFUSED = new Set([PERMISSION_DENIED, DISK_FULL, INSTALL_FAILED]);
|
|
70
|
+
// These name the Run-as or a bare npm install, neither of which finishes the job from npx's copy.
|
|
71
|
+
function withSetupLine(error, install) {
|
|
72
|
+
if (!(error instanceof CliError) || !REFUSED.has(error.code))
|
|
73
|
+
return error;
|
|
74
|
+
return runtimeError({
|
|
75
|
+
code: error.code,
|
|
76
|
+
message: error.message,
|
|
77
|
+
hint: error.code === INSTALL_FAILED
|
|
78
|
+
? "fix what npm reports, then run the Next step; if a sandbox refused it, ask your user to type ! then that line"
|
|
79
|
+
: error.hint,
|
|
80
|
+
next: [wholeLine(setupLineOf(install))],
|
|
81
|
+
}, { cause: error });
|
|
82
|
+
}
|
|
83
|
+
function renderSetup(cli, install, setup) {
|
|
84
|
+
const { version, prefix, docs } = setup;
|
|
85
|
+
return [
|
|
86
|
+
setup.installed
|
|
87
|
+
? `installed ${install.package}@${version} with the npm under ${prefix}`
|
|
88
|
+
: `${install.package}@${version} is already installed under ${prefix}`,
|
|
89
|
+
...renderHomeSync(cli.name, setup.skill),
|
|
90
|
+
...setup.upgrades.map(renderUpgrade),
|
|
91
|
+
...(docs === null ? [] : [`docs ${docs}`, `Read that folder before using ${cli.name}.`]),
|
|
92
|
+
].join("\n");
|
|
93
|
+
}
|
|
94
|
+
/** The built-in `setup`, which runs from any copy, such as npx's, so it never asks to be the global one. */
|
|
95
|
+
export function setupCommand(cli, install, { node }) {
|
|
96
|
+
return defineCommand({
|
|
97
|
+
description: "install this CLI and its skill on this machine",
|
|
98
|
+
examples: [
|
|
99
|
+
{ command: `${cli.name} setup`, note: "install the latest version and the skill" },
|
|
100
|
+
{ command: `${cli.name} setup --dry-run`, note: "show what it would change" },
|
|
101
|
+
],
|
|
102
|
+
effect: "write",
|
|
103
|
+
output: setupSchema,
|
|
104
|
+
plan: async (_input, ctx) => {
|
|
105
|
+
const npm = npmOfSetup(cli, install, ctx, node);
|
|
106
|
+
const prefix = await globalPrefix(npm);
|
|
107
|
+
const packageDir = join(globalModulesDir(prefix), install.package);
|
|
108
|
+
// `npm link` puts a symlink to a source checkout where the install would be.
|
|
109
|
+
if ((await orMissing(lstat(packageDir)))?.isSymbolicLink() === true) {
|
|
110
|
+
throw runtimeError({
|
|
111
|
+
code: NOT_GLOBAL_INSTALL,
|
|
112
|
+
message: `${packageDir} is a link (npm link), which an install would replace`,
|
|
113
|
+
hint: "remove the link with npm unlink, then run the Next step",
|
|
114
|
+
next: [wholeLine(setupLineOf(install))],
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
package: install.package,
|
|
119
|
+
from: await versionAt(packageDir),
|
|
120
|
+
latest: await latestVersion(npm),
|
|
121
|
+
prefix,
|
|
122
|
+
packageDir,
|
|
123
|
+
copies: cli.skill === undefined ? [] : await homeCopiesOf(cli.name, ctx.env),
|
|
124
|
+
};
|
|
125
|
+
},
|
|
126
|
+
apply: async (plan, ctx) => {
|
|
127
|
+
const { from, latest, prefix, packageDir } = plan;
|
|
128
|
+
const installs = needsInstall(plan);
|
|
129
|
+
const skill = await ctx
|
|
130
|
+
.runToEnd(`installing ${plan.package}@${latest}`, async () => {
|
|
131
|
+
if (installs) {
|
|
132
|
+
ctx.progress(`installing ${plan.package}@${latest} with the npm under ${prefix}…`);
|
|
133
|
+
await installGlobally(latest, npmOfSetup(cli, install, ctx, node));
|
|
134
|
+
}
|
|
135
|
+
return syncHome(cli, packageDir, ctx);
|
|
136
|
+
})
|
|
137
|
+
.catch((error) => {
|
|
138
|
+
throw withSetupLine(error, install);
|
|
139
|
+
});
|
|
140
|
+
const setup = {
|
|
141
|
+
version: installs || from === null ? latest : from,
|
|
142
|
+
prefix,
|
|
143
|
+
installed: installs,
|
|
144
|
+
skill,
|
|
145
|
+
upgrades: installs && from !== null ? await upgradesOf(packageDir, from, latest) : [],
|
|
146
|
+
docs: cli.docs === undefined ? null : join(packageDir, cli.docs),
|
|
147
|
+
};
|
|
148
|
+
ctx.deliver(setup);
|
|
149
|
+
if (ctx.signal.aborted) {
|
|
150
|
+
throw new CliError({
|
|
151
|
+
code: INTERRUPTED,
|
|
152
|
+
message: `interrupted, but ${plan.package}@${setup.version} and its skill are already in place`,
|
|
153
|
+
hint: "nothing to run again",
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
await assertOnPath(cli, prefix, node, ctx);
|
|
157
|
+
return setup;
|
|
158
|
+
},
|
|
159
|
+
render: (setup) => renderSetup(cli, install, setup),
|
|
160
|
+
renderPlan: (plan) => [
|
|
161
|
+
needsInstall(plan)
|
|
162
|
+
? `would install ${plan.package}@${plan.latest} with the npm under ${plan.prefix}`
|
|
163
|
+
: `${plan.package}@${plan.from} is already installed under ${plan.prefix}`,
|
|
164
|
+
...renderPlannedSync(cli.name, plan.copies),
|
|
165
|
+
].join("\n"),
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=setup.js.map
|