harnessbrew 0.4.0 → 0.5.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 (59) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +26 -5
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +65 -7
  5. package/dist/cli.js.map +1 -1
  6. package/dist/core/doctor.d.ts +22 -0
  7. package/dist/core/doctor.d.ts.map +1 -0
  8. package/dist/core/doctor.js +142 -0
  9. package/dist/core/doctor.js.map +1 -0
  10. package/dist/core/installations.d.ts +23 -1
  11. package/dist/core/installations.d.ts.map +1 -1
  12. package/dist/core/installations.js +48 -12
  13. package/dist/core/installations.js.map +1 -1
  14. package/dist/core/target-capabilities.d.ts +28 -0
  15. package/dist/core/target-capabilities.d.ts.map +1 -0
  16. package/dist/core/target-capabilities.js +34 -0
  17. package/dist/core/target-capabilities.js.map +1 -0
  18. package/dist/core/targets/claude-code.d.ts +3 -0
  19. package/dist/core/targets/claude-code.d.ts.map +1 -0
  20. package/dist/core/targets/claude-code.js +60 -0
  21. package/dist/core/targets/claude-code.js.map +1 -0
  22. package/dist/core/targets/codex.d.ts +3 -0
  23. package/dist/core/targets/codex.d.ts.map +1 -0
  24. package/dist/core/targets/codex.js +64 -0
  25. package/dist/core/targets/codex.js.map +1 -0
  26. package/dist/core/targets/planner.d.ts +5 -0
  27. package/dist/core/targets/planner.d.ts.map +1 -0
  28. package/dist/core/targets/planner.js +18 -0
  29. package/dist/core/targets/planner.js.map +1 -0
  30. package/dist/core/targets/registry.d.ts +4 -0
  31. package/dist/core/targets/registry.d.ts.map +1 -0
  32. package/dist/core/targets/registry.js +14 -0
  33. package/dist/core/targets/registry.js.map +1 -0
  34. package/dist/core/targets/renderers.d.ts +12 -0
  35. package/dist/core/targets/renderers.d.ts.map +1 -0
  36. package/dist/core/targets/renderers.js +157 -0
  37. package/dist/core/targets/renderers.js.map +1 -0
  38. package/dist/core/targets/transaction.d.ts +20 -0
  39. package/dist/core/targets/transaction.d.ts.map +1 -0
  40. package/dist/core/targets/transaction.js +478 -0
  41. package/dist/core/targets/transaction.js.map +1 -0
  42. package/dist/core/targets/types.d.ts +25 -0
  43. package/dist/core/targets/types.d.ts.map +1 -0
  44. package/dist/core/targets/types.js +2 -0
  45. package/dist/core/targets/types.js.map +1 -0
  46. package/dist/core/targets.d.ts +12 -4
  47. package/dist/core/targets.d.ts.map +1 -1
  48. package/dist/core/targets.js +143 -49
  49. package/dist/core/targets.js.map +1 -1
  50. package/dist/core/upgrades.d.ts.map +1 -1
  51. package/dist/core/upgrades.js +60 -17
  52. package/dist/core/upgrades.js.map +1 -1
  53. package/dist/index.d.ts +8 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +4 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/version.d.ts +1 -1
  58. package/dist/version.js +1 -1
  59. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -2,6 +2,30 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## 0.5.0 - 2026-08-13
6
+
7
+ ### Added
8
+
9
+ - explicit capability matrix and pure installation planners for OpenAI Codex and Claude Code
10
+ - receipt schema v2 with transactional `symlink-directory`, `symlink-file`, `render-file`, `managed-block`, and `merge-config` operations
11
+ - target-native Agent rendering, Workflow/Prompt-to-Skill projection, managed Instruction installation, and key-owned MCP configuration merging
12
+ - user and project target scopes, including multiple placements of the same Formula on one Target
13
+ - `doctor` integrity diagnostics and `relink` repair commands
14
+ - end-to-end integration coverage across every supported Formula, Target, and scope combination
15
+
16
+ ### Changed
17
+
18
+ - Skill installation now links the complete directory so scripts, references, and other relative resources remain available
19
+ - Target identity is now based on Target plus destination instead of Target name alone
20
+ - upgrades regenerate every recorded Target placement and preserve unrelated user configuration
21
+ - MCP Formula entries use a portable JSON model whose credentials reference environment variable names only
22
+
23
+ ### Fixed
24
+
25
+ - shared `AGENTS.md`, Codex TOML, and Claude JSON updates preserve user-owned content during link, upgrade, unlink, and rollback
26
+ - modified or missing rendered files, links, managed blocks, and configuration keys are detected before destructive operations
27
+ - Adapter Formula linking now fails explicitly instead of falling back to guessed `${kind}s` directories
28
+
5
29
  ## 0.4.0 - 2026-08-12
6
30
 
7
31
  ### Added
package/README.md CHANGED
@@ -11,7 +11,10 @@ HarnessBrew 不托管资产。个人、团队和第三方资产都保存在各
11
11
  - 解析依赖、循环、缺失项与冲突
12
12
  - 按 Git commit 将不可变内容安装到 Cellar
13
13
  - 链接到 OpenAI Codex 和 Claude Code
14
- - 通过 Receipt 跟踪文件所有权和 SHA-256 摘要
14
+ - 以原生格式投递 Skill、Agent、Workflow、Prompt、Instruction MCP
15
+ - 支持 user/project scope,以及同一 Target 的多实例
16
+ - 通过 Receipt 跟踪文件、配置键、受管区块所有权和 SHA-256 摘要
17
+ - 使用 `doctor` 诊断并通过 `relink` 修复 Target 漂移
15
18
  - 检测可用升级,并在升级后保留 Agent target 链接
16
19
  - 使用 `Harnessfile` 和 lockfile 在不同设备上复现环境
17
20
  - 从 npm 安装并通过 GitHub Release 发布
@@ -135,6 +138,10 @@ Formula 的目录名称必须与 `name` 一致,目录类型必须与 `kind`
135
138
 
136
139
  Git commit 是安装版本的唯一事实来源;Formula 不维护 `.snapshots` 或重复的 `history`。
137
140
 
141
+ MCP Formula 的入口是统一 JSON。stdio 配置使用 `command`、可选 `args` 和只包含环境变量名称的 `envVars`;HTTP 配置使用 `transport: "http"`、`url`、可选 `bearerTokenEnvVar` 与 `headersFromEnv`。HarnessBrew 不接受入口中的明文 `env` 密钥值。
142
+
143
+ `adapter` Formula 当前是可由 Git/Cellar 管理的扩展包,但内置 Target 不执行它。请使用不带 `--target` 的 `install` 保存;`link` 或 `install --target` 会明确拒绝,直到插件运行时接口开放。
144
+
138
145
  ## Target
139
146
 
140
147
  当前内置:
@@ -148,7 +155,7 @@ Git commit 是安装版本的唯一事实来源;Formula 不维护 `.snapshots`
148
155
  harnessbrew install code-review --target openai-codex
149
156
  ```
150
157
 
151
- 默认 target 根目录分别是 `~/.codex` 和 `~/.claude`。需要隔离安装时可使用:
158
+ Codex Skill 默认安装到 `~/.agents/skills`,其他 Codex 配置使用 `~/.codex`;Claude Code 使用 `~/.claude`。Skill 以完整目录软链安装,因此 `scripts/`、`references/``assets/` 等相对资源会与 `SKILL.md` 一起生效。Workflow 和 Prompt 会被投影为带标准 frontmatter 的 Target Skill。Agent 则以统一 Markdown 作为源码:投递到 Codex 时确定性渲染为 `.codex/agents/<name>.toml`,投递到 Claude Code 时渲染为 `.claude/agents/<name>.md`。Instruction 在 Codex 的 `AGENTS.md` 中使用带所有权标记的受管区块,在 Claude Code 中链接为 `.claude/rules/<name>.md`;MCP 分别按 TOML 区块或 JSON 键合并。卸载这些共享配置不会覆盖用户内容。需要隔离安装时可使用:
152
159
 
153
160
  ```bash
154
161
  harnessbrew install code-review \
@@ -156,6 +163,18 @@ harnessbrew install code-review \
156
163
  --target-root /path/to/sandbox/.codex
157
164
  ```
158
165
 
166
+ Target 支持用户级与项目级 scope;`--project` 会隐式选择 project scope。同一 Formula 可以同时存在于两个 scope,Receipt 会按实际目标路径分别记录操作:
167
+
168
+ ```bash
169
+ harnessbrew link code-review --target openai-codex --scope user
170
+ harnessbrew link code-review --target openai-codex --scope project --project /path/to/repo
171
+ harnessbrew unlink code-review --target openai-codex --scope project --project /path/to/repo
172
+ ```
173
+
174
+ 项目级 Codex 资产使用项目中的 `.agents/skills`、`.codex/agents`、根 `AGENTS.md` 和 `.codex/config.toml`;Claude Code 使用 `.claude/skills`、`.claude/agents`、`.claude/rules` 和根 `.mcp.json`。当同一 Target 有多个实例时,unlink 必须指定 scope。
175
+
176
+ `harnessbrew doctor [formula]` 会校验 Cellar 文件摘要和每条 Target operation,区分目标缺失与被修改;`harnessbrew relink <formula>` 会在 Cellar 完整的前提下,按 Receipt 记录的 scope/root 强制重建 HarnessBrew 拥有的目标。可用 `--target`、`--scope` 和 `--project` 只修复一个实例。
177
+
159
178
  也可以单独管理链接:
160
179
 
161
180
  ```bash
@@ -211,10 +230,12 @@ harnessbrew tap remove <owner/name>
211
230
  harnessbrew untap <owner/name>
212
231
  harnessbrew search [query] [--kind <kind>] [--target <target>]
213
232
  harnessbrew info <formula>
214
- harnessbrew install <formula> [--target <target>] [--target-root <path>]
233
+ harnessbrew install <formula> [--target <target>] [--scope <user|project>] [--project <path>] [--target-root <path>]
215
234
  harnessbrew list
216
- harnessbrew link <formula> --target <target> [--target-root <path>]
217
- harnessbrew unlink <formula> --target <target> [--force]
235
+ harnessbrew link <formula> --target <target> [--scope <user|project>] [--project <path>] [--target-root <path>]
236
+ harnessbrew unlink <formula> --target <target> [--scope <user|project>] [--project <path>] [--force]
237
+ harnessbrew doctor [formula]
238
+ harnessbrew relink <formula> [--target <target>] [--scope <user|project>] [--project <path>]
218
239
  harnessbrew update
219
240
  harnessbrew outdated
220
241
  harnessbrew upgrade [formula]
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA8OD,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE,KAAiB,EACrB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAUjB"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA4SD,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE,KAAiB,EACrB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAUjB"}
package/dist/cli.js CHANGED
@@ -8,6 +8,7 @@ import { bundleCleanup, bundleInstall } from "./core/bundle.js";
8
8
  import { resolveHarnessHome } from "./core/paths.js";
9
9
  import { addTap, listTaps, removeTap, updateTaps } from "./core/taps.js";
10
10
  import { VERSION } from "./version.js";
11
+ import { doctor, relinkFormula } from "./core/doctor.js";
11
12
  const defaultIO = {
12
13
  stdout: (message) => console.log(message),
13
14
  stderr: (message) => console.error(message)
@@ -31,10 +32,17 @@ Commands:
31
32
  uninstall Safely uninstall a formula
32
33
  link Link an installed formula to an Agent target
33
34
  unlink Remove a managed target link
35
+ doctor Check Cellar and Target integrity
36
+ relink Rebuild managed Target installations
34
37
  update Fetch all registered taps
35
38
  outdated List installed formulas with available changes
36
39
  upgrade Upgrade formulas while preserving target links
37
40
  bundle Rebuild or clean an environment from Harnessfile
41
+
42
+ Target placement options:
43
+ --scope <user|project> Select user or project installation scope
44
+ --project <path> Project root (implies --scope project)
45
+ --target-root <path> Override the target's native root
38
46
  `;
39
47
  function optionValue(args, name) {
40
48
  const index = args.indexOf(name);
@@ -45,6 +53,26 @@ function optionValue(args, name) {
45
53
  throw new HarnessBrewError(`Missing value for ${name}.`);
46
54
  return value;
47
55
  }
56
+ function targetOptions(args) {
57
+ const scopeValue = optionValue(args, "--scope");
58
+ const projectValue = optionValue(args, "--project");
59
+ if (scopeValue !== undefined && scopeValue !== "user" && scopeValue !== "project") {
60
+ throw new HarnessBrewError(`Unsupported target scope: ${scopeValue}`);
61
+ }
62
+ if (scopeValue === "user" && projectValue !== undefined) {
63
+ throw new HarnessBrewError("--project cannot be combined with --scope user.");
64
+ }
65
+ const scope = scopeValue ?? (projectValue === undefined ? "user" : "project");
66
+ const targetRoot = optionValue(args, "--target-root");
67
+ return {
68
+ scope,
69
+ ...(targetRoot === undefined ? {} : { root: targetRoot }),
70
+ ...(scope === "project" ? { projectRoot: path.resolve(projectValue ?? process.cwd()) } : {})
71
+ };
72
+ }
73
+ function hasTargetPlacementOptions(args) {
74
+ return args.includes("--scope") || args.includes("--project") || args.includes("--target-root");
75
+ }
48
76
  async function runTapCommand(args, home, io) {
49
77
  const [action = "list", ...rest] = args;
50
78
  if (action === "list") {
@@ -152,10 +180,9 @@ async function execute(args, io, options) {
152
180
  if (targetValue !== undefined && !builtinTargets.includes(targetValue)) {
153
181
  throw new HarnessBrewError(`Unsupported built-in target: ${targetValue}`);
154
182
  }
155
- const targetRoot = optionValue(args, "--target-root");
156
183
  const receipts = targetValue === undefined
157
184
  ? await installFormula(home, name)
158
- : await installForTarget(home, name, targetValue, targetRoot === undefined ? {} : { root: targetRoot });
185
+ : await installForTarget(home, name, targetValue, targetOptions(args));
159
186
  receipts.forEach((receipt) => io.stdout(`Installed ${receipt.coordinate} at ${receipt.commit.slice(0, 12)}.`));
160
187
  return 0;
161
188
  }
@@ -176,23 +203,54 @@ async function execute(args, io, options) {
176
203
  const name = args[1];
177
204
  const targetValue = optionValue(args, "--target");
178
205
  if (name === undefined || targetValue === undefined) {
179
- throw new HarnessBrewError(`Usage: harnessbrew ${command} <formula> --target <target> [--target-root <path>]`);
206
+ throw new HarnessBrewError(`Usage: harnessbrew ${command} <formula> --target <target> [--scope <user|project>] [--project <path>]`);
180
207
  }
181
208
  if (!builtinTargets.includes(targetValue)) {
182
209
  throw new HarnessBrewError(`Unsupported built-in target: ${targetValue}`);
183
210
  }
184
211
  if (command === "link") {
185
- await linkFormula(home, name, targetValue, {
186
- ...(optionValue(args, "--target-root") === undefined ? {} : { root: optionValue(args, "--target-root") })
187
- });
212
+ await linkFormula(home, name, targetValue, targetOptions(args));
188
213
  io.stdout(`Linked ${name} to ${targetValue}.`);
189
214
  }
190
215
  else {
191
- await unlinkFormula(home, name, targetValue, args.includes("--force"));
216
+ await unlinkFormula(home, name, targetValue, {
217
+ ...(hasTargetPlacementOptions(args) ? targetOptions(args) : {}),
218
+ force: args.includes("--force")
219
+ });
192
220
  io.stdout(`Unlinked ${name} from ${targetValue}.`);
193
221
  }
194
222
  return 0;
195
223
  }
224
+ if (command === "doctor") {
225
+ const name = args[1]?.startsWith("--") === true ? undefined : args[1];
226
+ const report = await doctor(home, name);
227
+ if (report.healthy) {
228
+ io.stdout(`Doctor found no issues across ${report.checked} formula(s).`);
229
+ return 0;
230
+ }
231
+ report.findings.forEach((finding) => io.stderr([
232
+ finding.coordinate,
233
+ finding.kind,
234
+ finding.target,
235
+ finding.destination
236
+ ].filter((value) => value !== undefined).join("\t")));
237
+ return 1;
238
+ }
239
+ if (command === "relink") {
240
+ const name = args[1];
241
+ if (name === undefined)
242
+ throw new HarnessBrewError("Usage: harnessbrew relink <formula> [--target <target>]");
243
+ const targetValue = optionValue(args, "--target");
244
+ if (targetValue !== undefined && !builtinTargets.includes(targetValue)) {
245
+ throw new HarnessBrewError(`Unsupported built-in target: ${targetValue}`);
246
+ }
247
+ await relinkFormula(home, name, {
248
+ ...(hasTargetPlacementOptions(args) ? targetOptions(args) : {}),
249
+ ...(targetValue === undefined ? {} : { target: targetValue })
250
+ });
251
+ io.stdout(`Relinked ${name}${targetValue === undefined ? "" : ` to ${targetValue}`}.`);
252
+ return 0;
253
+ }
196
254
  if (command === "outdated") {
197
255
  const outdated = await findOutdated(home);
198
256
  outdated.forEach((item) => io.stdout(item.available
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type InstallReceipt } from "./installations.js";
2
+ import { type BuiltinTarget, type LinkOptions } from "./targets.js";
3
+ export type DoctorFindingKind = "cellar-modified" | "target-missing" | "target-modified";
4
+ export interface DoctorFinding {
5
+ coordinate: string;
6
+ kind: DoctorFindingKind;
7
+ message: string;
8
+ target?: string;
9
+ destination?: string;
10
+ operationId?: string;
11
+ }
12
+ export interface DoctorReport {
13
+ checked: number;
14
+ healthy: boolean;
15
+ findings: DoctorFinding[];
16
+ }
17
+ export interface RelinkOptions extends LinkOptions {
18
+ target?: BuiltinTarget;
19
+ }
20
+ export declare function doctor(home: string, nameOrCoordinate?: string): Promise<DoctorReport>;
21
+ export declare function relinkFormula(home: string, nameOrCoordinate: string, options?: RelinkOptions): Promise<InstallReceipt>;
22
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEzF,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAsBD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA8B3F;AAiED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,cAAc,CAAC,CAoBzB"}
@@ -0,0 +1,142 @@
1
+ import { lstat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { HarnessBrewError } from "./errors.js";
4
+ import { listInstalled, verifyCellarIntegrity, writeReceipt } from "./installations.js";
5
+ import { linkFormula, targetDestination } from "./targets.js";
6
+ import { removeTargetOperation, verifyTargetOperation } from "./targets/transaction.js";
7
+ function matchingReceipts(receipts, nameOrCoordinate) {
8
+ if (nameOrCoordinate === undefined)
9
+ return receipts;
10
+ const matches = nameOrCoordinate.split("/").length === 3
11
+ ? receipts.filter((receipt) => receipt.coordinate === nameOrCoordinate)
12
+ : receipts.filter((receipt) => receipt.coordinate.endsWith(`/${nameOrCoordinate}`));
13
+ if (matches.length === 0)
14
+ throw new HarnessBrewError(`Formula is not installed: ${nameOrCoordinate}`);
15
+ if (matches.length > 1)
16
+ throw new HarnessBrewError(`Installed formula name is ambiguous: ${nameOrCoordinate}`);
17
+ return matches;
18
+ }
19
+ async function destinationExists(destination) {
20
+ try {
21
+ await lstat(destination);
22
+ return true;
23
+ }
24
+ catch (error) {
25
+ if (error.code === "ENOENT")
26
+ return false;
27
+ throw error;
28
+ }
29
+ }
30
+ export async function doctor(home, nameOrCoordinate) {
31
+ const receipts = matchingReceipts(await listInstalled(home), nameOrCoordinate);
32
+ const findings = [];
33
+ for (const receipt of receipts) {
34
+ try {
35
+ await verifyCellarIntegrity(receipt);
36
+ }
37
+ catch (error) {
38
+ findings.push({
39
+ coordinate: receipt.coordinate,
40
+ kind: "cellar-modified",
41
+ message: error.message
42
+ });
43
+ }
44
+ for (const operation of receipt.operations) {
45
+ try {
46
+ await verifyTargetOperation(operation);
47
+ }
48
+ catch (error) {
49
+ const exists = await destinationExists(operation.destination);
50
+ findings.push({
51
+ coordinate: receipt.coordinate,
52
+ kind: exists ? "target-modified" : "target-missing",
53
+ target: operation.target,
54
+ destination: operation.destination,
55
+ operationId: operation.id,
56
+ message: error.message
57
+ });
58
+ }
59
+ }
60
+ }
61
+ return { checked: receipts.length, healthy: findings.length === 0, findings };
62
+ }
63
+ function placementSpecified(options) {
64
+ return options.scope !== undefined || options.root !== undefined || options.projectRoot !== undefined;
65
+ }
66
+ function legacyLinkOptions(receipt, operation) {
67
+ const target = operation.target;
68
+ if (receipt.kind === "workflow" || receipt.kind === "prompt") {
69
+ return { root: path.dirname(path.dirname(path.dirname(operation.destination))) };
70
+ }
71
+ if (receipt.kind === "skill" || receipt.kind === "agent") {
72
+ return { root: path.dirname(path.dirname(operation.destination)) };
73
+ }
74
+ if (receipt.kind === "instruction" && target === "claude-code") {
75
+ return { root: path.dirname(path.dirname(operation.destination)) };
76
+ }
77
+ if (receipt.kind === "mcp" && target === "claude-code" && path.basename(operation.destination) === ".claude.json") {
78
+ return {};
79
+ }
80
+ return { root: path.dirname(operation.destination) };
81
+ }
82
+ function operationLinkOptions(receipt, operation, requested) {
83
+ if (operation.scope !== undefined) {
84
+ return {
85
+ scope: operation.scope,
86
+ ...(operation.root === undefined ? {} : { root: operation.root }),
87
+ ...(operation.projectRoot === undefined ? {} : { projectRoot: operation.projectRoot })
88
+ };
89
+ }
90
+ if (requested.target === operation.target && placementSpecified(requested)) {
91
+ return {
92
+ ...(requested.scope === undefined ? {} : { scope: requested.scope }),
93
+ ...(requested.root === undefined ? {} : { root: requested.root }),
94
+ ...(requested.projectRoot === undefined ? {} : { projectRoot: requested.projectRoot })
95
+ };
96
+ }
97
+ return legacyLinkOptions(receipt, operation);
98
+ }
99
+ function selectedOperations(receipt, options) {
100
+ if (options.target === undefined)
101
+ return [...receipt.operations];
102
+ const candidates = receipt.operations.filter((operation) => operation.target === options.target);
103
+ if (candidates.length === 0) {
104
+ throw new HarnessBrewError(`Formula is not linked to ${options.target}: ${receipt.coordinate}`);
105
+ }
106
+ if (!placementSpecified(options)) {
107
+ if (candidates.length > 1) {
108
+ throw new HarnessBrewError(`Formula has multiple ${options.target} installations; specify --scope and --project.`);
109
+ }
110
+ return candidates;
111
+ }
112
+ const destination = targetDestination(receipt, options.target, options);
113
+ const selected = candidates.filter((operation) => operation.destination === destination);
114
+ if (selected.length === 0) {
115
+ throw new HarnessBrewError(`Formula is not linked at the selected ${options.target} scope: ${receipt.coordinate}`);
116
+ }
117
+ return selected;
118
+ }
119
+ export async function relinkFormula(home, nameOrCoordinate, options = {}) {
120
+ const [receipt] = matchingReceipts(await listInstalled(home), nameOrCoordinate);
121
+ if (receipt === undefined)
122
+ throw new HarnessBrewError(`Formula is not installed: ${nameOrCoordinate}`);
123
+ await verifyCellarIntegrity(receipt);
124
+ const selected = selectedOperations(receipt, options);
125
+ if (selected.length === 0)
126
+ throw new HarnessBrewError(`Formula has no target installations: ${receipt.coordinate}`);
127
+ let current = receipt;
128
+ for (const operation of selected) {
129
+ const linkOptions = operationLinkOptions(receipt, operation, options);
130
+ await removeTargetOperation(operation, true);
131
+ current.operations = current.operations.filter((candidate) => candidate.id !== operation.id);
132
+ current.links = current.links.filter((link) => link.path !== operation.destination);
133
+ if (!current.operations.some((candidate) => candidate.target === operation.target)
134
+ && !current.links.some((link) => link.target === operation.target)) {
135
+ current.targets = current.targets.filter((target) => target !== operation.target);
136
+ }
137
+ await writeReceipt(home, current);
138
+ current = await linkFormula(home, current.coordinate, operation.target, linkOptions);
139
+ }
140
+ return current;
141
+ }
142
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type CatalogFormula } from "./formulas.js";
2
+ import type { TargetScope } from "./targets/types.js";
2
3
  export interface InstalledFile {
3
4
  path: string;
4
5
  sha256: string;
@@ -7,10 +8,29 @@ export interface InstalledLink extends InstalledFile {
7
8
  source: string;
8
9
  target: string;
9
10
  }
11
+ export type InstalledOperationType = "symlink-directory" | "symlink-file" | "render-file" | "merge-config" | "managed-block";
12
+ export interface InstalledOperation {
13
+ id: string;
14
+ type: InstalledOperationType;
15
+ target: string;
16
+ destination: string;
17
+ source?: string;
18
+ beforeDigest?: string;
19
+ installedDigest?: string;
20
+ ownedKeys?: string[];
21
+ marker?: string;
22
+ managedPrefix?: string;
23
+ configFormat?: "json" | "toml-block";
24
+ scope?: TargetScope;
25
+ root?: string;
26
+ projectRoot?: string;
27
+ createdDirectories: string[];
28
+ }
10
29
  export interface InstallReceipt {
11
- schemaVersion: 1;
30
+ schemaVersion: 2;
12
31
  coordinate: string;
13
32
  kind: string;
33
+ description: string;
14
34
  tap: string;
15
35
  commit: string;
16
36
  cellarPath: string;
@@ -22,6 +42,7 @@ export interface InstallReceipt {
22
42
  supportedTargets: string[];
23
43
  targets: string[];
24
44
  links: InstalledLink[];
45
+ operations: InstalledOperation[];
25
46
  installedAt: string;
26
47
  }
27
48
  export interface UninstallOptions {
@@ -33,6 +54,7 @@ export declare function listInstalled(home: string): Promise<InstallReceipt[]>;
33
54
  export declare function resolveDependencies(home: string, root: CatalogFormula): Promise<CatalogFormula[]>;
34
55
  export declare function installCatalogFormula(home: string, formula: CatalogFormula, requested: boolean): Promise<InstallReceipt>;
35
56
  export declare function installFormula(home: string, nameOrCoordinate: string): Promise<InstallReceipt[]>;
57
+ export declare function verifyCellarIntegrity(receipt: InstallReceipt): Promise<void>;
36
58
  export declare function verifyReceiptIntegrity(receipt: InstallReceipt): Promise<void>;
37
59
  export declare function uninstallFormula(home: string, nameOrCoordinate: string, options?: UninstallOptions): Promise<InstallReceipt>;
38
60
  //# sourceMappingURL=installations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installations.d.ts","sourceRoot":"","sources":["../../src/core/installations.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAG7E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAoCD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAgBvG;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvF;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAc3E;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA2BvG;AAkBD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,cAAc,CAAC,CA0CzB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAyBtG;AAyBD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnF;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAuBzB"}
1
+ {"version":3,"file":"installations.d.ts","sourceRoot":"","sources":["../../src/core/installations.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,32 @@ async function pathExists(filePath) {
39
39
  throw error;
40
40
  }
41
41
  }
42
+ function normalizeReceipt(value, receiptPath, expectedCoordinate) {
43
+ if (typeof value !== "object" || value === null)
44
+ throw new HarnessBrewError(`Invalid install receipt: ${receiptPath}`);
45
+ const receipt = value;
46
+ if ((receipt.schemaVersion !== 1 && receipt.schemaVersion !== 2)
47
+ || typeof receipt.coordinate !== "string"
48
+ || (expectedCoordinate !== undefined && receipt.coordinate !== expectedCoordinate)
49
+ || !Array.isArray(receipt.links)) {
50
+ throw new HarnessBrewError(`Invalid install receipt: ${receiptPath}`);
51
+ }
52
+ const operations = receipt.schemaVersion === 2 && Array.isArray(receipt.operations)
53
+ ? receipt.operations
54
+ : receipt.links.map((link, index) => ({
55
+ id: `legacy:${receipt.coordinate}:${link.target}:${index}`,
56
+ type: "symlink-file",
57
+ target: link.target,
58
+ destination: link.path,
59
+ source: link.source,
60
+ installedDigest: link.sha256,
61
+ createdDirectories: []
62
+ }));
63
+ const description = typeof receipt.description === "string" && receipt.description.trim() !== ""
64
+ ? receipt.description
65
+ : receipt.coordinate.split("/").at(-1) ?? receipt.coordinate;
66
+ return { ...receipt, description, schemaVersion: 2, operations };
67
+ }
42
68
  export async function readReceipt(home, coordinate) {
43
69
  const receiptPath = resolveReceiptPath(home, coordinate);
44
70
  let content;
@@ -51,10 +77,7 @@ export async function readReceipt(home, coordinate) {
51
77
  throw error;
52
78
  }
53
79
  try {
54
- const receipt = JSON.parse(content);
55
- if (receipt.schemaVersion !== 1 || receipt.coordinate !== coordinate)
56
- throw new Error("invalid receipt");
57
- return receipt;
80
+ return normalizeReceipt(JSON.parse(content), receiptPath, coordinate);
58
81
  }
59
82
  catch {
60
83
  throw new HarnessBrewError(`Invalid install receipt: ${receiptPath}`);
@@ -75,11 +98,7 @@ export async function listInstalled(home) {
75
98
  const receipts = [];
76
99
  for (const relativePath of receiptPaths) {
77
100
  const content = await readFile(path.join(receiptsRoot, relativePath), "utf8");
78
- const receipt = JSON.parse(content);
79
- if (receipt.schemaVersion !== 1 || typeof receipt.coordinate !== "string") {
80
- throw new HarnessBrewError(`Invalid install receipt: ${path.join(receiptsRoot, relativePath)}`);
81
- }
82
- receipts.push(receipt);
101
+ receipts.push(normalizeReceipt(JSON.parse(content), path.join(receiptsRoot, relativePath)));
83
102
  }
84
103
  return receipts.sort((left, right) => left.coordinate.localeCompare(right.coordinate));
85
104
  }
@@ -142,9 +161,10 @@ export async function installCatalogFormula(home, formula, requested) {
142
161
  await cp(formula.directory, temporaryPath, { recursive: true, errorOnExist: true });
143
162
  await rename(temporaryPath, cellarPath);
144
163
  const receipt = {
145
- schemaVersion: 1,
164
+ schemaVersion: 2,
146
165
  coordinate: formula.coordinate,
147
166
  kind: formula.kind,
167
+ description: formula.description,
148
168
  tap: formula.tap,
149
169
  commit: formula.commit,
150
170
  cellarPath,
@@ -156,6 +176,7 @@ export async function installCatalogFormula(home, formula, requested) {
156
176
  supportedTargets: formula.targets,
157
177
  targets: [],
158
178
  links: [],
179
+ operations: [],
159
180
  installedAt: new Date().toISOString()
160
181
  };
161
182
  await writeReceipt(home, receipt);
@@ -204,7 +225,16 @@ async function verifyReceiptFiles(receipt) {
204
225
  }
205
226
  }
206
227
  }
228
+ export async function verifyCellarIntegrity(receipt) {
229
+ await verifyReceiptFiles(receipt);
230
+ }
207
231
  async function verifyReceiptLinks(receipt) {
232
+ if (receipt.operations.length > 0) {
233
+ const { verifyTargetOperation } = await import("./targets/transaction.js");
234
+ for (const operation of receipt.operations)
235
+ await verifyTargetOperation(operation);
236
+ return;
237
+ }
208
238
  for (const link of receipt.links) {
209
239
  try {
210
240
  const metadata = await lstat(link.path);
@@ -240,8 +270,14 @@ export async function uninstallFormula(home, nameOrCoordinate, options = {}) {
240
270
  if (options.force !== true) {
241
271
  await verifyReceiptIntegrity(receipt);
242
272
  }
243
- for (const link of receipt.links) {
244
- await rm(link.path, { force: true });
273
+ if (receipt.operations.length > 0) {
274
+ const { removeTargetOperation } = await import("./targets/transaction.js");
275
+ for (const operation of [...receipt.operations].reverse())
276
+ await removeTargetOperation(operation, true);
277
+ }
278
+ else {
279
+ for (const link of receipt.links)
280
+ await rm(link.path, { force: true });
245
281
  }
246
282
  await rm(receipt.cellarPath, { recursive: true, force: true });
247
283
  await rm(resolveReceiptPath(home, receipt.coordinate), { force: true });