harnessbrew 0.5.2 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +157 -80
  3. package/README.zh-CN.md +373 -0
  4. package/dist/cli.d.ts +17 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +184 -26
  7. package/dist/cli.js.map +1 -1
  8. package/dist/core/adapter-plugins.d.ts +12 -0
  9. package/dist/core/adapter-plugins.d.ts.map +1 -0
  10. package/dist/core/adapter-plugins.js +151 -0
  11. package/dist/core/adapter-plugins.js.map +1 -0
  12. package/dist/core/bundle.d.ts +33 -5
  13. package/dist/core/bundle.d.ts.map +1 -1
  14. package/dist/core/bundle.js +329 -60
  15. package/dist/core/bundle.js.map +1 -1
  16. package/dist/core/doctor.d.ts +2 -2
  17. package/dist/core/doctor.d.ts.map +1 -1
  18. package/dist/core/doctor.js +2 -0
  19. package/dist/core/doctor.js.map +1 -1
  20. package/dist/core/git.d.ts +1 -0
  21. package/dist/core/git.d.ts.map +1 -1
  22. package/dist/core/git.js +17 -0
  23. package/dist/core/git.js.map +1 -1
  24. package/dist/core/installations.d.ts +1 -0
  25. package/dist/core/installations.d.ts.map +1 -1
  26. package/dist/core/installations.js +135 -14
  27. package/dist/core/installations.js.map +1 -1
  28. package/dist/core/journal.d.ts +26 -0
  29. package/dist/core/journal.d.ts.map +1 -0
  30. package/dist/core/journal.js +363 -0
  31. package/dist/core/journal.js.map +1 -0
  32. package/dist/core/locks.d.ts +10 -0
  33. package/dist/core/locks.d.ts.map +1 -0
  34. package/dist/core/locks.js +90 -0
  35. package/dist/core/locks.js.map +1 -0
  36. package/dist/core/paths.d.ts +1 -0
  37. package/dist/core/paths.d.ts.map +1 -1
  38. package/dist/core/paths.js +3 -0
  39. package/dist/core/paths.js.map +1 -1
  40. package/dist/core/state.d.ts +2 -0
  41. package/dist/core/state.d.ts.map +1 -1
  42. package/dist/core/state.js +21 -2
  43. package/dist/core/state.js.map +1 -1
  44. package/dist/core/taps.d.ts +7 -1
  45. package/dist/core/taps.d.ts.map +1 -1
  46. package/dist/core/taps.js +74 -16
  47. package/dist/core/taps.js.map +1 -1
  48. package/dist/core/targets/claude-code.d.ts.map +1 -1
  49. package/dist/core/targets/claude-code.js +11 -1
  50. package/dist/core/targets/claude-code.js.map +1 -1
  51. package/dist/core/targets/codex.d.ts.map +1 -1
  52. package/dist/core/targets/codex.js +11 -1
  53. package/dist/core/targets/codex.js.map +1 -1
  54. package/dist/core/targets/planner.d.ts +2 -3
  55. package/dist/core/targets/planner.d.ts.map +1 -1
  56. package/dist/core/targets/planner.js +43 -3
  57. package/dist/core/targets/planner.js.map +1 -1
  58. package/dist/core/targets/registry.d.ts +7 -3
  59. package/dist/core/targets/registry.d.ts.map +1 -1
  60. package/dist/core/targets/registry.js +55 -0
  61. package/dist/core/targets/registry.js.map +1 -1
  62. package/dist/core/targets/transaction.d.ts.map +1 -1
  63. package/dist/core/targets/transaction.js +46 -10
  64. package/dist/core/targets/transaction.js.map +1 -1
  65. package/dist/core/targets/types.d.ts +8 -4
  66. package/dist/core/targets/types.d.ts.map +1 -1
  67. package/dist/core/targets/types.js +1 -1
  68. package/dist/core/targets/types.js.map +1 -1
  69. package/dist/core/targets.d.ts +6 -7
  70. package/dist/core/targets.d.ts.map +1 -1
  71. package/dist/core/targets.js +33 -22
  72. package/dist/core/targets.js.map +1 -1
  73. package/dist/core/upgrades.d.ts.map +1 -1
  74. package/dist/core/upgrades.js +10 -1
  75. package/dist/core/upgrades.js.map +1 -1
  76. package/dist/index.d.ts +13 -5
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +6 -2
  79. package/dist/index.js.map +1 -1
  80. package/dist/version.d.ts +1 -1
  81. package/dist/version.js +1 -1
  82. package/package.json +2 -2
package/dist/cli.js CHANGED
@@ -2,13 +2,20 @@ import path from "node:path";
2
2
  import { HarnessBrewError } from "./core/errors.js";
3
3
  import { formulaKinds, getFormula, searchFormulas } from "./core/formulas.js";
4
4
  import { installFormula, listInstalled, uninstallFormula } from "./core/installations.js";
5
- import { builtinTargets, installForTarget, linkFormula, unlinkFormula } from "./core/targets.js";
5
+ import { installForTarget, linkFormula, unlinkFormula } from "./core/targets.js";
6
+ import { hasTargetAdapter } from "./core/targets/registry.js";
6
7
  import { findOutdated, upgradeFormulas } from "./core/upgrades.js";
7
8
  import { bundleCleanup, bundleInstall } from "./core/bundle.js";
8
9
  import { resolveHarnessHome } from "./core/paths.js";
9
- import { addTap, listTaps, removeTap, updateTaps } from "./core/taps.js";
10
+ import { addTap, listTaps, removeTap, setTapTrust, updateTaps } from "./core/taps.js";
10
11
  import { VERSION } from "./version.js";
11
12
  import { doctor, relinkFormula } from "./core/doctor.js";
13
+ import { addAdapterPlugin, listAdapterPlugins, loadAdapterPlugins, removeAdapterPlugin } from "./core/adapter-plugins.js";
14
+ import { withHomeLock } from "./core/locks.js";
15
+ import { withJournalPreview, withJournalTransaction } from "./core/journal.js";
16
+ function setResult(io, result) {
17
+ io.setResult?.(result);
18
+ }
12
19
  const defaultIO = {
13
20
  stdout: (message) => console.log(message),
14
21
  stderr: (message) => console.error(message)
@@ -18,12 +25,12 @@ const helpText = `HarnessBrew ${VERSION}
18
25
  A Git-native package manager for AI Agent assets.
19
26
 
20
27
  Usage:
21
- harnessbrew <command> [options]
28
+ harnessbrew <command> [options] [--json] [--dry-run]
22
29
 
23
30
  Commands:
24
31
  help Show this help
25
32
  version Show the installed version
26
- tap Add, list, update, or remove Git taps
33
+ tap Add, trust, list, update, or remove Git taps
27
34
  untap Remove a Git tap
28
35
  search Search formulas across registered taps
29
36
  info Show formula metadata
@@ -38,11 +45,16 @@ Commands:
38
45
  outdated List installed formulas with available changes
39
46
  upgrade Upgrade formulas while preserving target links
40
47
  bundle Rebuild or clean an environment from Harnessfile
48
+ adapter Add, list, or remove trusted Target Adapter modules
41
49
 
42
50
  Target placement options:
43
51
  --scope <user|project> Select user or project installation scope
44
52
  --project <path> Project root (implies --scope project)
45
53
  --target-root <path> Override the target's native root
54
+
55
+ Automation options:
56
+ --json Emit one versioned JSON result envelope
57
+ --dry-run Execute a mutation transaction, report changes, then roll it back
46
58
  `;
47
59
  function optionValue(args, name) {
48
60
  const index = args.indexOf(name);
@@ -77,65 +89,118 @@ async function runTapCommand(args, home, io) {
77
89
  const [action = "list", ...rest] = args;
78
90
  if (action === "list") {
79
91
  const taps = await listTaps(home);
80
- taps.forEach((tap) => io.stdout(`${tap.name}\t${tap.commit.slice(0, 12)}\t${tap.url}`));
92
+ taps.forEach((tap) => io.stdout(`${tap.name}\t${tap.trusted ? "trusted" : "untrusted"}\t${tap.commit.slice(0, 12)}\t${tap.url}`));
93
+ setResult(io, taps);
81
94
  return 0;
82
95
  }
83
96
  if (action === "add") {
84
97
  const [name, url] = rest;
85
98
  if (name === undefined || url === undefined) {
86
- throw new HarnessBrewError("Usage: harnessbrew tap add <owner/name> <git-url> [--ref <ref>]");
99
+ throw new HarnessBrewError("Usage: harnessbrew tap add <owner/name> <git-url> [--ref <ref>] [--trust]");
87
100
  }
88
101
  const ref = optionValue(rest, "--ref");
89
- const record = await addTap(home, name, url, ref === undefined ? {} : { ref });
102
+ const record = await addTap(home, name, url, {
103
+ ...(ref === undefined ? {} : { ref }),
104
+ trust: rest.includes("--trust")
105
+ });
90
106
  io.stdout(`Tapped ${record.name} at ${record.commit.slice(0, 12)}.`);
107
+ setResult(io, record);
91
108
  return 0;
92
109
  }
93
110
  if (action === "update") {
94
- const updates = await updateTaps(home, rest[0]);
111
+ const requested = rest.find((value) => !value.startsWith("--"));
112
+ const updates = await updateTaps(home, requested, { allowRewind: rest.includes("--allow-rewind") });
95
113
  updates.forEach((update) => {
96
114
  io.stdout(update.changed
97
115
  ? `Updated ${update.name}: ${update.before.slice(0, 12)} -> ${update.after.slice(0, 12)}.`
98
116
  : `${update.name} is already up-to-date.`);
99
117
  });
118
+ setResult(io, updates);
100
119
  return 0;
101
120
  }
102
121
  if (action === "remove") {
103
122
  const [name] = rest;
104
123
  if (name === undefined)
105
124
  throw new HarnessBrewError("Usage: harnessbrew tap remove <owner/name>");
106
- await removeTap(home, name);
125
+ const record = await removeTap(home, name);
107
126
  io.stdout(`Untapped ${name}.`);
127
+ setResult(io, record);
128
+ return 0;
129
+ }
130
+ if (action === "trust" || action === "untrust") {
131
+ const [name] = rest;
132
+ if (name === undefined)
133
+ throw new HarnessBrewError(`Usage: harnessbrew tap ${action} <owner/name>`);
134
+ const record = await setTapTrust(home, name, action === "trust");
135
+ io.stdout(`${record.name} is now ${record.trusted ? "trusted" : "untrusted"}.`);
136
+ setResult(io, record);
108
137
  return 0;
109
138
  }
110
139
  throw new HarnessBrewError(`Unknown tap action: ${action}`);
111
140
  }
141
+ async function runAdapterCommand(args, home, io) {
142
+ const [action = "list", ...rest] = args;
143
+ if (action === "list") {
144
+ const records = await listAdapterPlugins(home);
145
+ records.forEach((record) => io.stdout(`${record.name}\t${record.version}\t${record.module}`));
146
+ setResult(io, records);
147
+ return 0;
148
+ }
149
+ if (action === "add") {
150
+ const [moduleSpecifier] = rest;
151
+ if (moduleSpecifier === undefined) {
152
+ throw new HarnessBrewError("Usage: harnessbrew adapter add <npm-package|absolute-path|file-url>");
153
+ }
154
+ const record = await addAdapterPlugin(home, moduleSpecifier);
155
+ io.stdout(`Added trusted Adapter ${record.name}@${record.version} from ${record.module}.`);
156
+ setResult(io, record);
157
+ return 0;
158
+ }
159
+ if (action === "remove") {
160
+ const [name] = rest;
161
+ if (name === undefined)
162
+ throw new HarnessBrewError("Usage: harnessbrew adapter remove <target>");
163
+ const record = await removeAdapterPlugin(home, name);
164
+ io.stdout(`Removed Adapter ${record.name}@${record.version}.`);
165
+ setResult(io, record);
166
+ return 0;
167
+ }
168
+ throw new HarnessBrewError(`Unknown adapter action: ${action}`);
169
+ }
112
170
  async function execute(args, io, options) {
113
171
  const [command] = args;
114
172
  if (command === undefined || command === "help" || command === "--help" || command === "-h") {
115
173
  io.stdout(helpText.trimEnd());
174
+ setResult(io, { help: helpText.trimEnd() });
116
175
  return 0;
117
176
  }
118
177
  if (command === "version" || command === "--version" || command === "-v") {
119
178
  io.stdout(VERSION);
179
+ setResult(io, { version: VERSION });
120
180
  return 0;
121
181
  }
122
182
  const home = resolveHarnessHome(options.home);
183
+ if (command === "adapter") {
184
+ return runAdapterCommand(args.slice(1), home, io);
185
+ }
123
186
  if (command === "tap") {
124
187
  return runTapCommand(args.slice(1), home, io);
125
188
  }
126
189
  if (command === "update") {
127
- const updates = await updateTaps(home);
190
+ const updates = await updateTaps(home, undefined, { allowRewind: args.includes("--allow-rewind") });
128
191
  updates.forEach((update) => io.stdout(update.changed
129
192
  ? `Updated ${update.name}: ${update.before.slice(0, 12)} -> ${update.after.slice(0, 12)}.`
130
193
  : `${update.name} is already up-to-date.`));
194
+ setResult(io, updates);
131
195
  return 0;
132
196
  }
133
197
  if (command === "untap") {
134
198
  const name = args[1];
135
199
  if (name === undefined)
136
200
  throw new HarnessBrewError("Usage: harnessbrew untap <owner/name>");
137
- await removeTap(home, name);
201
+ const record = await removeTap(home, name);
138
202
  io.stdout(`Untapped ${name}.`);
203
+ setResult(io, record);
139
204
  return 0;
140
205
  }
141
206
  if (command === "search") {
@@ -154,6 +219,7 @@ async function execute(args, io, options) {
154
219
  ...(target === undefined ? {} : { target })
155
220
  });
156
221
  formulas.forEach((formula) => io.stdout(`${formula.coordinate}\t${formula.kind}\t${formula.description}`));
222
+ setResult(io, formulas);
157
223
  return 0;
158
224
  }
159
225
  if (command === "info") {
@@ -161,7 +227,7 @@ async function execute(args, io, options) {
161
227
  if (name === undefined)
162
228
  throw new HarnessBrewError("Usage: harnessbrew info <formula>");
163
229
  const formula = await getFormula(home, name);
164
- io.stdout(JSON.stringify({
230
+ const result = {
165
231
  coordinate: formula.coordinate,
166
232
  kind: formula.kind,
167
233
  description: formula.description,
@@ -169,7 +235,9 @@ async function execute(args, io, options) {
169
235
  dependencies: formula.dependencies,
170
236
  commit: formula.commit,
171
237
  ...(formula.deprecated === undefined ? {} : { deprecated: formula.deprecated })
172
- }, null, 2));
238
+ };
239
+ io.stdout(JSON.stringify(result, null, 2));
240
+ setResult(io, result);
173
241
  return 0;
174
242
  }
175
243
  if (command === "install") {
@@ -177,18 +245,20 @@ async function execute(args, io, options) {
177
245
  if (name === undefined)
178
246
  throw new HarnessBrewError("Usage: harnessbrew install <formula>");
179
247
  const targetValue = optionValue(args, "--target");
180
- if (targetValue !== undefined && !builtinTargets.includes(targetValue)) {
181
- throw new HarnessBrewError(`Unsupported built-in target: ${targetValue}`);
248
+ if (targetValue !== undefined && !hasTargetAdapter(targetValue)) {
249
+ throw new HarnessBrewError(`Target adapter is not registered: ${targetValue}`);
182
250
  }
183
251
  const receipts = targetValue === undefined
184
252
  ? await installFormula(home, name)
185
253
  : await installForTarget(home, name, targetValue, targetOptions(args));
186
254
  receipts.forEach((receipt) => io.stdout(`Installed ${receipt.coordinate} at ${receipt.commit.slice(0, 12)}.`));
255
+ setResult(io, receipts);
187
256
  return 0;
188
257
  }
189
258
  if (command === "list") {
190
259
  const receipts = await listInstalled(home);
191
260
  receipts.forEach((receipt) => io.stdout(`${receipt.coordinate}\t${receipt.commit.slice(0, 12)}`));
261
+ setResult(io, receipts);
192
262
  return 0;
193
263
  }
194
264
  if (command === "uninstall") {
@@ -197,6 +267,7 @@ async function execute(args, io, options) {
197
267
  throw new HarnessBrewError("Usage: harnessbrew uninstall <formula> [--force]");
198
268
  const receipt = await uninstallFormula(home, name, { force: args.includes("--force") });
199
269
  io.stdout(`Uninstalled ${receipt.coordinate}.`);
270
+ setResult(io, receipt);
200
271
  return 0;
201
272
  }
202
273
  if (command === "link" || command === "unlink") {
@@ -205,25 +276,28 @@ async function execute(args, io, options) {
205
276
  if (name === undefined || targetValue === undefined) {
206
277
  throw new HarnessBrewError(`Usage: harnessbrew ${command} <formula> --target <target> [--scope <user|project>] [--project <path>]`);
207
278
  }
208
- if (!builtinTargets.includes(targetValue)) {
209
- throw new HarnessBrewError(`Unsupported built-in target: ${targetValue}`);
279
+ if (!hasTargetAdapter(targetValue)) {
280
+ throw new HarnessBrewError(`Target adapter is not registered: ${targetValue}`);
210
281
  }
211
282
  if (command === "link") {
212
- await linkFormula(home, name, targetValue, targetOptions(args));
283
+ const receipt = await linkFormula(home, name, targetValue, targetOptions(args));
213
284
  io.stdout(`Linked ${name} to ${targetValue}.`);
285
+ setResult(io, receipt);
214
286
  }
215
287
  else {
216
- await unlinkFormula(home, name, targetValue, {
288
+ const receipt = await unlinkFormula(home, name, targetValue, {
217
289
  ...(hasTargetPlacementOptions(args) ? targetOptions(args) : {}),
218
290
  force: args.includes("--force")
219
291
  });
220
292
  io.stdout(`Unlinked ${name} from ${targetValue}.`);
293
+ setResult(io, receipt);
221
294
  }
222
295
  return 0;
223
296
  }
224
297
  if (command === "doctor") {
225
298
  const name = args[1]?.startsWith("--") === true ? undefined : args[1];
226
299
  const report = await doctor(home, name);
300
+ setResult(io, report);
227
301
  if (report.healthy) {
228
302
  io.stdout(`Doctor found no issues across ${report.checked} formula(s).`);
229
303
  return 0;
@@ -241,14 +315,15 @@ async function execute(args, io, options) {
241
315
  if (name === undefined)
242
316
  throw new HarnessBrewError("Usage: harnessbrew relink <formula> [--target <target>]");
243
317
  const targetValue = optionValue(args, "--target");
244
- if (targetValue !== undefined && !builtinTargets.includes(targetValue)) {
245
- throw new HarnessBrewError(`Unsupported built-in target: ${targetValue}`);
318
+ if (targetValue !== undefined && !hasTargetAdapter(targetValue)) {
319
+ throw new HarnessBrewError(`Target adapter is not registered: ${targetValue}`);
246
320
  }
247
- await relinkFormula(home, name, {
321
+ const receipt = await relinkFormula(home, name, {
248
322
  ...(hasTargetPlacementOptions(args) ? targetOptions(args) : {}),
249
323
  ...(targetValue === undefined ? {} : { target: targetValue })
250
324
  });
251
325
  io.stdout(`Relinked ${name}${targetValue === undefined ? "" : ` to ${targetValue}`}.`);
326
+ setResult(io, receipt);
252
327
  return 0;
253
328
  }
254
329
  if (command === "outdated") {
@@ -256,6 +331,7 @@ async function execute(args, io, options) {
256
331
  outdated.forEach((item) => io.stdout(item.available
257
332
  ? `${item.coordinate}\t${item.installedCommit.slice(0, 12)} -> ${item.availableCommit?.slice(0, 12)}`
258
333
  : `${item.coordinate}\t${item.installedCommit.slice(0, 12)} -> unavailable`));
334
+ setResult(io, outdated);
259
335
  return 0;
260
336
  }
261
337
  if (command === "upgrade") {
@@ -264,34 +340,116 @@ async function execute(args, io, options) {
264
340
  if (results.length === 0)
265
341
  io.stdout("All installed formulas are up-to-date.");
266
342
  results.forEach((result) => io.stdout(`Upgraded ${result.coordinate}: ${result.before.slice(0, 12)} -> ${result.after.slice(0, 12)}.`));
343
+ setResult(io, results);
267
344
  return 0;
268
345
  }
269
346
  if (command === "bundle") {
270
347
  const action = args[1];
271
348
  const filePath = optionValue(args, "--file") ?? path.resolve("Harnessfile");
272
349
  if (action === "install") {
273
- const lock = await bundleInstall(home, filePath);
350
+ const lock = await bundleInstall(home, filePath, { updateLock: args.includes("--update-lock") });
274
351
  io.stdout(`Bundle installed ${lock.assets.length} formulas from ${lock.taps.length} taps.`);
352
+ setResult(io, lock);
275
353
  return 0;
276
354
  }
277
355
  if (action === "cleanup") {
278
356
  const result = await bundleCleanup(home, filePath);
279
357
  result.removed.forEach((coordinate) => io.stdout(`Removed ${coordinate}.`));
358
+ setResult(io, result);
280
359
  return 0;
281
360
  }
282
- throw new HarnessBrewError("Usage: harnessbrew bundle <install|cleanup> [--file <Harnessfile>]");
361
+ throw new HarnessBrewError("Usage: harnessbrew bundle <install|cleanup> [--file <Harnessfile>] [--update-lock]");
283
362
  }
284
363
  io.stderr(`Unknown command: ${command}`);
285
364
  io.stderr("Run 'harnessbrew help' for usage.");
286
365
  return 1;
287
366
  }
288
367
  export async function runCli(args, io = defaultIO, options = {}) {
368
+ const json = args.includes("--json");
369
+ const dryRun = args.includes("--dry-run");
370
+ const commandArgs = args.filter((argument) => argument !== "--json" && argument !== "--dry-run");
371
+ const output = [];
372
+ const diagnostics = [];
373
+ let result = null;
374
+ const commandIO = json || dryRun
375
+ ? {
376
+ stdout: (message) => output.push(message),
377
+ stderr: (message) => diagnostics.push(message),
378
+ setResult: (value) => { result = value; }
379
+ }
380
+ : io;
381
+ const command = commandArgs[0];
382
+ const tapAction = command === "tap" ? (commandArgs[1] ?? "list") : undefined;
383
+ const adapterAction = command === "adapter" ? (commandArgs[1] ?? "list") : undefined;
384
+ const mutates = command === "update" || command === "untap" || command === "install"
385
+ || command === "uninstall" || command === "link" || command === "unlink" || command === "relink"
386
+ || command === "upgrade" || command === "bundle"
387
+ || (command === "tap" && tapAction !== "list")
388
+ || (command === "adapter" && adapterAction !== "list");
389
+ const emitJson = (exitCode, changes = [], errorCode) => {
390
+ const envelope = {
391
+ schemaVersion: 1,
392
+ ok: exitCode === 0,
393
+ command: command ?? "help",
394
+ exitCode,
395
+ dryRun,
396
+ result,
397
+ output,
398
+ diagnostics,
399
+ ...(exitCode === 0 ? {} : {
400
+ error: {
401
+ code: errorCode ?? "COMMAND_FAILED",
402
+ message: diagnostics[0] ?? "Command failed."
403
+ }
404
+ }),
405
+ ...(dryRun ? { changes } : {})
406
+ };
407
+ io.stdout(JSON.stringify(envelope));
408
+ };
289
409
  try {
290
- return await execute(args, io, options);
410
+ const home = resolveHarnessHome(options.home);
411
+ if (dryRun && !mutates)
412
+ throw new HarnessBrewError("--dry-run requires a mutating command.");
413
+ const invoke = async () => {
414
+ const unload = command !== undefined
415
+ && ["install", "link", "unlink", "relink", "upgrade", "bundle"].includes(command)
416
+ ? await loadAdapterPlugins(home)
417
+ : () => { };
418
+ try {
419
+ return await execute(commandArgs, commandIO, options);
420
+ }
421
+ finally {
422
+ unload();
423
+ }
424
+ };
425
+ let exitCode;
426
+ let changes = [];
427
+ if (dryRun) {
428
+ const preview = await withHomeLock(home, () => withJournalPreview(home, `preview:${command ?? "unknown"}`, invoke));
429
+ exitCode = preview.result;
430
+ changes = preview.changes;
431
+ if (!json) {
432
+ io.stdout(`Dry run completed: ${changes.length} path change(s) would be made.`);
433
+ changes.forEach((change) => io.stdout(`${change.before.kind === "missing" ? "create" : change.after.kind === "missing" ? "remove" : "modify"}\t${change.path}`));
434
+ }
435
+ }
436
+ else {
437
+ exitCode = mutates
438
+ ? await withHomeLock(home, () => withJournalTransaction(home, `cli:${command ?? "unknown"}`, invoke))
439
+ : await invoke();
440
+ }
441
+ if (json)
442
+ emitJson(exitCode, changes);
443
+ return exitCode;
291
444
  }
292
445
  catch (error) {
293
446
  if (error instanceof HarnessBrewError) {
294
- io.stderr(error.message);
447
+ if (json) {
448
+ diagnostics.push(error.message);
449
+ emitJson(1, [], "HARNESSBREW_ERROR");
450
+ }
451
+ else
452
+ io.stderr(error.message);
295
453
  return 1;
296
454
  }
297
455
  throw error;
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,12 @@
1
+ export interface AdapterPluginRecord {
2
+ module: string;
3
+ name: string;
4
+ version: string;
5
+ apiVersion: 1;
6
+ addedAt: string;
7
+ }
8
+ export declare function listAdapterPlugins(home: string): Promise<AdapterPluginRecord[]>;
9
+ export declare function addAdapterPlugin(home: string, moduleSpecifier: string): Promise<AdapterPluginRecord>;
10
+ export declare function removeAdapterPlugin(home: string, name: string): Promise<AdapterPluginRecord>;
11
+ export declare function loadAdapterPlugins(home: string): Promise<() => void>;
12
+ //# sourceMappingURL=adapter-plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-plugins.d.ts","sourceRoot":"","sources":["../../src/core/adapter-plugins.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,CAAC,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAsGD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAErF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0B1G;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAQlG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAc1E"}
@@ -0,0 +1,151 @@
1
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { HarnessBrewError } from "./errors.js";
5
+ import { captureMissingParents, captureTransactionPath } from "./journal.js";
6
+ import { resolveAdapterPluginsPath } from "./paths.js";
7
+ import { registerTargetAdapter } from "./targets/registry.js";
8
+ const packageSpecifierPattern = /^(?:@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$/u;
9
+ function normalizedSpecifier(specifier) {
10
+ if (path.isAbsolute(specifier))
11
+ return pathToFileURL(path.resolve(specifier)).href;
12
+ if (specifier.startsWith("file://")) {
13
+ try {
14
+ return new URL(specifier).href;
15
+ }
16
+ catch {
17
+ throw new HarnessBrewError(`Invalid Adapter module specifier: ${specifier}`);
18
+ }
19
+ }
20
+ if (!packageSpecifierPattern.test(specifier)) {
21
+ throw new HarnessBrewError(`Invalid Adapter module specifier: ${specifier}. Use an npm package name, absolute path, or file URL.`);
22
+ }
23
+ return specifier;
24
+ }
25
+ function validRecord(candidate) {
26
+ if (typeof candidate !== "object" || candidate === null)
27
+ return false;
28
+ const record = candidate;
29
+ return typeof record.module === "string" && typeof record.name === "string"
30
+ && typeof record.version === "string" && record.apiVersion === 1
31
+ && typeof record.addedAt === "string" && !Number.isNaN(Date.parse(record.addedAt));
32
+ }
33
+ async function readPluginState(home) {
34
+ const filePath = resolveAdapterPluginsPath(home);
35
+ let content;
36
+ try {
37
+ content = await readFile(filePath, "utf8");
38
+ }
39
+ catch (error) {
40
+ if (error.code === "ENOENT")
41
+ return { schemaVersion: 1, adapters: [] };
42
+ throw error;
43
+ }
44
+ let value;
45
+ try {
46
+ value = JSON.parse(content);
47
+ }
48
+ catch {
49
+ throw new HarnessBrewError(`Invalid Adapter plugin state file: ${filePath}`);
50
+ }
51
+ if (typeof value !== "object" || value === null
52
+ || value.schemaVersion !== 1
53
+ || !Array.isArray(value.adapters)
54
+ || !value.adapters.every(validRecord)) {
55
+ throw new HarnessBrewError(`Unsupported Adapter plugin state file: ${filePath}`);
56
+ }
57
+ const state = value;
58
+ if (new Set(state.adapters.map((record) => record.name)).size !== state.adapters.length
59
+ || new Set(state.adapters.map((record) => record.module)).size !== state.adapters.length) {
60
+ throw new HarnessBrewError(`Unsupported Adapter plugin state file: ${filePath}`);
61
+ }
62
+ return state;
63
+ }
64
+ async function writePluginState(home, state) {
65
+ const filePath = resolveAdapterPluginsPath(home);
66
+ const temporaryPath = `${filePath}.${process.pid}.tmp`;
67
+ await captureMissingParents(filePath);
68
+ await captureTransactionPath(filePath);
69
+ await captureTransactionPath(temporaryPath);
70
+ await mkdir(path.dirname(filePath), { recursive: true });
71
+ await writeFile(temporaryPath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
72
+ await rename(temporaryPath, filePath);
73
+ }
74
+ async function importAdapter(specifier) {
75
+ let loaded;
76
+ try {
77
+ loaded = await import(specifier);
78
+ }
79
+ catch (error) {
80
+ const detail = error instanceof Error ? error.message : String(error);
81
+ throw new HarnessBrewError(`Cannot load Adapter module ${specifier}: ${detail}`);
82
+ }
83
+ const candidate = loaded.default ?? loaded.adapter;
84
+ if (typeof candidate !== "object" || candidate === null) {
85
+ throw new HarnessBrewError(`Adapter module ${specifier} must export a default Adapter or named 'adapter'.`);
86
+ }
87
+ return candidate;
88
+ }
89
+ function verifyIdentity(record, adapter) {
90
+ if (adapter.name !== record.name || adapter.version !== record.version || adapter.apiVersion !== record.apiVersion) {
91
+ throw new HarnessBrewError(`Adapter module ${record.module} changed identity from ${record.name}@${record.version}; remove and add it again after review.`);
92
+ }
93
+ }
94
+ export async function listAdapterPlugins(home) {
95
+ return (await readPluginState(home)).adapters.map((record) => ({ ...record }));
96
+ }
97
+ export async function addAdapterPlugin(home, moduleSpecifier) {
98
+ const specifier = normalizedSpecifier(moduleSpecifier);
99
+ const state = await readPluginState(home);
100
+ if (state.adapters.some((record) => record.module === specifier)) {
101
+ throw new HarnessBrewError(`Adapter module is already added: ${specifier}`);
102
+ }
103
+ const adapter = await importAdapter(specifier);
104
+ const unregister = registerTargetAdapter(adapter);
105
+ try {
106
+ if (state.adapters.some((record) => record.name === adapter.name)) {
107
+ throw new HarnessBrewError(`Adapter plugin is already added for target: ${adapter.name}`);
108
+ }
109
+ const record = {
110
+ module: specifier,
111
+ name: adapter.name,
112
+ version: adapter.version,
113
+ apiVersion: adapter.apiVersion,
114
+ addedAt: new Date().toISOString()
115
+ };
116
+ state.adapters.push(record);
117
+ state.adapters.sort((left, right) => left.name.localeCompare(right.name));
118
+ await writePluginState(home, state);
119
+ return { ...record };
120
+ }
121
+ finally {
122
+ unregister();
123
+ }
124
+ }
125
+ export async function removeAdapterPlugin(home, name) {
126
+ const state = await readPluginState(home);
127
+ const index = state.adapters.findIndex((record) => record.name === name);
128
+ const record = state.adapters[index];
129
+ if (record === undefined)
130
+ throw new HarnessBrewError(`Adapter plugin not found: ${name}`);
131
+ state.adapters.splice(index, 1);
132
+ await writePluginState(home, state);
133
+ return { ...record };
134
+ }
135
+ export async function loadAdapterPlugins(home) {
136
+ const records = await listAdapterPlugins(home);
137
+ const unregister = [];
138
+ try {
139
+ for (const record of records) {
140
+ const adapter = await importAdapter(record.module);
141
+ verifyIdentity(record, adapter);
142
+ unregister.push(registerTargetAdapter(adapter));
143
+ }
144
+ }
145
+ catch (error) {
146
+ unregister.reverse().forEach((dispose) => dispose());
147
+ throw error;
148
+ }
149
+ return () => unregister.reverse().forEach((dispose) => dispose());
150
+ }
151
+ //# sourceMappingURL=adapter-plugins.js.map