@duyquangnvx/agent-cli 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/agent-cli.js +9 -2
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/built-ins/agents-md.d.ts +3 -2
  5. package/dist/built-ins/agents-md.js +8 -9
  6. package/dist/built-ins/agents-md.js.map +1 -1
  7. package/dist/built-ins/commands.d.ts +2 -1
  8. package/dist/built-ins/commands.js.map +1 -1
  9. package/dist/built-ins/doctor-rows.js +1 -1
  10. package/dist/built-ins/doctor-rows.js.map +1 -1
  11. package/dist/built-ins/doctor.d.ts +0 -1
  12. package/dist/built-ins/doctor.js +21 -8
  13. package/dist/built-ins/doctor.js.map +1 -1
  14. package/dist/built-ins/install/dependency.js +23 -23
  15. package/dist/built-ins/install/dependency.js.map +1 -1
  16. package/dist/built-ins/install/global-npm.d.ts +6 -3
  17. package/dist/built-ins/install/global-npm.js +19 -14
  18. package/dist/built-ins/install/global-npm.js.map +1 -1
  19. package/dist/built-ins/install/global.js +6 -7
  20. package/dist/built-ins/install/global.js.map +1 -1
  21. package/dist/built-ins/install/install.d.ts +0 -3
  22. package/dist/built-ins/install/install.js +0 -1
  23. package/dist/built-ins/install/install.js.map +1 -1
  24. package/dist/built-ins/install/release-check.js +10 -17
  25. package/dist/built-ins/install/release-check.js.map +1 -1
  26. package/dist/built-ins/npm.d.ts +8 -7
  27. package/dist/built-ins/npm.js +20 -12
  28. package/dist/built-ins/npm.js.map +1 -1
  29. package/dist/built-ins/project-root.d.ts +4 -4
  30. package/dist/built-ins/project-root.js +12 -22
  31. package/dist/built-ins/project-root.js.map +1 -1
  32. package/dist/built-ins/read.d.ts +5 -0
  33. package/dist/built-ins/read.js +29 -0
  34. package/dist/built-ins/read.js.map +1 -0
  35. package/dist/built-ins/setup.d.ts +1 -2
  36. package/dist/built-ins/setup.js +32 -26
  37. package/dist/built-ins/setup.js.map +1 -1
  38. package/dist/built-ins/skill/home.d.ts +2 -1
  39. package/dist/built-ins/skill/home.js +19 -17
  40. package/dist/built-ins/skill/home.js.map +1 -1
  41. package/dist/built-ins/skill/install-command.d.ts +2 -1
  42. package/dist/built-ins/skill/install-command.js +13 -11
  43. package/dist/built-ins/skill/install-command.js.map +1 -1
  44. package/dist/built-ins/skill/project.js +6 -7
  45. package/dist/built-ins/skill/project.js.map +1 -1
  46. package/dist/built-ins/skill/sync.d.ts +4 -3
  47. package/dist/built-ins/skill/sync.js +24 -17
  48. package/dist/built-ins/skill/sync.js.map +1 -1
  49. package/dist/built-ins/update.d.ts +1 -1
  50. package/dist/built-ins/update.js +9 -7
  51. package/dist/built-ins/update.js.map +1 -1
  52. package/dist/built-ins/upgrades.d.ts +2 -1
  53. package/dist/built-ins/upgrades.js +5 -12
  54. package/dist/built-ins/upgrades.js.map +1 -1
  55. package/dist/check-examples.js +5 -23
  56. package/dist/check-examples.js.map +1 -1
  57. package/dist/check-next-steps.d.ts +3 -9
  58. package/dist/check-next-steps.js +20 -32
  59. package/dist/check-next-steps.js.map +1 -1
  60. package/dist/command-line/line-problem.d.ts +14 -0
  61. package/dist/command-line/line-problem.js +41 -0
  62. package/dist/command-line/line-problem.js.map +1 -0
  63. package/dist/context/files.d.ts +3 -0
  64. package/dist/context/files.js +17 -2
  65. package/dist/context/files.js.map +1 -1
  66. package/dist/context/outputs.d.ts +13 -24
  67. package/dist/context/outputs.js +37 -37
  68. package/dist/context/outputs.js.map +1 -1
  69. package/dist/context/secrets.d.ts +5 -1
  70. package/dist/context/secrets.js +18 -5
  71. package/dist/context/secrets.js.map +1 -1
  72. package/dist/context/spawn.js +3 -1
  73. package/dist/context/spawn.js.map +1 -1
  74. package/dist/context/tools.d.ts +9 -4
  75. package/dist/context/tools.js +12 -12
  76. package/dist/context/tools.js.map +1 -1
  77. package/dist/context.d.ts +12 -8
  78. package/dist/define-command.d.ts +29 -13
  79. package/dist/define-command.js +5 -3
  80. package/dist/define-command.js.map +1 -1
  81. package/dist/define.d.ts +19 -6
  82. package/dist/define.js.map +1 -1
  83. package/dist/errors.d.ts +3 -6
  84. package/dist/errors.js +17 -28
  85. package/dist/errors.js.map +1 -1
  86. package/dist/execute.d.ts +7 -16
  87. package/dist/execute.js +11 -14
  88. package/dist/execute.js.map +1 -1
  89. package/dist/exit-classes.d.ts +7 -10
  90. package/dist/exit-classes.js +20 -81
  91. package/dist/exit-classes.js.map +1 -1
  92. package/dist/failure.d.ts +36 -0
  93. package/dist/failure.js +65 -0
  94. package/dist/failure.js.map +1 -0
  95. package/dist/help-json.js +5 -3
  96. package/dist/help-json.js.map +1 -1
  97. package/dist/help.js +9 -3
  98. package/dist/help.js.map +1 -1
  99. package/dist/output.d.ts +3 -10
  100. package/dist/output.js +14 -24
  101. package/dist/output.js.map +1 -1
  102. package/dist/run-cli.js +7 -5
  103. package/dist/run-cli.js.map +1 -1
  104. package/dist/run-command.d.ts +6 -1
  105. package/dist/run-command.js +31 -155
  106. package/dist/run-command.js.map +1 -1
  107. package/dist/run-options.d.ts +5 -2
  108. package/dist/run-scope.d.ts +35 -0
  109. package/dist/run-scope.js +138 -0
  110. package/dist/run-scope.js.map +1 -0
  111. package/dist/runtime-codes.d.ts +140 -1
  112. package/dist/runtime-codes.js +60 -4
  113. package/dist/runtime-codes.js.map +1 -1
  114. package/docs/README.md +2 -2
  115. package/docs/example/cli.test.ts +9 -2
  116. package/docs/example/cli.ts +1 -0
  117. package/docs/example/folder.ts +1 -0
  118. package/docs/guides/commands.md +2 -2
  119. package/docs/guides/doctor.md +3 -2
  120. package/docs/guides/errors.md +1 -1
  121. package/docs/guides/testing.md +2 -1
  122. package/package.json +1 -1
  123. package/dist/command-errors.d.ts +0 -8
  124. package/dist/command-errors.js +0 -25
  125. package/dist/command-errors.js.map +0 -1
  126. package/dist/command-line/route-line.d.ts +0 -15
  127. package/dist/command-line/route-line.js +0 -18
  128. package/dist/command-line/route-line.js.map +0 -1
@@ -1,18 +1,18 @@
1
- import { lstat, readFile, realpath } from "node:fs/promises";
2
1
  import { delimiter, join, normalize } from "node:path";
3
2
  import * as z from "zod";
4
3
  import { DISK_FULL, PERMISSION_DENIED } from "../context/errno.js";
5
4
  import { INTERRUPTED } from "../context/interrupts.js";
6
5
  import { pathOf } from "../context/tools.js";
7
6
  import { defineCommand } from "../define-command.js";
8
- import { CliError, orMissing, runtimeError } from "../errors.js";
7
+ import { CliError, errnoOf, runtimeError } from "../errors.js";
9
8
  import { wholeLine } from "../next-step.js";
10
- import { globalModulesDir, globalNpm, NOT_GLOBAL_INSTALL, setupLineOf, } from "./install/global-npm.js";
11
- import { globalPrefix, INSTALL_FAILED, installGlobally, latestVersion, } from "./npm.js";
9
+ import { INSTALL_FAILED, NOT_GLOBAL_INSTALL, NOT_ON_PATH } from "../runtime-codes.js";
10
+ import { globalModulesDir, globalNpm, isLink, setupLineOf } from "./install/global-npm.js";
11
+ import { globalPrefix, installGlobally, latestVersion, NPM_ERRORS, } from "./npm.js";
12
+ import { readIfAny } from "./read.js";
12
13
  import { standingOf } from "./semver.js";
13
14
  import { homeCopiesOf, homeSyncSchema, renderHomeSync, renderPlannedSync, syncHome, } from "./skill/home.js";
14
15
  import { renderUpgrade, upgradeSchema, upgradesOf } from "./upgrades.js";
15
- export const NOT_ON_PATH = "NOT_ON_PATH";
16
16
  const setupSchema = z.object({
17
17
  version: z.string(),
18
18
  prefix: z.string(),
@@ -22,8 +22,8 @@ const setupSchema = z.object({
22
22
  docs: z.string().nullable(),
23
23
  });
24
24
  const installedManifest = z.object({ version: z.string() });
25
- async function versionAt(packageDir) {
26
- const text = await orMissing(readFile(join(packageDir, "package.json"), "utf8"));
25
+ async function versionAt(files, packageDir) {
26
+ const text = await readIfAny(files, join(packageDir, "package.json"));
27
27
  if (text === undefined)
28
28
  return null;
29
29
  try {
@@ -38,25 +38,30 @@ async function versionAt(packageDir) {
38
38
  }
39
39
  }
40
40
  // The Run-as would not run yet, so every Next step is the line that started this.
41
- function npmOfSetup(cli, install, ctx, node) {
42
- return { ...globalNpm(cli, install, ctx, node), rerun: wholeLine(setupLineOf(install)) };
41
+ function npmOfSetup(cli, install, ctx, launch) {
42
+ return { ...globalNpm(cli, install, ctx, launch), rerun: wholeLine(setupLineOf(install)) };
43
43
  }
44
44
  function needsInstall({ from, latest }) {
45
45
  return from === null || standingOf(from, latest) === "behind";
46
46
  }
47
- function binDirOf(prefix) {
48
- return process.platform === "win32" ? prefix : join(prefix, "bin");
47
+ function binDirOf(prefix, platform) {
48
+ return platform === "win32" ? prefix : join(prefix, "bin");
49
49
  }
50
50
  // A PATH entry that cannot be resolved still compares as written, so it only fails to match.
51
- async function canonical(path) {
52
- return normalize(await realpath(path).catch(() => path));
51
+ async function canonical(files, path) {
52
+ const real = await files.realPath(path).catch((error) => {
53
+ if (!(error instanceof CliError) && errnoOf(error) === undefined)
54
+ throw error;
55
+ return undefined;
56
+ });
57
+ return normalize(real ?? path);
53
58
  }
54
59
  // npx puts its own copy's bin on PATH, so only the global folder's place there tells a later shell finds it.
55
- async function assertOnPath(cli, prefix, node, ctx) {
56
- const binDir = binDirOf(prefix);
57
- const wanted = await canonical(binDir);
60
+ async function assertOnPath(cli, prefix, { node, platform }, ctx) {
61
+ const binDir = binDirOf(prefix, platform);
62
+ const wanted = await canonical(ctx.files, binDir);
58
63
  const entries = pathOf(ctx.env).split(delimiter).filter(Boolean);
59
- const found = await Promise.all(entries.map(canonical));
64
+ const found = await Promise.all(entries.map((entry) => canonical(ctx.files, entry)));
60
65
  if (found.includes(wanted))
61
66
  return;
62
67
  throw runtimeError({
@@ -92,7 +97,7 @@ function renderSetup(cli, install, setup) {
92
97
  ].join("\n");
93
98
  }
94
99
  /** The built-in `setup`, which runs from any copy, such as npx's, so it never asks to be the global one. */
95
- export function setupCommand(cli, install, { node }) {
100
+ export function setupCommand(cli, install, launch) {
96
101
  return defineCommand({
97
102
  description: "install this CLI and its skill on this machine",
98
103
  examples: [
@@ -100,13 +105,14 @@ export function setupCommand(cli, install, { node }) {
100
105
  { command: `${cli.name} setup --dry-run`, note: "show what it would change" },
101
106
  ],
102
107
  effect: "write",
108
+ errors: [NOT_GLOBAL_INSTALL, NOT_ON_PATH, ...NPM_ERRORS],
103
109
  output: setupSchema,
104
110
  plan: async (_input, ctx) => {
105
- const npm = npmOfSetup(cli, install, ctx, node);
111
+ const npm = npmOfSetup(cli, install, ctx, launch);
106
112
  const prefix = await globalPrefix(npm);
107
- const packageDir = join(globalModulesDir(prefix), install.package);
113
+ const packageDir = join(globalModulesDir(prefix, launch.platform), install.package);
108
114
  // `npm link` puts a symlink to a source checkout where the install would be.
109
- if ((await orMissing(lstat(packageDir)))?.isSymbolicLink() === true) {
115
+ if (await isLink(ctx.files, packageDir)) {
110
116
  throw runtimeError({
111
117
  code: NOT_GLOBAL_INSTALL,
112
118
  message: `${packageDir} is a link (npm link), which an install would replace`,
@@ -116,11 +122,11 @@ export function setupCommand(cli, install, { node }) {
116
122
  }
117
123
  return {
118
124
  package: install.package,
119
- from: await versionAt(packageDir),
125
+ from: await versionAt(ctx.files, packageDir),
120
126
  latest: await latestVersion(npm),
121
127
  prefix,
122
128
  packageDir,
123
- copies: cli.skill === undefined ? [] : await homeCopiesOf(cli.name, ctx.env),
129
+ copies: cli.skill === undefined ? [] : await homeCopiesOf(ctx.files, cli.name, ctx.env),
124
130
  };
125
131
  },
126
132
  apply: async (plan, ctx) => {
@@ -130,7 +136,7 @@ export function setupCommand(cli, install, { node }) {
130
136
  .runToEnd(`installing ${plan.package}@${latest}`, async () => {
131
137
  if (installs) {
132
138
  ctx.progress(`installing ${plan.package}@${latest} with the npm under ${prefix}…`);
133
- await installGlobally(latest, npmOfSetup(cli, install, ctx, node));
139
+ await installGlobally(latest, npmOfSetup(cli, install, ctx, launch));
134
140
  }
135
141
  return syncHome(cli, packageDir, ctx);
136
142
  })
@@ -142,7 +148,7 @@ export function setupCommand(cli, install, { node }) {
142
148
  prefix,
143
149
  installed: installs,
144
150
  skill,
145
- upgrades: installs && from !== null ? await upgradesOf(packageDir, from, latest) : [],
151
+ upgrades: installs && from !== null ? await upgradesOf(ctx.files, packageDir, from, latest) : [],
146
152
  docs: cli.docs === undefined ? null : join(packageDir, cli.docs),
147
153
  };
148
154
  ctx.deliver(setup);
@@ -153,7 +159,7 @@ export function setupCommand(cli, install, { node }) {
153
159
  hint: "nothing to run again",
154
160
  });
155
161
  }
156
- await assertOnPath(cli, prefix, node, ctx);
162
+ await assertOnPath(cli, prefix, launch, ctx);
157
163
  return setup;
158
164
  },
159
165
  render: (setup) => renderSetup(cli, install, setup),
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/built-ins/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/built-ins/setup.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import * as z from "zod";
2
+ import type { Files } from "../../context/files.js";
2
3
  import type { Context, Env } from "../../context.js";
3
4
  import type { SkillSource } from "../../define.js";
4
5
  import type { Install } from "../install/install.js";
@@ -9,7 +10,7 @@ export declare function skillVersionIn(skill: string): string | undefined;
9
10
  export declare function statedVersionNote(version: string): string;
10
11
  export declare function homeOf(env: Env): string;
11
12
  /** The home folders of the Skill copy; the skills installer may have made one a link to the other. */
12
- export declare function homeCopiesOf(name: string, env: Env): Promise<string[]>;
13
+ export declare function homeCopiesOf(files: Files, name: string, env: Env): Promise<string[]>;
13
14
  export declare const homeSyncSchema: z.ZodObject<{
14
15
  copies: z.ZodArray<z.ZodString>;
15
16
  written: z.ZodArray<z.ZodString>;
@@ -1,8 +1,8 @@
1
- import { readFile, realpath } from "node:fs/promises";
2
1
  import { homedir } from "node:os";
3
2
  import { join } from "node:path";
4
3
  import * as z from "zod";
5
- import { isMissingFile, orMissing } from "../../errors.js";
4
+ import { CliError } from "../../errors.js";
5
+ import { readIfAny } from "../read.js";
6
6
  import { applySync, filesIn, syncOf } from "./sync.js";
7
7
  // The folders of Claude Code and Codex (ADR 0016).
8
8
  const SKILL_DIRS = [
@@ -24,9 +24,9 @@ export function homeOf(env) {
24
24
  return env.HOME ?? env.USERPROFILE ?? homedir();
25
25
  }
26
26
  /** The home folders of the Skill copy; the skills installer may have made one a link to the other. */
27
- export async function homeCopiesOf(name, env) {
27
+ export async function homeCopiesOf(files, name, env) {
28
28
  const paths = SKILL_DIRS.map((dir) => join(homeOf(env), ...dir, name));
29
- const reals = await Promise.all(paths.map(async (path) => orMissing(realpath(path))));
29
+ const reals = await Promise.all(paths.map((path) => files.realPath(path)));
30
30
  return paths.filter((_path, index) => {
31
31
  const real = reals[index];
32
32
  return real === undefined || reals.indexOf(real) === index;
@@ -45,10 +45,10 @@ export async function syncHome(cli, packageDir, ctx) {
45
45
  if (cli.skill === undefined)
46
46
  return null;
47
47
  const source = join(packageDir, cli.skill.folder);
48
- if ((await filesIn(source)).length === 0)
48
+ if ((await filesIn(ctx.files, source)).length === 0)
49
49
  return null;
50
- const copies = await homeCopiesOf(cli.name, ctx.env);
51
- const syncs = await Promise.all(copies.map((copy) => syncOf(source, copy)));
50
+ const copies = await homeCopiesOf(ctx.files, cli.name, ctx.env);
51
+ const syncs = await Promise.all(copies.map((copy) => syncOf(ctx.files, source, copy)));
52
52
  for (const sync of syncs)
53
53
  await applySync(sync, ctx);
54
54
  return {
@@ -73,17 +73,19 @@ export function renderHomeSync(name, sync) {
73
73
  `copied the ${name} skill to ${at}: wrote ${sync.written.length} files, removed ${sync.removed.length}`,
74
74
  ];
75
75
  }
76
- async function homeCopyAt(path) {
76
+ async function homeCopyAt(files, path) {
77
+ let text;
77
78
  try {
78
- return {
79
- path,
80
- state: "readable",
81
- stated: skillVersionIn(await readFile(join(path, "SKILL.md"), "utf8")),
82
- };
79
+ text = await readIfAny(files, join(path, "SKILL.md"));
83
80
  }
84
81
  catch (error) {
85
- return { path, state: isMissingFile(error) ? "missing" : "unreadable" };
82
+ if (!(error instanceof CliError))
83
+ throw error;
84
+ return { path, state: "unreadable" };
86
85
  }
86
+ return text === undefined
87
+ ? { path, state: "missing" }
88
+ : { path, state: "readable", stated: skillVersionIn(text) };
87
89
  }
88
90
  function describeCopy(copy) {
89
91
  if (copy.state === "missing")
@@ -93,10 +95,10 @@ function describeCopy(copy) {
93
95
  return copy.stated === undefined ? copy.path : `${copy.path} (${statedVersionNote(copy.stated)})`;
94
96
  }
95
97
  async function findingOf(cli, folder, install, ctx) {
96
- const paths = await homeCopiesOf(cli.name, ctx.env);
98
+ const paths = await homeCopiesOf(ctx.files, cli.name, ctx.env);
97
99
  const [copies, shipped] = await Promise.all([
98
- Promise.all(paths.map(homeCopyAt)),
99
- orMissing(readFile(join(ctx.packageRoot, folder, "SKILL.md"), "utf8")),
100
+ Promise.all(paths.map((path) => homeCopyAt(ctx.files, path))),
101
+ readIfAny(ctx.files, join(ctx.packageRoot, folder, "SKILL.md")),
100
102
  ]);
101
103
  const message = copies.map(describeCopy).join("; ");
102
104
  // A package whose own skill states a version would rewrite it, so a fix would never clear the row.
@@ -1 +1 @@
1
- {"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/built-ins/skill/home.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/built-ins/skill/home.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
+ import type { Files } from "../../context/files.js";
1
2
  import type { Command } from "../../define.js";
2
3
  import { type AgentsSection } from "../agents-md.js";
3
4
  import type { SkillCli } from "./skill.js";
4
5
  /** 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
+ export declare function skillCopyOf(files: Files, cli: Pick<SkillCli, "name">, cwd: string): Promise<{
6
7
  readonly root: string;
7
8
  readonly copy: string;
8
9
  }>;
@@ -1,14 +1,13 @@
1
- import { readFile } from "node:fs/promises";
2
1
  import { join } from "node:path";
3
2
  import * as z from "zod";
4
3
  import { defineCommand } from "../../define-command.js";
5
- import { orMissing } from "../../errors.js";
6
4
  import { agentsMdAt, handEditsAt, withSection, } from "../agents-md.js";
7
5
  import { projectRootOf } from "../project-root.js";
6
+ import { readIfAny, readRequired } from "../read.js";
8
7
  import { applySync, syncOf } from "./sync.js";
9
8
  /** The project root and the Skill copy under it, as `skill install` writes it. */
10
- export async function skillCopyOf(cli, cwd) {
11
- const root = await projectRootOf(cwd);
9
+ export async function skillCopyOf(files, cli, cwd) {
10
+ const root = await projectRootOf(files, cwd);
12
11
  return { root, copy: join(root, ".claude", "skills", cli.name) };
13
12
  }
14
13
  const installSchema = z.object({
@@ -18,12 +17,15 @@ const installSchema = z.object({
18
17
  agentsMd: z.object({ path: z.string(), changed: z.boolean() }).nullable(),
19
18
  handEdits: z.array(z.string()),
20
19
  });
21
- async function planOf(cli, folder, agents, cwd, packageRoot) {
22
- const { root, copy } = await skillCopyOf(cli, cwd);
20
+ async function planOf(cli, folder, agents, { files, cwd, packageRoot }) {
21
+ const source = join(packageRoot, folder);
22
+ // Syncing from a package that lost its skill would empty the copy.
23
+ await readRequired(files, join(source, "SKILL.md"));
24
+ const { root, copy } = await skillCopyOf(files, cli, cwd);
23
25
  return {
24
- ...(await syncOf(join(packageRoot, folder), copy)),
25
- agentsMd: agents === undefined ? null : await agentsMdAt(agents, root),
26
- handEdits: agents === undefined ? [] : await handEditsAt(root),
26
+ ...(await syncOf(files, source, copy)),
27
+ agentsMd: agents === undefined ? null : await agentsMdAt(files, agents, root),
28
+ handEdits: agents === undefined ? [] : await handEditsAt(files, root),
27
29
  };
28
30
  }
29
31
  const SECTION_VERBS = {
@@ -81,13 +83,13 @@ export function skillInstallCommand(cli, folder, agents) {
81
83
  ],
82
84
  effect: "write",
83
85
  output: installSchema,
84
- plan: (_input, ctx) => planOf(cli, folder, agents, ctx.cwd, ctx.packageRoot),
86
+ plan: (_input, ctx) => planOf(cli, folder, agents, ctx),
85
87
  // The copy lives in the project repo, so git keeps an edit this replaces.
86
88
  apply: async (plan, ctx) => {
87
89
  await applySync(plan, ctx);
88
90
  const { agentsMd } = plan;
89
91
  if (agentsMd !== null && agentsMd.change !== null) {
90
- const existing = (await orMissing(readFile(agentsMd.path, "utf8"))) ?? "";
92
+ const existing = (await readIfAny(ctx.files, agentsMd.path)) ?? "";
91
93
  await ctx.files.write(agentsMd.path, withSection(agentsMd.agents, existing));
92
94
  }
93
95
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"install-command.js","sourceRoot":"","sources":["../../../src/built-ins/skill/install-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-command.js","sourceRoot":"","sources":["../../../src/built-ins/skill/install-command.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,20 @@
1
- import { readFile, realpath } from "node:fs/promises";
2
1
  import { join } from "node:path";
3
- import { orMissing } from "../../errors.js";
4
2
  import { agentsRow } from "../agents-md.js";
3
+ import { readIfAny, readRequired } from "../read.js";
5
4
  import { homeOf, skillVersionIn, statedVersionNote } from "./home.js";
6
5
  import { skillCopyOf, skillInstallCommand } from "./install-command.js";
7
6
  // A project that is home itself has its copy under home, which shadows nothing.
8
7
  async function personalCopyOf(name, copy, ctx) {
9
8
  const home = join(homeOf(ctx.env), ".claude", "skills", name);
10
- const real = await orMissing(realpath(home));
11
- return real === undefined || real === (await orMissing(realpath(copy))) ? undefined : home;
9
+ const real = await ctx.files.realPath(home);
10
+ return real === undefined || real === (await ctx.files.realPath(copy)) ? undefined : home;
12
11
  }
13
12
  /** The project root's copy against the package's, and any under home. */
14
13
  async function findingOf(cli, folder, install, ctx) {
15
- const { copy } = await skillCopyOf(cli, ctx.cwd);
14
+ const { copy } = await skillCopyOf(ctx.files, cli, ctx.cwd);
16
15
  const [installed, shipped] = await Promise.all([
17
- orMissing(readFile(join(copy, "SKILL.md"), "utf8")),
18
- readFile(join(ctx.packageRoot, folder, "SKILL.md"), "utf8"),
16
+ readIfAny(ctx.files, join(copy, "SKILL.md")),
17
+ readRequired(ctx.files, join(ctx.packageRoot, folder, "SKILL.md")),
19
18
  ]);
20
19
  const stated = installed === undefined ? undefined : skillVersionIn(installed);
21
20
  // A package whose own skill states a version would rewrite it, so a fix would never clear the row.
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/built-ins/skill/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/built-ins/skill/project.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { Files } from "../../context/files.js";
1
2
  import type { Context } from "../../context.js";
2
3
  /** What makes a Skill copy match the package's folder. */
3
4
  export interface SkillSync {
@@ -10,7 +11,7 @@ export interface SkillSync {
10
11
  /** Files of the copy the package no longer has. */
11
12
  readonly remove: readonly string[];
12
13
  }
13
- /** Every file under `dir`, relative to it and sorted; none when `dir` is missing. */
14
- export declare function filesIn(dir: string): Promise<string[]>;
15
- export declare function syncOf(source: string, copy: string): Promise<SkillSync>;
14
+ /** Every file under `dir`, relative to it and sorted; none when `dir` is no folder. */
15
+ export declare function filesIn(files: Files, dir: string): Promise<string[]>;
16
+ export declare function syncOf(files: Files, source: string, copy: string): Promise<SkillSync>;
16
17
  export declare function applySync(sync: SkillSync, ctx: Context): Promise<void>;
@@ -1,21 +1,28 @@
1
- import { readdir, readFile } from "node:fs/promises";
2
- import { join, relative } from "node:path";
3
- import { orMissing } from "../../errors.js";
4
- /** Every file under `dir`, relative to it and sorted; none when `dir` is missing. */
5
- export async function filesIn(dir) {
6
- const entries = await orMissing(readdir(dir, { recursive: true, withFileTypes: true }));
7
- return (entries ?? [])
8
- .filter((entry) => entry.isFile())
9
- .map((entry) => relative(dir, join(entry.parentPath, entry.name)))
10
- .sort();
1
+ import { join } from "node:path";
2
+ async function walk(files, dir, inner) {
3
+ const names = await files.list(join(dir, inner));
4
+ const nested = await Promise.all(names.map(async (name) => {
5
+ const path = join(inner, name);
6
+ const found = await files.stat(join(dir, path));
7
+ if (found === undefined)
8
+ return [];
9
+ return found.folder ? walk(files, dir, path) : [path];
10
+ }));
11
+ return nested.flat();
11
12
  }
12
- async function sameContent(left, right) {
13
- const [a, b] = await Promise.all([readFile(left), readFile(right)]);
14
- return a.equals(b);
13
+ /** Every file under `dir`, relative to it and sorted; none when `dir` is no folder. */
14
+ export async function filesIn(files, dir) {
15
+ if ((await files.stat(dir))?.folder !== true)
16
+ return [];
17
+ return (await walk(files, dir, "")).sort();
15
18
  }
16
- export async function syncOf(source, copy) {
17
- const [shipped, present] = await Promise.all([filesIn(source), filesIn(copy)]);
18
- const differs = await Promise.all(shipped.map(async (file) => present.includes(file) && !(await sameContent(join(source, file), join(copy, file)))));
19
+ async function sameContent(files, left, right) {
20
+ const [a, b] = await Promise.all([files.read(left), files.read(right)]);
21
+ return Buffer.from(a).equals(b);
22
+ }
23
+ export async function syncOf(files, source, copy) {
24
+ const [shipped, present] = await Promise.all([filesIn(files, source), filesIn(files, copy)]);
25
+ const differs = await Promise.all(shipped.map(async (file) => present.includes(file) && !(await sameContent(files, join(source, file), join(copy, file)))));
19
26
  return {
20
27
  source,
21
28
  copy,
@@ -26,7 +33,7 @@ export async function syncOf(source, copy) {
26
33
  }
27
34
  export async function applySync(sync, ctx) {
28
35
  for (const file of [...sync.write, ...sync.replace]) {
29
- await ctx.files.write(join(sync.copy, file), await readFile(join(sync.source, file)));
36
+ await ctx.files.write(join(sync.copy, file), await ctx.files.read(join(sync.source, file)));
30
37
  }
31
38
  for (const file of sync.remove) {
32
39
  await ctx.files.remove(join(sync.copy, file));
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/built-ins/skill/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/built-ins/skill/sync.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,4 @@ import type { Command, GlobalInstall } from "../define.js";
2
2
  import type { Launch } from "./commands.js";
3
3
  import type { SkillCli } from "./skill/skill.js";
4
4
  /** The built-in `update`, for a CLI installed globally with npm. */
5
- export declare function updateCommand(cli: SkillCli, install: GlobalInstall, { bin, node }: Launch): Command;
5
+ export declare function updateCommand(cli: SkillCli, install: GlobalInstall, launch: Launch): Command;
@@ -2,8 +2,9 @@ import * as z from "zod";
2
2
  import { INTERRUPTED } from "../context/interrupts.js";
3
3
  import { defineCommand } from "../define-command.js";
4
4
  import { CliError } from "../errors.js";
5
+ import { NOT_GLOBAL_INSTALL } from "../runtime-codes.js";
5
6
  import { globalInstallOf, globalNpm } from "./install/global-npm.js";
6
- import { installGlobally, latestVersion } from "./npm.js";
7
+ import { installGlobally, latestVersion, NPM_ERRORS } from "./npm.js";
7
8
  import { standingOf } from "./semver.js";
8
9
  import { homeCopiesOf, homeSyncSchema, renderHomeSync, renderPlannedSync, syncHome, } from "./skill/home.js";
9
10
  import { renderUpgrade, upgradeSchema, upgradesOf } from "./upgrades.js";
@@ -39,7 +40,7 @@ function interruptedAfterInstall(plan) {
39
40
  });
40
41
  }
41
42
  /** The built-in `update`, for a CLI installed globally with npm. */
42
- export function updateCommand(cli, install, { bin, node }) {
43
+ export function updateCommand(cli, install, launch) {
43
44
  return defineCommand({
44
45
  description: "install the latest version of this CLI from its registry",
45
46
  examples: [
@@ -47,17 +48,18 @@ export function updateCommand(cli, install, { bin, node }) {
47
48
  { command: `${cli.name} update --dry-run`, note: "show the version it would install" },
48
49
  ],
49
50
  effect: "write",
51
+ errors: [NOT_GLOBAL_INSTALL, ...NPM_ERRORS],
50
52
  output: updateSchema,
51
53
  plan: async (_input, ctx) => {
52
- const npm = globalNpm(cli, install, ctx, node);
53
- const copy = await globalInstallOf(bin, npm);
54
+ const npm = globalNpm(cli, install, ctx, launch);
55
+ const copy = await globalInstallOf(launch.bin, npm);
54
56
  return {
55
57
  package: install.package,
56
58
  from: cli.version,
57
59
  latest: await latestVersion(npm),
58
60
  prefix: copy.prefix,
59
61
  packageDir: copy.packageDir,
60
- copies: cli.skill === undefined ? [] : await homeCopiesOf(cli.name, ctx.env),
62
+ copies: cli.skill === undefined ? [] : await homeCopiesOf(ctx.files, cli.name, ctx.env),
61
63
  };
62
64
  },
63
65
  apply: async (plan, ctx) => {
@@ -74,7 +76,7 @@ export function updateCommand(cli, install, { bin, node }) {
74
76
  ctx.signal.throwIfAborted();
75
77
  ctx.progress(`installing ${plan.package}@${latest} with the npm under ${prefix}…`);
76
78
  const skill = await ctx.runToEnd(`installing ${plan.package}@${latest}`, async () => {
77
- await installGlobally(latest, globalNpm(cli, install, ctx, node));
79
+ await installGlobally(latest, globalNpm(cli, install, ctx, launch));
78
80
  return syncHome(cli, plan.packageDir, ctx);
79
81
  });
80
82
  const update = {
@@ -82,7 +84,7 @@ export function updateCommand(cli, install, { bin, node }) {
82
84
  latest,
83
85
  installed: { version: latest, prefix },
84
86
  skill,
85
- upgrades: await upgradesOf(plan.packageDir, from, latest),
87
+ upgrades: await upgradesOf(ctx.files, plan.packageDir, from, latest),
86
88
  };
87
89
  if (ctx.signal.aborted) {
88
90
  ctx.deliver(update);