@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/agent-cli.js +3 -2
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/built-ins/agents-md.d.ts +6 -3
  5. package/dist/built-ins/agents-md.js +12 -16
  6. package/dist/built-ins/agents-md.js.map +1 -1
  7. package/dist/built-ins/commands.js +5 -6
  8. package/dist/built-ins/commands.js.map +1 -1
  9. package/dist/built-ins/doctor-rows.js +12 -94
  10. package/dist/built-ins/doctor-rows.js.map +1 -1
  11. package/dist/built-ins/doctor.js +2 -2
  12. package/dist/built-ins/doctor.js.map +1 -1
  13. package/dist/built-ins/install/dependency.d.ts +4 -0
  14. package/dist/built-ins/{dependency-install.js → install/dependency.js} +39 -88
  15. package/dist/built-ins/install/dependency.js.map +1 -0
  16. package/dist/built-ins/{global-install.d.ts → install/global-npm.d.ts} +6 -3
  17. package/dist/built-ins/{global-install.js → install/global-npm.js} +30 -18
  18. package/dist/built-ins/install/global-npm.js.map +1 -0
  19. package/dist/built-ins/install/global.d.ts +4 -0
  20. package/dist/built-ins/install/global.js +44 -0
  21. package/dist/built-ins/install/global.js.map +1 -0
  22. package/dist/built-ins/install/install.d.ts +39 -0
  23. package/dist/built-ins/install/install.js +26 -0
  24. package/dist/built-ins/install/install.js.map +1 -0
  25. package/dist/built-ins/install/run-as.d.ts +3 -0
  26. package/dist/built-ins/install/run-as.js +5 -0
  27. package/dist/built-ins/install/run-as.js.map +1 -0
  28. package/dist/built-ins/npm.d.ts +2 -6
  29. package/dist/built-ins/npm.js +0 -24
  30. package/dist/built-ins/npm.js.map +1 -1
  31. package/dist/built-ins/skill/hub.d.ts +7 -0
  32. package/dist/built-ins/{skills.js → skill/hub.js} +32 -7
  33. package/dist/built-ins/skill/hub.js.map +1 -0
  34. package/dist/built-ins/skill/install-command.d.ts +23 -0
  35. package/dist/built-ins/{skill-install.js → skill/install-command.js} +39 -16
  36. package/dist/built-ins/skill/install-command.js.map +1 -0
  37. package/dist/built-ins/skill/packaged.d.ts +12 -0
  38. package/dist/built-ins/{packaged-skill.js → skill/packaged.js} +27 -44
  39. package/dist/built-ins/skill/packaged.js.map +1 -0
  40. package/dist/built-ins/skill/skill.d.ts +28 -0
  41. package/dist/built-ins/skill/skill.js +10 -0
  42. package/dist/built-ins/skill/skill.js.map +1 -0
  43. package/dist/built-ins/update.d.ts +3 -2
  44. package/dist/built-ins/update.js +8 -15
  45. package/dist/built-ins/update.js.map +1 -1
  46. package/dist/exit-classes.js +5 -4
  47. package/dist/exit-classes.js.map +1 -1
  48. package/dist/index.d.ts +2 -2
  49. package/dist/index.js +2 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/project-root.d.ts +24 -0
  52. package/dist/project-root.js +69 -0
  53. package/dist/project-root.js.map +1 -0
  54. package/dist/run-cli.js +1 -1
  55. package/dist/run-cli.js.map +1 -1
  56. package/dist/run-command.js +5 -2
  57. package/dist/run-command.js.map +1 -1
  58. package/package.json +1 -1
  59. package/dist/built-ins/dependency-install.d.ts +0 -67
  60. package/dist/built-ins/dependency-install.js.map +0 -1
  61. package/dist/built-ins/global-install.js.map +0 -1
  62. package/dist/built-ins/packaged-skill.d.ts +0 -45
  63. package/dist/built-ins/packaged-skill.js.map +0 -1
  64. package/dist/built-ins/skill-install.d.ts +0 -3
  65. package/dist/built-ins/skill-install.js.map +0 -1
  66. package/dist/built-ins/skills.d.ts +0 -21
  67. package/dist/built-ins/skills.js.map +0 -1
  68. package/dist/run-as.d.ts +0 -6
  69. package/dist/run-as.js +0 -8
  70. package/dist/run-as.js.map +0 -1
@@ -1,7 +1,8 @@
1
1
  import { lstat, realpath } from "node:fs/promises";
2
- import { isAbsolute, join, relative } from "node:path";
3
- import { CliError, isMissingFile } from "../errors.js";
4
- import { globalPrefix, installCommandLine } from "./npm.js";
2
+ import { join } from "node:path";
3
+ import { CliError, orMissing } from "../../errors.js";
4
+ import { isInside } from "../../project-root.js";
5
+ import { globalPrefix, installCommandLine, npmContext, scopeOf, } from "../npm.js";
5
6
  export const NOT_GLOBAL_INSTALL = "NOT_GLOBAL_INSTALL";
6
7
  /** Where npm puts global packages under its global prefix. */
7
8
  export function globalModulesDir(prefix) {
@@ -16,18 +17,6 @@ function notGlobal(ctx, message) {
16
17
  hint: `install it with npm, so \`${ctx.cliName} update\` can replace it: ${installCommandLine(ctx.registry)}`,
17
18
  });
18
19
  }
19
- async function realpathOrUndefined(path) {
20
- return realpath(path).catch((error) => {
21
- if (isMissingFile(error))
22
- return undefined;
23
- throw error;
24
- });
25
- }
26
- /** Whether `path` lies strictly inside `dir`. */
27
- export function isInside(dir, path) {
28
- const inner = relative(dir, path);
29
- return inner !== "" && !inner.startsWith("..") && !isAbsolute(inner);
30
- }
31
20
  /**
32
21
  * The global npm install this copy runs from, found by asking npm for its global prefix.
33
22
  * `bin` is the script that started the CLI; throws `NOT_GLOBAL_INSTALL` when it is not inside that install.
@@ -38,8 +27,8 @@ export async function globalInstallOf(bin, ctx) {
38
27
  }
39
28
  const prefix = await globalPrefix(ctx);
40
29
  const packageDir = join(globalModulesDir(prefix), ctx.registry.package);
41
- const installed = await realpathOrUndefined(packageDir);
42
- const here = (await realpathOrUndefined(bin)) ?? bin;
30
+ const installed = await orMissing(realpath(packageDir));
31
+ const here = (await orMissing(realpath(bin))) ?? bin;
43
32
  if (installed === undefined || !isInside(installed, here)) {
44
33
  throw notGlobal(ctx, `${ctx.cliName} runs from ${here}, not from npm's global install at ${packageDir}`);
45
34
  }
@@ -49,4 +38,27 @@ export async function globalInstallOf(bin, ctx) {
49
38
  }
50
39
  return { prefix, packageDir };
51
40
  }
52
- //# sourceMappingURL=global-install.js.map
41
+ const NPMJS = "https://registry.npmjs.org/";
42
+ /** The flag that points npm at the CLI's registry; none for npmjs, npm's default. */
43
+ function registryFlags({ package: name, registry }) {
44
+ if (registry === NPMJS)
45
+ return [];
46
+ const scope = scopeOf(name);
47
+ return [scope === undefined ? `--registry=${registry}` : `--${scope}:registry=${registry}`];
48
+ }
49
+ function globalRegistry(install) {
50
+ const { package: name, registry } = install;
51
+ return {
52
+ package: name,
53
+ label: registry,
54
+ flags: registryFlags(install),
55
+ unreachableHint: "check the network or VPN",
56
+ loginHint: `log in to ${registry} (\`npm login --registry=${registry}\`) or set its token in ~/.npmrc`,
57
+ missingHint: `check that ${name} is published on ${registry}`,
58
+ };
59
+ }
60
+ /** npm for a Global install, run in the working directory. */
61
+ export function globalNpm(cli, install, ctx, node) {
62
+ return npmContext(cli, globalRegistry(install), ctx, node, ctx.cwd);
63
+ }
64
+ //# sourceMappingURL=global-npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-npm.js","sourceRoot":"","sources":["../../../src/built-ins/install/global-npm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { GlobalInstall } from "../../define.js";
2
+ import type { Install, InstallCli } from "./install.js";
3
+ /** The Install of a CLI installed once per machine with npm, which `update` replaces. */
4
+ export declare function globalInstall(cli: InstallCli, install: GlobalInstall): Install;
@@ -0,0 +1,44 @@
1
+ import { CliError } from "../../errors.js";
2
+ import { installCommandLine } from "../npm.js";
3
+ import { skillOf } from "../skill/skill.js";
4
+ import { updateCommand } from "../update.js";
5
+ import { globalInstallOf, globalNpm, NOT_GLOBAL_INSTALL } from "./global-npm.js";
6
+ import { runAsOf } from "./run-as.js";
7
+ function checkOf(cli, install, { bin, node }) {
8
+ return {
9
+ install: async (ctx) => {
10
+ const npm = globalNpm(cli, install, ctx, node);
11
+ try {
12
+ const copy = await globalInstallOf(bin, npm);
13
+ return { state: "ok", message: `a global npm install under ${copy.prefix}` };
14
+ }
15
+ catch (error) {
16
+ if (error instanceof CliError && error.code === NOT_GLOBAL_INSTALL) {
17
+ return {
18
+ state: "problem",
19
+ message: error.message,
20
+ fix: installCommandLine(npm.registry),
21
+ };
22
+ }
23
+ throw error;
24
+ }
25
+ },
26
+ release: async (ctx) => {
27
+ const fix = `${cli.name} update`;
28
+ return { npm: globalNpm(cli, install, ctx, node), advise: () => ({ fix }) };
29
+ },
30
+ };
31
+ }
32
+ /** The Install of a CLI installed once per machine with npm, which `update` replaces. */
33
+ export function globalInstall(cli, install) {
34
+ const adapter = {
35
+ runAs: runAsOf(cli),
36
+ builtIns: (launch) => ({ update: updateCommand(cli, install, skillOf(cli, adapter), launch) }),
37
+ // `update` fails as the source's when the registry has no release.
38
+ exitClasses: ["source"],
39
+ agentsCaveat: undefined,
40
+ check: (launch) => checkOf(cli, install, launch),
41
+ };
42
+ return adapter;
43
+ }
44
+ //# sourceMappingURL=global.js.map
@@ -0,0 +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,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEjF,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,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;qBACtC,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,yFAAyF;AACzF,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,EAAE,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9F,mEAAmE;QACnE,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvB,YAAY,EAAE,SAAS;QACvB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC;KACjD,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { Context } from "../../context.js";
2
+ import type { Commands, CommandTreeCli, DoctorFinding } from "../../define.js";
3
+ import type { DeclaredExitClass } from "../../error-table.js";
4
+ import type { Launch } from "../commands.js";
5
+ import type { NpmContext } from "../npm.js";
6
+ import type { SkillCli } from "../skill/skill.js";
7
+ export type InstallCli = SkillCli & Pick<CommandTreeCli, "install">;
8
+ /** What tells the operator how to move a build behind the latest release. */
9
+ export type Advice = {
10
+ readonly fix: string;
11
+ } | {
12
+ readonly note: string;
13
+ };
14
+ /** The npm to ask for the latest release, and how to move a build behind it. */
15
+ interface ReleaseLookup {
16
+ readonly npm: NpmContext;
17
+ readonly advise: (latest: string) => Advice;
18
+ }
19
+ /** What one `doctor` run finds about the install: the `install` row, and where the `registry` row looks. */
20
+ export interface InstallCheck {
21
+ readonly install: (ctx: Context) => Promise<DoctorFinding>;
22
+ readonly release: (ctx: Context) => Promise<ReleaseLookup | {
23
+ readonly skipped: DoctorFinding;
24
+ }>;
25
+ }
26
+ /** How the CLI is installed, and everything that differs by it. */
27
+ export interface Install {
28
+ /** How every command line the Runtime gives its caller starts (ADR 0011). */
29
+ readonly runAs: string;
30
+ readonly builtIns: (launch: Launch) => Commands;
31
+ /** The Exit classes its Built-ins can end in, besides those every CLI can. */
32
+ readonly exitClasses: readonly DeclaredExitClass[];
33
+ /** What the CLI's block in AGENTS.md adds after saying to run it as the Run-as. */
34
+ readonly agentsCaveat: string | undefined;
35
+ /** Called once per `doctor` run. */
36
+ readonly check: (launch: Launch) => InstallCheck;
37
+ }
38
+ export declare function installOf(cli: InstallCli): Install;
39
+ export {};
@@ -0,0 +1,26 @@
1
+ import { dependencyInstall } from "./dependency.js";
2
+ import { globalInstall } from "./global.js";
3
+ import { runAsOf } from "./run-as.js";
4
+ function noInstall(cli) {
5
+ const skipped = async () => ({
6
+ state: "skipped",
7
+ message: `not checked: ${cli.name} declares no install`,
8
+ });
9
+ return {
10
+ runAs: runAsOf(cli),
11
+ builtIns: () => ({}),
12
+ exitClasses: [],
13
+ agentsCaveat: undefined,
14
+ check: () => ({
15
+ install: skipped,
16
+ release: async () => ({ skipped: await skipped() }),
17
+ }),
18
+ };
19
+ }
20
+ export function installOf(cli) {
21
+ const { install } = cli;
22
+ if (install === undefined)
23
+ return noInstall(cli);
24
+ return install.mode === "global" ? globalInstall(cli, install) : dependencyInstall(cli, install);
25
+ }
26
+ //# sourceMappingURL=install.js.map
@@ -0,0 +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;AAgCtC,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,YAAY,EAAE,SAAS;QACvB,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;KACH,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"}
@@ -0,0 +1,3 @@
1
+ import type { CommandTreeCli } from "../../define.js";
2
+ /** The Run-as: the bare name, or `npx -q --no-install <bin>` for a Dependency install (ADR 0011). */
3
+ export declare function runAsOf({ name, install }: Pick<CommandTreeCli, "name" | "install">): string;
@@ -0,0 +1,5 @@
1
+ /** The Run-as: the bare name, or `npx -q --no-install <bin>` for a Dependency install (ADR 0011). */
2
+ export function runAsOf({ name, install }) {
3
+ return install?.mode === "dependency" ? `npx -q --no-install ${name}` : name;
4
+ }
5
+ //# sourceMappingURL=run-as.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-as.js","sourceRoot":"","sources":["../../../src/built-ins/install/run-as.ts"],"names":[],"mappings":"AAEA,qGAAqG;AACrG,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAA4C;IACjF,OAAO,OAAO,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Context, Env } from "../context.js";
2
- import type { CommandTreeCli, GlobalInstall } from "../define.js";
2
+ import type { CommandTreeCli } from "../define.js";
3
3
  export declare const REGISTRY_UNREACHABLE = "REGISTRY_UNREACHABLE";
4
4
  export declare const REGISTRY_AUTH = "REGISTRY_AUTH";
5
5
  export declare const INSTALL_FAILED = "INSTALL_FAILED";
@@ -34,13 +34,9 @@ export interface NpmContext {
34
34
  }
35
35
  /** Which kind of npm call failed, since the same npm code means different things for each. */
36
36
  export type NpmCall = "prefix" | "view" | "install";
37
- export declare function npmContext(cli: CommandTreeCli, registry: Registry, ctx: Context, node: string | undefined, cwd: string): NpmContext;
37
+ export declare function npmContext(cli: Pick<CommandTreeCli, "name">, registry: Registry, ctx: Context, node: string | undefined, cwd: string): NpmContext;
38
38
  /** The `@scope` of a scoped package name. */
39
39
  export declare function scopeOf(name: string): string | undefined;
40
- /** The registry a Global install declares. */
41
- export declare function globalRegistry(install: GlobalInstall): Registry;
42
- /** npm for a Global install, run where the CLI was started. */
43
- export declare function globalNpm(cli: CommandTreeCli, install: GlobalInstall, ctx: Context, node: string | undefined): NpmContext;
44
40
  /** The command a person runs to install the CLI globally from its registry. */
45
41
  export declare function installCommandLine(registry: Registry, version?: string): string;
46
42
  /**
@@ -22,7 +22,6 @@ export function npmContext(cli, registry, ctx, node, cwd) {
22
22
  node,
23
23
  };
24
24
  }
25
- const NPMJS = "https://registry.npmjs.org/";
26
25
  const STDERR_TAIL_LINES = 10;
27
26
  const RM_RETRIES = 3;
28
27
  const NETWORK_CODES = new Set([
@@ -41,29 +40,6 @@ const NPM_CODE = /^npm (?:error|ERR!) code (\S+)$/m;
41
40
  export function scopeOf(name) {
42
41
  return /^(@[^/]+)\//.exec(name)?.[1];
43
42
  }
44
- /** The flag that points npm at the CLI's registry; none for npmjs, npm's default. */
45
- function registryFlags({ package: name, registry }) {
46
- if (registry === NPMJS)
47
- return [];
48
- const scope = scopeOf(name);
49
- return [scope === undefined ? `--registry=${registry}` : `--${scope}:registry=${registry}`];
50
- }
51
- /** The registry a Global install declares. */
52
- export function globalRegistry(install) {
53
- const { package: name, registry } = install;
54
- return {
55
- package: name,
56
- label: registry,
57
- flags: registryFlags(install),
58
- unreachableHint: "check the network or VPN",
59
- loginHint: `log in to ${registry} (\`npm login --registry=${registry}\`) or set its token in ~/.npmrc`,
60
- missingHint: `check that ${name} is published on ${registry}`,
61
- };
62
- }
63
- /** npm for a Global install, run where the CLI was started. */
64
- export function globalNpm(cli, install, ctx, node) {
65
- return npmContext(cli, globalRegistry(install), ctx, node, process.cwd());
66
- }
67
43
  /** The command a person runs to install the CLI globally from its registry. */
68
44
  export function installCommandLine(registry, version = "latest") {
69
45
  return ["npm", "install", "--global", `${registry.package}@${version}`, ...registry.flags].join(" ");
@@ -1 +1 @@
1
- {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/built-ins/npm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/built-ins/npm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Env } from "../../context.js";
2
+ import type { Skill, SkillCli } from "./skill.js";
3
+ /** The version a SKILL.md's frontmatter `metadata.version` states. */
4
+ export declare function skillVersionIn(skill: string): string | undefined;
5
+ export declare function homeOf(env: Env): string;
6
+ /** A skill that `npx skills add` installs from `source`, the Skill Hub; with no `source`, no line adds it. */
7
+ export declare function hubSkill(cli: SkillCli, source: string | undefined): Skill;
@@ -1,8 +1,8 @@
1
1
  import { readFile, realpath } from "node:fs/promises";
2
2
  import { homedir } from "node:os";
3
3
  import { join } from "node:path";
4
- import { isMissingFile } from "../errors.js";
5
- import { isVersion, standingOf } from "./semver.js";
4
+ import { isMissingFile } from "../../errors.js";
5
+ import { isVersion, standingOf } from "../semver.js";
6
6
  // Everything here mirrors how the skills@1.7.2 installer (`npx skills`) behaves.
7
7
  const SKILL_DIRS = [
8
8
  [".claude", "skills"],
@@ -66,9 +66,34 @@ function fixFor(cliName, copies, source) {
66
66
  }
67
67
  return has("behind") || has("unversioned") ? update : undefined;
68
68
  }
69
- export async function skillReport(cli, version, ctx) {
70
- const copies = await skillCopies(cli.name, version, ctx);
71
- const source = cli.skill !== undefined && "source" in cli.skill ? cli.skill.source : undefined;
72
- return { copies, fix: fixFor(cli.name, copies, source) };
69
+ const SKILL_STATE_NOTES = {
70
+ current: "the same as this build",
71
+ behind: "older than this build",
72
+ ahead: "newer than this build",
73
+ unversioned: "states no metadata.version",
74
+ unreadable: "could not be read",
75
+ };
76
+ function describeCopy({ path, version, state }) {
77
+ return `${path}${version === undefined ? "" : ` ${version}`} (${SKILL_STATE_NOTES[state]})`;
73
78
  }
74
- //# sourceMappingURL=skills.js.map
79
+ /** A skill that `npx skills add` installs from `source`, the Skill Hub; with no `source`, no line adds it. */
80
+ export function hubSkill(cli, source) {
81
+ // `update` compares the copies with the latest release even when it installed nothing: the
82
+ // installer gives that release's skill.
83
+ const findingAt = async (version, ctx) => {
84
+ const copies = await skillCopies(cli.name, version, ctx);
85
+ const fix = fixFor(cli.name, copies, source);
86
+ const message = copies.length === 0
87
+ ? `no copy of the ${cli.name} skill is installed`
88
+ : copies.map(describeCopy).join("; ");
89
+ return fix === undefined ? { state: "ok", message } : { state: "ok", message, fix };
90
+ };
91
+ return {
92
+ kind: "hub",
93
+ builtIns: {},
94
+ rows: [{ name: "skill", advisory: true, run: (ctx) => findingAt(cli.version, ctx) }],
95
+ notice: async () => { },
96
+ findingAt,
97
+ };
98
+ }
99
+ //# sourceMappingURL=hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../../../src/built-ins/skill/hub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type Command } from "../../define.js";
2
+ import type { Install } from "../install/install.js";
3
+ import type { SkillCli } from "./skill.js";
4
+ /** The project root and the Skill copy under it, as `skill install` writes it. */
5
+ export declare function skillCopyOf(cli: Pick<SkillCli, "name">, cwd: string): Promise<{
6
+ readonly root: string;
7
+ readonly copy: string;
8
+ }>;
9
+ /** The `metadata.version` each SKILL.md states, null for none; `copyVersion` is undefined with no copy. */
10
+ interface SkillVersions {
11
+ readonly packageVersion: string | null;
12
+ readonly copyVersion: string | null | undefined;
13
+ /**
14
+ * The copy states the package's version, so a file of it that differs was edited by hand; a copy
15
+ * of another version, or none, is an older install.
16
+ */
17
+ readonly same: boolean;
18
+ }
19
+ /** The versions of the package's skill in `source` and of its copy in `copy`. */
20
+ export declare function skillVersionsOf(source: string, copy: string): Promise<SkillVersions>;
21
+ /** The built-in `skill install`, for a CLI whose skill ships in its package. */
22
+ export declare function skillInstallCommand(cli: SkillCli, folder: string, install: Install): Command;
23
+ export {};
@@ -1,13 +1,36 @@
1
- import { readFile } from "node:fs/promises";
2
- import { join } from "node:path";
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join, relative } from "node:path";
3
3
  import * as z from "zod";
4
- import { defineCommand } from "../define.js";
5
- import { CliError, orMissing } from "../errors.js";
6
- import { FORCE_FLAG } from "../flags.js";
7
- import { OUTPUT_EXISTS } from "../outputs.js";
8
- import { runAsOf } from "../run-as.js";
9
- import { agentsMdAt, handEditsAt, withBlock, } from "./agents-md.js";
10
- import { filesIn, skillCopyOf, skillVersionsOf } from "./packaged-skill.js";
4
+ import { defineCommand } from "../../define.js";
5
+ import { CliError, orMissing } from "../../errors.js";
6
+ import { FORCE_FLAG } from "../../flags.js";
7
+ import { OUTPUT_EXISTS } from "../../outputs.js";
8
+ import { projectRootOf } from "../../project-root.js";
9
+ import { agentsMdAt, handEditsAt, withBlock, } from "../agents-md.js";
10
+ import { skillVersionIn } from "./hub.js";
11
+ /** The project root and the Skill copy under it, as `skill install` writes it. */
12
+ export async function skillCopyOf(cli, cwd) {
13
+ const root = await projectRootOf(cwd);
14
+ return { root, copy: join(root, ".claude", "skills", cli.name) };
15
+ }
16
+ /** Every file under `dir`, relative to it and sorted; none when `dir` is missing. */
17
+ async function filesIn(dir) {
18
+ const entries = await orMissing(readdir(dir, { recursive: true, withFileTypes: true }));
19
+ return (entries ?? [])
20
+ .filter((entry) => entry.isFile())
21
+ .map((entry) => relative(dir, join(entry.parentPath, entry.name)))
22
+ .sort();
23
+ }
24
+ /** The versions of the package's skill in `source` and of its copy in `copy`. */
25
+ export async function skillVersionsOf(source, copy) {
26
+ const [shipped, installed] = await Promise.all([
27
+ readFile(join(source, "SKILL.md"), "utf8"),
28
+ orMissing(readFile(join(copy, "SKILL.md"), "utf8")),
29
+ ]);
30
+ const packageVersion = skillVersionIn(shipped) ?? null;
31
+ const copyVersion = installed === undefined ? undefined : (skillVersionIn(installed) ?? null);
32
+ return { packageVersion, copyVersion, same: copyVersion === packageVersion };
33
+ }
11
34
  const installSchema = z.object({
12
35
  copy: z.string(),
13
36
  written: z.array(z.string()),
@@ -19,7 +42,7 @@ async function sameContent(left, right) {
19
42
  const [a, b] = await Promise.all([readFile(left), readFile(right)]);
20
43
  return a.equals(b);
21
44
  }
22
- async function planOf(cli, folder, cwd, packageRoot) {
45
+ async function planOf(cli, folder, install, cwd, packageRoot) {
23
46
  const source = join(packageRoot, folder);
24
47
  const { root, copy } = await skillCopyOf(cli, cwd);
25
48
  const [shipped, present] = await Promise.all([filesIn(source), filesIn(copy)]);
@@ -31,7 +54,7 @@ async function planOf(cli, folder, cwd, packageRoot) {
31
54
  replace: shipped.filter((_file, index) => differs[index]),
32
55
  remove: present.filter((file) => !shipped.includes(file)),
33
56
  sameVersion: (await skillVersionsOf(source, copy)).same,
34
- agentsMd: await agentsMdAt(cli, root),
57
+ agentsMd: await agentsMdAt(cli, install, root),
35
58
  handEdits: await handEditsAt(root),
36
59
  };
37
60
  }
@@ -80,8 +103,8 @@ function editedRemovals(plan, ctx) {
80
103
  });
81
104
  }
82
105
  /** The built-in `skill install`, for a CLI whose skill ships in its package. */
83
- export function skillInstallCommand(cli, folder) {
84
- const runAs = runAsOf(cli);
106
+ export function skillInstallCommand(cli, folder, install) {
107
+ const { runAs } = install;
85
108
  return defineCommand({
86
109
  name: "install",
87
110
  description: "copy this CLI's skill into the project and write its AGENTS.md block",
@@ -92,7 +115,7 @@ export function skillInstallCommand(cli, folder) {
92
115
  effect: "write",
93
116
  output: installSchema,
94
117
  force: "replace or remove hand-edited files of a skill copy at the package's version",
95
- plan: (_input, ctx) => planOf(cli, folder, ctx.cwd, ctx.packageRoot),
118
+ plan: (_input, ctx) => planOf(cli, folder, install, ctx.cwd, ctx.packageRoot),
96
119
  // The copy lives in the project repo, so git keeps an edit that an upgrade replaces.
97
120
  outputs: (plan) => plan.sameVersion ? [...plan.write, ...plan.replace].map((file) => join(plan.copy, file)) : [],
98
121
  apply: async (plan, ctx) => {
@@ -107,7 +130,7 @@ export function skillInstallCommand(cli, folder) {
107
130
  const { path, change } = plan.agentsMd;
108
131
  if (change !== null) {
109
132
  const existing = (await orMissing(readFile(path, "utf8"))) ?? "";
110
- await ctx.files.write(path, withBlock(cli, existing));
133
+ await ctx.files.write(path, withBlock(cli, install, existing));
111
134
  }
112
135
  return {
113
136
  copy: plan.copy,
@@ -121,4 +144,4 @@ export function skillInstallCommand(cli, folder) {
121
144
  renderPlan: (plan) => renderPlan(cli, plan),
122
145
  });
123
146
  }
124
- //# sourceMappingURL=skill-install.js.map
147
+ //# sourceMappingURL=install-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-command.js","sourceRoot":"","sources":["../../../src/built-ins/skill/install-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import * as z from "zod";
2
+ import type { Install } from "../install/install.js";
3
+ import type { Skill, SkillCli } from "./skill.js";
4
+ /** What the `skill` row of a Packaged skill carries under `--json` beside its message. */
5
+ export declare const packagedSkillDetailsSchema: z.ZodObject<{
6
+ copy: z.ZodString;
7
+ copyVersion: z.ZodNullable<z.ZodString>;
8
+ packageVersion: z.ZodNullable<z.ZodString>;
9
+ home: z.ZodOptional<z.ZodString>;
10
+ }, z.core.$strip>;
11
+ /** A skill shipped in the package at `folder`, which `skill install` copies to the project root. */
12
+ export declare function packagedSkill(cli: SkillCli, folder: string, install: Install): Skill;