orcareplay 0.1.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/dist/api.d.ts +127 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +159 -0
- package/dist/api.js.map +1 -0
- package/dist/args.d.ts +24 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +124 -0
- package/dist/args.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/compare.d.ts +27 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +182 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/doctor.d.ts +24 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +358 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/gc.d.ts +24 -0
- package/dist/commands/gc.d.ts.map +1 -0
- package/dist/commands/gc.js +326 -0
- package/dist/commands/gc.js.map +1 -0
- package/dist/commands/inspect.d.ts +24 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +262 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/record.d.ts +17 -0
- package/dist/commands/record.d.ts.map +1 -0
- package/dist/commands/record.js +497 -0
- package/dist/commands/record.js.map +1 -0
- package/dist/commands/replay.d.ts +43 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +800 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/scrub.d.ts +34 -0
- package/dist/commands/scrub.d.ts.map +1 -0
- package/dist/commands/scrub.js +452 -0
- package/dist/commands/scrub.js.map +1 -0
- package/dist/commands/setup.d.ts +23 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +177 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/config.d.ts +80 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +117 -0
- package/dist/config.js.map +1 -0
- package/dist/exchange-events.d.ts +72 -0
- package/dist/exchange-events.d.ts.map +1 -0
- package/dist/exchange-events.js +170 -0
- package/dist/exchange-events.js.map +1 -0
- package/dist/flags.d.ts +10 -0
- package/dist/flags.d.ts.map +1 -0
- package/dist/flags.js +83 -0
- package/dist/flags.js.map +1 -0
- package/dist/fs-events.d.ts +19 -0
- package/dist/fs-events.d.ts.map +1 -0
- package/dist/fs-events.js +53 -0
- package/dist/fs-events.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +282 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp-server.d.ts +44 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +245 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp.d.ts +111 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +221 -0
- package/dist/mcp.js.map +1 -0
- package/dist/out.d.ts +69 -0
- package/dist/out.d.ts.map +1 -0
- package/dist/out.js +138 -0
- package/dist/out.js.map +1 -0
- package/dist/rasterize.d.ts +62 -0
- package/dist/rasterize.d.ts.map +1 -0
- package/dist/rasterize.js +154 -0
- package/dist/rasterize.js.map +1 -0
- package/dist/serial.d.ts +19 -0
- package/dist/serial.d.ts.map +1 -0
- package/dist/serial.js +34 -0
- package/dist/serial.js.map +1 -0
- package/dist/share-card.d.ts +73 -0
- package/dist/share-card.d.ts.map +1 -0
- package/dist/share-card.js +413 -0
- package/dist/share-card.js.map +1 -0
- package/dist/snapshot.d.ts +30 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +43 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/tls-capture.d.ts +57 -0
- package/dist/tls-capture.d.ts.map +1 -0
- package/dist/tls-capture.js +198 -0
- package/dist/tls-capture.js.map +1 -0
- package/dist/upstream.d.ts +20 -0
- package/dist/upstream.d.ts.map +1 -0
- package/dist/upstream.js +31 -0
- package/dist/upstream.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ParsedArgs } from '../args.js';
|
|
2
|
+
import type { Output } from '../out.js';
|
|
3
|
+
export interface ScrubResult {
|
|
4
|
+
runDir: string;
|
|
5
|
+
filesChanged: number;
|
|
6
|
+
removals: number;
|
|
7
|
+
/** Lines put back unchanged because scrubbing them would have broken the trace. */
|
|
8
|
+
reverted: number;
|
|
9
|
+
/** Objects in the shadow filesystem store that still hold matched material. */
|
|
10
|
+
fsStoreMatches: number;
|
|
11
|
+
/** True when `--drop-fs` deleted the shadow store rather than leaving it behind. */
|
|
12
|
+
fsStoreDropped: boolean;
|
|
13
|
+
/** True when `--dry-run` reported the plan and wrote nothing. */
|
|
14
|
+
dryRun: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* `orca scrub` — remove material from a trace after the fact.
|
|
18
|
+
*
|
|
19
|
+
* Write-path redaction (§7) is the first line of defence; this is the second, for the thing it
|
|
20
|
+
* missed and for the internal hostname that is only sensitive in your organisation. It rewrites
|
|
21
|
+
* `events.jsonl`, the manifest and every blob in place, then refreshes the integrity digest — a
|
|
22
|
+
* scrubbed trace that fails its own integrity check would be unusable, which would make people
|
|
23
|
+
* skip scrubbing.
|
|
24
|
+
*
|
|
25
|
+
* Nothing is written until every file has been scrubbed and checked, and each one then lands by
|
|
26
|
+
* rename (see {@link commit}). `--dry-run` stops before that, and is the only way to find out what
|
|
27
|
+
* the standard detectors will take out alongside your literal without having already lost it.
|
|
28
|
+
*
|
|
29
|
+
* Everything it cannot remove it says out loud. A scrubber that under-reports is merely
|
|
30
|
+
* disappointing; one that over-reports hands you a false all-clear, which is worse than no
|
|
31
|
+
* scrubber at all.
|
|
32
|
+
*/
|
|
33
|
+
export declare function scrubCommand(args: ParsedArgs, out: Output, cwd?: string): Promise<ScrubResult>;
|
|
34
|
+
//# sourceMappingURL=scrub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrub.d.ts","sourceRoot":"","sources":["../../src/commands/scrub.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAOxC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,cAAc,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAC;CACjB;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,MAAM,EACX,GAAG,SAAgB,GAClB,OAAO,CAAC,WAAW,CAAC,CA8KtB"}
|
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
import { createHash, randomBytes } from 'node:crypto';
|
|
2
|
+
import { readFile, readdir, rename, rm, stat, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join, relative } from 'node:path';
|
|
4
|
+
import { Redactor, resolveRunSelector } from '@orcareplay/core';
|
|
5
|
+
import { runGit, runGitRaw } from '@orcareplay/fs-capture';
|
|
6
|
+
import { validateEvent, validateManifest } from '@orcareplay/schema';
|
|
7
|
+
const FILE_MODE = 0o600;
|
|
8
|
+
/** Bounds how much object content one `git cat-file --batch` holds in memory at a time. */
|
|
9
|
+
const BATCH_BYTES = 8 * 1024 * 1024;
|
|
10
|
+
/**
|
|
11
|
+
* `orca scrub` — remove material from a trace after the fact.
|
|
12
|
+
*
|
|
13
|
+
* Write-path redaction (§7) is the first line of defence; this is the second, for the thing it
|
|
14
|
+
* missed and for the internal hostname that is only sensitive in your organisation. It rewrites
|
|
15
|
+
* `events.jsonl`, the manifest and every blob in place, then refreshes the integrity digest — a
|
|
16
|
+
* scrubbed trace that fails its own integrity check would be unusable, which would make people
|
|
17
|
+
* skip scrubbing.
|
|
18
|
+
*
|
|
19
|
+
* Nothing is written until every file has been scrubbed and checked, and each one then lands by
|
|
20
|
+
* rename (see {@link commit}). `--dry-run` stops before that, and is the only way to find out what
|
|
21
|
+
* the standard detectors will take out alongside your literal without having already lost it.
|
|
22
|
+
*
|
|
23
|
+
* Everything it cannot remove it says out loud. A scrubber that under-reports is merely
|
|
24
|
+
* disappointing; one that over-reports hands you a false all-clear, which is worse than no
|
|
25
|
+
* scrubber at all.
|
|
26
|
+
*/
|
|
27
|
+
export async function scrubCommand(args, out, cwd = process.cwd()) {
|
|
28
|
+
const runDir = (await resolveRunSelector(cwd, args.positionals[0] ?? 'last')).dir;
|
|
29
|
+
const literals = collectLiterals(args);
|
|
30
|
+
const redactor = new Redactor();
|
|
31
|
+
// `orca gc` has had this since it shipped and scrub needed it more: gc removes runs you can
|
|
32
|
+
// re-record, scrub removes material you cannot get back, and it fires the standard detectors as
|
|
33
|
+
// well as your literal — so what it takes out is not fully knowable before it runs.
|
|
34
|
+
const dryRun = args.bool('dry-run');
|
|
35
|
+
let removals = 0;
|
|
36
|
+
let filesChanged = 0;
|
|
37
|
+
let reverted = 0;
|
|
38
|
+
/** Literal matches first, then the standard detectors over whatever is left. */
|
|
39
|
+
const scrubText = (text) => {
|
|
40
|
+
let next = text;
|
|
41
|
+
let count = 0;
|
|
42
|
+
for (const literal of literals) {
|
|
43
|
+
const parts = next.split(literal);
|
|
44
|
+
if (parts.length > 1) {
|
|
45
|
+
count += parts.length - 1;
|
|
46
|
+
// Same placeholder shape the write path uses, so a reader cannot tell which pass caught it.
|
|
47
|
+
next = parts.join(placeholderFor(literal));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const { value, hits } = redactor.redactString(next, 'scrub');
|
|
51
|
+
return { value, removals: count + hits.length };
|
|
52
|
+
};
|
|
53
|
+
// The manifest names the operator: `cwd` and `argv` carry the checkout path, and
|
|
54
|
+
// `env_allowlisted` carries HOME, PATH and USER verbatim. It goes through the same detectors as
|
|
55
|
+
// everything else — and it goes first, because a scrub that would leave it invalid has to stop
|
|
56
|
+
// before the trace is half-rewritten rather than after.
|
|
57
|
+
const manifestPath = join(runDir, 'manifest.json');
|
|
58
|
+
const manifestBefore = await readFile(manifestPath, 'utf8');
|
|
59
|
+
const scrubbedManifest = scrubText(manifestBefore);
|
|
60
|
+
const manifest = parseScrubbedManifest(scrubbedManifest.value, runDir);
|
|
61
|
+
removals += scrubbedManifest.removals;
|
|
62
|
+
// events.jsonl, line by line, so a truncated final line stays tolerable.
|
|
63
|
+
const eventsPath = join(runDir, 'events.jsonl');
|
|
64
|
+
const original = await readFile(eventsPath, 'utf8');
|
|
65
|
+
const scrubbedLines = [];
|
|
66
|
+
let lineNumber = 0;
|
|
67
|
+
for (const line of original.split('\n')) {
|
|
68
|
+
lineNumber += 1;
|
|
69
|
+
if (line.trim() === '')
|
|
70
|
+
continue;
|
|
71
|
+
const scrubbed = scrubText(line);
|
|
72
|
+
if (scrubbed.value === line) {
|
|
73
|
+
scrubbedLines.push(line);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// Never write a line that would no longer parse or validate: a scrub that corrupts the trace
|
|
77
|
+
// is worse than one that leaves something behind, because it destroys the evidence too. But
|
|
78
|
+
// putting the original back means the match is still on disk, so it is reported rather than
|
|
79
|
+
// swallowed — and it is not counted, or `removed=N` would name removals that never happened.
|
|
80
|
+
const reason = rejectionReason(scrubbed.value);
|
|
81
|
+
if (reason !== undefined) {
|
|
82
|
+
reverted += 1;
|
|
83
|
+
const seq = seqOf(line);
|
|
84
|
+
out.warn('scrub_reverted', seq === undefined ? { line: lineNumber, reason } : { seq, reason });
|
|
85
|
+
scrubbedLines.push(line);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
removals += scrubbed.removals;
|
|
89
|
+
scrubbedLines.push(scrubbed.value);
|
|
90
|
+
}
|
|
91
|
+
if (reverted > 0) {
|
|
92
|
+
out.plain(` ${reverted} event(s) were put back unchanged — what they matched is STILL here`);
|
|
93
|
+
out.plain(' next: widen the match, or delete the run outright');
|
|
94
|
+
}
|
|
95
|
+
const pending = [];
|
|
96
|
+
/** The redaction ledger, which is appended to rather than scrubbed — reported, never counted. */
|
|
97
|
+
let ledger;
|
|
98
|
+
const nextEvents = `${scrubbedLines.join('\n')}\n`;
|
|
99
|
+
const eventsRewritten = nextEvents !== original;
|
|
100
|
+
if (eventsRewritten) {
|
|
101
|
+
pending.push({ path: eventsPath, contents: nextEvents });
|
|
102
|
+
filesChanged += 1;
|
|
103
|
+
}
|
|
104
|
+
// Blobs hold most of the volume, so most of what needs removing lives there.
|
|
105
|
+
const blobsRoot = join(runDir, 'blobs');
|
|
106
|
+
for (const path of await walk(blobsRoot)) {
|
|
107
|
+
const buf = await readFile(path);
|
|
108
|
+
// Skip binary. A NUL byte, or a UTF-8 round trip that loses bytes, means rewriting this file
|
|
109
|
+
// as text would corrupt it — and a secret is not going to be hiding in a PNG anyway.
|
|
110
|
+
const text = asText(buf);
|
|
111
|
+
if (text === undefined)
|
|
112
|
+
continue;
|
|
113
|
+
const scrubbed = scrubText(text);
|
|
114
|
+
if (scrubbed.value !== text) {
|
|
115
|
+
pending.push({ path, contents: scrubbed.value });
|
|
116
|
+
removals += scrubbed.removals;
|
|
117
|
+
filesChanged += 1;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const fs = await handleShadowStore(runDir, args.bool('drop-fs'), dryRun, (text) => {
|
|
121
|
+
return scrubText(text).value !== text;
|
|
122
|
+
});
|
|
123
|
+
if (eventsRewritten) {
|
|
124
|
+
// Refresh the digest so `verifyIntegrity` still passes over the scrubbed file. Only when the
|
|
125
|
+
// file was actually rewritten: recomputing it unconditionally would quietly repair a digest
|
|
126
|
+
// that never matched, which is exactly the tampering the digest exists to expose.
|
|
127
|
+
//
|
|
128
|
+
// Hashed from the bytes about to be written rather than re-read from disk, because under
|
|
129
|
+
// `--dry-run` nothing is written — and a digest that depends on the write having happened is
|
|
130
|
+
// a digest that silently means two different things.
|
|
131
|
+
const integrity = manifest.integrity;
|
|
132
|
+
if (isRecord(integrity)) {
|
|
133
|
+
manifest.integrity = {
|
|
134
|
+
...integrity,
|
|
135
|
+
events_sha256: createHash('sha256').update(nextEvents, 'utf8').digest('hex'),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const manifestAfter = `${JSON.stringify(manifest, null, 2)}\n`;
|
|
140
|
+
if (manifestAfter !== manifestBefore) {
|
|
141
|
+
assertManifestSurvived(manifest, runDir);
|
|
142
|
+
pending.push({ path: manifestPath, contents: manifestAfter });
|
|
143
|
+
filesChanged += 1;
|
|
144
|
+
}
|
|
145
|
+
if (removals > 0) {
|
|
146
|
+
const redactionsPath = join(runDir, 'redactions.json');
|
|
147
|
+
const existing = await readFile(redactionsPath, 'utf8').catch(() => '{"records":[]}');
|
|
148
|
+
const doc = JSON.parse(existing);
|
|
149
|
+
doc.records = [
|
|
150
|
+
...(doc.records ?? []),
|
|
151
|
+
// By rule and count, never by value — the whole point is that the value is gone.
|
|
152
|
+
{ rule: 'scrub', identifier: `manual:${literals.length} literal(s)`, count: removals },
|
|
153
|
+
];
|
|
154
|
+
pending.push({ path: redactionsPath, contents: `${JSON.stringify(doc, null, 2)}\n` });
|
|
155
|
+
ledger = redactionsPath;
|
|
156
|
+
}
|
|
157
|
+
if (dryRun) {
|
|
158
|
+
out.phase('scrub.dry_run', { run: runDir, would_remove: removals, would_change: filesChanged });
|
|
159
|
+
// The ledger is listed apart from the count. `files=N` has always meant files whose *contents*
|
|
160
|
+
// were scrubbed, and `redactions.json` only gains a line saying how many removals happened —
|
|
161
|
+
// folding it in would inflate the number, and listing it without saying so left a plan that
|
|
162
|
+
// named three files under a heading that said two.
|
|
163
|
+
for (const write of pending) {
|
|
164
|
+
if (write.path === ledger)
|
|
165
|
+
continue;
|
|
166
|
+
out.plain(` would rewrite ${relative(runDir, write.path)}`);
|
|
167
|
+
}
|
|
168
|
+
if (ledger !== undefined)
|
|
169
|
+
out.plain(` would record the removals in ${relative(runDir, ledger)}`);
|
|
170
|
+
if (fs.matches > 0)
|
|
171
|
+
out.plain(` ${fs.matches} shadow-store object(s) would still match`);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
await commit(pending);
|
|
175
|
+
out.phase('scrubbed', { run: runDir, removed: removals, files: filesChanged });
|
|
176
|
+
}
|
|
177
|
+
if (removals === 0 && reverted === 0 && fs.matches === 0 && fs.unreadable === undefined) {
|
|
178
|
+
out.plain(' nothing matched — the trace is unchanged');
|
|
179
|
+
}
|
|
180
|
+
reportShadowStore(out, runDir, fs);
|
|
181
|
+
return {
|
|
182
|
+
runDir,
|
|
183
|
+
filesChanged,
|
|
184
|
+
removals,
|
|
185
|
+
reverted,
|
|
186
|
+
fsStoreMatches: fs.matches,
|
|
187
|
+
fsStoreDropped: fs.dropped,
|
|
188
|
+
dryRun,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Put every rewritten file in place, each one atomically.
|
|
193
|
+
*
|
|
194
|
+
* The old code wrote `events.jsonl` with a plain `writeFile`, which truncates first. A scrub
|
|
195
|
+
* interrupted in that window — ^C, a full disk, an OOM kill — left the run with a truncated events
|
|
196
|
+
* file and a manifest whose digest described the whole one. That is not a failed scrub, it is
|
|
197
|
+
* destroyed evidence, and the material being scrubbed is by definition the material someone cannot
|
|
198
|
+
* afford to lose along with it.
|
|
199
|
+
*
|
|
200
|
+
* Nothing is written until every check on every file has passed, and each file lands by rename, so
|
|
201
|
+
* no reader ever sees a half-written one. A crash part-way through the loop leaves a run whose
|
|
202
|
+
* files are individually intact and some of which are still unscrubbed — which re-running the same
|
|
203
|
+
* command fixes, because the detectors are idempotent over already-scrubbed text.
|
|
204
|
+
*/
|
|
205
|
+
async function commit(pending) {
|
|
206
|
+
for (const write of pending) {
|
|
207
|
+
const tmp = `${write.path}.${randomBytes(6).toString('hex')}.tmp`;
|
|
208
|
+
try {
|
|
209
|
+
await writeFile(tmp, write.contents, { mode: FILE_MODE });
|
|
210
|
+
await rename(tmp, write.path);
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
await unlink(tmp).catch(() => undefined);
|
|
214
|
+
throw err;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* `--match` with no value parses to boolean `true` and reads back as an empty list, so without
|
|
220
|
+
* this the command would report "nothing matched" over a trace it never searched. A false
|
|
221
|
+
* all-clear is the one failure mode a scrubber must not have, so this is an error, not a default.
|
|
222
|
+
*/
|
|
223
|
+
function collectLiterals(args) {
|
|
224
|
+
const literals = [];
|
|
225
|
+
for (const name of ['match', 'matches']) {
|
|
226
|
+
if (!args.has(name))
|
|
227
|
+
continue;
|
|
228
|
+
const values = args.list(name);
|
|
229
|
+
if (values.length === 0) {
|
|
230
|
+
// One newline only: `main` renders the first line as what happened and the rest as why, and
|
|
231
|
+
// indents just the first line of the rest.
|
|
232
|
+
throw new Error(`--${name} was given with nothing to match\n` +
|
|
233
|
+
'Scrubbing would then report a clean trace it never searched, which is worse than not ' +
|
|
234
|
+
`scrubbing at all — try: orca scrub last --${name} my-hostname`);
|
|
235
|
+
}
|
|
236
|
+
literals.push(...values);
|
|
237
|
+
}
|
|
238
|
+
return literals;
|
|
239
|
+
}
|
|
240
|
+
/** Why a scrubbed event line cannot be written, or undefined when it can. */
|
|
241
|
+
function rejectionReason(scrubbed) {
|
|
242
|
+
let parsed;
|
|
243
|
+
try {
|
|
244
|
+
parsed = JSON.parse(scrubbed);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return 'unparseable';
|
|
248
|
+
}
|
|
249
|
+
return validateEvent(parsed).valid ? undefined : 'schema';
|
|
250
|
+
}
|
|
251
|
+
/** The event's own seq, so a warning names the event rather than a byte offset. */
|
|
252
|
+
function seqOf(line) {
|
|
253
|
+
try {
|
|
254
|
+
const seq = JSON.parse(line).seq;
|
|
255
|
+
return typeof seq === 'number' ? seq : undefined;
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return undefined;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function isRecord(value) {
|
|
262
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
263
|
+
}
|
|
264
|
+
function parseScrubbedManifest(text, runDir) {
|
|
265
|
+
// A literal that spans a quote or a brace takes the JSON apart rather than editing a value, so
|
|
266
|
+
// the parse is checked before the schema is: there would be nothing to validate.
|
|
267
|
+
let parsed;
|
|
268
|
+
try {
|
|
269
|
+
parsed = JSON.parse(text);
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
parsed = undefined;
|
|
273
|
+
}
|
|
274
|
+
if (!isRecord(parsed)) {
|
|
275
|
+
throw new Error(`scrubbing manifest.json would leave it unparseable\n${manifestAdvice(runDir)}`);
|
|
276
|
+
}
|
|
277
|
+
assertManifestSurvived(parsed, runDir);
|
|
278
|
+
return parsed;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* A `--match` that lands on `run_`, on a timestamp or on the integrity digest removes a field the
|
|
282
|
+
* schema pins, and every reader — `orca gc`, the viewer, the Python SDK — opens the manifest
|
|
283
|
+
* first. Refusing loudly leaves a readable trace; writing it would leave an unopenable one.
|
|
284
|
+
*/
|
|
285
|
+
function assertManifestSurvived(manifest, runDir) {
|
|
286
|
+
const result = validateManifest(manifest);
|
|
287
|
+
if (result.valid)
|
|
288
|
+
return;
|
|
289
|
+
throw new Error(`scrubbing manifest.json would leave it invalid: ${result.errors.join('; ')}\n` +
|
|
290
|
+
manifestAdvice(runDir));
|
|
291
|
+
}
|
|
292
|
+
/** The second half of both manifest errors: one line, because `main` indents only the first. */
|
|
293
|
+
function manifestAdvice(runDir) {
|
|
294
|
+
return ('Nothing was changed — the match covers a field the trace format requires, and a run whose ' +
|
|
295
|
+
`manifest will not parse cannot be opened at all. Narrow the match, or: rm -rf ${runDir}`);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* The shadow filesystem store (`<run>/fs`) holds the whole workspace at every turn, which is
|
|
299
|
+
* usually the largest thing in a run.
|
|
300
|
+
*
|
|
301
|
+
* It cannot be scrubbed the way a blob can. Its objects are zlib-compressed and addressed by the
|
|
302
|
+
* hash of their own contents, so editing one is not editing a file: the object's id changes, every
|
|
303
|
+
* tree that names it has to be rewritten, and every `fs.snapshot` event that names those trees has
|
|
304
|
+
* to be rewritten with them — a history rewrite whose failure mode is a run that no longer
|
|
305
|
+
* restores. So the store is searched and reported instead, and `--drop-fs` removes it outright for
|
|
306
|
+
* anyone who would rather lose the snapshots than keep the material.
|
|
307
|
+
*/
|
|
308
|
+
async function handleShadowStore(runDir, drop, dryRun, hasMatch) {
|
|
309
|
+
const gitDir = join(runDir, 'fs');
|
|
310
|
+
if (!(await stat(gitDir).catch(() => null))) {
|
|
311
|
+
return { matches: 0, dropped: false };
|
|
312
|
+
}
|
|
313
|
+
if (drop) {
|
|
314
|
+
// `--dry-run --drop-fs` still scans, so the plan says how much would be lost. Deleting the
|
|
315
|
+
// snapshots is the single most destructive thing this command does; a dry run that did it
|
|
316
|
+
// anyway would be worse than having no dry run at all.
|
|
317
|
+
if (dryRun)
|
|
318
|
+
return { ...(await scanShadowStore(gitDir, hasMatch)), dropped: false };
|
|
319
|
+
await rm(gitDir, { recursive: true, force: true });
|
|
320
|
+
return { matches: 0, dropped: true };
|
|
321
|
+
}
|
|
322
|
+
return { ...(await scanShadowStore(gitDir, hasMatch)), dropped: false };
|
|
323
|
+
}
|
|
324
|
+
async function scanShadowStore(gitDir, hasMatch) {
|
|
325
|
+
// --batch-all-objects, because the store has no refs: `write-tree` leaves every object dangling,
|
|
326
|
+
// so nothing here is reachable from a commit and `rev-list` would report an empty store.
|
|
327
|
+
const listed = await runGit(['cat-file', '--batch-all-objects', '--batch-check=%(objectname) %(objecttype) %(objectsize)'], { gitDir });
|
|
328
|
+
if (listed.code !== 0)
|
|
329
|
+
return { matches: 0, unreadable: gitFailure(listed.stderr, listed.code) };
|
|
330
|
+
const wanted = [];
|
|
331
|
+
for (const line of listed.stdout.split('\n')) {
|
|
332
|
+
const [oid, type, size] = line.trim().split(' ');
|
|
333
|
+
if (oid === undefined || type === undefined)
|
|
334
|
+
continue;
|
|
335
|
+
// Trees are searched for their entry names: a hostname can be the filename, not the contents.
|
|
336
|
+
if (type !== 'blob' && type !== 'tree')
|
|
337
|
+
continue;
|
|
338
|
+
wanted.push({ oid, size: Number(size) || 0 });
|
|
339
|
+
}
|
|
340
|
+
let matches = 0;
|
|
341
|
+
for (const batch of chunkBySize(wanted, BATCH_BYTES)) {
|
|
342
|
+
const read = await runGitRaw(['cat-file', '--batch'], {
|
|
343
|
+
gitDir,
|
|
344
|
+
input: `${batch.map((o) => o.oid).join('\n')}\n`,
|
|
345
|
+
});
|
|
346
|
+
if (read.code !== 0)
|
|
347
|
+
return { matches, unreadable: gitFailure(read.stderr, read.code) };
|
|
348
|
+
for (const object of batchObjects(read.stdout)) {
|
|
349
|
+
const text = object.type === 'tree' ? treeNames(object.body) : asText(object.body);
|
|
350
|
+
if (text !== undefined && hasMatch(text))
|
|
351
|
+
matches += 1;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return { matches };
|
|
355
|
+
}
|
|
356
|
+
function reportShadowStore(out, runDir, status) {
|
|
357
|
+
if (status.dropped) {
|
|
358
|
+
out.warn('fs_store_dropped', { path: join(runDir, 'fs') });
|
|
359
|
+
out.plain(' the workspace snapshots are gone; this run can no longer restore or fork files');
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
if (status.unreadable !== undefined) {
|
|
363
|
+
out.warn('fs_store_unverified', { path: join(runDir, 'fs'), reason: status.unreadable });
|
|
364
|
+
out.plain(' the shadow filesystem store could not be read, so it was NOT checked');
|
|
365
|
+
out.plain(' next: orca scrub --drop-fs to remove it, or delete the run');
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (status.matches === 0)
|
|
369
|
+
return;
|
|
370
|
+
out.warn('fs_store_not_scrubbed', { path: join(runDir, 'fs'), objects: status.matches });
|
|
371
|
+
out.plain(' the workspace snapshots still contain what you asked to remove: git objects are');
|
|
372
|
+
out.plain(' addressed by their own contents, so they cannot be rewritten in place');
|
|
373
|
+
out.plain(` next: orca scrub --drop-fs to delete the snapshots, or rm -rf ${runDir}`);
|
|
374
|
+
}
|
|
375
|
+
function gitFailure(stderr, code) {
|
|
376
|
+
return stderr.trim() || `git exited ${code}`;
|
|
377
|
+
}
|
|
378
|
+
/** Batches of object ids whose combined content stays under `limit`; never an empty batch. */
|
|
379
|
+
function chunkBySize(items, limit) {
|
|
380
|
+
const batches = [];
|
|
381
|
+
let batch = [];
|
|
382
|
+
let bytes = 0;
|
|
383
|
+
for (const item of items) {
|
|
384
|
+
if (batch.length > 0 && bytes + item.size > limit) {
|
|
385
|
+
batches.push(batch);
|
|
386
|
+
batch = [];
|
|
387
|
+
bytes = 0;
|
|
388
|
+
}
|
|
389
|
+
batch.push(item);
|
|
390
|
+
bytes += item.size;
|
|
391
|
+
}
|
|
392
|
+
if (batch.length > 0)
|
|
393
|
+
batches.push(batch);
|
|
394
|
+
return batches;
|
|
395
|
+
}
|
|
396
|
+
/** `git cat-file --batch` output: `<oid> <type> <size>\n<size bytes>\n`, repeated. */
|
|
397
|
+
function* batchObjects(buf) {
|
|
398
|
+
let at = 0;
|
|
399
|
+
while (at < buf.length) {
|
|
400
|
+
const eol = buf.indexOf(0x0a, at);
|
|
401
|
+
if (eol === -1)
|
|
402
|
+
return;
|
|
403
|
+
const [, type, size] = buf.subarray(at, eol).toString('utf8').split(' ');
|
|
404
|
+
const bytes = Number(size);
|
|
405
|
+
if (type === undefined || !Number.isFinite(bytes))
|
|
406
|
+
return;
|
|
407
|
+
const start = eol + 1;
|
|
408
|
+
yield { type, body: buf.subarray(start, start + bytes) };
|
|
409
|
+
at = start + bytes + 1;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
/** Entry names out of a tree object: `<mode> <name>\0<20 raw bytes>`, repeated. */
|
|
413
|
+
function treeNames(body) {
|
|
414
|
+
const names = [];
|
|
415
|
+
let at = 0;
|
|
416
|
+
while (at < body.length) {
|
|
417
|
+
const space = body.indexOf(0x20, at);
|
|
418
|
+
if (space === -1)
|
|
419
|
+
break;
|
|
420
|
+
// The name runs to a NUL, then 20 raw bytes of object id before the next entry's mode.
|
|
421
|
+
const nul = body.indexOf(0, space + 1);
|
|
422
|
+
if (nul === -1)
|
|
423
|
+
break;
|
|
424
|
+
names.push(body.subarray(space + 1, nul).toString('utf8'));
|
|
425
|
+
at = nul + 1 + 20;
|
|
426
|
+
}
|
|
427
|
+
return names.join('\n');
|
|
428
|
+
}
|
|
429
|
+
/** The buffer as text, or undefined when it is binary and rewriting it would corrupt it. */
|
|
430
|
+
function asText(buf) {
|
|
431
|
+
if (buf.includes(0))
|
|
432
|
+
return undefined;
|
|
433
|
+
const text = buf.toString('utf8');
|
|
434
|
+
return Buffer.from(text, 'utf8').equals(buf) ? text : undefined;
|
|
435
|
+
}
|
|
436
|
+
function placeholderFor(literal) {
|
|
437
|
+
const hash = createHash('sha256').update(literal).digest('hex').slice(0, 8);
|
|
438
|
+
return `<redacted:scrub:${hash}>`;
|
|
439
|
+
}
|
|
440
|
+
async function walk(dir) {
|
|
441
|
+
const out = [];
|
|
442
|
+
const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
443
|
+
for (const entry of entries) {
|
|
444
|
+
const path = join(dir, entry.name);
|
|
445
|
+
if (entry.isDirectory())
|
|
446
|
+
out.push(...(await walk(path)));
|
|
447
|
+
else if ((await stat(path)).isFile())
|
|
448
|
+
out.push(path);
|
|
449
|
+
}
|
|
450
|
+
return out;
|
|
451
|
+
}
|
|
452
|
+
//# sourceMappingURL=scrub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrub.js","sourceRoot":"","sources":["../../src/commands/scrub.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ParsedArgs } from '../args.js';
|
|
2
|
+
import type { Output } from '../out.js';
|
|
3
|
+
import { type OrcaConfig } from '../config.js';
|
|
4
|
+
/**
|
|
5
|
+
* `orca setup` and `orca models` — the shortest path from "I want to compare four models" to a
|
|
6
|
+
* working `orca compare`.
|
|
7
|
+
*
|
|
8
|
+
* Comparing models across providers used to mean knowing that `--upstream-anthropic` and
|
|
9
|
+
* `--upstream-openai` exist, that a gateway serves both, and that the key goes in an environment
|
|
10
|
+
* variable orca reads. All of that is real and none of it is discoverable. This asks two questions
|
|
11
|
+
* instead, and — the part that matters — asks the gateway what it actually serves, so a wrong key
|
|
12
|
+
* or a wrong URL is an answer now rather than a 401 in the middle of a comparison later.
|
|
13
|
+
*/
|
|
14
|
+
export interface SetupDeps {
|
|
15
|
+
env?: NodeJS.ProcessEnv;
|
|
16
|
+
/** Asks the gateway what it serves. Injected so tests need no network. */
|
|
17
|
+
probe?: (gateway: string, headers: Record<string, string>) => Promise<string[]>;
|
|
18
|
+
/** Prompt for a value. Absent means non-interactive. */
|
|
19
|
+
ask?: (question: string) => Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
export declare function setupCommand(args: ParsedArgs, out: Output, deps?: SetupDeps): Promise<OrcaConfig>;
|
|
22
|
+
export declare function modelsCommand(args: ParsedArgs, out: Output, deps?: SetupDeps): Promise<string[]>;
|
|
23
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;GASG;AAEH,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChF,wDAAwD;IACxD,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C;AA0BD,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,UAAU,CAAC,CA6ErB;AAuBD,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CA0CnB"}
|