harnessbrew 0.4.0 → 0.5.2
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 +40 -0
- package/README.md +26 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +65 -7
- package/dist/cli.js.map +1 -1
- package/dist/core/doctor.d.ts +22 -0
- package/dist/core/doctor.d.ts.map +1 -0
- package/dist/core/doctor.js +142 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/installations.d.ts +23 -1
- package/dist/core/installations.d.ts.map +1 -1
- package/dist/core/installations.js +48 -12
- package/dist/core/installations.js.map +1 -1
- package/dist/core/target-capabilities.d.ts +28 -0
- package/dist/core/target-capabilities.d.ts.map +1 -0
- package/dist/core/target-capabilities.js +34 -0
- package/dist/core/target-capabilities.js.map +1 -0
- package/dist/core/targets/claude-code.d.ts +3 -0
- package/dist/core/targets/claude-code.d.ts.map +1 -0
- package/dist/core/targets/claude-code.js +60 -0
- package/dist/core/targets/claude-code.js.map +1 -0
- package/dist/core/targets/codex.d.ts +3 -0
- package/dist/core/targets/codex.d.ts.map +1 -0
- package/dist/core/targets/codex.js +64 -0
- package/dist/core/targets/codex.js.map +1 -0
- package/dist/core/targets/planner.d.ts +5 -0
- package/dist/core/targets/planner.d.ts.map +1 -0
- package/dist/core/targets/planner.js +18 -0
- package/dist/core/targets/planner.js.map +1 -0
- package/dist/core/targets/registry.d.ts +4 -0
- package/dist/core/targets/registry.d.ts.map +1 -0
- package/dist/core/targets/registry.js +14 -0
- package/dist/core/targets/registry.js.map +1 -0
- package/dist/core/targets/renderers.d.ts +12 -0
- package/dist/core/targets/renderers.d.ts.map +1 -0
- package/dist/core/targets/renderers.js +157 -0
- package/dist/core/targets/renderers.js.map +1 -0
- package/dist/core/targets/transaction.d.ts +20 -0
- package/dist/core/targets/transaction.d.ts.map +1 -0
- package/dist/core/targets/transaction.js +478 -0
- package/dist/core/targets/transaction.js.map +1 -0
- package/dist/core/targets/types.d.ts +25 -0
- package/dist/core/targets/types.d.ts.map +1 -0
- package/dist/core/targets/types.js +2 -0
- package/dist/core/targets/types.js.map +1 -0
- package/dist/core/targets.d.ts +12 -4
- package/dist/core/targets.d.ts.map +1 -1
- package/dist/core/targets.js +143 -49
- package/dist/core/targets.js.map +1 -1
- package/dist/core/upgrades.d.ts.map +1 -1
- package/dist/core/upgrades.js +60 -17
- package/dist/core/upgrades.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../src/core/targets/renderers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { InstalledOperation, InstalledOperationType } from "../installations.js";
|
|
2
|
+
import type { TargetScope } from "./types.js";
|
|
3
|
+
export interface TargetOperationInput {
|
|
4
|
+
id: string;
|
|
5
|
+
type: InstalledOperationType;
|
|
6
|
+
target: string;
|
|
7
|
+
destination: string;
|
|
8
|
+
source?: string;
|
|
9
|
+
content?: string;
|
|
10
|
+
ownedKeys?: string[];
|
|
11
|
+
marker?: string;
|
|
12
|
+
configFormat?: "json" | "toml-block";
|
|
13
|
+
scope?: TargetScope;
|
|
14
|
+
root?: string;
|
|
15
|
+
projectRoot?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function verifyTargetOperation(operation: InstalledOperation): Promise<void>;
|
|
18
|
+
export declare function removeTargetOperation(operation: InstalledOperation, force?: boolean): Promise<void>;
|
|
19
|
+
export declare function executeTargetOperations(inputs: readonly TargetOperationInput[]): Promise<InstalledOperation[]>;
|
|
20
|
+
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -0,0 +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;AAE9C,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;AA+SD,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDxF;AAED,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFvG;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CASpH"}
|
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstat, mkdir, readFile, readlink, rename, rm, rmdir, stat, symlink, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { HarnessBrewError } from "../errors.js";
|
|
5
|
+
function placementMetadata(input) {
|
|
6
|
+
return {
|
|
7
|
+
...(input.scope === undefined ? {} : { scope: input.scope }),
|
|
8
|
+
...(input.root === undefined ? {} : { root: path.resolve(input.root) }),
|
|
9
|
+
...(input.projectRoot === undefined ? {} : { projectRoot: path.resolve(input.projectRoot) })
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
async function pathMetadata(filePath) {
|
|
13
|
+
try {
|
|
14
|
+
return await lstat(filePath);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error.code === "ENOENT")
|
|
18
|
+
return undefined;
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function digestFile(filePath) {
|
|
23
|
+
return createHash("sha256").update(await readFile(filePath)).digest("hex");
|
|
24
|
+
}
|
|
25
|
+
function digestContent(content) {
|
|
26
|
+
return createHash("sha256").update(content).digest("hex");
|
|
27
|
+
}
|
|
28
|
+
function managedBlock(marker, content) {
|
|
29
|
+
if (marker.trim() === "" || marker.includes("\n") || marker.includes("-->")) {
|
|
30
|
+
throw new HarnessBrewError(`Invalid managed-block marker: ${marker}`);
|
|
31
|
+
}
|
|
32
|
+
return `<!-- harnessbrew:start ${marker} -->\n${content.trimEnd()}\n<!-- harnessbrew:end ${marker} -->`;
|
|
33
|
+
}
|
|
34
|
+
function locateManagedBlock(content, marker) {
|
|
35
|
+
const startMarker = `<!-- harnessbrew:start ${marker} -->`;
|
|
36
|
+
const endMarker = `<!-- harnessbrew:end ${marker} -->`;
|
|
37
|
+
const start = content.indexOf(startMarker);
|
|
38
|
+
if (start === -1)
|
|
39
|
+
return undefined;
|
|
40
|
+
const endMarkerStart = content.indexOf(endMarker, start + startMarker.length);
|
|
41
|
+
if (endMarkerStart === -1 || content.indexOf(startMarker, start + startMarker.length) !== -1)
|
|
42
|
+
return undefined;
|
|
43
|
+
const end = endMarkerStart + endMarker.length;
|
|
44
|
+
return { start, end, block: content.slice(start, end) };
|
|
45
|
+
}
|
|
46
|
+
function configBlock(marker, content) {
|
|
47
|
+
if (marker.trim() === "" || marker.includes("\n"))
|
|
48
|
+
throw new HarnessBrewError(`Invalid config marker: ${marker}`);
|
|
49
|
+
return `# harnessbrew:start ${marker}\n${content.trimEnd()}\n# harnessbrew:end ${marker}`;
|
|
50
|
+
}
|
|
51
|
+
function locateConfigBlock(content, marker) {
|
|
52
|
+
const startMarker = `# harnessbrew:start ${marker}`;
|
|
53
|
+
const endMarker = `# harnessbrew:end ${marker}`;
|
|
54
|
+
const start = content.indexOf(startMarker);
|
|
55
|
+
if (start === -1)
|
|
56
|
+
return undefined;
|
|
57
|
+
const endMarkerStart = content.indexOf(endMarker, start + startMarker.length);
|
|
58
|
+
if (endMarkerStart === -1 || content.indexOf(startMarker, start + startMarker.length) !== -1)
|
|
59
|
+
return undefined;
|
|
60
|
+
const end = endMarkerStart + endMarker.length;
|
|
61
|
+
return { start, end, block: content.slice(start, end) };
|
|
62
|
+
}
|
|
63
|
+
function isRecord(value) {
|
|
64
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
65
|
+
}
|
|
66
|
+
function canonicalJson(value) {
|
|
67
|
+
if (Array.isArray(value))
|
|
68
|
+
return `[${value.map(canonicalJson).join(",")}]`;
|
|
69
|
+
if (isRecord(value)) {
|
|
70
|
+
return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`).join(",")}}`;
|
|
71
|
+
}
|
|
72
|
+
return JSON.stringify(value);
|
|
73
|
+
}
|
|
74
|
+
function readOwnedValue(root, keys) {
|
|
75
|
+
let current = root;
|
|
76
|
+
for (const key of keys) {
|
|
77
|
+
if (!isRecord(current) || !(key in current))
|
|
78
|
+
return undefined;
|
|
79
|
+
current = current[key];
|
|
80
|
+
}
|
|
81
|
+
return current;
|
|
82
|
+
}
|
|
83
|
+
function setOwnedValue(root, keys, value) {
|
|
84
|
+
if (keys.length === 0)
|
|
85
|
+
throw new HarnessBrewError("merge-config requires at least one owned key.");
|
|
86
|
+
let current = root;
|
|
87
|
+
for (const key of keys.slice(0, -1)) {
|
|
88
|
+
const existing = current[key];
|
|
89
|
+
if (existing === undefined)
|
|
90
|
+
current[key] = {};
|
|
91
|
+
else if (!isRecord(existing))
|
|
92
|
+
throw new HarnessBrewError(`Config key is not an object: ${key}`);
|
|
93
|
+
current = current[key];
|
|
94
|
+
}
|
|
95
|
+
current[keys.at(-1)] = value;
|
|
96
|
+
}
|
|
97
|
+
function deleteOwnedValue(root, keys) {
|
|
98
|
+
if (keys.length === 0)
|
|
99
|
+
return false;
|
|
100
|
+
let current = root;
|
|
101
|
+
for (const key of keys.slice(0, -1)) {
|
|
102
|
+
if (!isRecord(current) || !isRecord(current[key]))
|
|
103
|
+
return false;
|
|
104
|
+
current = current[key];
|
|
105
|
+
}
|
|
106
|
+
return delete current[keys.at(-1)];
|
|
107
|
+
}
|
|
108
|
+
function parseJsonObject(content, destination) {
|
|
109
|
+
if (content.trim() === "")
|
|
110
|
+
return {};
|
|
111
|
+
try {
|
|
112
|
+
const parsed = JSON.parse(content);
|
|
113
|
+
if (!isRecord(parsed))
|
|
114
|
+
throw new Error("not an object");
|
|
115
|
+
return parsed;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
throw new HarnessBrewError(`Target JSON config must contain an object: ${destination}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function createdParents(destination) {
|
|
122
|
+
const created = [];
|
|
123
|
+
let current = path.dirname(destination);
|
|
124
|
+
while (await pathMetadata(current) === undefined) {
|
|
125
|
+
created.push(current);
|
|
126
|
+
const parent = path.dirname(current);
|
|
127
|
+
if (parent === current)
|
|
128
|
+
break;
|
|
129
|
+
current = parent;
|
|
130
|
+
}
|
|
131
|
+
await mkdir(path.dirname(destination), { recursive: true });
|
|
132
|
+
return created;
|
|
133
|
+
}
|
|
134
|
+
async function cleanupParents(operation) {
|
|
135
|
+
for (const directory of operation.createdDirectories) {
|
|
136
|
+
try {
|
|
137
|
+
await rmdir(directory);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
const code = error.code;
|
|
141
|
+
if (code !== "ENOENT" && code !== "ENOTEMPTY")
|
|
142
|
+
throw error;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async function assertDestinationAvailable(destination) {
|
|
147
|
+
if (await pathMetadata(destination) !== undefined) {
|
|
148
|
+
throw new HarnessBrewError(`Target path already exists: ${destination}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async function applyOperation(input) {
|
|
152
|
+
const destination = path.resolve(input.destination);
|
|
153
|
+
if (input.type !== "managed-block" && input.type !== "merge-config")
|
|
154
|
+
await assertDestinationAvailable(destination);
|
|
155
|
+
const directories = await createdParents(destination);
|
|
156
|
+
let sharedDestinationExisted = false;
|
|
157
|
+
let sharedBefore;
|
|
158
|
+
try {
|
|
159
|
+
if (input.type === "symlink-file" || input.type === "symlink-directory") {
|
|
160
|
+
if (input.source === undefined)
|
|
161
|
+
throw new HarnessBrewError(`Missing source for ${input.type}: ${input.id}`);
|
|
162
|
+
const source = path.resolve(input.source);
|
|
163
|
+
const metadata = await stat(source);
|
|
164
|
+
if (input.type === "symlink-file" && !metadata.isFile()) {
|
|
165
|
+
throw new HarnessBrewError(`Symlink source is not a file: ${source}`);
|
|
166
|
+
}
|
|
167
|
+
if (input.type === "symlink-directory" && !metadata.isDirectory()) {
|
|
168
|
+
throw new HarnessBrewError(`Symlink source is not a directory: ${source}`);
|
|
169
|
+
}
|
|
170
|
+
await symlink(source, destination, input.type === "symlink-directory" ? "dir" : "file");
|
|
171
|
+
return {
|
|
172
|
+
id: input.id,
|
|
173
|
+
type: input.type,
|
|
174
|
+
target: input.target,
|
|
175
|
+
...placementMetadata(input),
|
|
176
|
+
destination,
|
|
177
|
+
source,
|
|
178
|
+
...(input.type === "symlink-file" ? { installedDigest: await digestFile(source) } : {}),
|
|
179
|
+
createdDirectories: directories
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (input.type === "render-file") {
|
|
183
|
+
if (input.content === undefined)
|
|
184
|
+
throw new HarnessBrewError(`Missing content for render-file: ${input.id}`);
|
|
185
|
+
const temporaryPath = `${destination}.${process.pid}.tmp`;
|
|
186
|
+
await writeFile(temporaryPath, input.content, "utf8");
|
|
187
|
+
await rename(temporaryPath, destination);
|
|
188
|
+
return {
|
|
189
|
+
id: input.id,
|
|
190
|
+
type: input.type,
|
|
191
|
+
target: input.target,
|
|
192
|
+
...placementMetadata(input),
|
|
193
|
+
destination,
|
|
194
|
+
installedDigest: await digestFile(destination),
|
|
195
|
+
createdDirectories: directories
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
if (input.type === "managed-block") {
|
|
199
|
+
if (input.content === undefined || input.marker === undefined) {
|
|
200
|
+
throw new HarnessBrewError(`Missing content or marker for managed-block: ${input.id}`);
|
|
201
|
+
}
|
|
202
|
+
const metadata = await pathMetadata(destination);
|
|
203
|
+
sharedDestinationExisted = metadata !== undefined;
|
|
204
|
+
if (metadata !== undefined && !metadata.isFile()) {
|
|
205
|
+
throw new HarnessBrewError(`Managed-block destination is not a regular file: ${destination}`);
|
|
206
|
+
}
|
|
207
|
+
const before = metadata === undefined ? "" : await readFile(destination, "utf8");
|
|
208
|
+
sharedBefore = before;
|
|
209
|
+
if (locateManagedBlock(before, input.marker) !== undefined) {
|
|
210
|
+
throw new HarnessBrewError(`Managed block already exists: ${input.marker}`);
|
|
211
|
+
}
|
|
212
|
+
const block = managedBlock(input.marker, input.content);
|
|
213
|
+
const prefix = before.length > 0 && !before.endsWith("\n") ? "\n" : "";
|
|
214
|
+
const temporaryPath = `${destination}.${process.pid}.tmp`;
|
|
215
|
+
await writeFile(temporaryPath, `${before}${prefix}${block}\n`, "utf8");
|
|
216
|
+
await rename(temporaryPath, destination);
|
|
217
|
+
return {
|
|
218
|
+
id: input.id,
|
|
219
|
+
type: input.type,
|
|
220
|
+
target: input.target,
|
|
221
|
+
...placementMetadata(input),
|
|
222
|
+
destination,
|
|
223
|
+
...(metadata === undefined ? {} : { beforeDigest: digestContent(before) }),
|
|
224
|
+
installedDigest: digestContent(block),
|
|
225
|
+
marker: input.marker,
|
|
226
|
+
managedPrefix: prefix,
|
|
227
|
+
createdDirectories: directories
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
if (input.type === "merge-config") {
|
|
231
|
+
if (input.content === undefined || input.configFormat === undefined) {
|
|
232
|
+
throw new HarnessBrewError(`Missing content or format for merge-config: ${input.id}`);
|
|
233
|
+
}
|
|
234
|
+
const metadata = await pathMetadata(destination);
|
|
235
|
+
sharedDestinationExisted = metadata !== undefined;
|
|
236
|
+
if (metadata !== undefined && !metadata.isFile()) {
|
|
237
|
+
throw new HarnessBrewError(`merge-config destination is not a regular file: ${destination}`);
|
|
238
|
+
}
|
|
239
|
+
const before = metadata === undefined ? "" : await readFile(destination, "utf8");
|
|
240
|
+
sharedBefore = before;
|
|
241
|
+
let installedDigest;
|
|
242
|
+
let marker;
|
|
243
|
+
let prefix = "";
|
|
244
|
+
let after;
|
|
245
|
+
if (input.configFormat === "json") {
|
|
246
|
+
if (input.ownedKeys === undefined || input.ownedKeys.length === 0) {
|
|
247
|
+
throw new HarnessBrewError(`Missing owned keys for JSON merge-config: ${input.id}`);
|
|
248
|
+
}
|
|
249
|
+
const configuration = parseJsonObject(before, destination);
|
|
250
|
+
if (readOwnedValue(configuration, input.ownedKeys) !== undefined) {
|
|
251
|
+
throw new HarnessBrewError(`Target config key already exists: ${input.ownedKeys.join(".")}`);
|
|
252
|
+
}
|
|
253
|
+
const ownedValue = JSON.parse(input.content);
|
|
254
|
+
setOwnedValue(configuration, input.ownedKeys, ownedValue);
|
|
255
|
+
installedDigest = digestContent(canonicalJson(ownedValue));
|
|
256
|
+
after = `${JSON.stringify(configuration, null, 2)}\n`;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
if (input.marker === undefined || input.ownedKeys?.[1] === undefined) {
|
|
260
|
+
throw new HarnessBrewError(`Missing marker or owned keys for TOML merge-config: ${input.id}`);
|
|
261
|
+
}
|
|
262
|
+
const serverName = input.ownedKeys[1].replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
|
263
|
+
if (new RegExp(`^\\s*\\[mcp_servers\\.${serverName}\\]\\s*$`, "mu").test(before)) {
|
|
264
|
+
throw new HarnessBrewError(`Target config key already exists: ${input.ownedKeys.join(".")}`);
|
|
265
|
+
}
|
|
266
|
+
const block = configBlock(input.marker, input.content);
|
|
267
|
+
prefix = before.length > 0 && !before.endsWith("\n") ? "\n" : "";
|
|
268
|
+
after = `${before}${prefix}${block}\n`;
|
|
269
|
+
installedDigest = digestContent(block);
|
|
270
|
+
marker = input.marker;
|
|
271
|
+
}
|
|
272
|
+
const temporaryPath = `${destination}.${process.pid}.tmp`;
|
|
273
|
+
await writeFile(temporaryPath, after, "utf8");
|
|
274
|
+
await rename(temporaryPath, destination);
|
|
275
|
+
return {
|
|
276
|
+
id: input.id,
|
|
277
|
+
type: input.type,
|
|
278
|
+
target: input.target,
|
|
279
|
+
...placementMetadata(input),
|
|
280
|
+
destination,
|
|
281
|
+
...(metadata === undefined ? {} : { beforeDigest: digestContent(before) }),
|
|
282
|
+
installedDigest,
|
|
283
|
+
...(input.ownedKeys === undefined ? {} : { ownedKeys: input.ownedKeys }),
|
|
284
|
+
...(marker === undefined ? {} : { marker }),
|
|
285
|
+
managedPrefix: prefix,
|
|
286
|
+
configFormat: input.configFormat,
|
|
287
|
+
createdDirectories: directories
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
throw new HarnessBrewError(`Transaction operation is not implemented yet: ${input.type}`);
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
await rm(`${destination}.${process.pid}.tmp`, { force: true });
|
|
294
|
+
if ((input.type === "managed-block" || input.type === "merge-config") && sharedDestinationExisted) {
|
|
295
|
+
if (sharedBefore !== undefined)
|
|
296
|
+
await writeFile(destination, sharedBefore, "utf8");
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
await rm(destination, { recursive: true, force: true });
|
|
300
|
+
}
|
|
301
|
+
await cleanupParents({
|
|
302
|
+
id: input.id,
|
|
303
|
+
type: input.type,
|
|
304
|
+
target: input.target,
|
|
305
|
+
destination,
|
|
306
|
+
createdDirectories: directories
|
|
307
|
+
});
|
|
308
|
+
throw error;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
export async function verifyTargetOperation(operation) {
|
|
312
|
+
try {
|
|
313
|
+
if (operation.type === "symlink-file" || operation.type === "symlink-directory") {
|
|
314
|
+
if (operation.source === undefined)
|
|
315
|
+
throw new Error("missing source");
|
|
316
|
+
const metadata = await lstat(operation.destination);
|
|
317
|
+
if (!metadata.isSymbolicLink())
|
|
318
|
+
throw new Error("not a symbolic link");
|
|
319
|
+
const target = path.resolve(path.dirname(operation.destination), await readlink(operation.destination));
|
|
320
|
+
if (target !== operation.source)
|
|
321
|
+
throw new Error("link target changed");
|
|
322
|
+
if (operation.installedDigest !== undefined && await digestFile(operation.source) !== operation.installedDigest) {
|
|
323
|
+
throw new Error("source changed");
|
|
324
|
+
}
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
if (operation.type === "render-file") {
|
|
328
|
+
if (operation.installedDigest === undefined || await digestFile(operation.destination) !== operation.installedDigest) {
|
|
329
|
+
throw new Error("rendered file changed");
|
|
330
|
+
}
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
if (operation.type === "managed-block") {
|
|
334
|
+
if (operation.marker === undefined || operation.installedDigest === undefined)
|
|
335
|
+
throw new Error("missing marker");
|
|
336
|
+
const located = locateManagedBlock(await readFile(operation.destination, "utf8"), operation.marker);
|
|
337
|
+
if (located === undefined || digestContent(located.block) !== operation.installedDigest) {
|
|
338
|
+
throw new Error("managed block changed");
|
|
339
|
+
}
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
if (operation.type === "merge-config") {
|
|
343
|
+
if (operation.installedDigest === undefined || operation.configFormat === undefined)
|
|
344
|
+
throw new Error("missing config metadata");
|
|
345
|
+
const content = await readFile(operation.destination, "utf8");
|
|
346
|
+
if (operation.configFormat === "json") {
|
|
347
|
+
if (operation.ownedKeys === undefined)
|
|
348
|
+
throw new Error("missing owned keys");
|
|
349
|
+
const ownedValue = readOwnedValue(parseJsonObject(content, operation.destination), operation.ownedKeys);
|
|
350
|
+
if (ownedValue === undefined || digestContent(canonicalJson(ownedValue)) !== operation.installedDigest) {
|
|
351
|
+
throw new Error("owned config changed");
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
if (operation.marker === undefined)
|
|
356
|
+
throw new Error("missing marker");
|
|
357
|
+
const located = locateConfigBlock(content, operation.marker);
|
|
358
|
+
if (located === undefined || digestContent(located.block) !== operation.installedDigest) {
|
|
359
|
+
throw new Error("managed config block changed");
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
throw new Error("operation verifier not implemented");
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
throw new HarnessBrewError(`Installed target was modified: ${operation.destination}`);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
export async function removeTargetOperation(operation, force = false) {
|
|
371
|
+
if (!force)
|
|
372
|
+
await verifyTargetOperation(operation);
|
|
373
|
+
if (operation.type === "merge-config") {
|
|
374
|
+
const current = await readFile(operation.destination, "utf8").catch((error) => {
|
|
375
|
+
if (force && error.code === "ENOENT")
|
|
376
|
+
return undefined;
|
|
377
|
+
throw error;
|
|
378
|
+
});
|
|
379
|
+
if (current === undefined)
|
|
380
|
+
return;
|
|
381
|
+
let remaining;
|
|
382
|
+
if (operation.configFormat === "json" && operation.ownedKeys !== undefined) {
|
|
383
|
+
const configuration = parseJsonObject(current, operation.destination);
|
|
384
|
+
if (!deleteOwnedValue(configuration, operation.ownedKeys)) {
|
|
385
|
+
if (force)
|
|
386
|
+
return;
|
|
387
|
+
throw new HarnessBrewError(`Installed target was modified: ${operation.destination}`);
|
|
388
|
+
}
|
|
389
|
+
remaining = `${JSON.stringify(configuration, null, 2)}\n`;
|
|
390
|
+
}
|
|
391
|
+
else if (operation.configFormat === "toml-block" && operation.marker !== undefined) {
|
|
392
|
+
const located = locateConfigBlock(current, operation.marker);
|
|
393
|
+
if (located === undefined) {
|
|
394
|
+
if (force)
|
|
395
|
+
return;
|
|
396
|
+
throw new HarnessBrewError(`Installed target was modified: ${operation.destination}`);
|
|
397
|
+
}
|
|
398
|
+
const trailingEnd = current[located.end] === "\n" ? located.end + 1 : located.end;
|
|
399
|
+
const prefix = operation.managedPrefix ?? "";
|
|
400
|
+
const prefixStart = located.start >= prefix.length
|
|
401
|
+
&& current.slice(located.start - prefix.length, located.start) === prefix
|
|
402
|
+
? located.start - prefix.length
|
|
403
|
+
: located.start;
|
|
404
|
+
remaining = `${current.slice(0, prefixStart)}${current.slice(trailingEnd)}`;
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
if (force)
|
|
408
|
+
return;
|
|
409
|
+
throw new HarnessBrewError(`Installed target was modified: ${operation.destination}`);
|
|
410
|
+
}
|
|
411
|
+
const createdConfigIsEmpty = remaining === ""
|
|
412
|
+
|| (operation.configFormat === "json"
|
|
413
|
+
&& canonicalJson(parseJsonObject(remaining, operation.destination)) === "{\"mcpServers\":{}}");
|
|
414
|
+
if (operation.beforeDigest === undefined && createdConfigIsEmpty) {
|
|
415
|
+
await rm(operation.destination, { force: true });
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
const temporaryPath = `${operation.destination}.${process.pid}.tmp`;
|
|
419
|
+
await writeFile(temporaryPath, remaining, "utf8");
|
|
420
|
+
await rename(temporaryPath, operation.destination);
|
|
421
|
+
}
|
|
422
|
+
await cleanupParents(operation);
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
if (operation.type === "managed-block") {
|
|
426
|
+
if (operation.marker === undefined) {
|
|
427
|
+
if (force)
|
|
428
|
+
return;
|
|
429
|
+
throw new HarnessBrewError(`Installed target was modified: ${operation.destination}`);
|
|
430
|
+
}
|
|
431
|
+
const current = await readFile(operation.destination, "utf8").catch((error) => {
|
|
432
|
+
if (force && error.code === "ENOENT")
|
|
433
|
+
return undefined;
|
|
434
|
+
throw error;
|
|
435
|
+
});
|
|
436
|
+
if (current === undefined)
|
|
437
|
+
return;
|
|
438
|
+
const located = locateManagedBlock(current, operation.marker);
|
|
439
|
+
if (located === undefined) {
|
|
440
|
+
if (force)
|
|
441
|
+
return;
|
|
442
|
+
throw new HarnessBrewError(`Installed target was modified: ${operation.destination}`);
|
|
443
|
+
}
|
|
444
|
+
const trailingEnd = current[located.end] === "\n" ? located.end + 1 : located.end;
|
|
445
|
+
const prefix = operation.managedPrefix ?? "";
|
|
446
|
+
const prefixStart = located.start >= prefix.length
|
|
447
|
+
&& current.slice(located.start - prefix.length, located.start) === prefix
|
|
448
|
+
? located.start - prefix.length
|
|
449
|
+
: located.start;
|
|
450
|
+
const remaining = `${current.slice(0, prefixStart)}${current.slice(trailingEnd)}`;
|
|
451
|
+
if (operation.beforeDigest === undefined && remaining === "") {
|
|
452
|
+
await rm(operation.destination, { force: true });
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
const temporaryPath = `${operation.destination}.${process.pid}.tmp`;
|
|
456
|
+
await writeFile(temporaryPath, remaining, "utf8");
|
|
457
|
+
await rename(temporaryPath, operation.destination);
|
|
458
|
+
}
|
|
459
|
+
await cleanupParents(operation);
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
await rm(operation.destination, { recursive: operation.type === "symlink-directory", force: true });
|
|
463
|
+
await cleanupParents(operation);
|
|
464
|
+
}
|
|
465
|
+
export async function executeTargetOperations(inputs) {
|
|
466
|
+
const installed = [];
|
|
467
|
+
try {
|
|
468
|
+
for (const input of inputs)
|
|
469
|
+
installed.push(await applyOperation(input));
|
|
470
|
+
return installed;
|
|
471
|
+
}
|
|
472
|
+
catch (error) {
|
|
473
|
+
for (const operation of installed.reverse())
|
|
474
|
+
await removeTargetOperation(operation, true);
|
|
475
|
+
throw error;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
//# sourceMappingURL=transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/core/targets/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { FormulaKind } from "../formulas.js";
|
|
2
|
+
import type { InstallReceipt } from "../installations.js";
|
|
3
|
+
import type { BuiltinTarget, TargetOperationKind } from "../target-capabilities.js";
|
|
4
|
+
export type TargetScope = "user" | "project";
|
|
5
|
+
export interface TargetContext {
|
|
6
|
+
root?: string;
|
|
7
|
+
scope?: TargetScope;
|
|
8
|
+
projectRoot?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PlannedTargetOperation {
|
|
11
|
+
strategy: Exclude<TargetOperationKind, "unsupported">;
|
|
12
|
+
destination: string;
|
|
13
|
+
source?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface TargetInstallPlan {
|
|
16
|
+
target: BuiltinTarget;
|
|
17
|
+
coordinate: string;
|
|
18
|
+
operations: PlannedTargetOperation[];
|
|
19
|
+
}
|
|
20
|
+
export interface TargetAdapter {
|
|
21
|
+
readonly name: BuiltinTarget;
|
|
22
|
+
supports(kind: FormulaKind): boolean;
|
|
23
|
+
plan(receipt: InstallReceipt, context?: TargetContext): TargetInstallPlan;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/targets/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEpF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;CAC3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/targets/types.ts"],"names":[],"mappings":""}
|
package/dist/core/targets.d.ts
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import { type InstallReceipt } from "./installations.js";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { type BuiltinTarget } from "./target-capabilities.js";
|
|
3
|
+
import type { TargetScope } from "./targets/types.js";
|
|
4
|
+
export { builtinTargets } from "./target-capabilities.js";
|
|
5
|
+
export type { BuiltinTarget } from "./target-capabilities.js";
|
|
6
|
+
export type { TargetScope } from "./targets/types.js";
|
|
4
7
|
export interface LinkOptions {
|
|
5
8
|
root?: string;
|
|
9
|
+
scope?: TargetScope;
|
|
10
|
+
projectRoot?: string;
|
|
6
11
|
}
|
|
7
|
-
export
|
|
12
|
+
export interface UnlinkOptions extends LinkOptions {
|
|
13
|
+
force?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function targetDestination(receipt: InstallReceipt, target: BuiltinTarget, options?: LinkOptions): string;
|
|
8
16
|
export declare function linkFormula(home: string, nameOrCoordinate: string, target: BuiltinTarget, options?: LinkOptions): Promise<InstallReceipt>;
|
|
9
|
-
export declare function unlinkFormula(home: string, nameOrCoordinate: string, target: BuiltinTarget,
|
|
17
|
+
export declare function unlinkFormula(home: string, nameOrCoordinate: string, target: BuiltinTarget, options?: UnlinkOptions | boolean): Promise<InstallReceipt>;
|
|
10
18
|
export declare function installForTarget(home: string, nameOrCoordinate: string, target: BuiltinTarget, options?: LinkOptions): Promise<InstallReceipt[]>;
|
|
11
19
|
//# sourceMappingURL=targets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/core/targets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/core/targets.ts"],"names":[],"mappings":"AAMA,OAAO,EAML,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIhG,OAAO,KAAK,EAAiB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAWD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,WAAgB,GACxB,MAAM,CAUR;AA0DD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,cAAc,CAAC,CAkFzB;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,aAAa,GAAG,OAAY,GACpC,OAAO,CAAC,cAAc,CAAC,CAiDzB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAkB3B"}
|