@claudexor/context 1.0.1 → 2.1.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/dist/atlas.d.ts +2 -0
- package/dist/atlas.d.ts.map +1 -1
- package/dist/atlas.js +125 -43
- package/dist/atlas.js.map +1 -1
- package/dist/contextpack.d.ts.map +1 -1
- package/dist/contextpack.js +37 -4
- package/dist/contextpack.js.map +1 -1
- package/dist/evidence.d.ts +34 -0
- package/dist/evidence.d.ts.map +1 -1
- package/dist/evidence.js +169 -2
- package/dist/evidence.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/raw-context.d.ts +6 -0
- package/dist/raw-context.d.ts.map +1 -0
- package/dist/raw-context.js +91 -0
- package/dist/raw-context.js.map +1 -0
- package/package.json +4 -4
package/dist/atlas.d.ts
CHANGED
|
@@ -21,4 +21,6 @@ export interface AtlasResult {
|
|
|
21
21
|
* are recorded as omitted with a reason, plus an explicit OMISSIONS list.
|
|
22
22
|
*/
|
|
23
23
|
export declare function buildScopeAtlas(repoRoot: string, opts?: AtlasOptions): Promise<AtlasResult>;
|
|
24
|
+
/** Filesystem adapter for the shared pure symlink policy. */
|
|
25
|
+
export declare function contextSymlinkDenyReason(repoRoot: string, canonicalRepoRoot: string, rel: string): string | null;
|
|
24
26
|
//# sourceMappingURL=atlas.d.ts.map
|
package/dist/atlas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlas.d.ts","sourceRoot":"","sources":["../src/atlas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"atlas.d.ts","sourceRoot":"","sources":["../src/atlas.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA2DxF,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AA4FD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,WAAW,CAAC,CAyItB;AAQD,6DAA6D;AAC7D,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAqBf"}
|
package/dist/atlas.js
CHANGED
|
@@ -1,20 +1,8 @@
|
|
|
1
|
-
import { lstatSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
|
|
2
|
-
import { extname, join, relative
|
|
1
|
+
import { lstatSync, readFileSync, readlinkSync, readdirSync, realpathSync, statSync, } from "node:fs";
|
|
2
|
+
import { extname, join, relative } from "node:path";
|
|
3
3
|
import { runCapture } from "@claudexor/core";
|
|
4
|
-
import { sha256 } from "@claudexor/util";
|
|
4
|
+
import { sensitiveResourcePolicy, sha256 } from "@claudexor/util";
|
|
5
5
|
import { matchAny } from "./glob.js";
|
|
6
|
-
const SENSITIVE = [
|
|
7
|
-
"**/.env",
|
|
8
|
-
"**/.env.*",
|
|
9
|
-
".env",
|
|
10
|
-
".env.*",
|
|
11
|
-
"**/secrets/**",
|
|
12
|
-
"**/*.pem",
|
|
13
|
-
"**/*.key",
|
|
14
|
-
"**/id_rsa*",
|
|
15
|
-
"**/*.p12",
|
|
16
|
-
"**/credentials*.json",
|
|
17
|
-
];
|
|
18
6
|
const MANIFEST_ONLY = [
|
|
19
7
|
"**/pnpm-lock.yaml",
|
|
20
8
|
"pnpm-lock.yaml",
|
|
@@ -37,15 +25,45 @@ const VENDORED = [
|
|
|
37
25
|
"**/*.map",
|
|
38
26
|
];
|
|
39
27
|
const BINARY_EXT = new Set([
|
|
40
|
-
".png",
|
|
41
|
-
".
|
|
42
|
-
".
|
|
28
|
+
".png",
|
|
29
|
+
".jpg",
|
|
30
|
+
".jpeg",
|
|
31
|
+
".gif",
|
|
32
|
+
".webp",
|
|
33
|
+
".ico",
|
|
34
|
+
".pdf",
|
|
35
|
+
".zip",
|
|
36
|
+
".gz",
|
|
37
|
+
".tar",
|
|
38
|
+
".tgz",
|
|
39
|
+
".zst",
|
|
40
|
+
".woff",
|
|
41
|
+
".woff2",
|
|
42
|
+
".ttf",
|
|
43
|
+
".eot",
|
|
44
|
+
".mp4",
|
|
45
|
+
".mov",
|
|
46
|
+
".mp3",
|
|
47
|
+
".wav",
|
|
48
|
+
".bin",
|
|
49
|
+
".so",
|
|
50
|
+
".dylib",
|
|
51
|
+
".dll",
|
|
52
|
+
".node",
|
|
53
|
+
".class",
|
|
54
|
+
".jar",
|
|
55
|
+
".wasm",
|
|
56
|
+
".o",
|
|
57
|
+
".a",
|
|
43
58
|
]);
|
|
44
59
|
async function listFiles(repoRoot) {
|
|
45
60
|
try {
|
|
46
61
|
const r = await runCapture("git", ["-C", repoRoot, "ls-files", "--cached", "--others", "--exclude-standard"], { timeoutMs: 30_000 });
|
|
47
62
|
if (r.code === 0) {
|
|
48
|
-
const files = r.stdout
|
|
63
|
+
const files = r.stdout
|
|
64
|
+
.split("\n")
|
|
65
|
+
.map((s) => s.trim())
|
|
66
|
+
.filter(Boolean);
|
|
49
67
|
if (files.length > 0)
|
|
50
68
|
return files;
|
|
51
69
|
}
|
|
@@ -90,9 +108,11 @@ function walk(root, dir, seenDirs = new Set()) {
|
|
|
90
108
|
// ContextPack (context collection is scoped to the target tree).
|
|
91
109
|
let resolved;
|
|
92
110
|
let rootReal;
|
|
111
|
+
let linkTarget;
|
|
93
112
|
try {
|
|
94
113
|
rootReal = realpathSync(root);
|
|
95
114
|
resolved = realpathSync(full);
|
|
115
|
+
linkTarget = readlinkSync(full);
|
|
96
116
|
}
|
|
97
117
|
catch {
|
|
98
118
|
continue;
|
|
@@ -104,10 +124,17 @@ function walk(root, dir, seenDirs = new Set()) {
|
|
|
104
124
|
catch {
|
|
105
125
|
continue;
|
|
106
126
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
127
|
+
const targetKind = statKind(s);
|
|
128
|
+
const decision = sensitiveResourcePolicy.assessSymlink({
|
|
129
|
+
sourceRoot: root,
|
|
130
|
+
canonicalSourceRoot: rootReal,
|
|
131
|
+
sourcePath: full,
|
|
132
|
+
linkTarget,
|
|
133
|
+
resolvedTargetPath: resolved,
|
|
134
|
+
targetKind,
|
|
135
|
+
allowedTargetKinds: ["file"],
|
|
136
|
+
});
|
|
137
|
+
if (!decision.allowed)
|
|
111
138
|
continue;
|
|
112
139
|
out.push(relative(root, full));
|
|
113
140
|
continue;
|
|
@@ -137,6 +164,7 @@ export async function buildScopeAtlas(repoRoot, opts = {}) {
|
|
|
137
164
|
const files = new Set(await listFiles(repoRoot));
|
|
138
165
|
const atlas = [];
|
|
139
166
|
const candidates = [];
|
|
167
|
+
const missingMandatory = [];
|
|
140
168
|
// Symlink containment at the READ point (not just the fallback walker):
|
|
141
169
|
// `git ls-files` happily lists a TRACKED symlink like `leak.txt ->
|
|
142
170
|
// ~/.ssh/id_rsa`, and stat/readFile would follow it OUT of the tree.
|
|
@@ -149,20 +177,10 @@ export async function buildScopeAtlas(repoRoot, opts = {}) {
|
|
|
149
177
|
catch {
|
|
150
178
|
repoRootReal = repoRoot;
|
|
151
179
|
}
|
|
152
|
-
const escapesTree = (rel) => {
|
|
153
|
-
try {
|
|
154
|
-
if (!lstatSync(join(repoRoot, rel)).isSymbolicLink())
|
|
155
|
-
return false;
|
|
156
|
-
const resolved = realpathSync(join(repoRoot, rel));
|
|
157
|
-
return resolved !== repoRootReal && !resolved.startsWith(repoRootReal + sep);
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
return true; // unresolvable symlink: never read through it
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
180
|
for (const rel of files) {
|
|
164
|
-
|
|
165
|
-
|
|
181
|
+
const symlinkReason = contextSymlinkDenyReason(repoRoot, repoRootReal, rel);
|
|
182
|
+
if (symlinkReason) {
|
|
183
|
+
atlas.push({ path: rel, disposition: "excluded", reason: symlinkReason });
|
|
166
184
|
continue;
|
|
167
185
|
}
|
|
168
186
|
let bytes = 0;
|
|
@@ -174,11 +192,19 @@ export async function buildScopeAtlas(repoRoot, opts = {}) {
|
|
|
174
192
|
continue;
|
|
175
193
|
}
|
|
176
194
|
const mandatory = mandatorySet.has(rel);
|
|
195
|
+
const sensitive = sensitiveResourcePolicy.classifyPath(rel);
|
|
196
|
+
if (sensitive.sensitive) {
|
|
197
|
+
atlas.push({
|
|
198
|
+
path: rel,
|
|
199
|
+
disposition: "sensitive",
|
|
200
|
+
bytes,
|
|
201
|
+
reason: sensitive.reason ?? undefined,
|
|
202
|
+
});
|
|
203
|
+
if (mandatory)
|
|
204
|
+
missingMandatory.push(rel);
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
177
207
|
if (!mandatory) {
|
|
178
|
-
if (matchAny(rel, SENSITIVE)) {
|
|
179
|
-
atlas.push({ path: rel, disposition: "sensitive", bytes });
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
208
|
if (BINARY_EXT.has(extname(rel).toLowerCase())) {
|
|
183
209
|
atlas.push({ path: rel, disposition: "binary", bytes });
|
|
184
210
|
continue;
|
|
@@ -200,7 +226,12 @@ export async function buildScopeAtlas(repoRoot, opts = {}) {
|
|
|
200
226
|
continue;
|
|
201
227
|
}
|
|
202
228
|
if (bytes > maxFileBytes) {
|
|
203
|
-
atlas.push({
|
|
229
|
+
atlas.push({
|
|
230
|
+
path: rel,
|
|
231
|
+
disposition: "oversized",
|
|
232
|
+
bytes,
|
|
233
|
+
reason: `> ${maxFileBytes} bytes`,
|
|
234
|
+
});
|
|
204
235
|
continue;
|
|
205
236
|
}
|
|
206
237
|
}
|
|
@@ -211,7 +242,6 @@ export async function buildScopeAtlas(repoRoot, opts = {}) {
|
|
|
211
242
|
const mandatory = [];
|
|
212
243
|
const included = [];
|
|
213
244
|
const omitted = [];
|
|
214
|
-
const missingMandatory = [];
|
|
215
245
|
for (const c of candidates) {
|
|
216
246
|
if (!c.mandatory && used + estTokens(c.bytes) > tokenLimit) {
|
|
217
247
|
atlas.push({ path: c.rel, disposition: "omitted", bytes: c.bytes, reason: "token_budget" });
|
|
@@ -228,6 +258,18 @@ export async function buildScopeAtlas(repoRoot, opts = {}) {
|
|
|
228
258
|
missingMandatory.push(c.rel);
|
|
229
259
|
continue;
|
|
230
260
|
}
|
|
261
|
+
const contentDecision = sensitiveResourcePolicy.inspectContent(content, "reject");
|
|
262
|
+
if (contentDecision.containsSensitiveContent) {
|
|
263
|
+
atlas.push({
|
|
264
|
+
path: c.rel,
|
|
265
|
+
disposition: "sensitive",
|
|
266
|
+
bytes: c.bytes,
|
|
267
|
+
reason: `content signatures: ${contentDecision.signatures.join(", ")}`,
|
|
268
|
+
});
|
|
269
|
+
if (c.mandatory)
|
|
270
|
+
missingMandatory.push(c.rel);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
231
273
|
const hash = sha256(content);
|
|
232
274
|
used += estTokens(content.length);
|
|
233
275
|
atlas.push({ path: c.rel, disposition: "full", bytes: c.bytes, hash });
|
|
@@ -239,6 +281,46 @@ export async function buildScopeAtlas(repoRoot, opts = {}) {
|
|
|
239
281
|
missingMandatory.push(m);
|
|
240
282
|
}
|
|
241
283
|
atlas.sort((a, b) => a.path.localeCompare(b.path));
|
|
242
|
-
return {
|
|
284
|
+
return {
|
|
285
|
+
atlas,
|
|
286
|
+
mandatory,
|
|
287
|
+
included,
|
|
288
|
+
omitted,
|
|
289
|
+
estimatedTokens: used,
|
|
290
|
+
tokenLimit,
|
|
291
|
+
missingMandatory,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function statKind(stat) {
|
|
295
|
+
if (stat.isFile())
|
|
296
|
+
return "file";
|
|
297
|
+
if (stat.isDirectory())
|
|
298
|
+
return "directory";
|
|
299
|
+
return "other";
|
|
300
|
+
}
|
|
301
|
+
/** Filesystem adapter for the shared pure symlink policy. */
|
|
302
|
+
export function contextSymlinkDenyReason(repoRoot, canonicalRepoRoot, rel) {
|
|
303
|
+
const full = join(repoRoot, rel);
|
|
304
|
+
try {
|
|
305
|
+
if (!lstatSync(full).isSymbolicLink())
|
|
306
|
+
return null;
|
|
307
|
+
const resolved = realpathSync(full);
|
|
308
|
+
const stat = statSync(full);
|
|
309
|
+
const decision = sensitiveResourcePolicy.assessSymlink({
|
|
310
|
+
sourceRoot: repoRoot,
|
|
311
|
+
canonicalSourceRoot: canonicalRepoRoot,
|
|
312
|
+
sourcePath: full,
|
|
313
|
+
linkTarget: readlinkSync(full),
|
|
314
|
+
resolvedTargetPath: resolved,
|
|
315
|
+
targetKind: statKind(stat),
|
|
316
|
+
allowedTargetKinds: ["file"],
|
|
317
|
+
});
|
|
318
|
+
return decision.allowed
|
|
319
|
+
? null
|
|
320
|
+
: (decision.detail ?? "symlink target denied by sensitive-resource policy");
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
return "symlink target cannot be resolved";
|
|
324
|
+
}
|
|
243
325
|
}
|
|
244
326
|
//# sourceMappingURL=atlas.js.map
|
package/dist/atlas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlas.js","sourceRoot":"","sources":["../src/atlas.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"atlas.js","sourceRoot":"","sources":["../src/atlas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextpack.d.ts","sourceRoot":"","sources":["../src/contextpack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contextpack.d.ts","sourceRoot":"","sources":["../src/contextpack.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKnE,OAAO,EAAE,KAAK,YAAY,EAA6C,MAAM,YAAY,CAAC;AAE1F,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,gGAAgG;IAChG,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,eAAO,MAAM,yBAAyB,UAAwC,CAAC;AAE/E;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAgDhG;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,YAAY,EACtB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAyBtB"}
|
package/dist/contextpack.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { lstatSync, realpathSync } from "node:fs";
|
|
1
2
|
import { isAbsolute, resolve, sep } from "node:path";
|
|
2
3
|
import { ContextPack as ContextPackSchema } from "@claudexor/schema";
|
|
3
4
|
import { ContextOverflowError } from "@claudexor/core";
|
|
4
|
-
import { hashJson, readTextSafe } from "@claudexor/util";
|
|
5
|
+
import { hashJson, readTextSafe, sensitiveResourcePolicy } from "@claudexor/util";
|
|
5
6
|
import { loadAgentsInstructions } from "./agents.js";
|
|
6
|
-
import { buildScopeAtlas } from "./atlas.js";
|
|
7
|
+
import { buildScopeAtlas, contextSymlinkDenyReason } from "./atlas.js";
|
|
7
8
|
export const DEFAULT_MANDATORY_CONTEXT = ["README.md", "docs/ARCHITECTURE.md"];
|
|
8
9
|
/**
|
|
9
10
|
* Uniform fail-closed preflight for EXPLICITLY-configured mandatory context.
|
|
@@ -19,6 +20,14 @@ export function assertMandatoryContext(repoRoot, mandatoryFiles) {
|
|
|
19
20
|
return;
|
|
20
21
|
const base = resolve(repoRoot);
|
|
21
22
|
const missing = [];
|
|
23
|
+
const refused = [];
|
|
24
|
+
let canonicalBase = base;
|
|
25
|
+
try {
|
|
26
|
+
canonicalBase = realpathSync(base);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Missing roots are accounted below as missing mandatory paths.
|
|
30
|
+
}
|
|
22
31
|
for (const rel of mandatoryFiles) {
|
|
23
32
|
// Versioned project config must not point mandatory context OUTSIDE the repo
|
|
24
33
|
// (absolute paths or `..` traversal): fail closed rather than read host files
|
|
@@ -27,9 +36,31 @@ export function assertMandatoryContext(repoRoot, mandatoryFiles) {
|
|
|
27
36
|
if (isAbsolute(rel) || (abs !== base && !abs.startsWith(base + sep))) {
|
|
28
37
|
throw new ContextOverflowError(`mandatory context path escapes the repo: ${rel}`);
|
|
29
38
|
}
|
|
30
|
-
|
|
39
|
+
try {
|
|
40
|
+
lstatSync(abs);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
missing.push(rel);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const pathDecision = sensitiveResourcePolicy.classifyPath(rel);
|
|
47
|
+
const symlinkReason = contextSymlinkDenyReason(base, canonicalBase, rel);
|
|
48
|
+
if (pathDecision.sensitive || symlinkReason) {
|
|
49
|
+
refused.push(rel);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const text = readTextSafe(abs);
|
|
53
|
+
const contentDecision = text === null ? null : sensitiveResourcePolicy.inspectContent(text, "reject");
|
|
54
|
+
if (contentDecision?.containsSensitiveContent) {
|
|
55
|
+
refused.push(rel);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (text === null)
|
|
31
59
|
missing.push(rel);
|
|
32
60
|
}
|
|
61
|
+
if (refused.length > 0) {
|
|
62
|
+
throw new ContextOverflowError(`mandatory context is sensitive or escapes its trust boundary: ${refused.join(", ")}`);
|
|
63
|
+
}
|
|
33
64
|
if (missing.length > 0) {
|
|
34
65
|
throw new ContextOverflowError(`mandatory context missing/unreadable: ${missing.join(", ")}`);
|
|
35
66
|
}
|
|
@@ -43,7 +74,9 @@ export async function buildContextPack(repoRoot, contract, opts = {}) {
|
|
|
43
74
|
const usingExplicitMandatory = opts.mandatory !== undefined;
|
|
44
75
|
const mandatory = opts.mandatory ?? DEFAULT_MANDATORY_CONTEXT;
|
|
45
76
|
const atlas = await buildScopeAtlas(repoRoot, { ...opts, mandatory });
|
|
46
|
-
if (usingExplicitMandatory &&
|
|
77
|
+
if (usingExplicitMandatory &&
|
|
78
|
+
(opts.failOnMissingMandatory ?? true) &&
|
|
79
|
+
atlas.missingMandatory.length > 0) {
|
|
47
80
|
throw new ContextOverflowError(`mandatory context missing/unreadable: ${atlas.missingMandatory.join(", ")}`);
|
|
48
81
|
}
|
|
49
82
|
const agents = loadAgentsInstructions(repoRoot);
|
package/dist/contextpack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextpack.js","sourceRoot":"","sources":["../src/contextpack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"contextpack.js","sourceRoot":"","sources":["../src/contextpack.ts"],"names":[],"mappings":"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"}
|
package/dist/evidence.d.ts
CHANGED
|
@@ -15,6 +15,32 @@ export interface EvidencePacket {
|
|
|
15
15
|
runtime?: string;
|
|
16
16
|
}
|
|
17
17
|
export declare const MANDATORY_EVIDENCE_FILES: string[];
|
|
18
|
+
/** One sealed packet contract shared by the cumulative Tier-1 and Tier-2 reviewers. */
|
|
19
|
+
export declare const FROZEN_REVIEW_EVIDENCE_FILES: readonly ["USER_INTENT.md", "FORBIDDEN_FINDINGS.md", "PLAN_ACCEPTED.md", "DECIDED_TRADEOFFS.md", "AUTHORIZATION.json", "FREEZE.json", "DIFF.patch", "DIFF_SUMMARY.md", "PHASE_DELTA.md", "COMMITS.tsv", "TRACEABILITY.md", "TESTS.txt", "TEST_RESULTS.json", "FINGERPRINTS.json", "RUNTIME.md", "FILES_TO_READ_WHOLE.txt", "RELEASE_PREFLIGHT.md"];
|
|
20
|
+
export interface PacketManifestFile {
|
|
21
|
+
path: string;
|
|
22
|
+
sha256: string;
|
|
23
|
+
}
|
|
24
|
+
export interface PacketManifestValidation {
|
|
25
|
+
ok: boolean;
|
|
26
|
+
reasons: string[];
|
|
27
|
+
files: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface SealedEvidencePacketInput {
|
|
30
|
+
evidenceDir: string;
|
|
31
|
+
candidateSha: string;
|
|
32
|
+
candidateTree: string;
|
|
33
|
+
expectedManifestSha256?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface SealedEvidencePacket {
|
|
36
|
+
evidenceDir: string;
|
|
37
|
+
baseSha: string;
|
|
38
|
+
candidateSha: string;
|
|
39
|
+
candidateTree: string;
|
|
40
|
+
diff: string;
|
|
41
|
+
manifestSha256: string;
|
|
42
|
+
files: string[];
|
|
43
|
+
}
|
|
18
44
|
export interface DiffEvidence {
|
|
19
45
|
diffPath: string;
|
|
20
46
|
summaryPath: string;
|
|
@@ -30,4 +56,12 @@ export interface PreflightResult {
|
|
|
30
56
|
}
|
|
31
57
|
/** Fail-closed pre-flight: all mandatory evidence files must exist and be non-empty. */
|
|
32
58
|
export declare function preflightEvidence(dir: string): PreflightResult;
|
|
59
|
+
/** Validate the relative-path SHA-256 manifest against the exact packet file set. */
|
|
60
|
+
export declare function validatePacketManifest(manifestText: string, actualFiles: readonly PacketManifestFile[]): PacketManifestValidation;
|
|
61
|
+
/**
|
|
62
|
+
* Verify an immutable cumulative-review packet before any reviewer sees it.
|
|
63
|
+
* Live git SHA/tree/cleanliness and base..candidate diff checks remain caller
|
|
64
|
+
* responsibilities because this module owns evidence bytes, not repositories.
|
|
65
|
+
*/
|
|
66
|
+
export declare function verifySealedEvidencePacket(input: SealedEvidencePacketInput): SealedEvidencePacket;
|
|
33
67
|
//# sourceMappingURL=evidence.d.ts.map
|
package/dist/evidence.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,wBAAwB,UAQpC,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,4BAA4B,oVAkB/B,CAAC;AAEX,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA8B7E;AAaD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAgBzE;AA8CD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAS9D;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,SAAS,kBAAkB,EAAE,GACzC,wBAAwB,CA+B1B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,yBAAyB,GAAG,oBAAoB,CAyEjG"}
|
package/dist/evidence.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstatSync, readFileSync, readdirSync, realpathSync } from "node:fs";
|
|
3
|
+
import { isAbsolute, join, relative, sep } from "node:path";
|
|
2
4
|
import { parseUnifiedDiff } from "@claudexor/core";
|
|
3
|
-
import { containsSecretLikeToken, readTextSafe, redactSecrets, sha256, writeText } from "@claudexor/util";
|
|
5
|
+
import { containsSecretLikeToken, readTextSafe, redactSecrets, sha256, writeText, } from "@claudexor/util";
|
|
4
6
|
export const MANDATORY_EVIDENCE_FILES = [
|
|
5
7
|
"USER_INTENT.md",
|
|
6
8
|
"FORBIDDEN_FINDINGS.md",
|
|
@@ -10,6 +12,26 @@ export const MANDATORY_EVIDENCE_FILES = [
|
|
|
10
12
|
"TESTS.txt",
|
|
11
13
|
"DECIDED_TRADEOFFS.md",
|
|
12
14
|
];
|
|
15
|
+
/** One sealed packet contract shared by the cumulative Tier-1 and Tier-2 reviewers. */
|
|
16
|
+
export const FROZEN_REVIEW_EVIDENCE_FILES = [
|
|
17
|
+
"USER_INTENT.md",
|
|
18
|
+
"FORBIDDEN_FINDINGS.md",
|
|
19
|
+
"PLAN_ACCEPTED.md",
|
|
20
|
+
"DECIDED_TRADEOFFS.md",
|
|
21
|
+
"AUTHORIZATION.json",
|
|
22
|
+
"FREEZE.json",
|
|
23
|
+
"DIFF.patch",
|
|
24
|
+
"DIFF_SUMMARY.md",
|
|
25
|
+
"PHASE_DELTA.md",
|
|
26
|
+
"COMMITS.tsv",
|
|
27
|
+
"TRACEABILITY.md",
|
|
28
|
+
"TESTS.txt",
|
|
29
|
+
"TEST_RESULTS.json",
|
|
30
|
+
"FINGERPRINTS.json",
|
|
31
|
+
"RUNTIME.md",
|
|
32
|
+
"FILES_TO_READ_WHOLE.txt",
|
|
33
|
+
"RELEASE_PREFLIGHT.md",
|
|
34
|
+
];
|
|
13
35
|
export function writeEvidencePacket(dir, packet) {
|
|
14
36
|
writeText(join(dir, "USER_INTENT.md"), evidenceProse("USER_INTENT.md", packet.userIntent));
|
|
15
37
|
writeText(join(dir, "FORBIDDEN_FINDINGS.md"), evidenceProse("FORBIDDEN_FINDINGS.md", packet.forbiddenFindings, "(none — no approaches explicitly rejected)"));
|
|
@@ -95,4 +117,149 @@ export function preflightEvidence(dir) {
|
|
|
95
117
|
}
|
|
96
118
|
return { ok: missing.length === 0 && empty.length === 0, missing, empty };
|
|
97
119
|
}
|
|
120
|
+
/** Validate the relative-path SHA-256 manifest against the exact packet file set. */
|
|
121
|
+
export function validatePacketManifest(manifestText, actualFiles) {
|
|
122
|
+
const reasons = [];
|
|
123
|
+
const expected = new Map();
|
|
124
|
+
const lines = String(manifestText).split(/\r?\n/).filter(Boolean);
|
|
125
|
+
for (const [index, line] of lines.entries()) {
|
|
126
|
+
const match = /^([0-9a-f]{64}) [ *](.+)$/.exec(line);
|
|
127
|
+
if (!match) {
|
|
128
|
+
reasons.push(`invalid manifest line ${index + 1}`);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const path = match[2].replace(/^\.\//, "");
|
|
132
|
+
if (!path || path === "MANIFEST.sha256" || isAbsolute(path) || path.split("/").includes("..")) {
|
|
133
|
+
reasons.push(`invalid manifest path '${path}'`);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (expected.has(path)) {
|
|
137
|
+
reasons.push(`duplicate manifest path '${path}'`);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
expected.set(path, match[1]);
|
|
141
|
+
}
|
|
142
|
+
const actual = new Map(actualFiles.map((file) => [file.path, file.sha256]));
|
|
143
|
+
for (const [path, digest] of expected) {
|
|
144
|
+
if (!actual.has(path))
|
|
145
|
+
reasons.push(`manifest file missing: ${path}`);
|
|
146
|
+
else if (actual.get(path) !== digest)
|
|
147
|
+
reasons.push(`manifest digest mismatch: ${path}`);
|
|
148
|
+
}
|
|
149
|
+
for (const path of actual.keys()) {
|
|
150
|
+
if (!expected.has(path))
|
|
151
|
+
reasons.push(`unsealed packet file: ${path}`);
|
|
152
|
+
}
|
|
153
|
+
if (expected.size === 0)
|
|
154
|
+
reasons.push("packet manifest is empty");
|
|
155
|
+
return { ok: reasons.length === 0, reasons, files: [...expected.keys()] };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Verify an immutable cumulative-review packet before any reviewer sees it.
|
|
159
|
+
* Live git SHA/tree/cleanliness and base..candidate diff checks remain caller
|
|
160
|
+
* responsibilities because this module owns evidence bytes, not repositories.
|
|
161
|
+
*/
|
|
162
|
+
export function verifySealedEvidencePacket(input) {
|
|
163
|
+
assertLowerHex(input.candidateSha, 40, "candidate SHA");
|
|
164
|
+
assertLowerHex(input.candidateTree, 40, "candidate tree");
|
|
165
|
+
const evidenceDir = realpathSync(input.evidenceDir);
|
|
166
|
+
const manifestPath = join(evidenceDir, "MANIFEST.sha256");
|
|
167
|
+
const manifestStat = lstatSync(manifestPath);
|
|
168
|
+
if (!manifestStat.isFile() || manifestStat.isSymbolicLink()) {
|
|
169
|
+
throw new Error("MANIFEST.sha256 must be a regular file");
|
|
170
|
+
}
|
|
171
|
+
const manifestBytes = readFileSync(manifestPath);
|
|
172
|
+
const manifestSha256 = hashBytes(manifestBytes);
|
|
173
|
+
if (input.expectedManifestSha256 !== undefined) {
|
|
174
|
+
const expected = normalizeSha256(input.expectedManifestSha256);
|
|
175
|
+
if (manifestSha256 !== expected) {
|
|
176
|
+
throw new Error(`packet manifest identity mismatch (expected ${expected}, got ${manifestSha256})`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const actualFiles = collectPacketFiles(evidenceDir);
|
|
180
|
+
const manifest = validatePacketManifest(manifestBytes.toString("utf8"), actualFiles);
|
|
181
|
+
if (!manifest.ok)
|
|
182
|
+
throw new Error(`packet manifest failed: ${manifest.reasons.join("; ")}`);
|
|
183
|
+
for (const file of actualFiles) {
|
|
184
|
+
const text = readFileSync(join(evidenceDir, file.path), "utf8");
|
|
185
|
+
if (containsSecretLikeToken(file.path) || containsSecretLikeToken(text)) {
|
|
186
|
+
throw new Error(`sealed packet contains a secret-like token: ${file.path}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const missing = FROZEN_REVIEW_EVIDENCE_FILES.filter((file) => !manifest.files.includes(file));
|
|
190
|
+
if (missing.length > 0)
|
|
191
|
+
throw new Error(`sealed packet is missing: ${missing.join(", ")}`);
|
|
192
|
+
const empty = FROZEN_REVIEW_EVIDENCE_FILES.filter((file) => readFileSync(join(evidenceDir, file)).length === 0);
|
|
193
|
+
if (empty.length > 0)
|
|
194
|
+
throw new Error(`sealed packet contains empty files: ${empty.join(", ")}`);
|
|
195
|
+
let freeze;
|
|
196
|
+
try {
|
|
197
|
+
freeze = JSON.parse(readFileSync(join(evidenceDir, "FREEZE.json"), "utf8"));
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
throw new Error(`invalid FREEZE.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
201
|
+
}
|
|
202
|
+
if (!freeze || typeof freeze !== "object" || Array.isArray(freeze)) {
|
|
203
|
+
throw new Error("invalid FREEZE.json: expected an object");
|
|
204
|
+
}
|
|
205
|
+
const fields = freeze;
|
|
206
|
+
if (fields["candidateSha"] !== input.candidateSha) {
|
|
207
|
+
throw new Error("FREEZE.json candidate SHA does not match the requested candidate");
|
|
208
|
+
}
|
|
209
|
+
if (fields["candidateTree"] !== input.candidateTree) {
|
|
210
|
+
throw new Error("FREEZE.json candidate tree does not match the requested candidate");
|
|
211
|
+
}
|
|
212
|
+
const baseSha = fields["baseSha"];
|
|
213
|
+
if (typeof baseSha !== "string")
|
|
214
|
+
throw new Error("FREEZE.json must contain baseSha");
|
|
215
|
+
assertLowerHex(baseSha, 40, "FREEZE.json base SHA");
|
|
216
|
+
const preflight = preflightEvidence(evidenceDir);
|
|
217
|
+
if (!preflight.ok) {
|
|
218
|
+
throw new Error(`sealed packet evidence preflight failed (missing: ${preflight.missing.join(", ")}; empty: ${preflight.empty.join(", ")})`);
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
evidenceDir,
|
|
222
|
+
baseSha,
|
|
223
|
+
candidateSha: input.candidateSha,
|
|
224
|
+
candidateTree: input.candidateTree,
|
|
225
|
+
diff: readFileSync(join(evidenceDir, "DIFF.patch"), "utf8"),
|
|
226
|
+
manifestSha256,
|
|
227
|
+
files: manifest.files,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function collectPacketFiles(root, current = root) {
|
|
231
|
+
const files = [];
|
|
232
|
+
for (const entry of readdirSync(current, { withFileTypes: true })) {
|
|
233
|
+
const absolute = join(current, entry.name);
|
|
234
|
+
if (entry.isSymbolicLink()) {
|
|
235
|
+
throw new Error(`sealed packet must not contain symlinks: ${relative(root, absolute)}`);
|
|
236
|
+
}
|
|
237
|
+
if (entry.isDirectory()) {
|
|
238
|
+
files.push(...collectPacketFiles(root, absolute));
|
|
239
|
+
}
|
|
240
|
+
else if (entry.isFile() && entry.name !== "MANIFEST.sha256") {
|
|
241
|
+
files.push({
|
|
242
|
+
path: relative(root, absolute).split(sep).join("/"),
|
|
243
|
+
sha256: hashBytes(readFileSync(absolute)),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
else if (!entry.isFile()) {
|
|
247
|
+
throw new Error(`sealed packet contains a non-regular file: ${relative(root, absolute)}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return files;
|
|
251
|
+
}
|
|
252
|
+
function normalizeSha256(value) {
|
|
253
|
+
const normalized = value.startsWith("sha256:") ? value.slice(7) : value;
|
|
254
|
+
assertLowerHex(normalized, 64, "packet manifest SHA-256");
|
|
255
|
+
return normalized;
|
|
256
|
+
}
|
|
257
|
+
function assertLowerHex(value, length, label) {
|
|
258
|
+
if (!new RegExp(`^[0-9a-f]{${length}}$`).test(value)) {
|
|
259
|
+
throw new Error(`${label} must be exactly ${length} lowercase hex characters`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function hashBytes(bytes) {
|
|
263
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
264
|
+
}
|
|
98
265
|
//# sourceMappingURL=evidence.js.map
|
package/dist/evidence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RawContextPacket, type ImplementationTransport, type WorkspaceEnvelope } from "@claudexor/schema";
|
|
2
|
+
import { type AtlasOptions } from "./atlas.js";
|
|
3
|
+
export declare function rawContextForEnvelope(transport: ImplementationTransport, envelope: WorkspaceEnvelope): Promise<RawContextPacket | null>;
|
|
4
|
+
/** Build the complete, bounded text packet consumed by raw patch producers. */
|
|
5
|
+
export declare function buildRawContextPacket(repoRoot: string, baseCommitSha: string, options?: AtlasOptions): Promise<RawContextPacket>;
|
|
6
|
+
//# sourceMappingURL=raw-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw-context.d.ts","sourceRoot":"","sources":["../src/raw-context.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAG5B,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAOhE,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,uBAAuB,EAClC,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAOlC;AAsBD,+EAA+E;AAC/E,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAuD3B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { runCapture } from "@claudexor/core";
|
|
4
|
+
import { RawContextPacket, } from "@claudexor/schema";
|
|
5
|
+
import { hashJson, sha256 } from "@claudexor/util";
|
|
6
|
+
import { buildScopeAtlas } from "./atlas.js";
|
|
7
|
+
export async function rawContextForEnvelope(transport, envelope) {
|
|
8
|
+
if (transport !== "git_patch_envelope")
|
|
9
|
+
return null;
|
|
10
|
+
if (envelope.worktree_path === envelope.repo_root)
|
|
11
|
+
throw new Error("raw_patch_requires_isolation: raw patch producers require an isolated envelope");
|
|
12
|
+
return buildRawContextPacket(envelope.worktree_path, envelope.base_sha ?? "HEAD");
|
|
13
|
+
}
|
|
14
|
+
async function gitOutput(repo, args) {
|
|
15
|
+
const result = await runCapture("git", ["-C", repo, ...args], { timeoutMs: 30_000 });
|
|
16
|
+
if (result.code !== 0)
|
|
17
|
+
throw new Error(`git ${args[0]} failed: ${result.stderr.trim()}`);
|
|
18
|
+
return result.stdout;
|
|
19
|
+
}
|
|
20
|
+
async function baseEntries(repo, baseCommitSha) {
|
|
21
|
+
const output = await gitOutput(repo, ["ls-tree", "-r", "-z", baseCommitSha]);
|
|
22
|
+
const entries = new Map();
|
|
23
|
+
for (const record of output.split("\0")) {
|
|
24
|
+
if (!record)
|
|
25
|
+
continue;
|
|
26
|
+
const tab = record.indexOf("\t");
|
|
27
|
+
if (tab < 0)
|
|
28
|
+
continue;
|
|
29
|
+
const [mode, type, oid] = record.slice(0, tab).split(" ");
|
|
30
|
+
const path = record.slice(tab + 1);
|
|
31
|
+
if (mode && type === "blob" && oid && path)
|
|
32
|
+
entries.set(path, { mode, oid });
|
|
33
|
+
}
|
|
34
|
+
return entries;
|
|
35
|
+
}
|
|
36
|
+
/** Build the complete, bounded text packet consumed by raw patch producers. */
|
|
37
|
+
export async function buildRawContextPacket(repoRoot, baseCommitSha, options = {}) {
|
|
38
|
+
const [atlas, treeSha, entries] = await Promise.all([
|
|
39
|
+
buildScopeAtlas(repoRoot, options),
|
|
40
|
+
gitOutput(repoRoot, ["rev-parse", `${baseCommitSha}^{tree}`]).then((value) => value.trim()),
|
|
41
|
+
baseEntries(repoRoot, baseCommitSha),
|
|
42
|
+
]);
|
|
43
|
+
const readableFiles = [];
|
|
44
|
+
const omissions = [...atlas.omitted];
|
|
45
|
+
const omittedPaths = new Set(omissions.map((item) => item.path));
|
|
46
|
+
for (const entry of atlas.atlas) {
|
|
47
|
+
if (entry.disposition !== "full") {
|
|
48
|
+
if (!omittedPaths.has(entry.path)) {
|
|
49
|
+
omissions.push({
|
|
50
|
+
path: entry.path,
|
|
51
|
+
reason: entry.reason ?? entry.disposition,
|
|
52
|
+
replacement: "index",
|
|
53
|
+
...(entry.hash ? { hash: entry.hash } : {}),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const gitEntry = entries.get(entry.path);
|
|
59
|
+
if (!gitEntry || (gitEntry.mode !== "100644" && gitEntry.mode !== "100755")) {
|
|
60
|
+
omissions.push({
|
|
61
|
+
path: entry.path,
|
|
62
|
+
reason: gitEntry ? `unsupported git mode ${gitEntry.mode}` : "missing base-tree evidence",
|
|
63
|
+
replacement: "index",
|
|
64
|
+
});
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const content = readFileSync(join(repoRoot, entry.path), "utf8");
|
|
68
|
+
readableFiles.push({
|
|
69
|
+
path: entry.path,
|
|
70
|
+
mode: gitEntry.mode,
|
|
71
|
+
blob_oid: gitEntry.oid,
|
|
72
|
+
content_hash: sha256(content),
|
|
73
|
+
content,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
readableFiles.sort((a, b) => a.path.localeCompare(b.path));
|
|
77
|
+
omissions.sort((a, b) => a.path.localeCompare(b.path));
|
|
78
|
+
const body = {
|
|
79
|
+
schema_version: 1,
|
|
80
|
+
base_commit_sha: baseCommitSha,
|
|
81
|
+
base_tree_sha: treeSha,
|
|
82
|
+
readable_files: readableFiles,
|
|
83
|
+
editable_paths: readableFiles.map((file) => file.path),
|
|
84
|
+
creatable_roots: ["."],
|
|
85
|
+
file_manifest: atlas.atlas,
|
|
86
|
+
omissions,
|
|
87
|
+
evidence_refs: readableFiles.map((file) => `git:${treeSha}:${file.path}:${file.blob_oid}`),
|
|
88
|
+
};
|
|
89
|
+
return RawContextPacket.parse({ ...body, packet_hash: hashJson(body) });
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=raw-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw-context.js","sourceRoot":"","sources":["../src/raw-context.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claudexor/context",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "AGENTS.md-first context: Scope Atlas (no silent truncation), hashable ContextPack, evidence packet.",
|
|
6
6
|
"type": "module",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@claudexor/core": "1.
|
|
20
|
-
"@claudexor/util": "1.
|
|
21
|
-
"@claudexor/schema": "1.
|
|
19
|
+
"@claudexor/core": "2.1.2",
|
|
20
|
+
"@claudexor/util": "2.1.2",
|
|
21
|
+
"@claudexor/schema": "2.1.2"
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|