ferrycat 0.4.0 → 0.5.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/README.md +57 -10
- package/README_zh.md +54 -10
- package/bin/ferrycat.js +1 -0
- package/dist/cli.js +157 -14
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts +137 -1
- package/dist/daemon.js +673 -10
- package/dist/daemon.js.map +1 -1
- package/dist/delivery.d.ts +48 -0
- package/dist/delivery.js +158 -0
- package/dist/delivery.js.map +1 -0
- package/dist/demo.js +10 -7
- package/dist/demo.js.map +1 -1
- package/dist/engine.d.ts +15 -1
- package/dist/engine.js +287 -29
- package/dist/engine.js.map +1 -1
- package/dist/fingerprint.d.ts +60 -4
- package/dist/fingerprint.js +438 -9
- package/dist/fingerprint.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +62 -0
- package/dist/init.js +356 -0
- package/dist/init.js.map +1 -0
- package/dist/schemas.d.ts +64 -0
- package/dist/schemas.js +30 -0
- package/dist/schemas.js.map +1 -1
- package/dist/supervisor.d.ts +10 -0
- package/dist/supervisor.js +34 -26
- package/dist/supervisor.js.map +1 -1
- package/dist/types.d.ts +20 -0
- package/package.json +16 -4
- package/server.json +3 -3
package/dist/fingerprint.d.ts
CHANGED
|
@@ -1,9 +1,34 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { MAX_GIT_PATCH_BYTES } from './schemas.js';
|
|
2
|
+
import type { ArtifactPointer, FileFingerprint, FilePointerInput } from './types.js';
|
|
3
|
+
export { MAX_GIT_PATCH_BYTES };
|
|
2
4
|
export declare class SecurityPolicyError extends Error {
|
|
3
5
|
constructor(message: string);
|
|
4
6
|
}
|
|
5
7
|
export declare function assertSafePointerPath(workspaceRoot: string, rawPath: string): string;
|
|
6
8
|
export declare function computeFullFileSha256(buffer: Buffer): string;
|
|
9
|
+
/**
|
|
10
|
+
* Validates an optional unified git diff patch payload (FC-202):
|
|
11
|
+
* - Non-empty UTF-8 string without binary null bytes
|
|
12
|
+
* - Bounded to MAX_GIT_PATCH_BYTES (512KB)
|
|
13
|
+
* - Scans diff header paths (diff --git / --- / +++) against workspace escape and sensitive file blacklists
|
|
14
|
+
* - Requires at least one valid unified diff header (`NOT_A_UNIFIED_DIFF` if prose/empty)
|
|
15
|
+
* - Requires every declared file block to carry at least one `@@` hunk (`EMPTY_PATCH_HUNKS`)
|
|
16
|
+
* and at least one `+` / `-` changed content line (`EMPTY_PATCH_CONTENT`), so a header-only
|
|
17
|
+
* patch can never stand in for a reviewable diff
|
|
18
|
+
* - When `requiredPointers` is provided, requires `touchedPaths` to cover every pointer path (`PATCH_DOES_NOT_COVER_POINTERS`)
|
|
19
|
+
* - Computes deterministic SHA-256 hex digest of the patch content
|
|
20
|
+
*
|
|
21
|
+
* Known limitation: mode-only changes (`old mode` / `new mode` with no hunk) and text-encoded
|
|
22
|
+
* binary diffs (`GIT binary patch`) carry no `@@` hunk and are therefore rejected. Self-contained
|
|
23
|
+
* review is a text-diff feature; use a normal on-disk contract for those cases.
|
|
24
|
+
*/
|
|
25
|
+
export declare function assertSafeGitPatch(gitPatch: string, requiredPointers?: Array<{
|
|
26
|
+
path: string;
|
|
27
|
+
} | string>): {
|
|
28
|
+
sha256: string;
|
|
29
|
+
byteLength: number;
|
|
30
|
+
touchedPaths: string[];
|
|
31
|
+
};
|
|
7
32
|
export declare function computeFingerprints(workspaceRoot: string, pointers: FilePointerInput[], nowMs?: number): {
|
|
8
33
|
fingerprints: FileFingerprint[];
|
|
9
34
|
recentlyModified: boolean;
|
|
@@ -23,9 +48,40 @@ export declare function verifyAllPointers(workspaceRoot: string, fingerprints: F
|
|
|
23
48
|
firstFailure?: FingerprintVerificationResult;
|
|
24
49
|
dirtyFiles: PointerDriftItem[];
|
|
25
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Verifies pointer files at fulfillment/pre-flight time for mutation tasks
|
|
53
|
+
* (`implementation` | `test_generation`).
|
|
54
|
+
*
|
|
55
|
+
* Unlike read-only review tasks (`code_review` | `architecture_audit`), mutation tasks
|
|
56
|
+
* are expected to modify pointer files on disk after claiming the contract. Therefore:
|
|
57
|
+
* - `SECURITY_REJECTED` (workspace escape / sensitive file / symlink escape) and
|
|
58
|
+
* `FILE_MISSING` (deleted pointer target) remain hard failures (`valid: false`).
|
|
59
|
+
* - `SIZE_MISMATCH` and `CONTENT_CHANGED` are permitted; modified files are recorded in
|
|
60
|
+
* `dirtyFiles` for audit visibility, and every pointer's post-mutation SHA-256 is
|
|
61
|
+
* captured in `verifiedShaMap` so `verified_sha256` records the exact delivered state
|
|
62
|
+
* while `pointers` preserves the pre-mutation baseline.
|
|
63
|
+
*/
|
|
64
|
+
export declare function verifyAndSnapshotMutationPointers(workspaceRoot: string, fingerprints: FileFingerprint[], artifacts?: Array<ArtifactPointer | string>): {
|
|
65
|
+
valid: boolean;
|
|
66
|
+
firstFailure?: FingerprintVerificationResult;
|
|
67
|
+
dirtyFiles: PointerDriftItem[];
|
|
68
|
+
verifiedShaMap: Record<string, string>;
|
|
69
|
+
noOp: boolean;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Verifies a COMPLETED mutation contract's on-disk files against its committed
|
|
73
|
+
* post-mutation `verified_sha256` snapshot (ADR-0006).
|
|
74
|
+
*/
|
|
75
|
+
export declare function verifyCommittedMutationSnapshot(workspaceRoot: string, verifiedShaMap: Record<string, string>): {
|
|
76
|
+
valid: boolean;
|
|
77
|
+
firstFailure?: FingerprintVerificationResult;
|
|
78
|
+
dirtyFiles: PointerDriftItem[];
|
|
79
|
+
};
|
|
26
80
|
export declare function verifySingleRun(workspaceRoot: string, fingerprints: FileFingerprint[]): FingerprintVerificationResult;
|
|
27
81
|
/**
|
|
28
|
-
* Verifies all file fingerprints
|
|
29
|
-
*
|
|
82
|
+
* Verifies all file fingerprints asynchronously (FC-203).
|
|
83
|
+
* If a content/size/existence mismatch is detected on the first read,
|
|
84
|
+
* yields to the event loop for `retryDelayMs` (default 150ms) without blocking
|
|
85
|
+
* timers or I/O, then re-checks once to rule out transient IDE buffer flushes.
|
|
30
86
|
*/
|
|
31
|
-
export declare function verifyFingerprintsWithRetry(workspaceRoot: string, fingerprints: FileFingerprint[], retryDelayMs?: number): FingerprintVerificationResult
|
|
87
|
+
export declare function verifyFingerprintsWithRetry(workspaceRoot: string, fingerprints: FileFingerprint[], retryDelayMs?: number): Promise<FingerprintVerificationResult>;
|
package/dist/fingerprint.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import crypto from 'node:crypto';
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
+
import { MAX_GIT_PATCH_BYTES } from './schemas.js';
|
|
5
|
+
export { MAX_GIT_PATCH_BYTES };
|
|
4
6
|
const SENSITIVE_PATTERNS = [
|
|
5
7
|
/(^|[\\/])\.env(\..+)?$/i,
|
|
6
8
|
/\.(pem|key|p12|pfx)$/i,
|
|
@@ -59,6 +61,267 @@ export function assertSafePointerPath(workspaceRoot, rawPath) {
|
|
|
59
61
|
export function computeFullFileSha256(buffer) {
|
|
60
62
|
return crypto.createHash('sha256').update(buffer).digest('hex');
|
|
61
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Sensitive file patterns enforced on diff headers (`diff --git`, `---`, `+++`).
|
|
66
|
+
* Uses exact sensitive basenames and key/cert extensions rather than broad `secret` / `credentials`
|
|
67
|
+
* substring matches so legitimate source files (e.g. `src/secretManager.ts`, `docs/credentials-guide.md`)
|
|
68
|
+
* are not falsely blocked. Note: this checks diff header target paths, not patch body content.
|
|
69
|
+
*/
|
|
70
|
+
const PATCH_HEADER_SENSITIVE_PATTERNS = [
|
|
71
|
+
/(^|[\\/])\.env(\..+)?$/i,
|
|
72
|
+
/\.(pem|key|p12|pfx)$/i,
|
|
73
|
+
/(^|[\\/])id_(rsa|dsa|ecdsa|ed25519)(\.pub)?$/i,
|
|
74
|
+
/(^|[\\/])(credentials|secrets?)(\.(json|ya?ml|toml|ini|conf|env|txt))?$/i,
|
|
75
|
+
/(^|[\\/])\.(npmrc|pypirc|netrc)$/i,
|
|
76
|
+
/(^|[\\/])\.git[\\/]config$/i,
|
|
77
|
+
];
|
|
78
|
+
function unquoteGitPath(raw) {
|
|
79
|
+
const trimmed = raw.trim();
|
|
80
|
+
if (trimmed.startsWith('"') && trimmed.endsWith('"') && trimmed.length >= 2) {
|
|
81
|
+
const inner = trimmed.slice(1, -1);
|
|
82
|
+
const bytes = [];
|
|
83
|
+
for (let i = 0; i < inner.length; i++) {
|
|
84
|
+
if (inner[i] === '\\' && i + 1 < inner.length) {
|
|
85
|
+
const next = inner[i + 1];
|
|
86
|
+
if (next >= '0' && next <= '7') {
|
|
87
|
+
const octal = inner.slice(i + 1, i + 4).match(/^[0-7]{1,3}/)?.[0] ?? next;
|
|
88
|
+
bytes.push(parseInt(octal, 8));
|
|
89
|
+
i += octal.length;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
i += 1;
|
|
93
|
+
if (next === 'n')
|
|
94
|
+
bytes.push(0x0a);
|
|
95
|
+
else if (next === 'r')
|
|
96
|
+
bytes.push(0x0d);
|
|
97
|
+
else if (next === 't')
|
|
98
|
+
bytes.push(0x09);
|
|
99
|
+
else if (next === '\\')
|
|
100
|
+
bytes.push(0x5c);
|
|
101
|
+
else if (next === '"')
|
|
102
|
+
bytes.push(0x22);
|
|
103
|
+
else
|
|
104
|
+
bytes.push(...Buffer.from(next, 'utf8'));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
bytes.push(...Buffer.from(inner[i], 'utf8'));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return Buffer.from(bytes).toString('utf8');
|
|
111
|
+
}
|
|
112
|
+
return trimmed;
|
|
113
|
+
}
|
|
114
|
+
function parseDiffGitHeaderPaths(rest) {
|
|
115
|
+
const tokens = [];
|
|
116
|
+
const trimmed = rest.trim();
|
|
117
|
+
if (!trimmed)
|
|
118
|
+
return tokens;
|
|
119
|
+
// Handle C-quoted paths: diff --git "a/my file.ts" "b/my file.ts"
|
|
120
|
+
if (trimmed.includes('"')) {
|
|
121
|
+
const re = /"((?:[^"\\]|\\.)*)"|(\S+)/g;
|
|
122
|
+
let m;
|
|
123
|
+
while ((m = re.exec(trimmed)) !== null) {
|
|
124
|
+
tokens.push(unquoteGitPath(m[0]));
|
|
125
|
+
}
|
|
126
|
+
return tokens;
|
|
127
|
+
}
|
|
128
|
+
// Handle unquoted paths with or without spaces: diff --git a/my file.ts b/my file.ts
|
|
129
|
+
const bSplitIdx = trimmed.indexOf(' b/');
|
|
130
|
+
if (bSplitIdx > 0 && trimmed.startsWith('a/')) {
|
|
131
|
+
tokens.push(trimmed.slice(0, bSplitIdx).trim());
|
|
132
|
+
tokens.push(trimmed.slice(bSplitIdx + 1).trim());
|
|
133
|
+
return tokens;
|
|
134
|
+
}
|
|
135
|
+
return trimmed.split(/\s+/);
|
|
136
|
+
}
|
|
137
|
+
function normalizeRelPointerPath(rawPath) {
|
|
138
|
+
return rawPath
|
|
139
|
+
.trim()
|
|
140
|
+
.replace(/\\/g, '/')
|
|
141
|
+
.replace(/^(\.\/)+/, '');
|
|
142
|
+
}
|
|
143
|
+
function assertSafePatchRelPath(rawPath) {
|
|
144
|
+
const cleaned = unquoteGitPath(rawPath).replace(/\\/g, '/');
|
|
145
|
+
if (!cleaned || cleaned === '/dev/null' || cleaned === 'dev/null') {
|
|
146
|
+
return '';
|
|
147
|
+
}
|
|
148
|
+
const stripped = cleaned.replace(/^[ab]\//, '').replace(/^(\.\/)+/, '');
|
|
149
|
+
if (!stripped || stripped === '/dev/null') {
|
|
150
|
+
return '';
|
|
151
|
+
}
|
|
152
|
+
if (stripped.startsWith('/') ||
|
|
153
|
+
/^[A-Za-z]:/.test(stripped) ||
|
|
154
|
+
/(^|\/)\.\.(\/|$)/.test(stripped)) {
|
|
155
|
+
throw new SecurityPolicyError(`Git patch rejected: diff header path "${rawPath}" escapes workspace boundary.`);
|
|
156
|
+
}
|
|
157
|
+
for (const pattern of PATCH_HEADER_SENSITIVE_PATTERNS) {
|
|
158
|
+
if (pattern.test(stripped) || pattern.test(path.basename(stripped))) {
|
|
159
|
+
throw new SecurityPolicyError(`Git patch rejected by security blacklist: diff header "${rawPath}" matches sensitive file pattern.`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return stripped;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Statefully walks a unified diff and groups its lines into per-file blocks.
|
|
166
|
+
*
|
|
167
|
+
* Statefulness is load-bearing: a hunk body line can itself begin with `--- ` / `+++ `
|
|
168
|
+
* (a removed line whose content starts with `--`, or an added line starting with `++`).
|
|
169
|
+
* Only outside an open hunk is a `--- ` / `+++ ` line treated as a file header, so payload
|
|
170
|
+
* lines can no longer be mis-parsed as headers or injected as bogus touched paths.
|
|
171
|
+
*
|
|
172
|
+
* Hunk extents are tracked from the `@@ -l,s +l,s @@` counts rather than guessed, which is
|
|
173
|
+
* what makes the "no hunk / no changed content" gate below reliable.
|
|
174
|
+
*/
|
|
175
|
+
function parseGitPatchBlocks(gitPatch) {
|
|
176
|
+
const blocks = [];
|
|
177
|
+
const touched = new Set();
|
|
178
|
+
let hasDiffHeader = false;
|
|
179
|
+
let current = null;
|
|
180
|
+
let oldRemaining = 0;
|
|
181
|
+
let newRemaining = 0;
|
|
182
|
+
let inHunk = false;
|
|
183
|
+
for (const line of gitPatch.split(/\r?\n/)) {
|
|
184
|
+
if (line.startsWith('diff --git ')) {
|
|
185
|
+
hasDiffHeader = true;
|
|
186
|
+
inHunk = false;
|
|
187
|
+
oldRemaining = 0;
|
|
188
|
+
newRemaining = 0;
|
|
189
|
+
const block = { paths: [], hunks: 0, changedLines: 0 };
|
|
190
|
+
blocks.push(block);
|
|
191
|
+
current = block;
|
|
192
|
+
for (const part of parseDiffGitHeaderPaths(line.slice('diff --git '.length).trim())) {
|
|
193
|
+
const safe = assertSafePatchRelPath(part);
|
|
194
|
+
if (safe) {
|
|
195
|
+
block.paths.push(safe);
|
|
196
|
+
touched.add(safe);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (inHunk) {
|
|
202
|
+
if (line.startsWith('\\'))
|
|
203
|
+
continue; // ""
|
|
204
|
+
if (line.startsWith('+')) {
|
|
205
|
+
if (newRemaining > 0)
|
|
206
|
+
newRemaining -= 1;
|
|
207
|
+
if (current)
|
|
208
|
+
current.changedLines += 1;
|
|
209
|
+
}
|
|
210
|
+
else if (line.startsWith('-')) {
|
|
211
|
+
if (oldRemaining > 0)
|
|
212
|
+
oldRemaining -= 1;
|
|
213
|
+
if (current)
|
|
214
|
+
current.changedLines += 1;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
if (oldRemaining > 0)
|
|
218
|
+
oldRemaining -= 1;
|
|
219
|
+
if (newRemaining > 0)
|
|
220
|
+
newRemaining -= 1;
|
|
221
|
+
}
|
|
222
|
+
if (oldRemaining <= 0 && newRemaining <= 0)
|
|
223
|
+
inHunk = false;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (line.startsWith('@@')) {
|
|
227
|
+
const match = /^@@+ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/.exec(line);
|
|
228
|
+
if (!match) {
|
|
229
|
+
throw new Error(`MALFORMED_HUNK_HEADER: cannot parse hunk extent from "${line.slice(0, 60)}" (FC-202).`);
|
|
230
|
+
}
|
|
231
|
+
hasDiffHeader = true;
|
|
232
|
+
if (current === null) {
|
|
233
|
+
current = { paths: [], hunks: 0, changedLines: 0 };
|
|
234
|
+
blocks.push(current);
|
|
235
|
+
}
|
|
236
|
+
oldRemaining = match[2] === undefined ? 1 : Number(match[2]);
|
|
237
|
+
newRemaining = match[4] === undefined ? 1 : Number(match[4]);
|
|
238
|
+
current.hunks += 1;
|
|
239
|
+
inHunk = oldRemaining > 0 || newRemaining > 0;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (line.startsWith('--- ') || line.startsWith('+++ ')) {
|
|
243
|
+
hasDiffHeader = true;
|
|
244
|
+
// A fresh `--- ` after a completed file block starts a new block (diff without `diff --git`)
|
|
245
|
+
if (current === null || (line.startsWith('--- ') && current.hunks > 0)) {
|
|
246
|
+
current = { paths: [], hunks: 0, changedLines: 0 };
|
|
247
|
+
blocks.push(current);
|
|
248
|
+
}
|
|
249
|
+
const afterPrefix = line.slice(4).trim();
|
|
250
|
+
const rawTarget = afterPrefix.startsWith('"')
|
|
251
|
+
? (afterPrefix.match(/^"((?:[^"\\]|\\.)*)"/)?.[0] ?? afterPrefix.split('\t')[0].trim())
|
|
252
|
+
: afterPrefix.split('\t')[0].trim();
|
|
253
|
+
const safe = assertSafePatchRelPath(rawTarget);
|
|
254
|
+
if (safe) {
|
|
255
|
+
current.paths.push(safe);
|
|
256
|
+
touched.add(safe);
|
|
257
|
+
}
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return { blocks, touched, hasDiffHeader };
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Validates an optional unified git diff patch payload (FC-202):
|
|
265
|
+
* - Non-empty UTF-8 string without binary null bytes
|
|
266
|
+
* - Bounded to MAX_GIT_PATCH_BYTES (512KB)
|
|
267
|
+
* - Scans diff header paths (diff --git / --- / +++) against workspace escape and sensitive file blacklists
|
|
268
|
+
* - Requires at least one valid unified diff header (`NOT_A_UNIFIED_DIFF` if prose/empty)
|
|
269
|
+
* - Requires every declared file block to carry at least one `@@` hunk (`EMPTY_PATCH_HUNKS`)
|
|
270
|
+
* and at least one `+` / `-` changed content line (`EMPTY_PATCH_CONTENT`), so a header-only
|
|
271
|
+
* patch can never stand in for a reviewable diff
|
|
272
|
+
* - When `requiredPointers` is provided, requires `touchedPaths` to cover every pointer path (`PATCH_DOES_NOT_COVER_POINTERS`)
|
|
273
|
+
* - Computes deterministic SHA-256 hex digest of the patch content
|
|
274
|
+
*
|
|
275
|
+
* Known limitation: mode-only changes (`old mode` / `new mode` with no hunk) and text-encoded
|
|
276
|
+
* binary diffs (`GIT binary patch`) carry no `@@` hunk and are therefore rejected. Self-contained
|
|
277
|
+
* review is a text-diff feature; use a normal on-disk contract for those cases.
|
|
278
|
+
*/
|
|
279
|
+
export function assertSafeGitPatch(gitPatch, requiredPointers) {
|
|
280
|
+
if (typeof gitPatch !== 'string' || gitPatch.trim().length === 0) {
|
|
281
|
+
throw new Error('git_patch must be a non-empty string when provided (FC-202).');
|
|
282
|
+
}
|
|
283
|
+
if (gitPatch.includes('\0')) {
|
|
284
|
+
throw new SecurityPolicyError('Git patch rejected: payload contains binary null bytes.');
|
|
285
|
+
}
|
|
286
|
+
const buf = Buffer.from(gitPatch, 'utf8');
|
|
287
|
+
if (buf.byteLength > MAX_GIT_PATCH_BYTES) {
|
|
288
|
+
throw new Error(`git_patch size (${buf.byteLength} bytes) exceeds maximum allowed limit of ${MAX_GIT_PATCH_BYTES} bytes (512KB) (FC-202).`);
|
|
289
|
+
}
|
|
290
|
+
const { blocks, touched, hasDiffHeader } = parseGitPatchBlocks(gitPatch);
|
|
291
|
+
if (!hasDiffHeader || touched.size === 0) {
|
|
292
|
+
throw new Error('NOT_A_UNIFIED_DIFF: git_patch must be a valid unified diff containing at least one file diff header (diff --git / --- / +++) (FC-202).');
|
|
293
|
+
}
|
|
294
|
+
// R1: a header-only patch names files without carrying any diff content. Reject it so
|
|
295
|
+
// `SELF_CONTAINED` can never be unlocked by a patch the reviewer cannot actually read.
|
|
296
|
+
const headerOnly = Array.from(new Set(blocks.filter((b) => b.paths.length > 0 && b.hunks === 0).flatMap((b) => b.paths)));
|
|
297
|
+
if (headerOnly.length > 0) {
|
|
298
|
+
throw new Error(`EMPTY_PATCH_HUNKS: git_patch file block(s) [${headerOnly.join(', ')}] declare a diff header but carry no "@@ ... @@" hunk; a header-only patch is not reviewable (FC-202).`);
|
|
299
|
+
}
|
|
300
|
+
const contentless = Array.from(new Set(blocks
|
|
301
|
+
.filter((b) => b.paths.length > 0 && b.hunks > 0 && b.changedLines === 0)
|
|
302
|
+
.flatMap((b) => b.paths)));
|
|
303
|
+
if (contentless.length > 0) {
|
|
304
|
+
throw new Error(`EMPTY_PATCH_CONTENT: git_patch file block(s) [${contentless.join(', ')}] contain hunk headers but no "+" / "-" changed content line; a context-only hunk carries no reviewable change (FC-202).`);
|
|
305
|
+
}
|
|
306
|
+
if (requiredPointers && requiredPointers.length > 0) {
|
|
307
|
+
const missingPointers = [];
|
|
308
|
+
for (const ptr of requiredPointers) {
|
|
309
|
+
const rawPtr = typeof ptr === 'string' ? ptr : ptr.path;
|
|
310
|
+
const normPtr = normalizeRelPointerPath(rawPtr);
|
|
311
|
+
if (normPtr && !touched.has(normPtr)) {
|
|
312
|
+
missingPointers.push(normPtr);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (missingPointers.length > 0) {
|
|
316
|
+
throw new Error(`PATCH_DOES_NOT_COVER_POINTERS: git_patch touched [${Array.from(touched).join(', ')}] does not cover pointer file(s) [${missingPointers.join(', ')}] (FC-202).`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
sha256: computeFullFileSha256(buf),
|
|
321
|
+
byteLength: buf.byteLength,
|
|
322
|
+
touchedPaths: Array.from(touched),
|
|
323
|
+
};
|
|
324
|
+
}
|
|
62
325
|
function extractFirstAndLastLine(content, maxLen = 48) {
|
|
63
326
|
const lines = content.split(/\r?\n/);
|
|
64
327
|
const nonEmpty = lines.filter((l) => l.trim().length > 0);
|
|
@@ -139,6 +402,172 @@ export function verifyAllPointers(workspaceRoot, fingerprints) {
|
|
|
139
402
|
}
|
|
140
403
|
return { valid: true, dirtyFiles: [] };
|
|
141
404
|
}
|
|
405
|
+
/**
|
|
406
|
+
* Verifies pointer files at fulfillment/pre-flight time for mutation tasks
|
|
407
|
+
* (`implementation` | `test_generation`).
|
|
408
|
+
*
|
|
409
|
+
* Unlike read-only review tasks (`code_review` | `architecture_audit`), mutation tasks
|
|
410
|
+
* are expected to modify pointer files on disk after claiming the contract. Therefore:
|
|
411
|
+
* - `SECURITY_REJECTED` (workspace escape / sensitive file / symlink escape) and
|
|
412
|
+
* `FILE_MISSING` (deleted pointer target) remain hard failures (`valid: false`).
|
|
413
|
+
* - `SIZE_MISMATCH` and `CONTENT_CHANGED` are permitted; modified files are recorded in
|
|
414
|
+
* `dirtyFiles` for audit visibility, and every pointer's post-mutation SHA-256 is
|
|
415
|
+
* captured in `verifiedShaMap` so `verified_sha256` records the exact delivered state
|
|
416
|
+
* while `pointers` preserves the pre-mutation baseline.
|
|
417
|
+
*/
|
|
418
|
+
export function verifyAndSnapshotMutationPointers(workspaceRoot, fingerprints, artifacts) {
|
|
419
|
+
const dirtyFiles = [];
|
|
420
|
+
const blockingFailures = [];
|
|
421
|
+
const verifiedShaMap = {};
|
|
422
|
+
let addedArtifactCount = 0;
|
|
423
|
+
for (const fp of fingerprints) {
|
|
424
|
+
let absPath;
|
|
425
|
+
try {
|
|
426
|
+
absPath = assertSafePointerPath(workspaceRoot, fp.path);
|
|
427
|
+
}
|
|
428
|
+
catch (err) {
|
|
429
|
+
const item = {
|
|
430
|
+
path: fp.path,
|
|
431
|
+
reason: 'SECURITY_REJECTED',
|
|
432
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
433
|
+
};
|
|
434
|
+
dirtyFiles.push(item);
|
|
435
|
+
blockingFailures.push(item);
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
if (!fs.existsSync(absPath) || !fs.statSync(absPath).isFile()) {
|
|
439
|
+
const item = {
|
|
440
|
+
path: fp.path,
|
|
441
|
+
reason: 'FILE_MISSING',
|
|
442
|
+
detail: `File missing on worker disk: "${fp.path}"`,
|
|
443
|
+
};
|
|
444
|
+
dirtyFiles.push(item);
|
|
445
|
+
blockingFailures.push(item);
|
|
446
|
+
continue;
|
|
447
|
+
}
|
|
448
|
+
const stat = fs.statSync(absPath);
|
|
449
|
+
const buffer = fs.readFileSync(absPath);
|
|
450
|
+
const currentSha256 = computeFullFileSha256(buffer);
|
|
451
|
+
verifiedShaMap[fp.path] = currentSha256;
|
|
452
|
+
if (stat.size !== fp.size) {
|
|
453
|
+
dirtyFiles.push({
|
|
454
|
+
path: fp.path,
|
|
455
|
+
reason: 'SIZE_MISMATCH',
|
|
456
|
+
detail: `File size changed for "${fp.path}": baseline ${fp.size} bytes -> post-mutation ${stat.size} bytes`,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
else if (currentSha256 !== fp.sha256) {
|
|
460
|
+
dirtyFiles.push({
|
|
461
|
+
path: fp.path,
|
|
462
|
+
reason: 'CONTENT_CHANGED',
|
|
463
|
+
detail: `File content SHA-256 updated for "${fp.path}": baseline ${fp.sha256.slice(0, 16)}... -> post-mutation ${currentSha256.slice(0, 16)}...`,
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
if (artifacts && artifacts.length > 0) {
|
|
468
|
+
for (const entry of artifacts) {
|
|
469
|
+
const rawArtifact = typeof entry === 'string' ? entry : entry.path;
|
|
470
|
+
if (!rawArtifact || verifiedShaMap[rawArtifact])
|
|
471
|
+
continue;
|
|
472
|
+
let absArtifact;
|
|
473
|
+
try {
|
|
474
|
+
absArtifact = assertSafePointerPath(workspaceRoot, rawArtifact);
|
|
475
|
+
}
|
|
476
|
+
catch (err) {
|
|
477
|
+
const item = {
|
|
478
|
+
path: rawArtifact,
|
|
479
|
+
reason: 'SECURITY_REJECTED',
|
|
480
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
481
|
+
};
|
|
482
|
+
dirtyFiles.push(item);
|
|
483
|
+
blockingFailures.push(item);
|
|
484
|
+
continue;
|
|
485
|
+
}
|
|
486
|
+
if (!fs.existsSync(absArtifact) || !fs.statSync(absArtifact).isFile()) {
|
|
487
|
+
const item = {
|
|
488
|
+
path: rawArtifact,
|
|
489
|
+
reason: 'FILE_MISSING',
|
|
490
|
+
detail: `Declared artifact file missing on worker disk: "${rawArtifact}"`,
|
|
491
|
+
};
|
|
492
|
+
dirtyFiles.push(item);
|
|
493
|
+
blockingFailures.push(item);
|
|
494
|
+
continue;
|
|
495
|
+
}
|
|
496
|
+
const buffer = fs.readFileSync(absArtifact);
|
|
497
|
+
verifiedShaMap[rawArtifact] = computeFullFileSha256(buffer);
|
|
498
|
+
addedArtifactCount++;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
if (blockingFailures.length > 0) {
|
|
502
|
+
return {
|
|
503
|
+
valid: false,
|
|
504
|
+
firstFailure: {
|
|
505
|
+
valid: false,
|
|
506
|
+
reason: blockingFailures[0].reason,
|
|
507
|
+
detail: blockingFailures[0].detail,
|
|
508
|
+
},
|
|
509
|
+
dirtyFiles,
|
|
510
|
+
verifiedShaMap: {},
|
|
511
|
+
noOp: false,
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
return {
|
|
515
|
+
valid: true,
|
|
516
|
+
dirtyFiles,
|
|
517
|
+
verifiedShaMap,
|
|
518
|
+
noOp: dirtyFiles.length === 0 && addedArtifactCount === 0,
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Verifies a COMPLETED mutation contract's on-disk files against its committed
|
|
523
|
+
* post-mutation `verified_sha256` snapshot (ADR-0006).
|
|
524
|
+
*/
|
|
525
|
+
export function verifyCommittedMutationSnapshot(workspaceRoot, verifiedShaMap) {
|
|
526
|
+
const dirtyFiles = [];
|
|
527
|
+
for (const [rawPath, committedSha] of Object.entries(verifiedShaMap)) {
|
|
528
|
+
let absPath;
|
|
529
|
+
try {
|
|
530
|
+
absPath = assertSafePointerPath(workspaceRoot, rawPath);
|
|
531
|
+
}
|
|
532
|
+
catch (err) {
|
|
533
|
+
dirtyFiles.push({
|
|
534
|
+
path: rawPath,
|
|
535
|
+
reason: 'SECURITY_REJECTED',
|
|
536
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
537
|
+
});
|
|
538
|
+
continue;
|
|
539
|
+
}
|
|
540
|
+
if (!fs.existsSync(absPath) || !fs.statSync(absPath).isFile()) {
|
|
541
|
+
dirtyFiles.push({
|
|
542
|
+
path: rawPath,
|
|
543
|
+
reason: 'FILE_MISSING',
|
|
544
|
+
detail: `Delivered file missing on disk: "${rawPath}"`,
|
|
545
|
+
});
|
|
546
|
+
continue;
|
|
547
|
+
}
|
|
548
|
+
const buffer = fs.readFileSync(absPath);
|
|
549
|
+
const currentSha256 = computeFullFileSha256(buffer);
|
|
550
|
+
if (currentSha256 !== committedSha) {
|
|
551
|
+
dirtyFiles.push({
|
|
552
|
+
path: rawPath,
|
|
553
|
+
reason: 'CONTENT_CHANGED',
|
|
554
|
+
detail: `Post-completion SHA-256 mismatch for "${rawPath}": expected committed ${committedSha.slice(0, 16)}..., got ${currentSha256.slice(0, 16)}...`,
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
if (dirtyFiles.length > 0) {
|
|
559
|
+
return {
|
|
560
|
+
valid: false,
|
|
561
|
+
firstFailure: {
|
|
562
|
+
valid: false,
|
|
563
|
+
reason: dirtyFiles[0].reason,
|
|
564
|
+
detail: dirtyFiles[0].detail,
|
|
565
|
+
},
|
|
566
|
+
dirtyFiles,
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
return { valid: true, dirtyFiles: [] };
|
|
570
|
+
}
|
|
142
571
|
export function verifySingleRun(workspaceRoot, fingerprints) {
|
|
143
572
|
for (const fp of fingerprints) {
|
|
144
573
|
let absPath;
|
|
@@ -183,23 +612,23 @@ export function verifySingleRun(workspaceRoot, fingerprints) {
|
|
|
183
612
|
}
|
|
184
613
|
return { valid: true };
|
|
185
614
|
}
|
|
186
|
-
function
|
|
615
|
+
function sleepAsync(ms) {
|
|
187
616
|
if (ms <= 0)
|
|
188
|
-
return;
|
|
189
|
-
|
|
190
|
-
const int32 = new Int32Array(sab);
|
|
191
|
-
Atomics.wait(int32, 0, 0, ms);
|
|
617
|
+
return Promise.resolve();
|
|
618
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
192
619
|
}
|
|
193
620
|
/**
|
|
194
|
-
* Verifies all file fingerprints
|
|
195
|
-
*
|
|
621
|
+
* Verifies all file fingerprints asynchronously (FC-203).
|
|
622
|
+
* If a content/size/existence mismatch is detected on the first read,
|
|
623
|
+
* yields to the event loop for `retryDelayMs` (default 150ms) without blocking
|
|
624
|
+
* timers or I/O, then re-checks once to rule out transient IDE buffer flushes.
|
|
196
625
|
*/
|
|
197
|
-
export function verifyFingerprintsWithRetry(workspaceRoot, fingerprints, retryDelayMs = 150) {
|
|
626
|
+
export async function verifyFingerprintsWithRetry(workspaceRoot, fingerprints, retryDelayMs = 150) {
|
|
198
627
|
const firstCheck = verifySingleRun(workspaceRoot, fingerprints);
|
|
199
628
|
if (firstCheck.valid || firstCheck.reason === 'SECURITY_REJECTED') {
|
|
200
629
|
return firstCheck;
|
|
201
630
|
}
|
|
202
|
-
|
|
631
|
+
await sleepAsync(retryDelayMs);
|
|
203
632
|
return verifySingleRun(workspaceRoot, fingerprints);
|
|
204
633
|
}
|
|
205
634
|
//# sourceMappingURL=fingerprint.js.map
|
package/dist/fingerprint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ function loadPackageVersion() {
|
|
|
9
9
|
try {
|
|
10
10
|
const pkgPath = fileURLToPath(new URL('../package.json', import.meta.url));
|
|
11
11
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
12
|
-
return pkg.version ?? '0.
|
|
12
|
+
return pkg.version ?? '0.5.0';
|
|
13
13
|
}
|
|
14
14
|
catch {
|
|
15
15
|
return '0.3.2';
|
|
@@ -47,6 +47,7 @@ Exposed MCP Tools (8):
|
|
|
47
47
|
|
|
48
48
|
CLI Subcommands (same binary: \`npx ferrycat <command>\`):
|
|
49
49
|
demo Zero-config sandbox walkthrough of the full lifecycle (no MCP setup)
|
|
50
|
+
init Detect installed MCP hosts and add FerryCat to their configs
|
|
50
51
|
dispatch | poll | verify | fulfill | release | extend | fail | inspect | worker | daemon
|
|
51
52
|
Run \`ferrycat-cli --help\` (after a global install) for the full CLI reference.`);
|
|
52
53
|
process.exit(0);
|
|
@@ -114,7 +115,7 @@ Retrieves and claims next available contract work for the current agent, transit
|
|
|
114
115
|
- When work is claimed: { ok: true, has_task: true, status: 'CLAIMED', contract: { contract_id, requester_agent, target_agent, task_type, title, context_summary, workspace_root, pointers, contract_schema, claimed_at, exec_ttl_sec } }.
|
|
115
116
|
- When queue is empty: { ok: true, has_task: false, message: 'No pending contracts for agent "<agent_id>"' }.`, PollNextTaskShape, async (args) => {
|
|
116
117
|
try {
|
|
117
|
-
const result = engine.pollNextTask(args);
|
|
118
|
+
const result = await engine.pollNextTask(args);
|
|
118
119
|
return {
|
|
119
120
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
120
121
|
};
|