harnessbrew 0.5.2 → 0.6.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 (81) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +88 -9
  3. package/dist/cli.d.ts +17 -0
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +184 -26
  6. package/dist/cli.js.map +1 -1
  7. package/dist/core/adapter-plugins.d.ts +12 -0
  8. package/dist/core/adapter-plugins.d.ts.map +1 -0
  9. package/dist/core/adapter-plugins.js +151 -0
  10. package/dist/core/adapter-plugins.js.map +1 -0
  11. package/dist/core/bundle.d.ts +33 -5
  12. package/dist/core/bundle.d.ts.map +1 -1
  13. package/dist/core/bundle.js +329 -60
  14. package/dist/core/bundle.js.map +1 -1
  15. package/dist/core/doctor.d.ts +2 -2
  16. package/dist/core/doctor.d.ts.map +1 -1
  17. package/dist/core/doctor.js +2 -0
  18. package/dist/core/doctor.js.map +1 -1
  19. package/dist/core/git.d.ts +1 -0
  20. package/dist/core/git.d.ts.map +1 -1
  21. package/dist/core/git.js +17 -0
  22. package/dist/core/git.js.map +1 -1
  23. package/dist/core/installations.d.ts +1 -0
  24. package/dist/core/installations.d.ts.map +1 -1
  25. package/dist/core/installations.js +135 -14
  26. package/dist/core/installations.js.map +1 -1
  27. package/dist/core/journal.d.ts +26 -0
  28. package/dist/core/journal.d.ts.map +1 -0
  29. package/dist/core/journal.js +363 -0
  30. package/dist/core/journal.js.map +1 -0
  31. package/dist/core/locks.d.ts +10 -0
  32. package/dist/core/locks.d.ts.map +1 -0
  33. package/dist/core/locks.js +90 -0
  34. package/dist/core/locks.js.map +1 -0
  35. package/dist/core/paths.d.ts +1 -0
  36. package/dist/core/paths.d.ts.map +1 -1
  37. package/dist/core/paths.js +3 -0
  38. package/dist/core/paths.js.map +1 -1
  39. package/dist/core/state.d.ts +2 -0
  40. package/dist/core/state.d.ts.map +1 -1
  41. package/dist/core/state.js +21 -2
  42. package/dist/core/state.js.map +1 -1
  43. package/dist/core/taps.d.ts +7 -1
  44. package/dist/core/taps.d.ts.map +1 -1
  45. package/dist/core/taps.js +74 -16
  46. package/dist/core/taps.js.map +1 -1
  47. package/dist/core/targets/claude-code.d.ts.map +1 -1
  48. package/dist/core/targets/claude-code.js +11 -1
  49. package/dist/core/targets/claude-code.js.map +1 -1
  50. package/dist/core/targets/codex.d.ts.map +1 -1
  51. package/dist/core/targets/codex.js +11 -1
  52. package/dist/core/targets/codex.js.map +1 -1
  53. package/dist/core/targets/planner.d.ts +2 -3
  54. package/dist/core/targets/planner.d.ts.map +1 -1
  55. package/dist/core/targets/planner.js +43 -3
  56. package/dist/core/targets/planner.js.map +1 -1
  57. package/dist/core/targets/registry.d.ts +7 -3
  58. package/dist/core/targets/registry.d.ts.map +1 -1
  59. package/dist/core/targets/registry.js +55 -0
  60. package/dist/core/targets/registry.js.map +1 -1
  61. package/dist/core/targets/transaction.d.ts.map +1 -1
  62. package/dist/core/targets/transaction.js +46 -10
  63. package/dist/core/targets/transaction.js.map +1 -1
  64. package/dist/core/targets/types.d.ts +8 -4
  65. package/dist/core/targets/types.d.ts.map +1 -1
  66. package/dist/core/targets/types.js +1 -1
  67. package/dist/core/targets/types.js.map +1 -1
  68. package/dist/core/targets.d.ts +6 -7
  69. package/dist/core/targets.d.ts.map +1 -1
  70. package/dist/core/targets.js +33 -22
  71. package/dist/core/targets.js.map +1 -1
  72. package/dist/core/upgrades.d.ts.map +1 -1
  73. package/dist/core/upgrades.js +10 -1
  74. package/dist/core/upgrades.js.map +1 -1
  75. package/dist/index.d.ts +13 -5
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +6 -2
  78. package/dist/index.js.map +1 -1
  79. package/dist/version.d.ts +1 -1
  80. package/dist/version.js +1 -1
  81. package/package.json +1 -1
@@ -1,15 +1,56 @@
1
+ import { createHash } from "node:crypto";
1
2
  import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
2
3
  import path from "node:path";
3
4
  import { parse } from "yaml";
4
5
  import { HarnessBrewError } from "./errors.js";
5
6
  import { getFormula } from "./formulas.js";
6
- import { installFormula, listInstalled, resolveDependencies, uninstallFormula } from "./installations.js";
7
- import { addTap, checkoutTap, listTaps, updateTaps } from "./taps.js";
8
- import { builtinTargets, installForTarget, linkFormula } from "./targets.js";
7
+ import { installFormula, listInstalled, resolveDependencies, uninstallFormula, writeReceipt } from "./installations.js";
8
+ import { addTap, checkoutTap, listTaps, setTapTrust, updateTaps } from "./taps.js";
9
+ import { linkFormula, targetDestination } from "./targets.js";
10
+ import { removeTargetOperation } from "./targets/transaction.js";
11
+ import { hasTargetAdapter, targetAdapterVersion } from "./targets/registry.js";
9
12
  import { upgradeFormulas } from "./upgrades.js";
13
+ import { captureMissingParents, captureTransactionPath, markTransactionPath, withJournalTransaction } from "./journal.js";
10
14
  function isRecord(value) {
11
15
  return typeof value === "object" && value !== null && !Array.isArray(value);
12
16
  }
17
+ function assertKeys(value, allowed, context) {
18
+ const unknown = Object.keys(value).find((key) => !allowed.includes(key));
19
+ if (unknown !== undefined)
20
+ throw new HarnessBrewError(`Unknown ${context} field: ${unknown}`);
21
+ }
22
+ function targetDeclaration(value, context) {
23
+ if (!isRecord(value))
24
+ throw new HarnessBrewError(`Invalid Target declaration for ${context}`);
25
+ assertKeys(value, ["target", "scope", "project", "root"], `Target declaration for ${context}`);
26
+ if (typeof value.target !== "string" || !hasTargetAdapter(value.target)) {
27
+ throw new HarnessBrewError(`Invalid Target in ${context}`);
28
+ }
29
+ if (value.scope !== "user" && value.scope !== "project") {
30
+ throw new HarnessBrewError(`Target scope must be user or project in ${context}`);
31
+ }
32
+ if (value.project !== undefined && (typeof value.project !== "string" || value.project.trim() === "")) {
33
+ throw new HarnessBrewError(`Invalid Target project path in ${context}`);
34
+ }
35
+ if (value.root !== undefined && (typeof value.root !== "string" || value.root.trim() === "")) {
36
+ throw new HarnessBrewError(`Invalid Target root path in ${context}`);
37
+ }
38
+ if (value.scope === "user" && value.project !== undefined) {
39
+ throw new HarnessBrewError(`User Target cannot declare project in ${context}`);
40
+ }
41
+ if (value.scope === "project" && value.project === undefined) {
42
+ throw new HarnessBrewError(`Project Target must declare project in ${context}`);
43
+ }
44
+ return {
45
+ target: value.target,
46
+ scope: value.scope,
47
+ ...(value.project === undefined ? {} : { project: path.posix.normalize(value.project) }),
48
+ ...(value.root === undefined ? {} : { root: path.posix.normalize(value.root) })
49
+ };
50
+ }
51
+ function targetKey(target) {
52
+ return JSON.stringify([target.target, target.scope, target.project ?? "", target.root ?? ""]);
53
+ }
13
54
  export async function readHarnessfile(filePath) {
14
55
  let raw;
15
56
  try {
@@ -18,9 +59,12 @@ export async function readHarnessfile(filePath) {
18
59
  catch (error) {
19
60
  throw new HarnessBrewError(`Invalid Harnessfile ${filePath}: ${error.message}`);
20
61
  }
21
- if (!isRecord(raw) || (raw.schemaVersion ?? 1) !== 1) {
62
+ if (!isRecord(raw) || ((raw.schemaVersion ?? 1) !== 1 && raw.schemaVersion !== 2)) {
22
63
  throw new HarnessBrewError(`Unsupported Harnessfile schema: ${filePath}`);
23
64
  }
65
+ const schemaVersion = (raw.schemaVersion ?? 1);
66
+ if (schemaVersion === 2)
67
+ assertKeys(raw, ["schemaVersion", "taps", "assets"], "Harnessfile");
24
68
  if (!Array.isArray(raw.taps) || !Array.isArray(raw.assets)) {
25
69
  throw new HarnessBrewError(`Harnessfile must contain taps and assets arrays: ${filePath}`);
26
70
  }
@@ -28,20 +72,46 @@ export async function readHarnessfile(filePath) {
28
72
  if (!isRecord(item) || typeof item.name !== "string" || typeof item.git !== "string") {
29
73
  throw new HarnessBrewError(`Invalid tap declaration in ${filePath}`);
30
74
  }
31
- if (item.ref !== undefined && typeof item.ref !== "string") {
75
+ if (schemaVersion === 2)
76
+ assertKeys(item, ["name", "git", "ref", "trust"], `Tap ${item.name}`);
77
+ if (item.git.trim() === "")
78
+ throw new HarnessBrewError(`Invalid tap Git URL in ${filePath}`);
79
+ if (item.ref !== undefined && (typeof item.ref !== "string" || item.ref.trim() === "")) {
32
80
  throw new HarnessBrewError(`Invalid tap ref in ${filePath}`);
33
81
  }
34
- return { name: item.name, git: item.git, ...(item.ref === undefined ? {} : { ref: item.ref }) };
82
+ if (item.trust !== undefined && typeof item.trust !== "boolean") {
83
+ throw new HarnessBrewError(`Invalid tap trust policy in ${filePath}`);
84
+ }
85
+ return {
86
+ name: item.name,
87
+ git: item.git,
88
+ ...(item.ref === undefined ? {} : { ref: item.ref }),
89
+ ...(item.trust === undefined ? {} : { trust: item.trust })
90
+ };
35
91
  });
36
92
  const assets = raw.assets.map((item) => {
37
93
  if (!isRecord(item) || typeof item.formula !== "string") {
38
94
  throw new HarnessBrewError(`Invalid asset declaration in ${filePath}`);
39
95
  }
40
- const targets = item.targets ?? [];
41
- if (!Array.isArray(targets) || targets.some((target) => !builtinTargets.includes(target))) {
42
- throw new HarnessBrewError(`Invalid asset targets for ${item.formula}`);
96
+ const formula = item.formula;
97
+ if (schemaVersion === 2)
98
+ assertKeys(item, ["formula", "targets"], `Asset ${formula}`);
99
+ const declaredTargets = item.targets ?? [];
100
+ if (!Array.isArray(declaredTargets)) {
101
+ throw new HarnessBrewError(`Invalid asset targets for ${formula}`);
102
+ }
103
+ const targets = schemaVersion === 1
104
+ ? declaredTargets.map((target) => {
105
+ if (typeof target !== "string" || !hasTargetAdapter(target)) {
106
+ throw new HarnessBrewError(`Invalid asset targets for ${formula}`);
107
+ }
108
+ return { target, scope: "user" };
109
+ })
110
+ : declaredTargets.map((target) => targetDeclaration(target, formula));
111
+ if (new Set(targets.map(targetKey)).size !== targets.length) {
112
+ throw new HarnessBrewError(`Harnessfile contains duplicate Target placements for ${formula}.`);
43
113
  }
44
- return { formula: item.formula, targets: [...new Set(targets)] };
114
+ return { formula, targets };
45
115
  });
46
116
  if (new Set(taps.map((tap) => tap.name)).size !== taps.length) {
47
117
  throw new HarnessBrewError("Harnessfile contains duplicate taps.");
@@ -49,17 +119,79 @@ export async function readHarnessfile(filePath) {
49
119
  if (new Set(assets.map((asset) => asset.formula)).size !== assets.length) {
50
120
  throw new HarnessBrewError("Harnessfile contains duplicate assets.");
51
121
  }
52
- return { schemaVersion: 1, taps, assets };
122
+ return { schemaVersion, taps, assets };
53
123
  }
54
124
  export function lockfilePath(harnessfilePath) {
55
125
  return `${harnessfilePath}.lock`;
56
126
  }
57
127
  async function readLock(filePath) {
58
128
  try {
59
- const parsed = JSON.parse(await readFile(filePath, "utf8"));
60
- if (parsed.schemaVersion !== 1 || !Array.isArray(parsed.taps) || !Array.isArray(parsed.assets))
129
+ const value = JSON.parse(await readFile(filePath, "utf8"));
130
+ if (!isRecord(value) || (value.schemaVersion !== 1 && value.schemaVersion !== 2)
131
+ || !Array.isArray(value.taps) || !Array.isArray(value.assets))
61
132
  throw new Error("shape");
62
- return parsed;
133
+ const validCommit = (commit) => typeof commit === "string" && /^[0-9a-f]{40}$/u.test(commit);
134
+ const validDigest = (digest) => typeof digest === "string" && /^[0-9a-f]{64}$/u.test(digest);
135
+ const validStrings = (items) => Array.isArray(items)
136
+ && items.every((item) => typeof item === "string");
137
+ const taps = value.taps.map((item) => {
138
+ if (!isRecord(item) || typeof item.name !== "string" || typeof item.git !== "string" || !validCommit(item.commit)
139
+ || (item.ref !== undefined && typeof item.ref !== "string"))
140
+ throw new Error("tap");
141
+ if (value.schemaVersion === 2)
142
+ assertKeys(item, ["name", "git", "commit", "ref"], `Lock Tap ${item.name}`);
143
+ return {
144
+ name: item.name,
145
+ git: item.git,
146
+ commit: item.commit,
147
+ ...(item.ref === undefined ? {} : { ref: item.ref })
148
+ };
149
+ });
150
+ if (new Set(taps.map((tap) => tap.name)).size !== taps.length)
151
+ throw new Error("duplicate tap");
152
+ if (value.schemaVersion === 1) {
153
+ const assets = value.assets.map((item) => {
154
+ if (!isRecord(item) || typeof item.formula !== "string" || !validCommit(item.commit)
155
+ || !validStrings(item.dependencies) || !validStrings(item.targets))
156
+ throw new Error("asset");
157
+ return { formula: item.formula, commit: item.commit, dependencies: item.dependencies, targets: item.targets };
158
+ });
159
+ return { schemaVersion: 1, taps, assets };
160
+ }
161
+ assertKeys(value, ["schemaVersion", "manifestDigest", "adapterVersion", "taps", "assets"], "Harnessfile lock");
162
+ if (!validDigest(value.manifestDigest) || typeof value.adapterVersion !== "string" || value.adapterVersion === "") {
163
+ throw new Error("metadata");
164
+ }
165
+ const assets = value.assets.map((item) => {
166
+ if (!isRecord(item))
167
+ throw new Error("asset");
168
+ assertKeys(item, ["formula", "commit", "digest", "dependencies", "requested", "targets"], "Lock asset");
169
+ if (typeof item.formula !== "string" || !validCommit(item.commit) || !validDigest(item.digest)
170
+ || !validStrings(item.dependencies) || typeof item.requested !== "boolean" || !Array.isArray(item.targets)) {
171
+ throw new Error("asset");
172
+ }
173
+ const formula = item.formula;
174
+ const targets = item.targets.map((target) => targetDeclaration(target, formula));
175
+ if (new Set(targets.map(targetKey)).size !== targets.length)
176
+ throw new Error("duplicate target");
177
+ return {
178
+ formula,
179
+ commit: item.commit,
180
+ digest: item.digest,
181
+ dependencies: item.dependencies,
182
+ requested: item.requested,
183
+ targets
184
+ };
185
+ });
186
+ if (new Set(assets.map((asset) => asset.formula)).size !== assets.length)
187
+ throw new Error("duplicate asset");
188
+ return {
189
+ schemaVersion: 2,
190
+ manifestDigest: value.manifestDigest,
191
+ adapterVersion: value.adapterVersion,
192
+ taps,
193
+ assets
194
+ };
63
195
  }
64
196
  catch (error) {
65
197
  if (error.code === "ENOENT")
@@ -68,10 +200,15 @@ async function readLock(filePath) {
68
200
  }
69
201
  }
70
202
  async function writeLock(filePath, lock) {
71
- await mkdir(path.dirname(filePath), { recursive: true });
72
203
  const temporaryPath = `${filePath}.${process.pid}.tmp`;
204
+ await captureMissingParents(filePath);
205
+ await captureTransactionPath(filePath);
206
+ await captureTransactionPath(temporaryPath);
207
+ await mkdir(path.dirname(filePath), { recursive: true });
73
208
  await writeFile(temporaryPath, `${JSON.stringify(lock, null, 2)}\n`, "utf8");
74
209
  await rename(temporaryPath, filePath);
210
+ await markTransactionPath(filePath);
211
+ await markTransactionPath(temporaryPath);
75
212
  }
76
213
  async function syncTaps(home, manifest, lock) {
77
214
  const registered = new Map((await listTaps(home)).map((tap) => [tap.name, tap]));
@@ -85,8 +222,10 @@ async function syncTaps(home, manifest, lock) {
85
222
  throw new HarnessBrewError(`Lockfile Tap URL mismatch for ${declaration.name}`);
86
223
  }
87
224
  if (existing === undefined) {
88
- const ref = locked?.commit ?? declaration.ref;
89
- await addTap(home, declaration.name, declaration.git, ref === undefined ? {} : { ref });
225
+ await addTap(home, declaration.name, declaration.git, {
226
+ ...(declaration.ref === undefined ? {} : { ref: declaration.ref }),
227
+ trust: manifest.schemaVersion === 1 ? true : declaration.trust ?? false
228
+ });
90
229
  }
91
230
  else if (locked === undefined) {
92
231
  if (existing.ref !== declaration.ref) {
@@ -94,63 +233,187 @@ async function syncTaps(home, manifest, lock) {
94
233
  }
95
234
  await updateTaps(home, declaration.name);
96
235
  }
236
+ if (manifest.schemaVersion === 2) {
237
+ await setTapTrust(home, declaration.name, declaration.trust ?? false);
238
+ }
97
239
  if (locked !== undefined)
98
240
  await checkoutTap(home, declaration.name, locked.commit);
99
241
  }
100
242
  }
101
- function rootOptions(target, options) {
102
- const root = options.targetRoots?.[target];
103
- return root === undefined ? {} : { root };
243
+ function canonicalTargets(targets) {
244
+ return [...targets].sort((left, right) => targetKey(left).localeCompare(targetKey(right)));
245
+ }
246
+ function manifestDigest(manifest) {
247
+ const normalized = {
248
+ schemaVersion: manifest.schemaVersion,
249
+ taps: [...manifest.taps].sort((left, right) => left.name.localeCompare(right.name)),
250
+ assets: [...manifest.assets]
251
+ .sort((left, right) => left.formula.localeCompare(right.formula))
252
+ .map((asset) => ({ formula: asset.formula, targets: canonicalTargets(asset.targets) }))
253
+ };
254
+ return createHash("sha256").update(JSON.stringify(normalized)).digest("hex");
255
+ }
256
+ function formulaDigest(receipt) {
257
+ const inventory = [...receipt.files]
258
+ .sort((left, right) => left.path.localeCompare(right.path))
259
+ .map((file) => [file.path, file.sha256, file.mode ?? null]);
260
+ return createHash("sha256").update(JSON.stringify(inventory)).digest("hex");
104
261
  }
105
- export async function bundleInstall(home, harnessfilePath, options = {}) {
262
+ function resolveDeclaredPath(harnessfilePath, declared) {
263
+ const resolved = path.resolve(path.dirname(harnessfilePath), declared);
264
+ if (resolved === path.parse(resolved).root) {
265
+ throw new HarnessBrewError(`Unsafe Harnessfile Target path: ${declared}`);
266
+ }
267
+ return resolved;
268
+ }
269
+ function placementOptions(harnessfilePath, declaration, options) {
270
+ const override = options.targetRoots?.[declaration.target];
271
+ const resolvedOverride = override === undefined ? undefined : path.resolve(override);
272
+ if (resolvedOverride !== undefined && resolvedOverride === path.parse(resolvedOverride).root) {
273
+ throw new HarnessBrewError(`Unsafe Target root override: ${override}`);
274
+ }
275
+ return {
276
+ scope: declaration.scope,
277
+ ...(resolvedOverride !== undefined
278
+ ? { root: resolvedOverride }
279
+ : declaration.root === undefined ? {} : { root: resolveDeclaredPath(harnessfilePath, declaration.root) }),
280
+ ...(declaration.project === undefined
281
+ ? {} : { projectRoot: resolveDeclaredPath(harnessfilePath, declaration.project) })
282
+ };
283
+ }
284
+ async function desiredFormulas(home, manifest) {
285
+ const desired = new Map();
286
+ for (const asset of manifest.assets) {
287
+ const root = await getFormula(home, asset.formula);
288
+ for (const formula of await resolveDependencies(home, root)) {
289
+ const current = desired.get(formula.coordinate) ?? { requested: false, targets: new Map() };
290
+ if (formula.coordinate === root.coordinate)
291
+ current.requested = true;
292
+ for (const target of asset.targets)
293
+ current.targets.set(targetKey(target), target);
294
+ desired.set(formula.coordinate, current);
295
+ }
296
+ }
297
+ return desired;
298
+ }
299
+ async function reconcileTargets(home, harnessfilePath, receipt, desired, options) {
300
+ const placements = [...desired.targets.values()].map((declaration) => ({
301
+ declaration,
302
+ options: placementOptions(harnessfilePath, declaration, options),
303
+ destination: targetDestination(receipt, declaration.target, placementOptions(harnessfilePath, declaration, options))
304
+ }));
305
+ const destinations = new Set(placements.map((placement) => placement.destination));
306
+ const removed = receipt.operations.filter((operation) => !destinations.has(operation.destination));
307
+ for (const operation of [...removed].reverse())
308
+ await removeTargetOperation(operation);
309
+ if (removed.length > 0 || receipt.requested !== desired.requested) {
310
+ receipt.operations = receipt.operations.filter((operation) => !removed.includes(operation));
311
+ receipt.links = receipt.links.filter((link) => destinations.has(link.path));
312
+ receipt.targets = [...new Set(receipt.operations.map((operation) => operation.target))];
313
+ receipt.requested = desired.requested;
314
+ await writeReceipt(home, receipt);
315
+ }
316
+ for (const placement of placements) {
317
+ await linkFormula(home, receipt.coordinate, placement.declaration.target, placement.options);
318
+ }
319
+ }
320
+ function sameLock(left, right) {
321
+ return JSON.stringify(left) === JSON.stringify(right);
322
+ }
323
+ async function bundleInstallInternal(home, harnessfilePath, options) {
106
324
  const manifest = await readHarnessfile(harnessfilePath);
107
325
  const targetLockPath = lockfilePath(harnessfilePath);
108
326
  const existingLock = await readLock(targetLockPath);
109
- await syncTaps(home, manifest, existingLock);
110
- const resolved = new Map();
327
+ const digest = manifestDigest(manifest);
328
+ const adapterVersion = targetAdapterVersion(manifest.assets.flatMap((asset) => asset.targets.map((target) => target.target)));
329
+ if (options.updateLock !== true && existingLock !== undefined) {
330
+ if (existingLock.schemaVersion !== manifest.schemaVersion) {
331
+ throw new HarnessBrewError("Harnessfile and lockfile schema versions differ; use --update-lock.");
332
+ }
333
+ if (existingLock.schemaVersion === 2 && existingLock.manifestDigest !== digest) {
334
+ throw new HarnessBrewError("Harnessfile changed since the lockfile was created; use --update-lock.");
335
+ }
336
+ if (existingLock.schemaVersion === 2 && existingLock.adapterVersion !== adapterVersion) {
337
+ throw new HarnessBrewError(`Harnessfile lock requires adapter version ${existingLock.adapterVersion}; installed version is ${adapterVersion}. Use --update-lock.`);
338
+ }
339
+ }
340
+ const resolutionLock = options.updateLock === true ? undefined : existingLock;
341
+ await syncTaps(home, manifest, resolutionLock);
111
342
  for (const asset of manifest.assets) {
112
343
  await upgradeFormulas(home, asset.formula);
113
- const receipts = asset.targets.length === 0
114
- ? await installFormula(home, asset.formula)
115
- : await installForTarget(home, asset.formula, asset.targets[0], rootOptions(asset.targets[0], options));
116
- for (const target of asset.targets.slice(1)) {
117
- for (const receipt of receipts)
118
- await linkFormula(home, receipt.coordinate, target, rootOptions(target, options));
119
- }
120
- receipts.forEach((receipt) => resolved.set(receipt.coordinate, receipt));
121
- }
122
- if (existingLock !== undefined) {
123
- for (const asset of existingLock.assets) {
124
- const receipt = resolved.get(asset.formula);
125
- if (receipt !== undefined && receipt.commit !== asset.commit) {
126
- throw new HarnessBrewError(`Locked commit mismatch for ${asset.formula}`);
344
+ await installFormula(home, asset.formula);
345
+ }
346
+ const desired = await desiredFormulas(home, manifest);
347
+ let installed = new Map((await listInstalled(home)).map((receipt) => [receipt.coordinate, receipt]));
348
+ for (const [coordinate, declaration] of [...desired].sort(([left], [right]) => left.localeCompare(right))) {
349
+ const receipt = installed.get(coordinate);
350
+ if (receipt === undefined)
351
+ throw new HarnessBrewError(`Bundle formula was not installed: ${coordinate}`);
352
+ await reconcileTargets(home, harnessfilePath, receipt, declaration, options);
353
+ }
354
+ installed = new Map((await listInstalled(home)).map((receipt) => [receipt.coordinate, receipt]));
355
+ const resolved = [...desired.keys()].sort().map((coordinate) => {
356
+ const receipt = installed.get(coordinate);
357
+ if (receipt === undefined)
358
+ throw new HarnessBrewError(`Bundle formula was not installed: ${coordinate}`);
359
+ return receipt;
360
+ });
361
+ const taps = await listTaps(home);
362
+ const lockedTaps = [...manifest.taps].sort((left, right) => left.name.localeCompare(right.name)).map((declaration) => {
363
+ const tap = taps.find((candidate) => candidate.name === declaration.name);
364
+ if (tap === undefined)
365
+ throw new HarnessBrewError(`Tap was not synchronized: ${declaration.name}`);
366
+ return {
367
+ name: tap.name,
368
+ git: tap.url,
369
+ commit: tap.commit,
370
+ ...(declaration.ref === undefined ? {} : { ref: declaration.ref })
371
+ };
372
+ });
373
+ const lock = manifest.schemaVersion === 1
374
+ ? {
375
+ schemaVersion: 1,
376
+ taps: lockedTaps,
377
+ assets: resolved.map((receipt) => ({
378
+ formula: receipt.coordinate,
379
+ commit: receipt.commit,
380
+ dependencies: receipt.dependencies,
381
+ targets: [...receipt.targets].sort()
382
+ }))
383
+ }
384
+ : {
385
+ schemaVersion: 2,
386
+ manifestDigest: digest,
387
+ adapterVersion,
388
+ taps: lockedTaps,
389
+ assets: resolved.map((receipt) => ({
390
+ formula: receipt.coordinate,
391
+ commit: receipt.commit,
392
+ digest: formulaDigest(receipt),
393
+ dependencies: [...receipt.dependencies].sort(),
394
+ requested: desired.get(receipt.coordinate)?.requested ?? false,
395
+ targets: canonicalTargets([...(desired.get(receipt.coordinate)?.targets.values() ?? [])])
396
+ }))
397
+ };
398
+ if (resolutionLock !== undefined) {
399
+ if (resolutionLock.schemaVersion === 2 && !sameLock(lock, resolutionLock)) {
400
+ throw new HarnessBrewError("Installed bundle does not match Harnessfile.lock; use --update-lock to regenerate it.");
401
+ }
402
+ if (resolutionLock.schemaVersion === 1) {
403
+ for (const asset of resolutionLock.assets) {
404
+ const receipt = installed.get(asset.formula);
405
+ if (receipt !== undefined && receipt.commit !== asset.commit) {
406
+ throw new HarnessBrewError(`Locked commit mismatch for ${asset.formula}`);
407
+ }
127
408
  }
128
409
  }
129
410
  }
130
- const taps = await listTaps(home);
131
- const lock = {
132
- schemaVersion: 1,
133
- taps: manifest.taps.map((declaration) => {
134
- const tap = taps.find((candidate) => candidate.name === declaration.name);
135
- if (tap === undefined)
136
- throw new HarnessBrewError(`Tap was not synchronized: ${declaration.name}`);
137
- return {
138
- name: tap.name,
139
- git: tap.url,
140
- commit: tap.commit,
141
- ...(declaration.ref === undefined ? {} : { ref: declaration.ref })
142
- };
143
- }),
144
- assets: [...resolved.values()].sort((left, right) => left.coordinate.localeCompare(right.coordinate)).map((receipt) => ({
145
- formula: receipt.coordinate,
146
- commit: receipt.commit,
147
- dependencies: receipt.dependencies,
148
- targets: receipt.targets
149
- }))
150
- };
151
411
  await writeLock(targetLockPath, lock);
152
412
  return lock;
153
413
  }
414
+ export function bundleInstall(home, harnessfilePath, options = {}) {
415
+ return withJournalTransaction(home, "bundle:install", () => bundleInstallInternal(home, harnessfilePath, options));
416
+ }
154
417
  async function desiredCoordinates(home, manifest) {
155
418
  const desired = new Set();
156
419
  for (const asset of manifest.assets) {
@@ -177,7 +440,7 @@ function removalOrder(receipts) {
177
440
  receipts.forEach(visit);
178
441
  return ordered;
179
442
  }
180
- export async function bundleCleanup(home, harnessfilePath) {
443
+ async function bundleCleanupInternal(home, harnessfilePath) {
181
444
  const manifest = await readHarnessfile(harnessfilePath);
182
445
  const desired = await desiredCoordinates(home, manifest);
183
446
  const installed = await listInstalled(home);
@@ -189,7 +452,13 @@ export async function bundleCleanup(home, harnessfilePath) {
189
452
  }
190
453
  return { removed, retained: installed.filter((receipt) => desired.has(receipt.coordinate)).map((receipt) => receipt.coordinate) };
191
454
  }
455
+ export function bundleCleanup(home, harnessfilePath) {
456
+ return withJournalTransaction(home, "bundle:cleanup", () => bundleCleanupInternal(home, harnessfilePath));
457
+ }
192
458
  export async function removeLock(harnessfilePath) {
193
- await rm(lockfilePath(harnessfilePath), { force: true });
459
+ const filePath = lockfilePath(harnessfilePath);
460
+ await captureTransactionPath(filePath);
461
+ await rm(filePath, { force: true });
462
+ await markTransactionPath(filePath);
194
463
  }
195
464
  //# sourceMappingURL=bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/core/bundle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/core/bundle.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type InstallReceipt } from "./installations.js";
2
- import { type BuiltinTarget, type LinkOptions } from "./targets.js";
2
+ import { type LinkOptions, type TargetName } from "./targets.js";
3
3
  export type DoctorFindingKind = "cellar-modified" | "target-missing" | "target-modified";
4
4
  export interface DoctorFinding {
5
5
  coordinate: string;
@@ -15,7 +15,7 @@ export interface DoctorReport {
15
15
  findings: DoctorFinding[];
16
16
  }
17
17
  export interface RelinkOptions extends LinkOptions {
18
- target?: BuiltinTarget;
18
+ target?: TargetName;
19
19
  }
20
20
  export declare function doctor(home: string, nameOrCoordinate?: string): Promise<DoctorReport>;
21
21
  export declare function relinkFormula(home: string, nameOrCoordinate: string, options?: RelinkOptions): Promise<InstallReceipt>;
@@ -1 +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"}
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,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAItB,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,UAAU,CAAC;CACrB;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,CAqBzB"}
@@ -4,6 +4,7 @@ import { HarnessBrewError } from "./errors.js";
4
4
  import { listInstalled, verifyCellarIntegrity, writeReceipt } from "./installations.js";
5
5
  import { linkFormula, targetDestination } from "./targets.js";
6
6
  import { removeTargetOperation, verifyTargetOperation } from "./targets/transaction.js";
7
+ import { assertTapTrusted } from "./taps.js";
7
8
  function matchingReceipts(receipts, nameOrCoordinate) {
8
9
  if (nameOrCoordinate === undefined)
9
10
  return receipts;
@@ -121,6 +122,7 @@ export async function relinkFormula(home, nameOrCoordinate, options = {}) {
121
122
  if (receipt === undefined)
122
123
  throw new HarnessBrewError(`Formula is not installed: ${nameOrCoordinate}`);
123
124
  await verifyCellarIntegrity(receipt);
125
+ await assertTapTrusted(home, receipt.tap);
124
126
  const selected = selectedOperations(receipt, options);
125
127
  if (selected.length === 0)
126
128
  throw new HarnessBrewError(`Formula has no target installations: ${receipt.coordinate}`);