@duyquangnvx/agent-cli 0.15.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 +6 -0
- package/dist/agent-cli.js +3 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/built-ins/agents-md.d.ts +6 -3
- package/dist/built-ins/agents-md.js +12 -16
- package/dist/built-ins/agents-md.js.map +1 -1
- 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 -94
- 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} +39 -16
- 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/{packaged-skill.js → skill/packaged.js} +27 -44
- 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/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 +5 -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 -45
- 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,12 @@ 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
|
+
|
|
7
13
|
## v0.15.0 (2026-10-27)
|
|
8
14
|
|
|
9
15
|
### 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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { CommandTreeCli, DoctorCheck } from "../define.js";
|
|
2
|
+
import type { Install } from "./install/install.js";
|
|
3
|
+
type AgentsCli = Pick<CommandTreeCli, "name" | "description">;
|
|
2
4
|
export type BlockChange = "create" | "add" | "rewrite";
|
|
3
5
|
/** The CLI's block in the project root's AGENTS.md, and what `skill install` would do to it. */
|
|
4
6
|
export interface AgentsMd {
|
|
@@ -7,7 +9,8 @@ export interface AgentsMd {
|
|
|
7
9
|
readonly change: BlockChange | null;
|
|
8
10
|
}
|
|
9
11
|
/** `text` with the CLI's block between its markers, appended when they are missing; nothing else changes. */
|
|
10
|
-
export declare function withBlock(cli:
|
|
11
|
-
export declare function agentsMdAt(cli:
|
|
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>;
|
|
12
14
|
export declare function handEditsAt(root: string): Promise<string[]>;
|
|
13
|
-
export declare function agentsRow(cli:
|
|
15
|
+
export declare function agentsRow(cli: AgentsCli, install: Install): DoctorCheck;
|
|
16
|
+
export {};
|
|
@@ -1,24 +1,20 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { orMissing } from "../errors.js";
|
|
4
|
-
import {
|
|
5
|
-
import { projectRootOf } from "./dependency-install.js";
|
|
4
|
+
import { projectRootOf } from "../project-root.js";
|
|
6
5
|
/** One paragraph telling every session that the CLI exists, how to run it and which skill to load. */
|
|
7
|
-
function agentsBlock(cli) {
|
|
8
|
-
const { install } = cli;
|
|
9
|
-
const where = install?.mode === "dependency"
|
|
10
|
-
? `, and only from a package that has \`${install.package}\` in its dependencies; from anywhere else npx reports the package missing`
|
|
11
|
-
: "";
|
|
6
|
+
function agentsBlock(cli, { runAs, agentsCaveat }) {
|
|
12
7
|
const what = cli.description.replace(/\.$/, "");
|
|
13
|
-
|
|
8
|
+
const run = `Run it as \`${runAs}\`${agentsCaveat === undefined ? "" : `, ${agentsCaveat}`}`;
|
|
9
|
+
return `\`${cli.name}\`: ${what}. ${run}. Load the \`${cli.name}\` skill before using it.`;
|
|
14
10
|
}
|
|
15
11
|
function markersOf(name) {
|
|
16
12
|
return { begin: `<!-- BEGIN:${name} -->`, end: `<!-- END:${name} -->` };
|
|
17
13
|
}
|
|
18
14
|
/** `text` with the CLI's block between its markers, appended when they are missing; nothing else changes. */
|
|
19
|
-
export function withBlock(cli, text) {
|
|
15
|
+
export function withBlock(cli, install, text) {
|
|
20
16
|
const { begin, end } = markersOf(cli.name);
|
|
21
|
-
const whole = `${begin}\n${agentsBlock(cli)}\n${end}`;
|
|
17
|
+
const whole = `${begin}\n${agentsBlock(cli, install)}\n${end}`;
|
|
22
18
|
const start = text.indexOf(begin);
|
|
23
19
|
const stop = start === -1 ? -1 : text.indexOf(end, start);
|
|
24
20
|
if (stop !== -1)
|
|
@@ -27,13 +23,13 @@ export function withBlock(cli, text) {
|
|
|
27
23
|
return `${whole}\n`;
|
|
28
24
|
return `${text}${text.endsWith("\n") ? "" : "\n"}\n${whole}\n`;
|
|
29
25
|
}
|
|
30
|
-
export async function agentsMdAt(cli, root) {
|
|
26
|
+
export async function agentsMdAt(cli, install, root) {
|
|
31
27
|
const path = join(root, "AGENTS.md");
|
|
32
28
|
const existing = await orMissing(readFile(path, "utf8"));
|
|
33
|
-
const block = agentsBlock(cli);
|
|
29
|
+
const block = agentsBlock(cli, install);
|
|
34
30
|
if (existing === undefined)
|
|
35
31
|
return { path, block, change: "create" };
|
|
36
|
-
if (withBlock(cli, existing) === existing)
|
|
32
|
+
if (withBlock(cli, install, existing) === existing)
|
|
37
33
|
return { path, block, change: null };
|
|
38
34
|
return {
|
|
39
35
|
path,
|
|
@@ -51,14 +47,14 @@ export async function handEditsAt(root) {
|
|
|
51
47
|
return [`add a line \`@AGENTS.md\` to ${claudeMd}, so Claude Code reads AGENTS.md`];
|
|
52
48
|
}
|
|
53
49
|
// A repo may leave the CLI out of its sessions on purpose, so the row is advisory.
|
|
54
|
-
export function agentsRow(cli) {
|
|
50
|
+
export function agentsRow(cli, install) {
|
|
55
51
|
return {
|
|
56
52
|
name: "agents",
|
|
57
53
|
advisory: true,
|
|
58
54
|
run: async (ctx) => {
|
|
59
55
|
const root = await projectRootOf(ctx.cwd);
|
|
60
|
-
const { path, change } = await agentsMdAt(cli, root);
|
|
61
|
-
const fix = `${
|
|
56
|
+
const { path, change } = await agentsMdAt(cli, install, root);
|
|
57
|
+
const fix = `${install.runAs} skill install`;
|
|
62
58
|
if (change === "rewrite") {
|
|
63
59
|
return {
|
|
64
60
|
state: "problem",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/built-ins/agents-md.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/built-ins/agents-md.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAcnD,sGAAsG;AACtG,SAAS,WAAW,CAAC,GAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAW;IACnE,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,eAAe,KAAK,KAAK,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,EAAE,CAAC;IAC7F,OAAO,KAAK,GAAG,CAAC,IAAI,OAAO,IAAI,KAAK,GAAG,gBAAgB,GAAG,CAAC,IAAI,2BAA2B,CAAC;AAC7F,CAAC;AAOD,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,EAAE,KAAK,EAAE,cAAc,IAAI,MAAM,EAAE,GAAG,EAAE,YAAY,IAAI,MAAM,EAAE,CAAC;AAC1E,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,SAAS,CAAC,GAAc,EAAE,OAAgB,EAAE,IAAY;IACtE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,GAAG,KAAK,KAAK,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,IAAI,KAAK,CAAC,CAAC;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1F,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACrC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAc,EACd,OAAgB,EAChB,IAAY;IAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACrE,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzF,OAAO;QACL,IAAI;QACJ,KAAK;QACL,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;KACzE,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC;QAC3F,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,gCAAgC,QAAQ,kCAAkC,CAAC,CAAC;AACtF,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,GAAc,EAAE,OAAgB;IACxD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,gBAAgB,CAAC;YAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;oBACL,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,GAAG,IAAI,YAAY,GAAG,CAAC,IAAI,6BAA6B,GAAG,SAAS;oBAC7E,GAAG;iBACJ,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO;oBACL,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,GAAG,IAAI,aAAa,GAAG,CAAC,IAAI,gDAAgD,GAAG,CAAC,IAAI,EAAE;oBAC/F,GAAG;iBACJ,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,GAAG,IAAI,cAAc,GAAG,CAAC,IAAI,QAAQ,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO,IAAI,KAAK,SAAS;gBACvB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;gBACjC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,KAAK,IAAI,EAAE,EAAE,CAAC;QACzD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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,19 +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 { globalInstallOf, NOT_GLOBAL_INSTALL } from "./global-install.js";
|
|
9
|
-
import { globalNpm, installCommandLine, latestVersion, npmContext, } from "./npm.js";
|
|
10
|
-
import { packagedFolderOf, packagedSkillFinding } from "./packaged-skill.js";
|
|
6
|
+
import { installOf } from "./install/install.js";
|
|
7
|
+
import { latestVersion } from "./npm.js";
|
|
11
8
|
import { engineMinimum, meetsMinimum, standingOf } from "./semver.js";
|
|
12
|
-
import {
|
|
9
|
+
import { skillOf } from "./skill/skill.js";
|
|
13
10
|
function ok(message) {
|
|
14
11
|
return { state: "ok", message };
|
|
15
12
|
}
|
|
16
|
-
function noInstall(cli) {
|
|
17
|
-
return { state: "skipped", message: `not checked: ${cli.name} declares no install` };
|
|
18
|
-
}
|
|
19
13
|
function buildRow(cli) {
|
|
20
14
|
return { name: "build", run: () => ok(versionLine(cli)) };
|
|
21
15
|
}
|
|
@@ -83,65 +77,16 @@ function projectRow({ file }, read) {
|
|
|
83
77
|
},
|
|
84
78
|
};
|
|
85
79
|
}
|
|
86
|
-
function surveyOnce(bin) {
|
|
87
|
-
let survey;
|
|
88
|
-
return (install, cwd) => {
|
|
89
|
-
survey ??= surveyDependency(install, bin, cwd);
|
|
90
|
-
return survey;
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
80
|
// A source run or an unreachable registry never stops a Command working, so these two rows are advisory.
|
|
94
|
-
function installRow(
|
|
95
|
-
return {
|
|
96
|
-
name: "install",
|
|
97
|
-
advisory: true,
|
|
98
|
-
run: async (ctx) => {
|
|
99
|
-
const { install } = cli;
|
|
100
|
-
if (install === undefined)
|
|
101
|
-
return noInstall(cli);
|
|
102
|
-
if (install.mode === "dependency") {
|
|
103
|
-
return dependencyInstallFinding(cli, install, await survey(install, ctx.cwd));
|
|
104
|
-
}
|
|
105
|
-
const npm = globalNpm(cli, install, ctx, node);
|
|
106
|
-
try {
|
|
107
|
-
const copy = await globalInstallOf(bin, npm);
|
|
108
|
-
return ok(`a global npm install under ${copy.prefix}`);
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
if (error instanceof CliError && error.code === NOT_GLOBAL_INSTALL) {
|
|
112
|
-
return {
|
|
113
|
-
state: "problem",
|
|
114
|
-
message: error.message,
|
|
115
|
-
fix: installCommandLine(npm.registry),
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
throw error;
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
};
|
|
81
|
+
function installRow(check) {
|
|
82
|
+
return { name: "install", advisory: true, run: check.install };
|
|
122
83
|
}
|
|
123
|
-
|
|
124
|
-
if (install.mode === "global") {
|
|
125
|
-
const fix = `${cli.name} update`;
|
|
126
|
-
return { npm: globalNpm(cli, install, ctx, node), advise: () => ({ fix }) };
|
|
127
|
-
}
|
|
128
|
-
const release = dependencyRelease(cli, install, await survey(install, ctx.cwd));
|
|
129
|
-
if ("skipped" in release)
|
|
130
|
-
return release;
|
|
131
|
-
return {
|
|
132
|
-
npm: npmContext(cli, release.registry, ctx, node, release.cwd),
|
|
133
|
-
advise: release.advise,
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
function registryRow(cli, { node }, survey) {
|
|
84
|
+
function registryRow(cli, check) {
|
|
137
85
|
return {
|
|
138
86
|
name: "registry",
|
|
139
87
|
advisory: true,
|
|
140
88
|
run: async (ctx) => {
|
|
141
|
-
const
|
|
142
|
-
if (install === undefined)
|
|
143
|
-
return noInstall(cli);
|
|
144
|
-
const lookup = await releaseLookupOf(cli, install, ctx, node, survey);
|
|
89
|
+
const lookup = await check.release(ctx);
|
|
145
90
|
if ("skipped" in lookup)
|
|
146
91
|
return lookup.skipped;
|
|
147
92
|
const { npm, advise } = lookup;
|
|
@@ -159,46 +104,19 @@ function registryRow(cli, { node }, survey) {
|
|
|
159
104
|
},
|
|
160
105
|
};
|
|
161
106
|
}
|
|
162
|
-
const SKILL_STATE_NOTES = {
|
|
163
|
-
current: "the same as this build",
|
|
164
|
-
behind: "older than this build",
|
|
165
|
-
ahead: "newer than this build",
|
|
166
|
-
unversioned: "states no metadata.version",
|
|
167
|
-
unreadable: "could not be read",
|
|
168
|
-
};
|
|
169
|
-
function describeCopy({ path, version, state }) {
|
|
170
|
-
return `${path}${version === undefined ? "" : ` ${version}`} (${SKILL_STATE_NOTES[state]})`;
|
|
171
|
-
}
|
|
172
|
-
// 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.
|
|
173
|
-
function skillRow(cli) {
|
|
174
|
-
const packaged = packagedFolderOf(cli);
|
|
175
|
-
return {
|
|
176
|
-
name: "skill",
|
|
177
|
-
advisory: true,
|
|
178
|
-
run: async (ctx) => {
|
|
179
|
-
if (packaged !== undefined)
|
|
180
|
-
return packagedSkillFinding(cli, packaged, ctx);
|
|
181
|
-
const { copies, fix } = await skillReport(cli, cli.version, ctx);
|
|
182
|
-
const message = copies.length === 0
|
|
183
|
-
? `no copy of the ${cli.name} skill is installed`
|
|
184
|
-
: copies.map(describeCopy).join("; ");
|
|
185
|
-
return fix === undefined ? ok(message) : { state: "ok", message, fix };
|
|
186
|
-
},
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
107
|
/** Every row `doctor` reports, in order: the fixed rows around the CLI's own and its tools'. */
|
|
190
108
|
export function doctorChecks(cli, launch, read) {
|
|
191
|
-
const
|
|
109
|
+
const install = installOf(cli);
|
|
110
|
+
const check = install.check(launch);
|
|
192
111
|
return [
|
|
193
112
|
buildRow(cli),
|
|
194
113
|
nodeRow(cli),
|
|
195
114
|
...(cli.project === undefined ? [] : [projectRow(cli.project, read)]),
|
|
196
115
|
...(cli.doctor ?? []),
|
|
197
116
|
...toolRows(cli.tools ?? [], cli.commands),
|
|
198
|
-
installRow(
|
|
199
|
-
registryRow(cli,
|
|
200
|
-
|
|
201
|
-
...(packagedFolderOf(cli) === undefined ? [] : [agentsRow(cli)]),
|
|
117
|
+
installRow(check),
|
|
118
|
+
registryRow(cli, check),
|
|
119
|
+
...skillOf(cli, install).rows,
|
|
202
120
|
];
|
|
203
121
|
}
|
|
204
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;
|
|
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;
|