@youdie006/prodex 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +418 -0
- package/dist/banner.d.ts +5 -0
- package/dist/banner.js +47 -0
- package/dist/banner.js.map +1 -0
- package/dist/bundle.d.ts +15 -0
- package/dist/bundle.js +30 -0
- package/dist/bundle.js.map +1 -0
- package/dist/chatgpt-browser.d.ts +119 -0
- package/dist/chatgpt-browser.js +857 -0
- package/dist/chatgpt-browser.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +3502 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +58 -0
- package/dist/config.js +277 -0
- package/dist/config.js.map +1 -0
- package/dist/http-mcp.d.ts +20 -0
- package/dist/http-mcp.js +236 -0
- package/dist/http-mcp.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-tools.d.ts +395 -0
- package/dist/mcp-tools.js +167 -0
- package/dist/mcp-tools.js.map +1 -0
- package/dist/mcp.d.ts +37 -0
- package/dist/mcp.js +229 -0
- package/dist/mcp.js.map +1 -0
- package/dist/repo-write.d.ts +47 -0
- package/dist/repo-write.js +427 -0
- package/dist/repo-write.js.map +1 -0
- package/dist/repo.d.ts +27 -0
- package/dist/repo.js +386 -0
- package/dist/repo.js.map +1 -0
- package/dist/safe-file.d.ts +25 -0
- package/dist/safe-file.js +295 -0
- package/dist/safe-file.js.map +1 -0
- package/dist/schema.d.ts +402 -0
- package/dist/schema.js +109 -0
- package/dist/schema.js.map +1 -0
- package/dist/store.d.ts +157 -0
- package/dist/store.js +1402 -0
- package/dist/store.js.map +1 -0
- package/docs/claude.md +130 -0
- package/docs/clients.md +75 -0
- package/docs/http-mcp.md +223 -0
- package/package.json +67 -0
- package/scripts/release-check.mjs +436 -0
- package/scripts/release-pack.mjs +481 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { execFile, spawn } from "node:child_process";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { assertResolvedRepoPathAllowed, resolveRepoPath } from "./repo.js";
|
|
6
|
+
import { readVerifiedUtf8File, replaceVerifiedUtf8File } from "./safe-file.js";
|
|
7
|
+
const execFileAsync = promisify(execFile);
|
|
8
|
+
const MAX_WRITE_BYTES = 1_000_000;
|
|
9
|
+
let testHooks = {};
|
|
10
|
+
export function setRepoWriteTestHooks(hooks) {
|
|
11
|
+
testHooks = hooks;
|
|
12
|
+
}
|
|
13
|
+
export async function createRepoWriteDryRun(root, store, input) {
|
|
14
|
+
const head = await assertGitHead(root, input.expected_head);
|
|
15
|
+
if (Buffer.byteLength(input.content, "utf8") > MAX_WRITE_BYTES) {
|
|
16
|
+
throw new Error(`New content is too large to write through repo tools`);
|
|
17
|
+
}
|
|
18
|
+
const current = await readWritableExistingFile(root, input.path);
|
|
19
|
+
if (current.content === input.content) {
|
|
20
|
+
throw new Error(`No changes for ${input.path}`);
|
|
21
|
+
}
|
|
22
|
+
const preimage = sha256(current.content);
|
|
23
|
+
const newSha = sha256(input.content);
|
|
24
|
+
const diff = buildSimpleDiff(input.path, current.content, input.content);
|
|
25
|
+
const candidateArtifactPath = `.bridge/artifacts/repo-writes/${newSha}.txt`;
|
|
26
|
+
const artifactAlreadyExisted = await store.hasArtifactText(candidateArtifactPath);
|
|
27
|
+
const artifactPath = await store.writeArtifactText(candidateArtifactPath, input.content);
|
|
28
|
+
const metadata = {
|
|
29
|
+
path: input.path,
|
|
30
|
+
expected_head: head,
|
|
31
|
+
preimage_sha256: preimage,
|
|
32
|
+
new_sha256: newSha,
|
|
33
|
+
diff,
|
|
34
|
+
new_content_artifact: artifactPath
|
|
35
|
+
};
|
|
36
|
+
let receipt;
|
|
37
|
+
try {
|
|
38
|
+
receipt = await store.writeReceipt({
|
|
39
|
+
kind: "repo_write_dry_run",
|
|
40
|
+
summary: `Dry-run write for ${input.path}`,
|
|
41
|
+
metadata: metadata
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (!artifactAlreadyExisted) {
|
|
46
|
+
try {
|
|
47
|
+
await store.deleteArtifactTextIfPresent(artifactPath);
|
|
48
|
+
}
|
|
49
|
+
catch (cleanupError) {
|
|
50
|
+
throw new Error(`${errorMessage(error)} (also failed to clean up write artifact: ${errorMessage(cleanupError)})`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
receipt,
|
|
57
|
+
path: input.path,
|
|
58
|
+
expected_head: head,
|
|
59
|
+
preimage_sha256: preimage,
|
|
60
|
+
new_sha256: newSha,
|
|
61
|
+
diff
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export async function applyRepoWriteDryRun(root, store, input) {
|
|
65
|
+
const dryRunReceipt = await store.getTrustedReceipt(input.receipt_id);
|
|
66
|
+
if (dryRunReceipt.kind !== "repo_write_dry_run") {
|
|
67
|
+
throw new Error(`Receipt ${input.receipt_id} is not a repo_write_dry_run receipt`);
|
|
68
|
+
}
|
|
69
|
+
const metadata = parseDryRunMetadata(dryRunReceipt.metadata);
|
|
70
|
+
if (metadata.expected_head !== input.expected_head) {
|
|
71
|
+
throw new Error(`Expected HEAD does not match dry-run receipt`);
|
|
72
|
+
}
|
|
73
|
+
if (metadata.preimage_sha256 !== input.preimage_sha256) {
|
|
74
|
+
throw new Error(`Expected preimage does not match dry-run receipt`);
|
|
75
|
+
}
|
|
76
|
+
await assertGitHead(root, input.expected_head);
|
|
77
|
+
const current = await readWritableExistingFile(root, metadata.path);
|
|
78
|
+
const currentPreimage = sha256(current.content);
|
|
79
|
+
if (currentPreimage !== input.preimage_sha256) {
|
|
80
|
+
throw new Error(`File preimage changed for ${metadata.path}`);
|
|
81
|
+
}
|
|
82
|
+
const newContent = await readDryRunReplacementContent(store, metadata);
|
|
83
|
+
let receipt;
|
|
84
|
+
try {
|
|
85
|
+
await replaceVerifiedUtf8File(current.resolved, newContent, async () => {
|
|
86
|
+
await assertResolvedRepoPathAllowed(root, current.resolved, metadata.path);
|
|
87
|
+
await assertGitHead(root, input.expected_head);
|
|
88
|
+
}, async (latestContent) => {
|
|
89
|
+
await assertGitHead(root, input.expected_head);
|
|
90
|
+
if (sha256(latestContent) !== input.preimage_sha256) {
|
|
91
|
+
throw new Error(`File preimage changed for ${metadata.path}`);
|
|
92
|
+
}
|
|
93
|
+
}, { maxBytes: MAX_WRITE_BYTES });
|
|
94
|
+
await testHooks.beforeAppliedReceipt?.(metadata.path);
|
|
95
|
+
await assertGitHead(root, input.expected_head);
|
|
96
|
+
receipt = await store.writeReceipt({
|
|
97
|
+
kind: "repo_write_applied",
|
|
98
|
+
summary: `Applied write receipt ${input.receipt_id} to ${metadata.path}`,
|
|
99
|
+
metadata: {
|
|
100
|
+
dry_run_receipt_id: input.receipt_id,
|
|
101
|
+
path: metadata.path,
|
|
102
|
+
expected_head: input.expected_head,
|
|
103
|
+
preimage_sha256: input.preimage_sha256,
|
|
104
|
+
new_sha256: metadata.new_sha256
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
await assertGitHead(root, input.expected_head);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
const cleanupErrors = [];
|
|
111
|
+
if (receipt) {
|
|
112
|
+
try {
|
|
113
|
+
await store.deleteReceiptIfPresent(receipt.id);
|
|
114
|
+
}
|
|
115
|
+
catch (cleanupError) {
|
|
116
|
+
cleanupErrors.push(`failed to delete applied receipt ${receipt.id}: ${errorMessage(cleanupError)}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
await rollbackReplacementIfPresent(root, current.resolved, metadata.path, current.content, metadata.new_sha256);
|
|
121
|
+
}
|
|
122
|
+
catch (rollbackError) {
|
|
123
|
+
cleanupErrors.push(`failed to roll back replacement: ${errorMessage(rollbackError)}`);
|
|
124
|
+
}
|
|
125
|
+
if (cleanupErrors.length > 0)
|
|
126
|
+
throw new Error(`${errorMessage(error)} (also ${cleanupErrors.join("; ")})`);
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
if (!receipt)
|
|
130
|
+
throw new Error("Applied write receipt was not stored");
|
|
131
|
+
return {
|
|
132
|
+
receipt,
|
|
133
|
+
path: metadata.path,
|
|
134
|
+
expected_head: input.expected_head,
|
|
135
|
+
preimage_sha256: input.preimage_sha256,
|
|
136
|
+
new_sha256: metadata.new_sha256
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export async function stageReviewedPaths(root, store, input) {
|
|
140
|
+
if (input.receipt_ids.length === 0) {
|
|
141
|
+
throw new Error("At least one applied write receipt is required");
|
|
142
|
+
}
|
|
143
|
+
await assertGitHead(root, input.expected_head);
|
|
144
|
+
const paths = new Set();
|
|
145
|
+
const expectedObjectIdByPath = new Map();
|
|
146
|
+
for (const receiptId of input.receipt_ids) {
|
|
147
|
+
const receipt = await store.getTrustedReceipt(receiptId);
|
|
148
|
+
if (receipt.kind !== "repo_write_applied") {
|
|
149
|
+
throw new Error(`Receipt ${receiptId} is not a repo_write_applied receipt`);
|
|
150
|
+
}
|
|
151
|
+
const metadata = parseAppliedMetadata(receipt.metadata);
|
|
152
|
+
if (metadata.expected_head !== input.expected_head) {
|
|
153
|
+
throw new Error(`Expected HEAD does not match applied receipt ${receiptId}`);
|
|
154
|
+
}
|
|
155
|
+
const current = await readWritableExistingFile(root, metadata.path);
|
|
156
|
+
const currentSha = sha256(current.content);
|
|
157
|
+
if (currentSha !== metadata.new_sha256) {
|
|
158
|
+
throw new Error(`File content changed after applied receipt ${receiptId} for ${metadata.path}`);
|
|
159
|
+
}
|
|
160
|
+
const gitPath = path.relative(root, current.resolved).replaceAll(path.sep, "/");
|
|
161
|
+
paths.add(gitPath);
|
|
162
|
+
expectedObjectIdByPath.set(gitPath, await gitObjectIdForContent(root, gitPath, current.content));
|
|
163
|
+
}
|
|
164
|
+
const stagedPaths = Array.from(paths).sort();
|
|
165
|
+
const originalIndexEntries = await readGitIndexEntries(root, stagedPaths);
|
|
166
|
+
let staged = false;
|
|
167
|
+
let receipt;
|
|
168
|
+
try {
|
|
169
|
+
await testHooks.beforeGitAdd?.(stagedPaths);
|
|
170
|
+
await assertGitHead(root, input.expected_head);
|
|
171
|
+
await execFileAsync("git", ["add", "--", ...stagedPaths], { cwd: root });
|
|
172
|
+
staged = true;
|
|
173
|
+
await verifyStagedContent(root, expectedObjectIdByPath);
|
|
174
|
+
await testHooks.beforeStageReceipt?.(stagedPaths);
|
|
175
|
+
await assertGitHead(root, input.expected_head);
|
|
176
|
+
receipt = await store.writeReceipt({
|
|
177
|
+
kind: "repo_stage_reviewed_paths",
|
|
178
|
+
summary: `Staged reviewed paths: ${stagedPaths.join(", ")}`,
|
|
179
|
+
metadata: {
|
|
180
|
+
expected_head: input.expected_head,
|
|
181
|
+
receipt_ids: input.receipt_ids,
|
|
182
|
+
paths: stagedPaths
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
await assertGitHead(root, input.expected_head);
|
|
186
|
+
return {
|
|
187
|
+
receipt,
|
|
188
|
+
paths: stagedPaths,
|
|
189
|
+
receipt_ids: input.receipt_ids,
|
|
190
|
+
expected_head: input.expected_head
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const cleanupErrors = [];
|
|
195
|
+
if (receipt) {
|
|
196
|
+
try {
|
|
197
|
+
await store.deleteReceiptIfPresent(receipt.id);
|
|
198
|
+
}
|
|
199
|
+
catch (cleanupError) {
|
|
200
|
+
cleanupErrors.push(`failed to delete stage receipt ${receipt.id}: ${errorMessage(cleanupError)}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (staged) {
|
|
204
|
+
try {
|
|
205
|
+
await testHooks.beforeRestoreGitIndex?.(stagedPaths);
|
|
206
|
+
await restoreGitIndexEntries(root, originalIndexEntries);
|
|
207
|
+
}
|
|
208
|
+
catch (restoreError) {
|
|
209
|
+
cleanupErrors.push(`failed to restore git index: ${errorMessage(restoreError)}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (cleanupErrors.length > 0)
|
|
213
|
+
throw new Error(`${errorMessage(error)} (also ${cleanupErrors.join("; ")})`);
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async function gitObjectIdForContent(root, gitPath, content) {
|
|
218
|
+
return runGitWithStdin(root, ["hash-object", `--path=${gitPath}`, "--stdin"], content);
|
|
219
|
+
}
|
|
220
|
+
async function verifyStagedContent(root, expectedObjectIdByPath) {
|
|
221
|
+
for (const [gitPath, expectedObjectId] of expectedObjectIdByPath) {
|
|
222
|
+
const stagedObjectId = await gitObjectIdForStagedPath(root, gitPath);
|
|
223
|
+
if (stagedObjectId !== expectedObjectId) {
|
|
224
|
+
throw new Error(`Staged content changed before git add for ${gitPath}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async function gitObjectIdForStagedPath(root, gitPath) {
|
|
229
|
+
const { stdout } = await execFileAsync("git", ["ls-files", "--stage", "-z", "--", gitPath], {
|
|
230
|
+
cwd: root,
|
|
231
|
+
maxBuffer: MAX_WRITE_BYTES + 1024
|
|
232
|
+
});
|
|
233
|
+
const entry = stdout.split("\0").find(Boolean);
|
|
234
|
+
const objectId = entry?.split(/\s+/)[1];
|
|
235
|
+
if (!objectId) {
|
|
236
|
+
throw new Error(`Path ${gitPath} was not staged`);
|
|
237
|
+
}
|
|
238
|
+
return objectId;
|
|
239
|
+
}
|
|
240
|
+
async function readGitIndexEntries(root, paths) {
|
|
241
|
+
const entries = new Map();
|
|
242
|
+
for (const gitPath of paths) {
|
|
243
|
+
const { stdout } = await execFileAsync("git", ["ls-files", "--stage", "-z", "--", gitPath], {
|
|
244
|
+
cwd: root,
|
|
245
|
+
encoding: "buffer",
|
|
246
|
+
maxBuffer: MAX_WRITE_BYTES + 1024
|
|
247
|
+
});
|
|
248
|
+
entries.set(gitPath, parseGitIndexEntry(stdout));
|
|
249
|
+
}
|
|
250
|
+
return entries;
|
|
251
|
+
}
|
|
252
|
+
function parseGitIndexEntry(stdout) {
|
|
253
|
+
const entry = stdout.toString("utf8").split("\0").find(Boolean);
|
|
254
|
+
if (!entry)
|
|
255
|
+
return undefined;
|
|
256
|
+
const match = /^(\d+)\s+([a-f0-9]{40,64})\s+\d+\t/.exec(entry);
|
|
257
|
+
if (!match) {
|
|
258
|
+
throw new Error("Could not parse git index entry for staged path");
|
|
259
|
+
}
|
|
260
|
+
return { mode: match[1], objectId: match[2] };
|
|
261
|
+
}
|
|
262
|
+
async function restoreGitIndexEntries(root, entries) {
|
|
263
|
+
for (const [gitPath, entry] of entries) {
|
|
264
|
+
if (entry) {
|
|
265
|
+
await execFileAsync("git", ["update-index", "--add", "--cacheinfo", entry.mode, entry.objectId, gitPath], { cwd: root });
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
await execFileAsync("git", ["rm", "--cached", "--ignore-unmatch", "--", gitPath], { cwd: root });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async function runGitWithStdin(root, args, input) {
|
|
273
|
+
return new Promise((resolve, reject) => {
|
|
274
|
+
const child = spawn("git", args, { cwd: root, stdio: ["pipe", "pipe", "pipe"] });
|
|
275
|
+
const stdout = [];
|
|
276
|
+
const stderr = [];
|
|
277
|
+
child.stdout.on("data", (chunk) => stdout.push(chunk));
|
|
278
|
+
child.stderr.on("data", (chunk) => stderr.push(chunk));
|
|
279
|
+
child.on("error", reject);
|
|
280
|
+
child.on("close", (code) => {
|
|
281
|
+
if (code === 0) {
|
|
282
|
+
resolve(Buffer.concat(stdout).toString("utf8").trim());
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
reject(new Error(Buffer.concat(stderr).toString("utf8").trim() || `git ${args.join(" ")} failed with code ${code}`));
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
child.stdin.end(input, "utf8");
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
async function getGitHead(root) {
|
|
292
|
+
try {
|
|
293
|
+
const { stdout } = await execFileAsync("git", ["rev-parse", "HEAD"], { cwd: root });
|
|
294
|
+
return stdout.trim();
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
if (isErrorCode(error, "ENOENT")) {
|
|
298
|
+
throw new Error("git is required on PATH for repo write tools");
|
|
299
|
+
}
|
|
300
|
+
if (isMissingGitHeadError(error)) {
|
|
301
|
+
throw new Error("repo write tools require a git worktree with a committed HEAD");
|
|
302
|
+
}
|
|
303
|
+
throw new Error(`git HEAD check failed: ${commandFailureDetail(error)}`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
async function assertGitHead(root, expectedHead) {
|
|
307
|
+
const head = await getGitHead(root);
|
|
308
|
+
if (head !== expectedHead) {
|
|
309
|
+
throw new Error(`Git HEAD mismatch: expected ${expectedHead}, got ${head}`);
|
|
310
|
+
}
|
|
311
|
+
return head;
|
|
312
|
+
}
|
|
313
|
+
async function rollbackReplacementIfPresent(root, resolvedPath, repoPath, originalContent, replacementSha) {
|
|
314
|
+
let currentContent;
|
|
315
|
+
try {
|
|
316
|
+
currentContent = await readVerifiedUtf8File(resolvedPath, () => assertResolvedRepoPathAllowed(root, resolvedPath, repoPath), {
|
|
317
|
+
maxBytes: MAX_WRITE_BYTES
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
if (sha256(currentContent) !== replacementSha)
|
|
324
|
+
return;
|
|
325
|
+
await replaceVerifiedUtf8File(resolvedPath, originalContent, () => assertResolvedRepoPathAllowed(root, resolvedPath, repoPath), (latestContent) => {
|
|
326
|
+
if (sha256(latestContent) !== replacementSha) {
|
|
327
|
+
throw new Error(`Cannot roll back ${repoPath}; replacement content changed`);
|
|
328
|
+
}
|
|
329
|
+
}, { maxBytes: MAX_WRITE_BYTES });
|
|
330
|
+
}
|
|
331
|
+
async function readWritableExistingFile(root, repoPath) {
|
|
332
|
+
const resolved = resolveRepoPath(root, repoPath);
|
|
333
|
+
await assertResolvedRepoPathAllowed(root, resolved, repoPath);
|
|
334
|
+
const content = await readVerifiedUtf8File(resolved, () => assertResolvedRepoPathAllowed(root, resolved, repoPath), {
|
|
335
|
+
maxBytes: MAX_WRITE_BYTES
|
|
336
|
+
}).catch((error) => {
|
|
337
|
+
if (error instanceof Error && /too large/.test(error.message)) {
|
|
338
|
+
throw new Error(`Path ${repoPath} is too large to write through repo tools`);
|
|
339
|
+
}
|
|
340
|
+
throw error;
|
|
341
|
+
});
|
|
342
|
+
return { resolved, content };
|
|
343
|
+
}
|
|
344
|
+
function parseDryRunMetadata(value) {
|
|
345
|
+
const metadata = value;
|
|
346
|
+
for (const key of ["path", "expected_head", "preimage_sha256", "new_sha256", "diff"]) {
|
|
347
|
+
if (typeof metadata[key] !== "string") {
|
|
348
|
+
throw new Error(`Dry-run receipt metadata is missing ${key}`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (typeof metadata.new_content_artifact !== "string" && typeof metadata.new_content !== "string") {
|
|
352
|
+
throw new Error(`Dry-run receipt metadata is missing new_content_artifact`);
|
|
353
|
+
}
|
|
354
|
+
return metadata;
|
|
355
|
+
}
|
|
356
|
+
async function readDryRunReplacementContent(store, metadata) {
|
|
357
|
+
const newContent = metadata.new_content_artifact
|
|
358
|
+
? await store.readArtifactText(metadata.new_content_artifact, { maxBytes: MAX_WRITE_BYTES })
|
|
359
|
+
: metadata.new_content;
|
|
360
|
+
if (typeof newContent !== "string") {
|
|
361
|
+
throw new Error(`Dry-run receipt metadata is missing replacement content`);
|
|
362
|
+
}
|
|
363
|
+
const newContentBytes = Buffer.byteLength(newContent, "utf8");
|
|
364
|
+
if (newContentBytes > MAX_WRITE_BYTES) {
|
|
365
|
+
throw new Error(`Dry-run replacement content is too large (${newContentBytes} bytes > ${MAX_WRITE_BYTES} bytes)`);
|
|
366
|
+
}
|
|
367
|
+
if (sha256(newContent) !== metadata.new_sha256) {
|
|
368
|
+
throw new Error(metadata.new_content_artifact
|
|
369
|
+
? `Dry-run artifact content changed for ${metadata.path}`
|
|
370
|
+
: `Dry-run inline content does not match receipt hash for ${metadata.path}`);
|
|
371
|
+
}
|
|
372
|
+
return newContent;
|
|
373
|
+
}
|
|
374
|
+
function parseAppliedMetadata(value) {
|
|
375
|
+
const metadata = value;
|
|
376
|
+
for (const key of ["path", "expected_head", "preimage_sha256", "new_sha256"]) {
|
|
377
|
+
if (typeof metadata[key] !== "string") {
|
|
378
|
+
throw new Error(`Applied receipt metadata is missing ${key}`);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return metadata;
|
|
382
|
+
}
|
|
383
|
+
function sha256(value) {
|
|
384
|
+
return createHash("sha256").update(value, "utf8").digest("hex");
|
|
385
|
+
}
|
|
386
|
+
function errorMessage(error) {
|
|
387
|
+
return error instanceof Error ? error.message : String(error);
|
|
388
|
+
}
|
|
389
|
+
function isErrorCode(error, code) {
|
|
390
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === code;
|
|
391
|
+
}
|
|
392
|
+
function isMissingGitHeadError(error) {
|
|
393
|
+
const detail = commandFailureDetail(error);
|
|
394
|
+
return /not a git repository|needed a single revision|ambiguous argument ['"]?HEAD|unknown revision or path not in the working tree/i.test(detail);
|
|
395
|
+
}
|
|
396
|
+
function commandFailureDetail(error) {
|
|
397
|
+
const failed = typeof error === "object" && error !== null ? error : {};
|
|
398
|
+
const stderr = firstOutputLine(failed.stderr);
|
|
399
|
+
if (stderr)
|
|
400
|
+
return stderr;
|
|
401
|
+
const stdout = firstOutputLine(failed.stdout);
|
|
402
|
+
if (stdout)
|
|
403
|
+
return stdout;
|
|
404
|
+
if (typeof failed.code === "number")
|
|
405
|
+
return `exit code ${failed.code}`;
|
|
406
|
+
if (typeof failed.signal === "string" && failed.signal) {
|
|
407
|
+
return `signal ${failed.signal}`;
|
|
408
|
+
}
|
|
409
|
+
return "failed without output";
|
|
410
|
+
}
|
|
411
|
+
function firstOutputLine(value) {
|
|
412
|
+
if (typeof value !== "string")
|
|
413
|
+
return undefined;
|
|
414
|
+
return value
|
|
415
|
+
.split(/\r?\n/)
|
|
416
|
+
.map((line) => line.trim())
|
|
417
|
+
.find(Boolean);
|
|
418
|
+
}
|
|
419
|
+
function buildSimpleDiff(repoPath, before, after) {
|
|
420
|
+
return [
|
|
421
|
+
`--- a/${repoPath}`,
|
|
422
|
+
`+++ b/${repoPath}`,
|
|
423
|
+
...before.replace(/\r\n/g, "\n").split("\n").map((line) => `-${line}`),
|
|
424
|
+
...after.replace(/\r\n/g, "\n").split("\n").map((line) => `+${line}`)
|
|
425
|
+
].join("\n");
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=repo-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-write.js","sourceRoot":"","sources":["../src/repo-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,6BAA6B,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAI/E,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,eAAe,GAAG,SAAS,CAAC;AASlC,IAAI,SAAS,GAAuB,EAAE,CAAC;AAEvC,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,SAAS,GAAG,KAAK,CAAC;AACpB,CAAC;AAiED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,KAAkB,EAClB,KAA2B;IAE3B,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,eAAe,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,qBAAqB,GAAG,iCAAiC,MAAM,MAAM,CAAC;IAC5E,MAAM,sBAAsB,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzF,MAAM,QAAQ,GAAmB;QAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,QAAQ;QACzB,UAAU,EAAE,MAAM;QAClB,IAAI;QACJ,oBAAoB,EAAE,YAAY;KACnC,CAAC;IACF,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;YACjC,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,qBAAqB,KAAK,CAAC,IAAI,EAAE;YAC1C,QAAQ,EAAE,QAA8C;SACzD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,YAAY,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,6CAA6C,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACpH,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO;QACP,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,QAAQ;QACzB,UAAU,EAAE,MAAM;QAClB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,KAAkB,EAClB,KAA0B;IAE1B,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,aAAa,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,UAAU,sCAAsC,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,QAAQ,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,eAAe,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,4BAA4B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEvE,IAAI,OAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,uBAAuB,CAC3B,OAAO,CAAC,QAAQ,EAChB,UAAU,EACV,KAAK,IAAI,EAAE;YACT,MAAM,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3E,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC,EACD,KAAK,EAAE,aAAa,EAAE,EAAE;YACtB,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,EACD,EAAE,QAAQ,EAAE,eAAe,EAAE,CAC9B,CAAC;QACF,MAAM,SAAS,CAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;YACjC,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,yBAAyB,KAAK,CAAC,UAAU,OAAO,QAAQ,CAAC,IAAI,EAAE;YACxE,QAAQ,EAAE;gBACR,kBAAkB,EAAE,KAAK,CAAC,UAAU;gBACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC;SACF,CAAC,CAAC;QACH,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,YAAY,EAAE,CAAC;gBACtB,aAAa,CAAC,IAAI,CAAC,oCAAoC,OAAO,CAAC,EAAE,KAAK,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClH,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,oCAAoC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3G,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtE,OAAO;QACL,OAAO;QACP,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,KAAkB,EAClB,KAAkC;IAElC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,WAAW,SAAS,sCAAsC,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,gDAAgD,SAAS,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,8CAA8C,SAAS,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChF,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,oBAAoB,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC1E,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,OAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QACxD,MAAM,SAAS,CAAC,kBAAkB,EAAE,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;YACjC,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,0BAA0B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3D,QAAQ,EAAE;gBACR,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,KAAK,EAAE,WAAW;aACnB;SACF,CAAC,CAAC;QACH,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,OAAO;YACL,OAAO;YACP,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,YAAY,EAAE,CAAC;gBACtB,aAAa,CAAC,IAAI,CAAC,kCAAkC,OAAO,CAAC,EAAE,KAAK,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,qBAAqB,EAAE,CAAC,WAAW,CAAC,CAAC;gBACrD,MAAM,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,YAAY,EAAE,CAAC;gBACtB,aAAa,CAAC,IAAI,CAAC,gCAAgC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3G,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAe,EAAE,OAAe;IACjF,OAAO,eAAe,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,UAAU,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;AACzF,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,sBAA2C;IAC1F,KAAK,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,sBAAsB,EAAE,CAAC;QACjE,MAAM,cAAc,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,cAAc,KAAK,gBAAgB,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,IAAY,EAAE,OAAe;IACnE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;QAC1F,GAAG,EAAE,IAAI;QACT,SAAS,EAAE,eAAe,GAAG,IAAI;KAClC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,QAAQ,OAAO,iBAAiB,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,KAAe;IAC9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC7D,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;YAC1F,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,eAAe,GAAG,IAAI;SAClC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,IAAY,EAAE,OAA+C;IACjG,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3H,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAAc,EAAE,KAAa;IACxE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;YACvH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,YAAoB;IAC7D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,SAAS,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,IAAY,EACZ,YAAoB,EACpB,QAAgB,EAChB,eAAuB,EACvB,cAAsB;IAEtB,IAAI,cAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,oBAAoB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE;YAC3H,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,cAAc;QAAE,OAAO;IACtD,MAAM,uBAAuB,CAC3B,YAAY,EACZ,eAAe,EACf,GAAG,EAAE,CAAC,6BAA6B,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,EACjE,CAAC,aAAa,EAAE,EAAE;QAChB,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,cAAc,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,+BAA+B,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,eAAe,EAAE,CAC9B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,IAAY,EAAE,QAAgB;IACpE,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;QAClH,QAAQ,EAAE,eAAe;KAC1B,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,IAAI,KAAK,YAAY,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,2CAA2C,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA8B;IACzD,MAAM,QAAQ,GAAG,KAAgC,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,CAAU,EAAE,CAAC;QAC9F,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,oBAAoB,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAClG,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,QAA0B,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,KAAkB,EAAE,QAAwB;IACtF,MAAM,UAAU,GAAG,QAAQ,CAAC,oBAAoB;QAC9C,CAAC,CAAC,MAAM,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5F,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;IACzB,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,eAAe,GAAG,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,6CAA6C,eAAe,YAAY,eAAe,SAAS,CAAC,CAAC;IACpH,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,QAAQ,CAAC,oBAAoB;YAC3B,CAAC,CAAC,wCAAwC,QAAQ,CAAC,IAAI,EAAE;YACzD,CAAC,CAAC,0DAA0D,QAAQ,CAAC,IAAI,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA8B;IAC1D,MAAM,QAAQ,GAAG,KAAiC,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,CAAU,EAAE,CAAC;QACtF,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,QAA2B,CAAC;AACrC,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,IAAY;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAK,KAA4B,CAAC,IAAI,KAAK,IAAI,CAAC;AACvH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,8HAA8H,CAAC,IAAI,CACxI,MAAM,CACP,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,MAAM,GAAG,eAAe,CAAE,MAA+B,CAAC,MAAM,CAAC,CAAC;IACxE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,MAAM,GAAG,eAAe,CAAE,MAA+B,CAAC,MAAM,CAAC,CAAC;IACxE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,OAAQ,MAA6B,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,aAAc,MAA2B,CAAC,IAAI,EAAE,CAAC;IACrH,IAAI,OAAQ,MAA+B,CAAC,MAAM,KAAK,QAAQ,IAAK,MAA6B,CAAC,MAAM,EAAE,CAAC;QACzG,OAAO,UAAW,MAA6B,CAAC,MAAM,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,KAAK;SACT,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,MAAc,EAAE,KAAa;IACtE,OAAO;QACL,SAAS,QAAQ,EAAE;QACnB,SAAS,QAAQ,EAAE;QACnB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACtE,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;KACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/repo.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface ReadRepoFileOptions {
|
|
2
|
+
startLine?: number;
|
|
3
|
+
maxLines?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface ReadRepoFileResult {
|
|
6
|
+
path: string;
|
|
7
|
+
start_line: number;
|
|
8
|
+
end_line: number;
|
|
9
|
+
total_lines: number;
|
|
10
|
+
content: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SearchResult {
|
|
13
|
+
path: string;
|
|
14
|
+
line: number;
|
|
15
|
+
text: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SearchRepoResult {
|
|
18
|
+
matches: SearchResult[];
|
|
19
|
+
truncated: boolean;
|
|
20
|
+
limit: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function assertRepoRelativePath(repoPath: string): void;
|
|
23
|
+
export declare function resolveRepoPath(root: string, repoPath: string): string;
|
|
24
|
+
export declare function readRepoFile(root: string, repoPath: string, options?: ReadRepoFileOptions): Promise<ReadRepoFileResult>;
|
|
25
|
+
export declare function searchRepo(root: string, query: string, glob?: string): Promise<SearchResult[]>;
|
|
26
|
+
export declare function searchRepoWithMetadata(root: string, query: string, glob?: string): Promise<SearchRepoResult>;
|
|
27
|
+
export declare function assertResolvedRepoPathAllowed(root: string, resolved: string, repoPath: string): Promise<void>;
|