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/core/taps.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taps.d.ts","sourceRoot":"","sources":["../../src/core/taps.ts"],"names":[],"mappings":"AAMA,OAAO,EAAa,KAAK,SAAS,EAAc,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"taps.d.ts","sourceRoot":"","sources":["../../src/core/taps.ts"],"names":[],"mappings":"AAMA,OAAO,EAAa,KAAK,SAAS,EAAc,MAAM,YAAY,CAAC;AAGnE,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAGjE;AAED,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,SAAS,CAAC,CAuCpB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,EAAE,CAAC,CAiDtB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAUlG;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhF;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAc9E;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAqBhG"}
|
package/dist/core/taps.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { mkdir, rm } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { HarnessBrewError } from "./errors.js";
|
|
4
|
-
import { resolveGitCommit, runGit } from "./git.js";
|
|
4
|
+
import { isGitAncestor, resolveGitCommit, runGit } from "./git.js";
|
|
5
5
|
import { validateTapRepository } from "./formulas.js";
|
|
6
6
|
import { assertTapName, resolveTapPath } from "./paths.js";
|
|
7
7
|
import { readState, writeState } from "./state.js";
|
|
8
|
+
import { captureMissingParents, captureTransactionPath } from "./journal.js";
|
|
8
9
|
export async function listTaps(home) {
|
|
9
10
|
const state = await readState(home);
|
|
10
11
|
return Object.values(state.taps).sort((left, right) => left.name.localeCompare(right.name));
|
|
@@ -19,6 +20,8 @@ export async function addTap(home, name, url, options = {}) {
|
|
|
19
20
|
throw new HarnessBrewError(`Tap already exists: ${name}`);
|
|
20
21
|
}
|
|
21
22
|
const destination = resolveTapPath(home, name);
|
|
23
|
+
await captureMissingParents(destination);
|
|
24
|
+
await captureTransactionPath(destination);
|
|
22
25
|
await mkdir(path.dirname(destination), { recursive: true });
|
|
23
26
|
try {
|
|
24
27
|
await runGit(["clone", "--quiet", "--", url, destination]);
|
|
@@ -32,6 +35,8 @@ export async function addTap(home, name, url, options = {}) {
|
|
|
32
35
|
commit,
|
|
33
36
|
addedAt: timestamp,
|
|
34
37
|
updatedAt: timestamp,
|
|
38
|
+
trusted: options.trust ?? false,
|
|
39
|
+
...(options.trust === true ? { trustedAt: timestamp } : {}),
|
|
35
40
|
...(options.ref === undefined ? {} : { ref: options.ref })
|
|
36
41
|
};
|
|
37
42
|
state.taps[name] = record;
|
|
@@ -43,7 +48,7 @@ export async function addTap(home, name, url, options = {}) {
|
|
|
43
48
|
throw error;
|
|
44
49
|
}
|
|
45
50
|
}
|
|
46
|
-
export async function updateTaps(home, requestedName) {
|
|
51
|
+
export async function updateTaps(home, requestedName, options = {}) {
|
|
47
52
|
if (requestedName !== undefined) {
|
|
48
53
|
assertTapName(requestedName);
|
|
49
54
|
}
|
|
@@ -55,19 +60,63 @@ export async function updateTaps(home, requestedName) {
|
|
|
55
60
|
throw new HarnessBrewError(`Tap not found: ${requestedName}`);
|
|
56
61
|
}
|
|
57
62
|
const updates = [];
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
const applied = [];
|
|
64
|
+
try {
|
|
65
|
+
for (const record of records.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
66
|
+
const repositoryPath = resolveTapPath(home, record.name);
|
|
67
|
+
await captureTransactionPath(repositoryPath);
|
|
68
|
+
await runGit(["fetch", "--quiet", "--prune", "--tags", "origin"], repositoryPath);
|
|
69
|
+
const commit = await resolveGitCommit(repositoryPath, record.ref);
|
|
70
|
+
const before = record.commit;
|
|
71
|
+
if (commit !== before && options.allowRewind !== true && !await isGitAncestor(repositoryPath, before, commit)) {
|
|
72
|
+
throw new HarnessBrewError(`Tap update is not a fast-forward: ${record.name} ${before.slice(0, 12)} -> ${commit.slice(0, 12)}. Use --allow-rewind.`);
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
await runGit(["checkout", "--quiet", "--detach", commit], repositoryPath);
|
|
76
|
+
await validateTapRepository(repositoryPath);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
await runGit(["checkout", "--quiet", "--detach", before], repositoryPath).catch(() => undefined);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
applied.push({ record, before, updatedAt: record.updatedAt });
|
|
83
|
+
record.commit = commit;
|
|
84
|
+
record.updatedAt = new Date().toISOString();
|
|
85
|
+
updates.push({ name: record.name, before, after: commit, changed: before !== commit });
|
|
86
|
+
}
|
|
87
|
+
await writeState(home, state);
|
|
88
|
+
return updates;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
for (const item of applied.reverse()) {
|
|
92
|
+
await runGit(["checkout", "--quiet", "--detach", item.before], resolveTapPath(home, item.record.name)).catch(() => undefined);
|
|
93
|
+
item.record.commit = item.before;
|
|
94
|
+
item.record.updatedAt = item.updatedAt;
|
|
95
|
+
}
|
|
96
|
+
throw error;
|
|
68
97
|
}
|
|
98
|
+
}
|
|
99
|
+
export async function setTapTrust(home, name, trusted) {
|
|
100
|
+
assertTapName(name);
|
|
101
|
+
const state = await readState(home);
|
|
102
|
+
const record = state.taps[name];
|
|
103
|
+
if (record === undefined)
|
|
104
|
+
throw new HarnessBrewError(`Tap not found: ${name}`);
|
|
105
|
+
record.trusted = trusted;
|
|
106
|
+
if (trusted)
|
|
107
|
+
record.trustedAt = new Date().toISOString();
|
|
108
|
+
else
|
|
109
|
+
delete record.trustedAt;
|
|
69
110
|
await writeState(home, state);
|
|
70
|
-
return
|
|
111
|
+
return record;
|
|
112
|
+
}
|
|
113
|
+
export async function assertTapTrusted(home, name) {
|
|
114
|
+
const record = (await readState(home)).taps[name];
|
|
115
|
+
if (record === undefined)
|
|
116
|
+
throw new HarnessBrewError(`Tap not found: ${name}`);
|
|
117
|
+
if (!record.trusted) {
|
|
118
|
+
throw new HarnessBrewError(`Tap is not trusted for Target activation: ${name}. Run harnessbrew tap trust ${name}.`);
|
|
119
|
+
}
|
|
71
120
|
}
|
|
72
121
|
export async function removeTap(home, name) {
|
|
73
122
|
assertTapName(name);
|
|
@@ -76,7 +125,9 @@ export async function removeTap(home, name) {
|
|
|
76
125
|
if (record === undefined) {
|
|
77
126
|
throw new HarnessBrewError(`Tap not found: ${name}`);
|
|
78
127
|
}
|
|
79
|
-
|
|
128
|
+
const repositoryPath = resolveTapPath(home, name);
|
|
129
|
+
await captureTransactionPath(repositoryPath);
|
|
130
|
+
await rm(repositoryPath, { recursive: true, force: true });
|
|
80
131
|
delete state.taps[name];
|
|
81
132
|
await writeState(home, state);
|
|
82
133
|
return record;
|
|
@@ -90,10 +141,17 @@ export async function checkoutTap(home, name, commit) {
|
|
|
90
141
|
if (record === undefined)
|
|
91
142
|
throw new HarnessBrewError(`Tap not found: ${name}`);
|
|
92
143
|
const repositoryPath = resolveTapPath(home, name);
|
|
144
|
+
await captureTransactionPath(repositoryPath);
|
|
93
145
|
await runGit(["fetch", "--quiet", "--prune", "--tags", "origin"], repositoryPath);
|
|
94
146
|
const resolved = await resolveGitCommit(repositoryPath, commit);
|
|
95
|
-
|
|
96
|
-
|
|
147
|
+
try {
|
|
148
|
+
await runGit(["checkout", "--quiet", "--detach", resolved], repositoryPath);
|
|
149
|
+
await validateTapRepository(repositoryPath);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
await runGit(["checkout", "--quiet", "--detach", record.commit], repositoryPath).catch(() => undefined);
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
97
155
|
record.commit = resolved;
|
|
98
156
|
record.updatedAt = new Date().toISOString();
|
|
99
157
|
await writeState(home, state);
|
package/dist/core/taps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taps.js","sourceRoot":"","sources":["../../src/core/taps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"taps.js","sourceRoot":"","sources":["../../src/core/taps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/core/targets/claude-code.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAA0B,aAAa,EAAoC,MAAM,YAAY,CAAC;AA6C1G,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/core/targets/claude-code.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAA0B,aAAa,EAAoC,MAAM,YAAY,CAAC;AA6C1G,eAAO,MAAM,iBAAiB,EAAE,aAoB/B,CAAC"}
|
|
@@ -47,8 +47,18 @@ function operation(receipt, context) {
|
|
|
47
47
|
return [{ strategy, source, destination }];
|
|
48
48
|
}
|
|
49
49
|
export const claudeCodeAdapter = {
|
|
50
|
+
apiVersion: 1,
|
|
50
51
|
name: "claude-code",
|
|
51
|
-
|
|
52
|
+
version: "1",
|
|
53
|
+
capabilities: {
|
|
54
|
+
skill: targetCapability("claude-code", "skill"),
|
|
55
|
+
agent: targetCapability("claude-code", "agent"),
|
|
56
|
+
workflow: targetCapability("claude-code", "workflow"),
|
|
57
|
+
instruction: targetCapability("claude-code", "instruction"),
|
|
58
|
+
prompt: targetCapability("claude-code", "prompt"),
|
|
59
|
+
mcp: targetCapability("claude-code", "mcp"),
|
|
60
|
+
adapter: targetCapability("claude-code", "adapter")
|
|
61
|
+
},
|
|
52
62
|
plan(receipt, context = {}) {
|
|
53
63
|
return {
|
|
54
64
|
target: "claude-code",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/core/targets/claude-code.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/core/targets/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/core/targets/codex.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAA0B,aAAa,EAAoC,MAAM,YAAY,CAAC;AAkD1G,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/core/targets/codex.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAA0B,aAAa,EAAoC,MAAM,YAAY,CAAC;AAkD1G,eAAO,MAAM,YAAY,EAAE,aAoB1B,CAAC"}
|
|
@@ -51,8 +51,18 @@ function operation(receipt, context) {
|
|
|
51
51
|
return [{ strategy, source, destination }];
|
|
52
52
|
}
|
|
53
53
|
export const codexAdapter = {
|
|
54
|
+
apiVersion: 1,
|
|
54
55
|
name: "openai-codex",
|
|
55
|
-
|
|
56
|
+
version: "1",
|
|
57
|
+
capabilities: {
|
|
58
|
+
skill: targetCapability("openai-codex", "skill"),
|
|
59
|
+
agent: targetCapability("openai-codex", "agent"),
|
|
60
|
+
workflow: targetCapability("openai-codex", "workflow"),
|
|
61
|
+
instruction: targetCapability("openai-codex", "instruction"),
|
|
62
|
+
prompt: targetCapability("openai-codex", "prompt"),
|
|
63
|
+
mcp: targetCapability("openai-codex", "mcp"),
|
|
64
|
+
adapter: targetCapability("openai-codex", "adapter")
|
|
65
|
+
},
|
|
56
66
|
plan(receipt, context = {}) {
|
|
57
67
|
return {
|
|
58
68
|
target: "openai-codex",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/core/targets/codex.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/core/targets/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { InstallReceipt } from "../installations.js";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
export declare function planTargetInstall(receipt: InstallReceipt, target: BuiltinTarget, context?: TargetContext): TargetInstallPlan;
|
|
2
|
+
import type { TargetContext, TargetInstallPlan, TargetName } from "./types.js";
|
|
3
|
+
export declare function planTargetInstall(receipt: InstallReceipt, target: TargetName, context?: TargetContext): TargetInstallPlan;
|
|
5
4
|
//# sourceMappingURL=planner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../../src/core/targets/planner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../../src/core/targets/planner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAwB/E,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,aAAkB,GAC1B,iBAAiB,CAgCnB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { HarnessBrewError } from "../errors.js";
|
|
2
|
+
import path from "node:path";
|
|
2
3
|
import { formulaKinds } from "../formulas.js";
|
|
3
4
|
import { getTargetAdapter } from "./registry.js";
|
|
4
5
|
function receiptKind(receipt) {
|
|
@@ -7,12 +8,51 @@ function receiptKind(receipt) {
|
|
|
7
8
|
}
|
|
8
9
|
return receipt.kind;
|
|
9
10
|
}
|
|
11
|
+
function frozenClone(value) {
|
|
12
|
+
const clone = structuredClone(value);
|
|
13
|
+
if (typeof clone === "object" && clone !== null) {
|
|
14
|
+
Object.freeze(clone);
|
|
15
|
+
for (const item of Object.values(clone))
|
|
16
|
+
frozenCloneInPlace(item);
|
|
17
|
+
}
|
|
18
|
+
return clone;
|
|
19
|
+
}
|
|
20
|
+
function frozenCloneInPlace(value) {
|
|
21
|
+
if (typeof value !== "object" || value === null || Object.isFrozen(value))
|
|
22
|
+
return;
|
|
23
|
+
Object.freeze(value);
|
|
24
|
+
Object.values(value).forEach(frozenCloneInPlace);
|
|
25
|
+
}
|
|
10
26
|
export function planTargetInstall(receipt, target, context = {}) {
|
|
11
27
|
const adapter = getTargetAdapter(target);
|
|
12
28
|
const kind = receiptKind(receipt);
|
|
13
|
-
|
|
14
|
-
|
|
29
|
+
const capability = adapter.capabilities[kind];
|
|
30
|
+
if (capability === "unsupported") {
|
|
31
|
+
throw new HarnessBrewError(`Formula ${receipt.coordinate} cannot be linked to ${target}: ${kind} is unsupported; install it to the Cellar without --target.`);
|
|
32
|
+
}
|
|
33
|
+
let plan;
|
|
34
|
+
try {
|
|
35
|
+
plan = structuredClone(adapter.plan(frozenClone(receipt), frozenClone(context)));
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
throw new HarnessBrewError(`Target Adapter ${target} failed to produce a data-only plan: ${error.message}`);
|
|
39
|
+
}
|
|
40
|
+
if (plan.target !== target || plan.coordinate !== receipt.coordinate || plan.operations.length !== 1) {
|
|
41
|
+
throw new HarnessBrewError(`Invalid installation plan from Target Adapter ${target}.`);
|
|
42
|
+
}
|
|
43
|
+
const operation = plan.operations[0];
|
|
44
|
+
if (operation === undefined || operation.strategy !== capability || !path.isAbsolute(operation.destination)
|
|
45
|
+
|| operation.destination === path.parse(operation.destination).root) {
|
|
46
|
+
throw new HarnessBrewError(`Invalid installation operation from Target Adapter ${target}.`);
|
|
47
|
+
}
|
|
48
|
+
if (operation.source !== undefined) {
|
|
49
|
+
const cellar = path.resolve(receipt.cellarPath);
|
|
50
|
+
const source = path.resolve(operation.source);
|
|
51
|
+
if (source !== cellar && !source.startsWith(`${cellar}${path.sep}`)) {
|
|
52
|
+
throw new HarnessBrewError(`Target Adapter ${target} source escapes the Cellar: ${operation.source}`);
|
|
53
|
+
}
|
|
15
54
|
}
|
|
16
|
-
|
|
55
|
+
frozenCloneInPlace(plan);
|
|
56
|
+
return plan;
|
|
17
57
|
}
|
|
18
58
|
//# sourceMappingURL=planner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/core/targets/planner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/core/targets/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
1
|
+
import { type TargetAdapter, type TargetName } from "./types.js";
|
|
2
|
+
export declare const TARGET_ADAPTER_VERSION = "1";
|
|
3
|
+
export declare function targetAdapterVersion(targets?: Iterable<TargetName>): string;
|
|
4
|
+
export declare function listTargetAdapters(): TargetAdapter[];
|
|
5
|
+
export declare function hasTargetAdapter(target: string): boolean;
|
|
6
|
+
export declare function registerTargetAdapter(adapter: TargetAdapter): () => void;
|
|
7
|
+
export declare function getTargetAdapter(target: TargetName): TargetAdapter;
|
|
4
8
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/targets/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/targets/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAA8B,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAO7F,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CAS3E;AAED,wBAAgB,kBAAkB,IAAI,aAAa,EAAE,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,IAAI,CAqCxE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,CAIlE"}
|
|
@@ -1,10 +1,65 @@
|
|
|
1
1
|
import { HarnessBrewError } from "../errors.js";
|
|
2
|
+
import { formulaKinds } from "../formulas.js";
|
|
3
|
+
import { targetOperationKinds } from "../target-capabilities.js";
|
|
2
4
|
import { claudeCodeAdapter } from "./claude-code.js";
|
|
3
5
|
import { codexAdapter } from "./codex.js";
|
|
6
|
+
import { TARGET_ADAPTER_API_VERSION } from "./types.js";
|
|
4
7
|
const adapters = new Map([
|
|
5
8
|
[codexAdapter.name, codexAdapter],
|
|
6
9
|
[claudeCodeAdapter.name, claudeCodeAdapter]
|
|
7
10
|
]);
|
|
11
|
+
export const TARGET_ADAPTER_VERSION = "1";
|
|
12
|
+
export function targetAdapterVersion(targets) {
|
|
13
|
+
const selected = targets === undefined
|
|
14
|
+
? listTargetAdapters()
|
|
15
|
+
: [...new Set(targets)].map((target) => getTargetAdapter(target));
|
|
16
|
+
const plugins = selected
|
|
17
|
+
.filter((adapter) => adapter.name !== "openai-codex" && adapter.name !== "claude-code")
|
|
18
|
+
.sort((left, right) => left.name.localeCompare(right.name))
|
|
19
|
+
.map((adapter) => `${adapter.name}@${adapter.version}`);
|
|
20
|
+
return plugins.length === 0 ? TARGET_ADAPTER_VERSION : `${TARGET_ADAPTER_VERSION};${plugins.join(",")}`;
|
|
21
|
+
}
|
|
22
|
+
export function listTargetAdapters() {
|
|
23
|
+
return [...adapters.values()].sort((left, right) => left.name.localeCompare(right.name));
|
|
24
|
+
}
|
|
25
|
+
export function hasTargetAdapter(target) {
|
|
26
|
+
return adapters.has(target);
|
|
27
|
+
}
|
|
28
|
+
export function registerTargetAdapter(adapter) {
|
|
29
|
+
if (adapter.apiVersion !== TARGET_ADAPTER_API_VERSION) {
|
|
30
|
+
throw new HarnessBrewError(`Unsupported Target Adapter API version for ${adapter.name}: ${adapter.apiVersion}`);
|
|
31
|
+
}
|
|
32
|
+
if (!/^[a-z0-9][a-z0-9-]*$/u.test(adapter.name)) {
|
|
33
|
+
throw new HarnessBrewError(`Invalid Target Adapter name: ${adapter.name}`);
|
|
34
|
+
}
|
|
35
|
+
if (typeof adapter.version !== "string" || adapter.version.trim() === "" || /[,;@]/u.test(adapter.version)) {
|
|
36
|
+
throw new HarnessBrewError(`Invalid Target Adapter version for ${adapter.name}.`);
|
|
37
|
+
}
|
|
38
|
+
if (adapters.has(adapter.name))
|
|
39
|
+
throw new HarnessBrewError(`Target adapter is already registered: ${adapter.name}`);
|
|
40
|
+
for (const kind of formulaKinds) {
|
|
41
|
+
if (!targetOperationKinds.includes(adapter.capabilities[kind])) {
|
|
42
|
+
throw new HarnessBrewError(`Invalid ${kind} capability for Target Adapter ${adapter.name}.`);
|
|
43
|
+
}
|
|
44
|
+
if (!["unsupported", "symlink-file", "symlink-directory"].includes(adapter.capabilities[kind])) {
|
|
45
|
+
throw new HarnessBrewError(`Target Adapter API v1 only supports symlink capabilities for third-party adapter ${adapter.name}.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (Object.keys(adapter.capabilities).some((kind) => !formulaKinds.includes(kind))) {
|
|
49
|
+
throw new HarnessBrewError(`Target Adapter ${adapter.name} contains an unknown Formula capability.`);
|
|
50
|
+
}
|
|
51
|
+
if (!["unsupported", "symlink-directory"].includes(adapter.capabilities.skill)) {
|
|
52
|
+
throw new HarnessBrewError(`Target Adapter ${adapter.name} must install skills as complete directories.`);
|
|
53
|
+
}
|
|
54
|
+
const registered = Object.freeze({
|
|
55
|
+
...adapter,
|
|
56
|
+
capabilities: Object.freeze({ ...adapter.capabilities }),
|
|
57
|
+
plan: (receipt, context) => adapter.plan.call(adapter, receipt, context)
|
|
58
|
+
});
|
|
59
|
+
adapters.set(adapter.name, registered);
|
|
60
|
+
return () => { if (adapters.get(adapter.name) === registered)
|
|
61
|
+
adapters.delete(adapter.name); };
|
|
62
|
+
}
|
|
8
63
|
export function getTargetAdapter(target) {
|
|
9
64
|
const adapter = adapters.get(target);
|
|
10
65
|
if (adapter === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/targets/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/targets/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/core/targets/transaction.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/core/targets/transaction.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACrC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoTD,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDxF;AA+FD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjG;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAiBpH"}
|
|
@@ -2,6 +2,8 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { lstat, mkdir, readFile, readlink, rename, rm, rmdir, stat, symlink, writeFile } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { HarnessBrewError } from "../errors.js";
|
|
5
|
+
import { withTargetLock } from "../locks.js";
|
|
6
|
+
import { captureMissingParents, captureTransactionPath, markTransactionPath } from "../journal.js";
|
|
5
7
|
function placementMetadata(input) {
|
|
6
8
|
return {
|
|
7
9
|
...(input.scope === undefined ? {} : { scope: input.scope }),
|
|
@@ -133,6 +135,10 @@ async function createdParents(destination) {
|
|
|
133
135
|
}
|
|
134
136
|
async function cleanupParents(operation) {
|
|
135
137
|
for (const directory of operation.createdDirectories) {
|
|
138
|
+
const relative = path.relative(directory, operation.destination);
|
|
139
|
+
if (!path.isAbsolute(directory) || relative === "" || relative === ".." || relative.startsWith(`..${path.sep}`)) {
|
|
140
|
+
throw new HarnessBrewError(`Unsafe created directory in operation ${operation.id}: ${directory}`);
|
|
141
|
+
}
|
|
136
142
|
try {
|
|
137
143
|
await rmdir(directory);
|
|
138
144
|
}
|
|
@@ -148,8 +154,12 @@ async function assertDestinationAvailable(destination) {
|
|
|
148
154
|
throw new HarnessBrewError(`Target path already exists: ${destination}`);
|
|
149
155
|
}
|
|
150
156
|
}
|
|
151
|
-
async function
|
|
157
|
+
async function applyOperationUnlocked(input) {
|
|
152
158
|
const destination = path.resolve(input.destination);
|
|
159
|
+
const temporaryPath = `${destination}.${process.pid}.tmp`;
|
|
160
|
+
await captureMissingParents(destination);
|
|
161
|
+
await captureTransactionPath(destination);
|
|
162
|
+
await captureTransactionPath(temporaryPath);
|
|
153
163
|
if (input.type !== "managed-block" && input.type !== "merge-config")
|
|
154
164
|
await assertDestinationAvailable(destination);
|
|
155
165
|
const directories = await createdParents(destination);
|
|
@@ -182,7 +192,6 @@ async function applyOperation(input) {
|
|
|
182
192
|
if (input.type === "render-file") {
|
|
183
193
|
if (input.content === undefined)
|
|
184
194
|
throw new HarnessBrewError(`Missing content for render-file: ${input.id}`);
|
|
185
|
-
const temporaryPath = `${destination}.${process.pid}.tmp`;
|
|
186
195
|
await writeFile(temporaryPath, input.content, "utf8");
|
|
187
196
|
await rename(temporaryPath, destination);
|
|
188
197
|
return {
|
|
@@ -211,7 +220,6 @@ async function applyOperation(input) {
|
|
|
211
220
|
}
|
|
212
221
|
const block = managedBlock(input.marker, input.content);
|
|
213
222
|
const prefix = before.length > 0 && !before.endsWith("\n") ? "\n" : "";
|
|
214
|
-
const temporaryPath = `${destination}.${process.pid}.tmp`;
|
|
215
223
|
await writeFile(temporaryPath, `${before}${prefix}${block}\n`, "utf8");
|
|
216
224
|
await rename(temporaryPath, destination);
|
|
217
225
|
return {
|
|
@@ -269,7 +277,6 @@ async function applyOperation(input) {
|
|
|
269
277
|
installedDigest = digestContent(block);
|
|
270
278
|
marker = input.marker;
|
|
271
279
|
}
|
|
272
|
-
const temporaryPath = `${destination}.${process.pid}.tmp`;
|
|
273
280
|
await writeFile(temporaryPath, after, "utf8");
|
|
274
281
|
await rename(temporaryPath, destination);
|
|
275
282
|
return {
|
|
@@ -367,7 +374,10 @@ export async function verifyTargetOperation(operation) {
|
|
|
367
374
|
throw new HarnessBrewError(`Installed target was modified: ${operation.destination}`);
|
|
368
375
|
}
|
|
369
376
|
}
|
|
370
|
-
|
|
377
|
+
async function removeTargetOperationUnlocked(operation, force = false) {
|
|
378
|
+
const temporaryPath = `${operation.destination}.${process.pid}.tmp`;
|
|
379
|
+
await captureTransactionPath(operation.destination);
|
|
380
|
+
await captureTransactionPath(temporaryPath);
|
|
371
381
|
if (!force)
|
|
372
382
|
await verifyTargetOperation(operation);
|
|
373
383
|
if (operation.type === "merge-config") {
|
|
@@ -415,7 +425,6 @@ export async function removeTargetOperation(operation, force = false) {
|
|
|
415
425
|
await rm(operation.destination, { force: true });
|
|
416
426
|
}
|
|
417
427
|
else {
|
|
418
|
-
const temporaryPath = `${operation.destination}.${process.pid}.tmp`;
|
|
419
428
|
await writeFile(temporaryPath, remaining, "utf8");
|
|
420
429
|
await rename(temporaryPath, operation.destination);
|
|
421
430
|
}
|
|
@@ -452,21 +461,48 @@ export async function removeTargetOperation(operation, force = false) {
|
|
|
452
461
|
await rm(operation.destination, { force: true });
|
|
453
462
|
}
|
|
454
463
|
else {
|
|
455
|
-
const temporaryPath = `${operation.destination}.${process.pid}.tmp`;
|
|
456
464
|
await writeFile(temporaryPath, remaining, "utf8");
|
|
457
465
|
await rename(temporaryPath, operation.destination);
|
|
458
466
|
}
|
|
459
467
|
await cleanupParents(operation);
|
|
460
468
|
return;
|
|
461
469
|
}
|
|
462
|
-
|
|
470
|
+
if (operation.type === "symlink-file" || operation.type === "symlink-directory") {
|
|
471
|
+
const metadata = await pathMetadata(operation.destination);
|
|
472
|
+
if (metadata === undefined)
|
|
473
|
+
return;
|
|
474
|
+
if (!metadata.isSymbolicLink()) {
|
|
475
|
+
if (force)
|
|
476
|
+
return;
|
|
477
|
+
throw new HarnessBrewError(`Installed target was modified: ${operation.destination}`);
|
|
478
|
+
}
|
|
479
|
+
await rm(operation.destination, { force: true });
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
await rm(operation.destination, { force: true });
|
|
483
|
+
}
|
|
463
484
|
await cleanupParents(operation);
|
|
464
485
|
}
|
|
486
|
+
export function removeTargetOperation(operation, force = false) {
|
|
487
|
+
return withTargetLock(operation.destination, async () => {
|
|
488
|
+
await removeTargetOperationUnlocked(operation, force);
|
|
489
|
+
await markTransactionPath(operation.destination);
|
|
490
|
+
await markTransactionPath(`${operation.destination}.${process.pid}.tmp`);
|
|
491
|
+
});
|
|
492
|
+
}
|
|
465
493
|
export async function executeTargetOperations(inputs) {
|
|
466
494
|
const installed = [];
|
|
467
495
|
try {
|
|
468
|
-
for (const input of inputs)
|
|
469
|
-
installed.push(await
|
|
496
|
+
for (const input of inputs) {
|
|
497
|
+
installed.push(await withTargetLock(input.destination, async () => {
|
|
498
|
+
const operation = await applyOperationUnlocked(input);
|
|
499
|
+
await markTransactionPath(operation.destination);
|
|
500
|
+
await markTransactionPath(`${operation.destination}.${process.pid}.tmp`);
|
|
501
|
+
for (const directory of operation.createdDirectories)
|
|
502
|
+
await markTransactionPath(directory);
|
|
503
|
+
return operation;
|
|
504
|
+
}));
|
|
505
|
+
}
|
|
470
506
|
return installed;
|
|
471
507
|
}
|
|
472
508
|
catch (error) {
|