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.
- package/CHANGELOG.md +31 -0
- package/README.md +157 -80
- package/README.zh-CN.md +373 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +184 -26
- package/dist/cli.js.map +1 -1
- package/dist/core/adapter-plugins.d.ts +12 -0
- package/dist/core/adapter-plugins.d.ts.map +1 -0
- package/dist/core/adapter-plugins.js +151 -0
- package/dist/core/adapter-plugins.js.map +1 -0
- package/dist/core/bundle.d.ts +33 -5
- package/dist/core/bundle.d.ts.map +1 -1
- package/dist/core/bundle.js +329 -60
- package/dist/core/bundle.js.map +1 -1
- package/dist/core/doctor.d.ts +2 -2
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +2 -0
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/git.d.ts +1 -0
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +17 -0
- package/dist/core/git.js.map +1 -1
- package/dist/core/installations.d.ts +1 -0
- package/dist/core/installations.d.ts.map +1 -1
- package/dist/core/installations.js +135 -14
- package/dist/core/installations.js.map +1 -1
- package/dist/core/journal.d.ts +26 -0
- package/dist/core/journal.d.ts.map +1 -0
- package/dist/core/journal.js +363 -0
- package/dist/core/journal.js.map +1 -0
- package/dist/core/locks.d.ts +10 -0
- package/dist/core/locks.d.ts.map +1 -0
- package/dist/core/locks.js +90 -0
- package/dist/core/locks.js.map +1 -0
- package/dist/core/paths.d.ts +1 -0
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +3 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/state.d.ts +2 -0
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +21 -2
- package/dist/core/state.js.map +1 -1
- package/dist/core/taps.d.ts +7 -1
- package/dist/core/taps.d.ts.map +1 -1
- package/dist/core/taps.js +74 -16
- package/dist/core/taps.js.map +1 -1
- package/dist/core/targets/claude-code.d.ts.map +1 -1
- package/dist/core/targets/claude-code.js +11 -1
- package/dist/core/targets/claude-code.js.map +1 -1
- package/dist/core/targets/codex.d.ts.map +1 -1
- package/dist/core/targets/codex.js +11 -1
- package/dist/core/targets/codex.js.map +1 -1
- package/dist/core/targets/planner.d.ts +2 -3
- package/dist/core/targets/planner.d.ts.map +1 -1
- package/dist/core/targets/planner.js +43 -3
- package/dist/core/targets/planner.js.map +1 -1
- package/dist/core/targets/registry.d.ts +7 -3
- package/dist/core/targets/registry.d.ts.map +1 -1
- package/dist/core/targets/registry.js +55 -0
- package/dist/core/targets/registry.js.map +1 -1
- package/dist/core/targets/transaction.d.ts.map +1 -1
- package/dist/core/targets/transaction.js +46 -10
- package/dist/core/targets/transaction.js.map +1 -1
- package/dist/core/targets/types.d.ts +8 -4
- package/dist/core/targets/types.d.ts.map +1 -1
- package/dist/core/targets/types.js +1 -1
- package/dist/core/targets/types.js.map +1 -1
- package/dist/core/targets.d.ts +6 -7
- package/dist/core/targets.d.ts.map +1 -1
- package/dist/core/targets.js +33 -22
- package/dist/core/targets.js.map +1 -1
- package/dist/core/upgrades.d.ts.map +1 -1
- package/dist/core/upgrades.js +10 -1
- package/dist/core/upgrades.js.map +1 -1
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- 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 {
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
}
|
|
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 && !
|
|
181
|
-
throw new HarnessBrewError(`
|
|
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 (!
|
|
209
|
-
throw new HarnessBrewError(`
|
|
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 && !
|
|
245
|
-
throw new HarnessBrewError(`
|
|
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
|
-
|
|
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
|
-
|
|
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
|