@duyquangnvx/agent-cli 0.14.0 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/agent-cli.js +3 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/built-ins/agents-md.d.ts +16 -0
- package/dist/built-ins/agents-md.js +80 -0
- package/dist/built-ins/agents-md.js.map +1 -0
- package/dist/built-ins/commands.js +5 -6
- package/dist/built-ins/commands.js.map +1 -1
- package/dist/built-ins/doctor-rows.js +12 -92
- package/dist/built-ins/doctor-rows.js.map +1 -1
- package/dist/built-ins/doctor.js +2 -2
- package/dist/built-ins/doctor.js.map +1 -1
- package/dist/built-ins/install/dependency.d.ts +4 -0
- package/dist/built-ins/{dependency-install.js → install/dependency.js} +39 -88
- package/dist/built-ins/install/dependency.js.map +1 -0
- package/dist/built-ins/{global-install.d.ts → install/global-npm.d.ts} +6 -3
- package/dist/built-ins/{global-install.js → install/global-npm.js} +30 -18
- package/dist/built-ins/install/global-npm.js.map +1 -0
- package/dist/built-ins/install/global.d.ts +4 -0
- package/dist/built-ins/install/global.js +44 -0
- package/dist/built-ins/install/global.js.map +1 -0
- package/dist/built-ins/install/install.d.ts +39 -0
- package/dist/built-ins/install/install.js +26 -0
- package/dist/built-ins/install/install.js.map +1 -0
- package/dist/built-ins/install/run-as.d.ts +3 -0
- package/dist/built-ins/install/run-as.js +5 -0
- package/dist/built-ins/install/run-as.js.map +1 -0
- package/dist/built-ins/npm.d.ts +2 -6
- package/dist/built-ins/npm.js +0 -24
- package/dist/built-ins/npm.js.map +1 -1
- package/dist/built-ins/skill/hub.d.ts +7 -0
- package/dist/built-ins/{skills.js → skill/hub.js} +32 -7
- package/dist/built-ins/skill/hub.js.map +1 -0
- package/dist/built-ins/skill/install-command.d.ts +23 -0
- package/dist/built-ins/{skill-install.js → skill/install-command.js} +40 -61
- package/dist/built-ins/skill/install-command.js.map +1 -0
- package/dist/built-ins/skill/packaged.d.ts +12 -0
- package/dist/built-ins/skill/packaged.js +86 -0
- package/dist/built-ins/skill/packaged.js.map +1 -0
- package/dist/built-ins/skill/skill.d.ts +28 -0
- package/dist/built-ins/skill/skill.js +10 -0
- package/dist/built-ins/skill/skill.js.map +1 -0
- package/dist/built-ins/update.d.ts +3 -2
- package/dist/built-ins/update.js +8 -15
- package/dist/built-ins/update.js.map +1 -1
- package/dist/define.d.ts +6 -2
- package/dist/define.js.map +1 -1
- package/dist/error-table.d.ts +25 -2
- package/dist/error-table.js +4 -1
- package/dist/error-table.js.map +1 -1
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +14 -3
- package/dist/errors.js.map +1 -1
- package/dist/exit-classes.js +5 -4
- package/dist/exit-classes.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/project-root.d.ts +24 -0
- package/dist/project-root.js +69 -0
- package/dist/project-root.js.map +1 -0
- package/dist/run-cli.js +1 -1
- package/dist/run-cli.js.map +1 -1
- package/dist/run-command.js +8 -2
- package/dist/run-command.js.map +1 -1
- package/package.json +1 -1
- package/dist/built-ins/dependency-install.d.ts +0 -67
- package/dist/built-ins/dependency-install.js.map +0 -1
- package/dist/built-ins/global-install.js.map +0 -1
- package/dist/built-ins/packaged-skill.d.ts +0 -38
- package/dist/built-ins/packaged-skill.js +0 -80
- package/dist/built-ins/packaged-skill.js.map +0 -1
- package/dist/built-ins/skill-install.d.ts +0 -3
- package/dist/built-ins/skill-install.js.map +0 -1
- package/dist/built-ins/skills.d.ts +0 -21
- package/dist/built-ins/skills.js.map +0 -1
- package/dist/run-as.d.ts +0 -6
- package/dist/run-as.js +0 -8
- package/dist/run-as.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,24 @@ What changed in each release of `@duyquangnvx/agent-cli` (the Runtime) and `@duy
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## v0.15.1 (2026-10-27)
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Help of a multi-Command CLI with a Dependency install no longer lists exit 3, which only `update` of a Global install can end in.
|
|
12
|
+
|
|
13
|
+
## v0.15.0 (2026-10-27)
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- A Packaged-skill CLI gives the `skill` row's problem as a Notice before every Command run from an install, Built-in Commands aside: a missing copy or one of another `metadata.version` (with ``run `<run-as> skill install` ``), or a personal copy under `~/.claude/skills`. A file it cannot read gives a Notice that the copy could not be checked, and the Command still runs.
|
|
18
|
+
- `doctor` of a Packaged-skill CLI has an advisory `agents` row: a project root `AGENTS.md` without the CLI's block, or with one `skill install` would rewrite, is a problem whose fix is `<run-as> skill install`; a `CLAUDE.md` without an `@AGENTS.md` line is one with no fix. The agent-cli skill says a CLI need not check either itself.
|
|
19
|
+
- An Error table entry can name a string key of its `details` in `print`, such as `print: "stack"`, which text mode prints between the message and the hint, so a CLI need not repeat it in the message. `--json` and help JSON are unchanged. The agent-cli skill covers it.
|
|
20
|
+
|
|
21
|
+
### Upgrade from v0.14.0
|
|
22
|
+
|
|
23
|
+
- A Packaged-skill CLI that gives its own Notice of an outdated Skill copy, or has its own `doctor` row for its `AGENTS.md` block, deletes it: the Runtime now gives both.
|
|
24
|
+
|
|
7
25
|
## v0.14.0 (2026-10-27)
|
|
8
26
|
|
|
9
27
|
### Added
|
package/dist/agent-cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { builtInCommands } from "./built-ins/commands.js";
|
|
2
|
-
import {
|
|
2
|
+
import { installOf } from "./built-ins/install/install.js";
|
|
3
|
+
import { skillOf } from "./built-ins/skill/skill.js";
|
|
3
4
|
import { defineCommandFor, } from "./define.js";
|
|
4
5
|
import { runtimeCodesIn } from "./exit-classes.js";
|
|
5
6
|
function checkOwnCodes(cli) {
|
|
@@ -11,7 +12,7 @@ function checkOwnCodes(cli) {
|
|
|
11
12
|
function defineCli(cli) {
|
|
12
13
|
checkOwnCodes(cli);
|
|
13
14
|
if (cli.commands === undefined) {
|
|
14
|
-
if (
|
|
15
|
+
if (skillOf(cli, installOf(cli)).kind === "packaged") {
|
|
15
16
|
throw new Error(`${cli.name} declares a Packaged skill, which only a CLI with several Commands can install`);
|
|
16
17
|
}
|
|
17
18
|
return cli;
|
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,EAAE,
|
|
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,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,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,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrD,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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CommandTreeCli, DoctorCheck } from "../define.js";
|
|
2
|
+
import type { Install } from "./install/install.js";
|
|
3
|
+
type AgentsCli = Pick<CommandTreeCli, "name" | "description">;
|
|
4
|
+
export type BlockChange = "create" | "add" | "rewrite";
|
|
5
|
+
/** The CLI's block in the project root's AGENTS.md, and what `skill install` would do to it. */
|
|
6
|
+
export interface AgentsMd {
|
|
7
|
+
readonly path: string;
|
|
8
|
+
readonly block: string;
|
|
9
|
+
readonly change: BlockChange | null;
|
|
10
|
+
}
|
|
11
|
+
/** `text` with the CLI's block between its markers, appended when they are missing; nothing else changes. */
|
|
12
|
+
export declare function withBlock(cli: AgentsCli, install: Install, text: string): string;
|
|
13
|
+
export declare function agentsMdAt(cli: AgentsCli, install: Install, root: string): Promise<AgentsMd>;
|
|
14
|
+
export declare function handEditsAt(root: string): Promise<string[]>;
|
|
15
|
+
export declare function agentsRow(cli: AgentsCli, install: Install): DoctorCheck;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { orMissing } from "../errors.js";
|
|
4
|
+
import { projectRootOf } from "../project-root.js";
|
|
5
|
+
/** One paragraph telling every session that the CLI exists, how to run it and which skill to load. */
|
|
6
|
+
function agentsBlock(cli, { runAs, agentsCaveat }) {
|
|
7
|
+
const what = cli.description.replace(/\.$/, "");
|
|
8
|
+
const run = `Run it as \`${runAs}\`${agentsCaveat === undefined ? "" : `, ${agentsCaveat}`}`;
|
|
9
|
+
return `\`${cli.name}\`: ${what}. ${run}. Load the \`${cli.name}\` skill before using it.`;
|
|
10
|
+
}
|
|
11
|
+
function markersOf(name) {
|
|
12
|
+
return { begin: `<!-- BEGIN:${name} -->`, end: `<!-- END:${name} -->` };
|
|
13
|
+
}
|
|
14
|
+
/** `text` with the CLI's block between its markers, appended when they are missing; nothing else changes. */
|
|
15
|
+
export function withBlock(cli, install, text) {
|
|
16
|
+
const { begin, end } = markersOf(cli.name);
|
|
17
|
+
const whole = `${begin}\n${agentsBlock(cli, install)}\n${end}`;
|
|
18
|
+
const start = text.indexOf(begin);
|
|
19
|
+
const stop = start === -1 ? -1 : text.indexOf(end, start);
|
|
20
|
+
if (stop !== -1)
|
|
21
|
+
return `${text.slice(0, start)}${whole}${text.slice(stop + end.length)}`;
|
|
22
|
+
if (text === "")
|
|
23
|
+
return `${whole}\n`;
|
|
24
|
+
return `${text}${text.endsWith("\n") ? "" : "\n"}\n${whole}\n`;
|
|
25
|
+
}
|
|
26
|
+
export async function agentsMdAt(cli, install, root) {
|
|
27
|
+
const path = join(root, "AGENTS.md");
|
|
28
|
+
const existing = await orMissing(readFile(path, "utf8"));
|
|
29
|
+
const block = agentsBlock(cli, install);
|
|
30
|
+
if (existing === undefined)
|
|
31
|
+
return { path, block, change: "create" };
|
|
32
|
+
if (withBlock(cli, install, existing) === existing)
|
|
33
|
+
return { path, block, change: null };
|
|
34
|
+
return {
|
|
35
|
+
path,
|
|
36
|
+
block,
|
|
37
|
+
change: existing.includes(markersOf(cli.name).begin) ? "rewrite" : "add",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Claude Code reads AGENTS.md only through an `@AGENTS.md` line, and no CLI edits CLAUDE.md.
|
|
41
|
+
export async function handEditsAt(root) {
|
|
42
|
+
const claudeMd = join(root, "CLAUDE.md");
|
|
43
|
+
const text = await orMissing(readFile(claudeMd, "utf8"));
|
|
44
|
+
if (text === undefined || text.split(/\r?\n/).some((line) => line.trim() === "@AGENTS.md")) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
return [`add a line \`@AGENTS.md\` to ${claudeMd}, so Claude Code reads AGENTS.md`];
|
|
48
|
+
}
|
|
49
|
+
// A repo may leave the CLI out of its sessions on purpose, so the row is advisory.
|
|
50
|
+
export function agentsRow(cli, install) {
|
|
51
|
+
return {
|
|
52
|
+
name: "agents",
|
|
53
|
+
advisory: true,
|
|
54
|
+
run: async (ctx) => {
|
|
55
|
+
const root = await projectRootOf(ctx.cwd);
|
|
56
|
+
const { path, change } = await agentsMdAt(cli, install, root);
|
|
57
|
+
const fix = `${install.runAs} skill install`;
|
|
58
|
+
if (change === "rewrite") {
|
|
59
|
+
return {
|
|
60
|
+
state: "problem",
|
|
61
|
+
message: `${path} holds a ${cli.name} block other than the one ${fix} writes`,
|
|
62
|
+
fix,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (change !== null) {
|
|
66
|
+
return {
|
|
67
|
+
state: "problem",
|
|
68
|
+
message: `${path} holds no ${cli.name} block, so sessions in this repo do not know ${cli.name}`,
|
|
69
|
+
fix,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const holds = `${path} holds the ${cli.name} block`;
|
|
73
|
+
const [edit] = await handEditsAt(root);
|
|
74
|
+
return edit === undefined
|
|
75
|
+
? { state: "ok", message: holds }
|
|
76
|
+
: { state: "problem", message: `${holds}; ${edit}` };
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=agents-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/built-ins/agents-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { doctorCommand } from "./doctor.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { updateCommand } from "./update.js";
|
|
2
|
+
import { installOf } from "./install/install.js";
|
|
3
|
+
import { skillOf } from "./skill/skill.js";
|
|
5
4
|
/**
|
|
6
5
|
* The Commands the Runtime adds to a multi-Command CLI: `update` only for a Global install, and
|
|
7
6
|
* `skill install` only for a Packaged skill.
|
|
8
7
|
*/
|
|
9
8
|
export function builtInCommands(cli, launch) {
|
|
10
|
-
const
|
|
9
|
+
const install = installOf(cli);
|
|
11
10
|
return {
|
|
12
11
|
doctor: doctorCommand(cli, launch),
|
|
13
|
-
...
|
|
14
|
-
...(
|
|
12
|
+
...install.builtIns(launch),
|
|
13
|
+
...skillOf(cli, install).builtIns,
|
|
15
14
|
};
|
|
16
15
|
}
|
|
17
16
|
//# 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,
|
|
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,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAQ3C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAmB,EAAE,MAAc;IACjE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC;QAClC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3B,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -3,18 +3,13 @@ import { CliError, messageOf } from "../errors.js";
|
|
|
3
3
|
import { projectOf } from "../project.js";
|
|
4
4
|
import { toolRows } from "../tools.js";
|
|
5
5
|
import { versionLine } from "../version.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { globalNpm, installCommandLine, latestVersion, npmContext, } from "./npm.js";
|
|
9
|
-
import { packagedFolderOf, packagedSkillFinding } from "./packaged-skill.js";
|
|
6
|
+
import { installOf } from "./install/install.js";
|
|
7
|
+
import { latestVersion } from "./npm.js";
|
|
10
8
|
import { engineMinimum, meetsMinimum, standingOf } from "./semver.js";
|
|
11
|
-
import {
|
|
9
|
+
import { skillOf } from "./skill/skill.js";
|
|
12
10
|
function ok(message) {
|
|
13
11
|
return { state: "ok", message };
|
|
14
12
|
}
|
|
15
|
-
function noInstall(cli) {
|
|
16
|
-
return { state: "skipped", message: `not checked: ${cli.name} declares no install` };
|
|
17
|
-
}
|
|
18
13
|
function buildRow(cli) {
|
|
19
14
|
return { name: "build", run: () => ok(versionLine(cli)) };
|
|
20
15
|
}
|
|
@@ -82,65 +77,16 @@ function projectRow({ file }, read) {
|
|
|
82
77
|
},
|
|
83
78
|
};
|
|
84
79
|
}
|
|
85
|
-
function surveyOnce(bin) {
|
|
86
|
-
let survey;
|
|
87
|
-
return (install, cwd) => {
|
|
88
|
-
survey ??= surveyDependency(install, bin, cwd);
|
|
89
|
-
return survey;
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
80
|
// A source run or an unreachable registry never stops a Command working, so these two rows are advisory.
|
|
93
|
-
function installRow(
|
|
94
|
-
return {
|
|
95
|
-
name: "install",
|
|
96
|
-
advisory: true,
|
|
97
|
-
run: async (ctx) => {
|
|
98
|
-
const { install } = cli;
|
|
99
|
-
if (install === undefined)
|
|
100
|
-
return noInstall(cli);
|
|
101
|
-
if (install.mode === "dependency") {
|
|
102
|
-
return dependencyInstallFinding(cli, install, await survey(install, ctx.cwd));
|
|
103
|
-
}
|
|
104
|
-
const npm = globalNpm(cli, install, ctx, node);
|
|
105
|
-
try {
|
|
106
|
-
const copy = await globalInstallOf(bin, npm);
|
|
107
|
-
return ok(`a global npm install under ${copy.prefix}`);
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
if (error instanceof CliError && error.code === NOT_GLOBAL_INSTALL) {
|
|
111
|
-
return {
|
|
112
|
-
state: "problem",
|
|
113
|
-
message: error.message,
|
|
114
|
-
fix: installCommandLine(npm.registry),
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
throw error;
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
};
|
|
81
|
+
function installRow(check) {
|
|
82
|
+
return { name: "install", advisory: true, run: check.install };
|
|
121
83
|
}
|
|
122
|
-
|
|
123
|
-
if (install.mode === "global") {
|
|
124
|
-
const fix = `${cli.name} update`;
|
|
125
|
-
return { npm: globalNpm(cli, install, ctx, node), advise: () => ({ fix }) };
|
|
126
|
-
}
|
|
127
|
-
const release = dependencyRelease(cli, install, await survey(install, ctx.cwd));
|
|
128
|
-
if ("skipped" in release)
|
|
129
|
-
return release;
|
|
130
|
-
return {
|
|
131
|
-
npm: npmContext(cli, release.registry, ctx, node, release.cwd),
|
|
132
|
-
advise: release.advise,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
function registryRow(cli, { node }, survey) {
|
|
84
|
+
function registryRow(cli, check) {
|
|
136
85
|
return {
|
|
137
86
|
name: "registry",
|
|
138
87
|
advisory: true,
|
|
139
88
|
run: async (ctx) => {
|
|
140
|
-
const
|
|
141
|
-
if (install === undefined)
|
|
142
|
-
return noInstall(cli);
|
|
143
|
-
const lookup = await releaseLookupOf(cli, install, ctx, node, survey);
|
|
89
|
+
const lookup = await check.release(ctx);
|
|
144
90
|
if ("skipped" in lookup)
|
|
145
91
|
return lookup.skipped;
|
|
146
92
|
const { npm, advise } = lookup;
|
|
@@ -158,45 +104,19 @@ function registryRow(cli, { node }, survey) {
|
|
|
158
104
|
},
|
|
159
105
|
};
|
|
160
106
|
}
|
|
161
|
-
const SKILL_STATE_NOTES = {
|
|
162
|
-
current: "the same as this build",
|
|
163
|
-
behind: "older than this build",
|
|
164
|
-
ahead: "newer than this build",
|
|
165
|
-
unversioned: "states no metadata.version",
|
|
166
|
-
unreadable: "could not be read",
|
|
167
|
-
};
|
|
168
|
-
function describeCopy({ path, version, state }) {
|
|
169
|
-
return `${path}${version === undefined ? "" : ` ${version}`} (${SKILL_STATE_NOTES[state]})`;
|
|
170
|
-
}
|
|
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.
|
|
172
|
-
function skillRow(cli) {
|
|
173
|
-
const packaged = packagedFolderOf(cli);
|
|
174
|
-
return {
|
|
175
|
-
name: "skill",
|
|
176
|
-
advisory: true,
|
|
177
|
-
run: async (ctx) => {
|
|
178
|
-
if (packaged !== undefined)
|
|
179
|
-
return packagedSkillFinding(cli, packaged, ctx);
|
|
180
|
-
const { copies, fix } = await skillReport(cli, cli.version, ctx);
|
|
181
|
-
const message = copies.length === 0
|
|
182
|
-
? `no copy of the ${cli.name} skill is installed`
|
|
183
|
-
: copies.map(describeCopy).join("; ");
|
|
184
|
-
return fix === undefined ? ok(message) : { state: "ok", message, fix };
|
|
185
|
-
},
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
107
|
/** Every row `doctor` reports, in order: the fixed rows around the CLI's own and its tools'. */
|
|
189
108
|
export function doctorChecks(cli, launch, read) {
|
|
190
|
-
const
|
|
109
|
+
const install = installOf(cli);
|
|
110
|
+
const check = install.check(launch);
|
|
191
111
|
return [
|
|
192
112
|
buildRow(cli),
|
|
193
113
|
nodeRow(cli),
|
|
194
114
|
...(cli.project === undefined ? [] : [projectRow(cli.project, read)]),
|
|
195
115
|
...(cli.doctor ?? []),
|
|
196
116
|
...toolRows(cli.tools ?? [], cli.commands),
|
|
197
|
-
installRow(
|
|
198
|
-
registryRow(cli,
|
|
199
|
-
|
|
117
|
+
installRow(check),
|
|
118
|
+
registryRow(cli, check),
|
|
119
|
+
...skillOf(cli, install).rows,
|
|
200
120
|
];
|
|
201
121
|
}
|
|
202
122
|
//# sourceMappingURL=doctor-rows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-rows.js","sourceRoot":"","sources":["../../src/built-ins/doctor-rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,
|
|
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,9 +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";
|
|
6
5
|
import { doctorChecks, problemOfError, readProject } from "./doctor-rows.js";
|
|
7
|
-
import {
|
|
6
|
+
import { runAsOf } from "./install/run-as.js";
|
|
7
|
+
import { packagedSkillDetailsSchema } from "./skill/packaged.js";
|
|
8
8
|
export const DOCTOR_PROBLEMS = "DOCTOR_PROBLEMS";
|
|
9
9
|
const DEFAULT_DEADLINE_MS = 10_000;
|
|
10
10
|
const MS_PER_SECOND = 1000;
|
|
@@ -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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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DependencyInstall } from "../../define.js";
|
|
2
|
+
import type { Install, InstallCli } from "./install.js";
|
|
3
|
+
/** The Install of a CLI each project pins as a dependency, run through npx (ADR 0011). */
|
|
4
|
+
export declare function dependencyInstall(cli: InstallCli, install: DependencyInstall): Install;
|
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
import { readFile, realpath
|
|
2
|
-
import {
|
|
1
|
+
import { readFile, realpath } from "node:fs/promises";
|
|
2
|
+
import { join, sep } from "node:path";
|
|
3
3
|
import * as z from "zod";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
const MANAGERS = ["pnpm", "npm", "yarn", "bun"];
|
|
9
|
-
const LOCKFILES = [
|
|
10
|
-
["pnpm-lock.yaml", "pnpm"],
|
|
11
|
-
["package-lock.json", "npm"],
|
|
12
|
-
["yarn.lock", "yarn"],
|
|
13
|
-
["bun.lock", "bun"],
|
|
14
|
-
["bun.lockb", "bun"],
|
|
15
|
-
];
|
|
4
|
+
import { messageOf, orMissing } from "../../errors.js";
|
|
5
|
+
import { ancestorsOf, exists, isInside, lockfileRootOf, manifestIn, } from "../../project-root.js";
|
|
6
|
+
import { npmContext, scopeOf } from "../npm.js";
|
|
7
|
+
import { runAsOf } from "./run-as.js";
|
|
16
8
|
// Both upgrades keep a devDependency under devDependencies (npm 12.2, pnpm 12.14). pnpm keeps the pin's style; npm writes the range its save-exact config asks for.
|
|
17
9
|
const LINES = {
|
|
18
10
|
pnpm: {
|
|
@@ -26,52 +18,7 @@ const LINES = {
|
|
|
26
18
|
install: "npm install",
|
|
27
19
|
},
|
|
28
20
|
};
|
|
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
|
-
});
|
|
34
21
|
const packageSchema = z.object({ version: z.string() });
|
|
35
|
-
/** `dir` and every folder above it, nearest first. */
|
|
36
|
-
function ancestorsOf(dir) {
|
|
37
|
-
const parent = dirname(dir);
|
|
38
|
-
return parent === dir ? [dir] : [dir, ...ancestorsOf(parent)];
|
|
39
|
-
}
|
|
40
|
-
async function exists(path) {
|
|
41
|
-
try {
|
|
42
|
-
await stat(path);
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
if (isMissingFile(error))
|
|
47
|
-
return false;
|
|
48
|
-
throw error;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// An unreadable package.json names no package manager and lists no package; the lockfile still names the manager.
|
|
52
|
-
async function manifestIn(dir) {
|
|
53
|
-
let text;
|
|
54
|
-
try {
|
|
55
|
-
text = await readFile(join(dir, "package.json"), "utf8");
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
if (isMissingFile(error))
|
|
59
|
-
return undefined;
|
|
60
|
-
throw error;
|
|
61
|
-
}
|
|
62
|
-
let manifest;
|
|
63
|
-
try {
|
|
64
|
-
manifest = JSON.parse(text);
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
return undefined;
|
|
68
|
-
}
|
|
69
|
-
return manifestSchema.safeParse(manifest).data;
|
|
70
|
-
}
|
|
71
|
-
async function declaredManager(dir) {
|
|
72
|
-
const name = (await manifestIn(dir))?.packageManager?.split("@")[0];
|
|
73
|
-
return MANAGERS.find((manager) => manager === name);
|
|
74
|
-
}
|
|
75
22
|
// 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
23
|
async function manifestListing(name, cwd, root) {
|
|
77
24
|
const dirs = ancestorsOf(cwd);
|
|
@@ -85,20 +32,6 @@ async function manifestListing(name, cwd, root) {
|
|
|
85
32
|
}
|
|
86
33
|
return undefined;
|
|
87
34
|
}
|
|
88
|
-
async function lockfileRootOf(cwd) {
|
|
89
|
-
for (const dir of ancestorsOf(cwd)) {
|
|
90
|
-
for (const [file, kind] of LOCKFILES) {
|
|
91
|
-
if (await exists(join(dir, file))) {
|
|
92
|
-
return { dir, manager: (await declaredManager(dir)) ?? kind };
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return undefined;
|
|
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
|
-
}
|
|
102
35
|
async function versionIn(manifest) {
|
|
103
36
|
try {
|
|
104
37
|
return packageSchema.parse(JSON.parse(await readFile(manifest, "utf8"))).version;
|
|
@@ -124,11 +57,7 @@ async function standingOf(install, bin, cwd, root) {
|
|
|
124
57
|
const copy = { projectDir, realDir: await realpath(folder), version };
|
|
125
58
|
if (!copy.realDir.split(sep).includes("node_modules"))
|
|
126
59
|
return { kind: "linked", copy };
|
|
127
|
-
const runningFrom = await realpath(bin)
|
|
128
|
-
if (isMissingFile(error))
|
|
129
|
-
return bin;
|
|
130
|
-
throw error;
|
|
131
|
-
});
|
|
60
|
+
const runningFrom = (await orMissing(realpath(bin))) ?? bin;
|
|
132
61
|
return isInside(copy.realDir, runningFrom)
|
|
133
62
|
? { kind: "installed", copy }
|
|
134
63
|
: { kind: "other", copy, runningFrom };
|
|
@@ -136,7 +65,7 @@ async function standingOf(install, bin, cwd, root) {
|
|
|
136
65
|
const manifest = await manifestListing(install.package, cwd, root);
|
|
137
66
|
return manifest === undefined ? { kind: "missing" } : { kind: "listed", manifest };
|
|
138
67
|
}
|
|
139
|
-
|
|
68
|
+
async function surveyDependency(install, bin, cwd) {
|
|
140
69
|
const root = await lockfileRootOf(cwd);
|
|
141
70
|
return { cwd, root, standing: await standingOf(install, bin, cwd, root) };
|
|
142
71
|
}
|
|
@@ -162,7 +91,7 @@ function problem(message, fix) {
|
|
|
162
91
|
return fix === undefined ? { state: "problem", message } : { state: "problem", message, fix };
|
|
163
92
|
}
|
|
164
93
|
/** The `install` row of a Dependency install. */
|
|
165
|
-
|
|
94
|
+
function installFinding(cli, runAs, install, { cwd, root, standing }) {
|
|
166
95
|
const lines = root === undefined ? undefined : LINES[root.manager];
|
|
167
96
|
switch (standing.kind) {
|
|
168
97
|
case "source":
|
|
@@ -176,7 +105,7 @@ export function dependencyInstallFinding(cli, install, { cwd, root, standing })
|
|
|
176
105
|
return problem(`${standing.manifest} is not a package.json with a version: ${standing.reason}`, lines?.install);
|
|
177
106
|
case "other": {
|
|
178
107
|
const { copy, runningFrom } = standing;
|
|
179
|
-
return problem(`${cli.name} runs from ${runningFrom}, not from this project's ${install.package} ${copy.version} at ${copy.realDir}`, `${
|
|
108
|
+
return problem(`${cli.name} runs from ${runningFrom}, not from this project's ${install.package} ${copy.version} at ${copy.realDir}`, `${runAs} doctor`);
|
|
180
109
|
}
|
|
181
110
|
case "installed": {
|
|
182
111
|
const { copy } = standing;
|
|
@@ -214,13 +143,35 @@ function adviceFor(install, root, latest) {
|
|
|
214
143
|
};
|
|
215
144
|
}
|
|
216
145
|
// npm reads the .npmrc of the nearest folder holding a package.json, so it runs at the lockfile's root (ADR 0010).
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
146
|
+
// Both `doctor` rows read one survey, made by whichever asks first.
|
|
147
|
+
function checkOf(cli, install, runAs, { bin, node }) {
|
|
148
|
+
let survey;
|
|
149
|
+
const surveyed = (cwd) => {
|
|
150
|
+
survey ??= surveyDependency(install, bin, cwd);
|
|
151
|
+
return survey;
|
|
152
|
+
};
|
|
153
|
+
return {
|
|
154
|
+
install: async (ctx) => installFinding(cli, runAs, install, await surveyed(ctx.cwd)),
|
|
155
|
+
release: async (ctx) => {
|
|
156
|
+
const { cwd, root, standing } = await surveyed(ctx.cwd);
|
|
157
|
+
if (isUnchecked(standing))
|
|
158
|
+
return { skipped: skippedFor(cli, install, standing) };
|
|
159
|
+
return {
|
|
160
|
+
npm: npmContext(cli, registryOf(install, root?.dir), ctx, node, root?.dir ?? cwd),
|
|
161
|
+
advise: (latest) => adviceFor(install, root, latest),
|
|
162
|
+
};
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/** The Install of a CLI each project pins as a dependency, run through npx (ADR 0011). */
|
|
167
|
+
export function dependencyInstall(cli, install) {
|
|
168
|
+
const runAs = runAsOf(cli);
|
|
220
169
|
return {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
170
|
+
runAs,
|
|
171
|
+
builtIns: () => ({}),
|
|
172
|
+
exitClasses: [],
|
|
173
|
+
agentsCaveat: `and only from a package that has \`${install.package}\` in its dependencies; from anywhere else npx reports the package missing`,
|
|
174
|
+
check: (launch) => checkOf(cli, install, runAs, launch),
|
|
224
175
|
};
|
|
225
176
|
}
|
|
226
|
-
//# sourceMappingURL=dependency
|
|
177
|
+
//# sourceMappingURL=dependency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency.js","sourceRoot":"","sources":["../../../src/built-ins/install/dependency.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Context } from "../../context.js";
|
|
2
|
+
import type { GlobalInstall } from "../../define.js";
|
|
3
|
+
import { type NpmContext } from "../npm.js";
|
|
4
|
+
import type { InstallCli } from "./install.js";
|
|
2
5
|
export declare const NOT_GLOBAL_INSTALL = "NOT_GLOBAL_INSTALL";
|
|
3
6
|
/** Where npm installed this copy of the CLI globally. */
|
|
4
7
|
export interface InstalledCopy {
|
|
@@ -7,10 +10,10 @@ export interface InstalledCopy {
|
|
|
7
10
|
}
|
|
8
11
|
/** Where npm puts global packages under its global prefix. */
|
|
9
12
|
export declare function globalModulesDir(prefix: string): string;
|
|
10
|
-
/** Whether `path` lies strictly inside `dir`. */
|
|
11
|
-
export declare function isInside(dir: string, path: string): boolean;
|
|
12
13
|
/**
|
|
13
14
|
* The global npm install this copy runs from, found by asking npm for its global prefix.
|
|
14
15
|
* `bin` is the script that started the CLI; throws `NOT_GLOBAL_INSTALL` when it is not inside that install.
|
|
15
16
|
*/
|
|
16
17
|
export declare function globalInstallOf(bin: string | undefined, ctx: NpmContext): Promise<InstalledCopy>;
|
|
18
|
+
/** npm for a Global install, run in the working directory. */
|
|
19
|
+
export declare function globalNpm(cli: InstallCli, install: GlobalInstall, ctx: Context, node: string | undefined): NpmContext;
|