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.
Files changed (109) hide show
  1. package/dist/api.d.ts +127 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +159 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/args.d.ts +24 -0
  6. package/dist/args.d.ts.map +1 -0
  7. package/dist/args.js +124 -0
  8. package/dist/args.js.map +1 -0
  9. package/dist/cli.d.ts +3 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +4 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/commands/compare.d.ts +27 -0
  14. package/dist/commands/compare.d.ts.map +1 -0
  15. package/dist/commands/compare.js +182 -0
  16. package/dist/commands/compare.js.map +1 -0
  17. package/dist/commands/doctor.d.ts +24 -0
  18. package/dist/commands/doctor.d.ts.map +1 -0
  19. package/dist/commands/doctor.js +358 -0
  20. package/dist/commands/doctor.js.map +1 -0
  21. package/dist/commands/gc.d.ts +24 -0
  22. package/dist/commands/gc.d.ts.map +1 -0
  23. package/dist/commands/gc.js +326 -0
  24. package/dist/commands/gc.js.map +1 -0
  25. package/dist/commands/inspect.d.ts +24 -0
  26. package/dist/commands/inspect.d.ts.map +1 -0
  27. package/dist/commands/inspect.js +262 -0
  28. package/dist/commands/inspect.js.map +1 -0
  29. package/dist/commands/record.d.ts +17 -0
  30. package/dist/commands/record.d.ts.map +1 -0
  31. package/dist/commands/record.js +497 -0
  32. package/dist/commands/record.js.map +1 -0
  33. package/dist/commands/replay.d.ts +43 -0
  34. package/dist/commands/replay.d.ts.map +1 -0
  35. package/dist/commands/replay.js +800 -0
  36. package/dist/commands/replay.js.map +1 -0
  37. package/dist/commands/scrub.d.ts +34 -0
  38. package/dist/commands/scrub.d.ts.map +1 -0
  39. package/dist/commands/scrub.js +452 -0
  40. package/dist/commands/scrub.js.map +1 -0
  41. package/dist/commands/setup.d.ts +23 -0
  42. package/dist/commands/setup.d.ts.map +1 -0
  43. package/dist/commands/setup.js +177 -0
  44. package/dist/commands/setup.js.map +1 -0
  45. package/dist/config.d.ts +80 -0
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +117 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/exchange-events.d.ts +72 -0
  50. package/dist/exchange-events.d.ts.map +1 -0
  51. package/dist/exchange-events.js +170 -0
  52. package/dist/exchange-events.js.map +1 -0
  53. package/dist/flags.d.ts +10 -0
  54. package/dist/flags.d.ts.map +1 -0
  55. package/dist/flags.js +83 -0
  56. package/dist/flags.js.map +1 -0
  57. package/dist/fs-events.d.ts +19 -0
  58. package/dist/fs-events.d.ts.map +1 -0
  59. package/dist/fs-events.js +53 -0
  60. package/dist/fs-events.js.map +1 -0
  61. package/dist/index.d.ts +18 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +18 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/main.d.ts +2 -0
  66. package/dist/main.d.ts.map +1 -0
  67. package/dist/main.js +282 -0
  68. package/dist/main.js.map +1 -0
  69. package/dist/mcp-server.d.ts +44 -0
  70. package/dist/mcp-server.d.ts.map +1 -0
  71. package/dist/mcp-server.js +245 -0
  72. package/dist/mcp-server.js.map +1 -0
  73. package/dist/mcp.d.ts +111 -0
  74. package/dist/mcp.d.ts.map +1 -0
  75. package/dist/mcp.js +221 -0
  76. package/dist/mcp.js.map +1 -0
  77. package/dist/out.d.ts +69 -0
  78. package/dist/out.d.ts.map +1 -0
  79. package/dist/out.js +138 -0
  80. package/dist/out.js.map +1 -0
  81. package/dist/rasterize.d.ts +62 -0
  82. package/dist/rasterize.d.ts.map +1 -0
  83. package/dist/rasterize.js +154 -0
  84. package/dist/rasterize.js.map +1 -0
  85. package/dist/serial.d.ts +19 -0
  86. package/dist/serial.d.ts.map +1 -0
  87. package/dist/serial.js +34 -0
  88. package/dist/serial.js.map +1 -0
  89. package/dist/share-card.d.ts +73 -0
  90. package/dist/share-card.d.ts.map +1 -0
  91. package/dist/share-card.js +413 -0
  92. package/dist/share-card.js.map +1 -0
  93. package/dist/snapshot.d.ts +30 -0
  94. package/dist/snapshot.d.ts.map +1 -0
  95. package/dist/snapshot.js +43 -0
  96. package/dist/snapshot.js.map +1 -0
  97. package/dist/tls-capture.d.ts +57 -0
  98. package/dist/tls-capture.d.ts.map +1 -0
  99. package/dist/tls-capture.js +198 -0
  100. package/dist/tls-capture.js.map +1 -0
  101. package/dist/upstream.d.ts +20 -0
  102. package/dist/upstream.d.ts.map +1 -0
  103. package/dist/upstream.js +31 -0
  104. package/dist/upstream.js.map +1 -0
  105. package/dist/version.d.ts +2 -0
  106. package/dist/version.d.ts.map +1 -0
  107. package/dist/version.js +2 -0
  108. package/dist/version.js.map +1 -0
  109. package/package.json +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Output } from '../out.js';
2
+ import type { ParsedArgs } from '../args.js';
3
+ export interface RecordResult {
4
+ /**
5
+ * Model exchanges the proxy captured.
6
+ *
7
+ * Zero is the failure this whole field exists for, and it has to be readable by a caller that
8
+ * has no terminal to watch: the agent answers, the exit code is zero, and the trace is empty.
9
+ */
10
+ modelExchanges: number;
11
+ runId: string;
12
+ runDir: string;
13
+ events: number;
14
+ exitCode: number;
15
+ }
16
+ export declare function recordCommand(args: ParsedArgs, out: Output, cwd?: string): Promise<RecordResult>;
17
+ //# sourceMappingURL=record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/commands/record.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AA0BD,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,MAAM,EACX,GAAG,SAAgB,GAClB,OAAO,CAAC,YAAY,CAAC,CAUvB"}
@@ -0,0 +1,497 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { delimiter, resolve } from 'node:path';
4
+ import { TraceWriter, ensureRunsDir } from '@orcareplay/core';
5
+ import { FsCapture } from '@orcareplay/fs-capture';
6
+ import { createProxy, RunCa } from '@orcareplay/proxy';
7
+ import { captureSession, defaultAdapters, resolveLaunch, snapshotDir } from '@orcareplay/adapters';
8
+ import { ExchangeEventDeriver, appendDerivedEvents } from '../exchange-events.js';
9
+ import { installShellShim, readShellFrames } from '@orcareplay/shell-shim';
10
+ import { drainMcpFrames, pointAtMcpConfig, setupMcpCapture } from '../mcp.js';
11
+ import { SerialQueue } from '../serial.js';
12
+ import { appendSnapshot } from '../fs-events.js';
13
+ import { persistNetExchange, setupTlsCapture, trustRunCa } from '../tls-capture.js';
14
+ import { upstreamPlan } from '../upstream.js';
15
+ import { ORCA_VERSION } from '../version.js';
16
+ /**
17
+ * `orca record <agent>` — stand up the capture layers, launch the agent pointed at them, and get
18
+ * out of the way. The agent is not patched, wrapped or modified; it is simply started with a
19
+ * couple of environment variables that point its model traffic at a local proxy.
20
+ *
21
+ * The wrapper exists for one reason: a TLS-intercepting run mints a private key, and a key that
22
+ * outlives a failed run is the outcome this feature must not have. The recording's own teardown
23
+ * deletes it on the way out, but the likeliest failure of all — the agent is not installed —
24
+ * happens before any teardown runs. Owning the key's lifetime out here means no failure path
25
+ * inside can skip it.
26
+ */
27
+ /**
28
+ * Whether a tool call ran a command.
29
+ *
30
+ * By the shape of the arguments rather than by the tool's name: every harness names it something
31
+ * different — `Bash`, `shell`, `run_command`, `exec` — and a list of names would be wrong for the
32
+ * next one. A `command` string is what they all have in common.
33
+ */
34
+ function isCommandTool(input) {
35
+ if (input === null || typeof input !== 'object')
36
+ return false;
37
+ const command = input.command;
38
+ return typeof command === 'string' && command.trim() !== '';
39
+ }
40
+ export async function recordCommand(args, out, cwd = process.cwd()) {
41
+ const minted = [];
42
+ try {
43
+ return await runRecording(args, out, cwd, minted);
44
+ }
45
+ catch (err) {
46
+ for (const ca of minted) {
47
+ await ca.dispose().catch(() => undefined);
48
+ }
49
+ throw err;
50
+ }
51
+ }
52
+ async function runRecording(args, out, cwd, minted) {
53
+ const registry = defaultAdapters();
54
+ const agentName = args.positionals[0];
55
+ let adapter;
56
+ if (agentName) {
57
+ adapter = registry.get(agentName);
58
+ }
59
+ else {
60
+ adapter = await registry.detect(cwd);
61
+ if (!adapter) {
62
+ throw new Error(`could not detect an agent in ${cwd}\n` +
63
+ ` name one explicitly: orca record <${registry.ids().join('|')}>\n` +
64
+ ` known agents: ${registry.names().join('; ')}`);
65
+ }
66
+ out.info('adapter.detected', { id: adapter.id });
67
+ }
68
+ const dir = await ensureRunsDir(cwd);
69
+ const writer = await TraceWriter.create(dir, {
70
+ adapter: { id: adapter.id, version: ORCA_VERSION, harness_version: adapter.harnessVersions },
71
+ argv: [agentName ?? adapter.id, ...args.passthrough],
72
+ cwd,
73
+ orcaVersion: ORCA_VERSION,
74
+ });
75
+ const captureFs = args.bool('fs', true);
76
+ let fs;
77
+ if (captureFs) {
78
+ try {
79
+ fs = await FsCapture.start({ runDir: writer.runDir, cwd });
80
+ // Read once, before the agent touches anything: `git` describes the state the run started
81
+ // from, which is what makes it a reproduction instruction rather than a postscript.
82
+ writer.setGit(await fs.gitInfo());
83
+ }
84
+ catch (err) {
85
+ // Filesystem capture is valuable but not essential; losing it should degrade the trace,
86
+ // not abort the run the user actually wanted to record.
87
+ out.warn('fs.unavailable', { reason: String(err) });
88
+ }
89
+ }
90
+ // MCP capture is opt-in by pointing at a config: the file lives in a different place for every
91
+ // harness, and guessing wrong would rewrite something the user did not mean us to touch.
92
+ let mcp;
93
+ const mcpConfigPath = args.str('mcp-config');
94
+ if (mcpConfigPath) {
95
+ mcp = await setupMcpCapture({ sourceConfigPath: mcpConfigPath, runDir: writer.runDir, out });
96
+ if (mcp) {
97
+ // The source path, written down because a replay needs it and can get it nowhere else:
98
+ // `manifest.argv` holds the agent's own arguments, and `--mcp-config` is orca's. Without this
99
+ // a replay of an MCP-using run either loses the layer or cannot start the harness at all.
100
+ await writer.append({
101
+ type: 'note',
102
+ actor: 'orca',
103
+ turn: 0,
104
+ attrs: {
105
+ rule: 'mcp_instrumented',
106
+ source: resolve(cwd, mcpConfigPath),
107
+ servers: mcp.rewritten.join(',') || undefined,
108
+ skipped: mcp.skipped.join(',') || undefined,
109
+ },
110
+ });
111
+ }
112
+ }
113
+ // Shell capture: a PATH shim in front of sh/bash. The protocol layer already reports the command
114
+ // and its merged output one turn late; what only the shim can see is the exit code, the real
115
+ // duration, and which stream each byte came out of.
116
+ let shell;
117
+ if (args.bool('shell', true)) {
118
+ try {
119
+ shell = await installShellShim({ runDir: writer.runDir });
120
+ }
121
+ catch (err) {
122
+ // Same posture as filesystem capture: degrade the trace, never abort the run.
123
+ out.warn('shell.unavailable', { reason: String(err) });
124
+ }
125
+ }
126
+ const deriver = new ExchangeEventDeriver();
127
+ let turn = 0;
128
+ // When each turn began, so an out-of-band frame can be attributed to the turn it happened during
129
+ // rather than to whichever turn happened to be last when we drained the file.
130
+ const turnStartedAt = [];
131
+ // Serial, not parallel: each persist snapshots the workspace, and two overlapping `git add`
132
+ // calls collide on index.lock. It also keeps seq in the order exchanges actually happened.
133
+ const writes = new SerialQueue();
134
+ const plan = await upstreamPlan(args);
135
+ /**
136
+ * TLS interception, off unless the flag is present.
137
+ *
138
+ * Base-URL injection captures every harness that reads a base-URL variable, which is most of
139
+ * them. A Codex CLI signed in with a ChatGPT subscription reads none, and talks to its own
140
+ * backend over TLS — invisible to the ordinary mechanism. This is the answer to that, and it is
141
+ * deliberately a separate decision the operator has to make: it mints a certificate authority.
142
+ */
143
+ const tls = await setupTlsCapture({ args, out, writer, writes, turn: () => turn });
144
+ if (tls.ca)
145
+ minted.push(tls.ca);
146
+ const ca = tls.ca;
147
+ /** Model exchanges the proxy actually captured — the number the warning below turns on. */
148
+ let modelExchanges = 0;
149
+ /**
150
+ * Tool calls that ran a command, counted from the model exchanges rather than from the shim.
151
+ *
152
+ * This is the evidence half of the shell-shim check. The shim reports success when it installs,
153
+ * which says nothing about whether the harness ever went through it: Claude Code on Windows
154
+ * resolves its shell without consulting PATH, so `shell=on` printed happily while the frames
155
+ * file stayed empty for a run full of Bash calls. Comparing what the model asked for against
156
+ * what the shim saw is what turns that silence into something orca can say out loud.
157
+ */
158
+ let commandToolCalls = 0;
159
+ /** Commands the shim actually saw. Zero against a non-zero `commandToolCalls` is the warning. */
160
+ let shellFrames = 0;
161
+ const proxy = await createProxy({
162
+ mode: 'record',
163
+ upstream: plan.upstream,
164
+ upstreamHeaders: plan.headers,
165
+ onExchange: (exchange) => {
166
+ modelExchanges += 1;
167
+ writes.push(() => persist(exchange));
168
+ },
169
+ // A POST on a path no dialect claims is forwarded rather than refused, and lands in the trace
170
+ // as the same `net.*` pair unrecognised TLS traffic does. Orca holds the bytes but not the
171
+ // meaning, so it is evidence, not a replayable turn.
172
+ onNetExchange: (exchange) => {
173
+ writes.push(() => persistNetExchange(writer, turn, exchange));
174
+ },
175
+ ...tls.proxyOptions,
176
+ });
177
+ async function persist(exchange) {
178
+ turn += 1;
179
+ turnStartedAt.push({ turn, at: Date.now() });
180
+ await appendDerivedEvents(writer, deriver, exchange, turn, (derived) => {
181
+ if (derived.type === 'tool.call' && isCommandTool(derived.attrs['input'])) {
182
+ commandToolCalls += 1;
183
+ }
184
+ });
185
+ if (fs)
186
+ await appendSnapshot(fs, writer, out, turn);
187
+ }
188
+ await writer.append({
189
+ type: 'run.start',
190
+ actor: 'orca',
191
+ turn: 0,
192
+ attrs: { adapter: adapter.id, cwd, proxy: proxy.url },
193
+ });
194
+ if (fs)
195
+ await appendSnapshot(fs, writer, out, 0, { initial: true });
196
+ const ctx = {
197
+ runId: writer.runId,
198
+ cwd,
199
+ proxyUrl: proxy.url,
200
+ runDir: writer.runDir,
201
+ userArgs: args.passthrough,
202
+ env: process.env,
203
+ };
204
+ const launch = await adapter.prepare(ctx);
205
+ // Listed before the agent starts, so the file it writes can be told from the ones already there.
206
+ // The harness's transcript is the only record of what the person typed; without it an
207
+ // interactive run is captured but not replayable.
208
+ const sessionBefore = await snapshotDir(adapter.session?.dir(cwd, process.env));
209
+ if (shell) {
210
+ launch.env.PATH = `${shell.dir}${delimiter}${process.env.PATH ?? ''}`;
211
+ }
212
+ if (mcp) {
213
+ pointAtMcpConfig(launch.env, mcp.configPath);
214
+ // The variables above are belt and braces for a harness orca has not met. What actually
215
+ // reaches Claude Code is this: it takes the path on the command line and reads no environment
216
+ // variable for it, so without this the instrumented config was written and never opened.
217
+ const mcpArgs = adapter.mcpConfigArgs?.(mcp.configPath);
218
+ if (mcpArgs !== undefined)
219
+ launch.args = [...mcpArgs, ...launch.args];
220
+ else
221
+ out.warn('mcp.not_wired', {
222
+ adapter: adapter.id,
223
+ cause: `${adapter.id} has no command-line form for an MCP config, and reads none of the variables orca sets`,
224
+ effect: 'the instrumented config exists but the agent will not load it, so no MCP frames will be captured',
225
+ });
226
+ }
227
+ if (proxy.tls) {
228
+ await trustRunCa(writer, proxy.tls, proxy.url, launch.env, out);
229
+ }
230
+ out.phase('recording', {
231
+ run: writer.runId,
232
+ adapter: adapter.id,
233
+ proxy: proxy.url,
234
+ fs: fs ? 'on' : 'off',
235
+ shell: shell ? 'on' : 'off',
236
+ });
237
+ let exitCode;
238
+ try {
239
+ exitCode = await runChild(launch.command, launch.args, { ...process.env, ...launch.env }, launch.cwd ?? cwd,
240
+ // Under --json, stdout is the result document. The agent's own output must not land in it.
241
+ args.bool('json'));
242
+ }
243
+ catch (err) {
244
+ // Two failures share this path, and both were silent in their own way.
245
+ //
246
+ // A listening proxy keeps Node's event loop alive, so a throw here printed the error and then
247
+ // hung — `orca record generic-openai -- /nonexistent` never exited, and mistyping an agent
248
+ // name is the first thing a new user does. And an unsealed trace has no `ended_at`, `counts`
249
+ // or `integrity`, so everything the agent did is on disk while `verifyIntegrity` reports the
250
+ // run as *tampered* rather than as unfinished.
251
+ //
252
+ // Sealing here rather than discarding: a run that died is often the run you most want to
253
+ // read, and the exit code is unknown rather than zero, so it is left absent.
254
+ await proxy.close().catch(() => undefined);
255
+ await writes.drain().catch(() => undefined);
256
+ if (ca)
257
+ await ca.dispose().catch(() => undefined);
258
+ await writer
259
+ .append({ type: 'run.end', actor: 'orca', turn, attrs: { error: String(err) } })
260
+ .catch(() => undefined);
261
+ await writer.close().catch(() => undefined);
262
+ throw err;
263
+ }
264
+ await writes.drain();
265
+ /** The turn an out-of-band frame belongs to: the last one that had begun when it happened. */
266
+ function turnAt(at) {
267
+ let found = 0;
268
+ for (const mark of turnStartedAt) {
269
+ if (mark.at > at)
270
+ break;
271
+ found = mark.turn;
272
+ }
273
+ return found;
274
+ }
275
+ if (shell) {
276
+ // Timestamped from the frame, not from now. These are read off disk after the agent has
277
+ // exited, so stamping them at write time put every shell command at the end of the run with
278
+ // the final turn number — which makes `mono_us` describe the drain rather than the command,
279
+ // and leaves the commands unable to interleave with the model turns they happened between.
280
+ const frames = await readShellFrames(shell.framesPath);
281
+ shellFrames = frames.length;
282
+ for (const frame of frames) {
283
+ const startedAt = Date.parse(frame.startedAt);
284
+ const at = Number.isNaN(startedAt) ? undefined : new Date(startedAt);
285
+ const frameTurn = at === undefined ? turn : turnAt(startedAt);
286
+ const exec = await writer.append({
287
+ type: 'shell.exec',
288
+ actor: 'harness',
289
+ turn: frameTurn,
290
+ ...(at === undefined ? {} : { occurredAt: at }),
291
+ attrs: { argv: [frame.name, ...frame.argv], cwd: frame.cwd },
292
+ });
293
+ await writer.append({
294
+ type: 'shell.result',
295
+ actor: 'harness',
296
+ turn: frameTurn,
297
+ causes: [exec.seq],
298
+ // The result happened when the command finished, which is what its duration measures.
299
+ ...(at === undefined ? {} : { occurredAt: new Date(startedAt + frame.durationMs) }),
300
+ attrs: {
301
+ exit_code: frame.exitCode,
302
+ signal: frame.signal,
303
+ duration_ms: frame.durationMs,
304
+ stdout_bytes: frame.stdoutBytes,
305
+ stderr_bytes: frame.stderrBytes,
306
+ },
307
+ });
308
+ }
309
+ }
310
+ if (mcp)
311
+ await drainMcpFrames(mcp, writer, turnAt, turn);
312
+ const orphans = deriver.unresolved();
313
+ if (orphans.length > 0) {
314
+ await writer.append({
315
+ type: 'note',
316
+ actor: 'orca',
317
+ turn,
318
+ attrs: { rule: 'unresolved_tool_calls', ids: orphans.map((o) => o.id) },
319
+ });
320
+ }
321
+ // Before the trace is sealed, not after. A tunnel's record is only complete when its socket
322
+ // closes, and closing the proxy is what closes the ones an exiting agent left open — so a
323
+ // `proxy.close()` after `writer.close()` produced tunnel records with nowhere to go.
324
+ await proxy.close();
325
+ await writes.drain();
326
+ // The CA dies with the run. `dispose` is idempotent and best-effort: failing to delete a key is
327
+ // worth a warning, never worth losing the trace the user was recording.
328
+ if (ca) {
329
+ try {
330
+ await ca.dispose();
331
+ }
332
+ catch (err) {
333
+ out.warn('tls.ca_not_removed', { path: ca.dir, reason: String(err) });
334
+ }
335
+ }
336
+ /**
337
+ * The harness's own transcript, and with it the prompts nothing on the wire carries.
338
+ *
339
+ * Written before `run.end` so it is part of the run rather than an appendix, and stored as the
340
+ * harness's own bytes so a fork can put the file back and resume into it natively.
341
+ */
342
+ let session;
343
+ if (adapter.session) {
344
+ try {
345
+ session = await captureSession(adapter.session, cwd, process.env, sessionBefore);
346
+ }
347
+ catch (err) {
348
+ out.warn('session.unavailable', { reason: String(err) });
349
+ }
350
+ }
351
+ if (session) {
352
+ await writer.append({
353
+ type: 'session.snapshot',
354
+ actor: 'harness',
355
+ turn,
356
+ attrs: {
357
+ harness: adapter.id,
358
+ session_id: session.id,
359
+ rel_path: session.relPath,
360
+ prompts: session.prompts.length,
361
+ bytes: session.bytes.byteLength,
362
+ },
363
+ // The writer spills anything over the inline limit to a content-addressed blob, so the
364
+ // transcript rides the same path every other large payload does — redaction included.
365
+ payload: {
366
+ prompts: session.prompts,
367
+ transcript: new TextDecoder().decode(session.bytes),
368
+ },
369
+ });
370
+ }
371
+ await writer.append({ type: 'run.end', actor: 'orca', turn, attrs: { exit_code: exitCode } });
372
+ const manifest = await writer.close(exitCode);
373
+ out.phase('recorded', {
374
+ run: writer.runId,
375
+ events: manifest.counts?.events ?? writer.seq,
376
+ blobs: manifest.counts?.blobs ?? 0,
377
+ exit: exitCode,
378
+ dir: writer.runDir,
379
+ });
380
+ /**
381
+ * The quietest way orca can fail, and the most damaging.
382
+ *
383
+ * Capture works by pointing a base-URL variable at the proxy, so a harness that reads none of
384
+ * them is never redirected — and there is nothing to notice. The agent answers, the exit code is
385
+ * zero, and the trace is empty. `@ai-sdk/openai` is the live example: it takes its base URL only
386
+ * as a constructor argument, so an agent built on the Vercel AI SDK produces exactly this.
387
+ *
388
+ * `contract.ts` already names this shape as what the adapter checks exist to prevent. They guard
389
+ * the adapters; this guards the run, which is where a user actually meets it.
390
+ */
391
+ if (modelExchanges === 0) {
392
+ out.warn('capture.empty', {
393
+ exchanges: 0,
394
+ cause: 'the agent never called the proxy — it may not read a base-URL variable',
395
+ set: Object.keys(launch.env)
396
+ .filter((name) => /(?:_BASE_URL|_API_BASE)$/.test(name))
397
+ .sort()
398
+ .join(',') || 'none',
399
+ next: 'orca doctor',
400
+ });
401
+ }
402
+ /**
403
+ * Shell capture that was on and recorded nothing.
404
+ *
405
+ * `installShellShim` succeeding means a `bash` and an `sh` were written into the run directory
406
+ * and put at the front of PATH. It does not mean the harness went through them, and on Windows
407
+ * Claude Code does not: it finds its shell without consulting PATH, so the shim sits there
408
+ * unused while `shell=on` is printed and the frames file stays empty. What is lost is precisely
409
+ * what only the shim can see — the real exit code, the real duration, and which stream each byte
410
+ * came from — while the commands still appear as tool calls, so nothing looks wrong.
411
+ *
412
+ * The condition is evidence, not a platform check: commands demonstrably ran and the layer that
413
+ * was supposed to see them saw none of them, whatever the reason.
414
+ */
415
+ if (shell && shellFrames === 0 && commandToolCalls > 0) {
416
+ out.warn('shell.ineffective', {
417
+ commands: commandToolCalls,
418
+ captured: 0,
419
+ cause: 'the harness ran its shell without going through the PATH shim',
420
+ effect: 'exit codes, durations and the stdout/stderr split are not in this trace',
421
+ next: 'record with --no-shell, which claims nothing rather than claiming this',
422
+ });
423
+ }
424
+ /**
425
+ * A recording that captured turns but cannot be replayed.
426
+ *
427
+ * `capture.empty` covers the run that recorded nothing. This is the other half: an interactive
428
+ * run records its model calls perfectly, but the prompts that caused them were typed into a
429
+ * terminal and exist nowhere orca can see. Replaying it launches an agent with nothing to make
430
+ * it ask anything, and it comes back blank — which the user discovers only after paying for the
431
+ * recording. Saying so here, while they are still looking at it, is the whole point.
432
+ */
433
+ const drivable = args.passthrough.length > 0 || (session?.prompts.length ?? 0) > 0;
434
+ if (modelExchanges > 0 && !drivable) {
435
+ out.warn('replay.undrivable', {
436
+ exchanges: modelExchanges,
437
+ cause: adapter.session
438
+ ? 'no prompt in argv, and none found in the harness transcript'
439
+ : `no prompt in argv, and ${adapter.id} exposes no transcript orca can read`,
440
+ effect: 'this run can be inspected, but replay and fork have nothing to drive the agent with',
441
+ next: `orca show ${writer.runId}`,
442
+ });
443
+ }
444
+ out.plain('');
445
+ out.plain(` orca replay ${writer.runId} # reproduce it exactly`);
446
+ out.plain(` orca replay ${writer.runId} --ui # open the timeline`);
447
+ return {
448
+ runId: writer.runId,
449
+ runDir: writer.runDir,
450
+ events: manifest.counts?.events ?? writer.seq,
451
+ modelExchanges,
452
+ exitCode,
453
+ };
454
+ }
455
+ /**
456
+ * Launch the agent.
457
+ *
458
+ * `stdio: 'inherit'` by default, and that matters: an interactive harness needs the real terminal,
459
+ * and anything less turns a TUI into a stream of escape codes.
460
+ *
461
+ * `quietStdout` is for `--json`, where orca's stdout is a document rather than a terminal. The
462
+ * agent's own chatter is still shown — it moves to stderr, where a human reads it and a parser
463
+ * does not. stdin and stderr stay inherited so the agent can still prompt and still colour.
464
+ */
465
+ async function runChild(command, argv, env, cwd, quietStdout = false) {
466
+ // Resolved the way detection resolves, so a launcher never reports ENOENT for an agent that
467
+ // `orca doctor` just called present.
468
+ const target = await resolveLaunch(command, argv);
469
+ return new Promise((resolve, reject) => {
470
+ const child = spawn(target.file, target.args, {
471
+ env,
472
+ cwd,
473
+ shell: target.shell,
474
+ stdio: quietStdout ? ['inherit', 'pipe', 'inherit'] : 'inherit',
475
+ });
476
+ child.stdout?.pipe(process.stderr);
477
+ // Forward interrupts so Ctrl-C reaches the agent rather than orphaning it behind the proxy.
478
+ const forward = (signal) => () => child.kill(signal);
479
+ const onInt = forward('SIGINT');
480
+ const onTerm = forward('SIGTERM');
481
+ process.on('SIGINT', onInt);
482
+ process.on('SIGTERM', onTerm);
483
+ child.on('error', (err) => {
484
+ process.off('SIGINT', onInt);
485
+ process.off('SIGTERM', onTerm);
486
+ reject(new Error(`could not launch "${command}"\n` +
487
+ ` ${String(err)}\n` +
488
+ ` is it installed and on your PATH?`));
489
+ });
490
+ child.on('close', (code) => {
491
+ process.off('SIGINT', onInt);
492
+ process.off('SIGTERM', onTerm);
493
+ resolve(code ?? 0);
494
+ });
495
+ });
496
+ }
497
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/commands/record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,EAA2C,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAmB,MAAM,WAAW,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgB7C;;;;;;;;;;GAUG;AACH;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,OAAO,GAAI,KAA+B,CAAC,OAAO,CAAC;IACzD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAgB,EAChB,GAAW,EACX,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAAgB,EAChB,GAAW,EACX,GAAW,EACX,MAAe;IAEf,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAEtC,IAAI,OAA4B,CAAC;IACjC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,IAAI;gBACrC,uCAAuC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;gBACpE,mBAAmB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnD,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE;QAC3C,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;QAC5F,IAAI,EAAE,CAAC,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QACpD,GAAG;QACH,WAAW,EAAE,YAAY;KAC1B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,EAAyB,CAAC;IAC9B,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3D,0FAA0F;YAC1F,oFAAoF;YACpF,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wFAAwF;YACxF,wDAAwD;YACxD,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,+FAA+F;IAC/F,yFAAyF;IACzF,IAAI,GAA2B,CAAC;IAChC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,aAAa,EAAE,CAAC;QAClB,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7F,IAAI,GAAG,EAAE,CAAC;YACR,uFAAuF;YACvF,8FAA8F;YAC9F,0FAA0F;YAC1F,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC;oBACnC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;oBAC7C,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;iBAC5C;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,iGAAiG;IACjG,6FAA6F;IAC7F,oDAAoD;IACpD,IAAI,KAA+D,CAAC;IACpE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,8EAA8E;YAC9E,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,iGAAiG;IACjG,8EAA8E;IAC9E,MAAM,aAAa,GAAmC,EAAE,CAAC;IACzD,4FAA4F;IAC5F,2FAA2F;IAC3F,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtC;;;;;;;OAOG;IACH,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACnF,IAAI,GAAG,CAAC,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IAElB,2FAA2F;IAC3F,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB;;;;;;;;OAQG;IACH,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,iGAAiG;IACjG,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;QAC9B,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,eAAe,EAAE,IAAI,CAAC,OAAO;QAC7B,UAAU,EAAE,CAAC,QAA0B,EAAE,EAAE;YACzC,cAAc,IAAI,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,8FAA8F;QAC9F,2FAA2F;QAC3F,qDAAqD;QACrD,aAAa,EAAE,CAAC,QAAqB,EAAE,EAAE;YACvC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,GAAG,GAAG,CAAC,YAAY;KACpB,CAAC,CAAC;IAEH,KAAK,UAAU,OAAO,CAAC,QAA0B;QAC/C,IAAI,IAAI,CAAC,CAAC;QACV,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;YACrE,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC1E,gBAAgB,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE;YAAE,MAAM,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,MAAM,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE;KACtD,CAAC,CAAC;IAEH,IAAI,EAAE;QAAE,MAAM,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,GAAG,GAAkB;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG;QACH,QAAQ,EAAE,KAAK,CAAC,GAAG;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,IAAI,CAAC,WAAW;QAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,iGAAiG;IACjG,sFAAsF;IACtF,kDAAkD;IAClD,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhF,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QACR,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,wFAAwF;QACxF,8FAA8F;QAC9F,yFAAyF;QACzF,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;;YAEpE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE;gBACxB,OAAO,EAAE,OAAO,CAAC,EAAE;gBACnB,KAAK,EAAE,GAAG,OAAO,CAAC,EAAE,wFAAwF;gBAC5G,MAAM,EACJ,kGAAkG;aACrG,CAAC,CAAC;IACP,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClE,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;QACrB,GAAG,EAAE,MAAM,CAAC,KAAK;QACjB,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,KAAK,EAAE,KAAK,CAAC,GAAG;QAChB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QACrB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;KAC5B,CAAC,CAAC;IAEH,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,QAAQ,CACvB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,IAAI,EACX,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,EACjC,MAAM,CAAC,GAAG,IAAI,GAAG;QACjB,2FAA2F;QAC3F,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAClB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,EAAE;QACF,8FAA8F;QAC9F,2FAA2F;QAC3F,6FAA6F;QAC7F,6FAA6F;QAC7F,+CAA+C;QAC/C,EAAE;QACF,yFAAyF;QACzF,6EAA6E;QAC7E,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,EAAE;YAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,MAAM;aACT,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;aAC/E,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,8FAA8F;IAC9F,SAAS,MAAM,CAAC,EAAU;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE;gBAAE,MAAM;YACxB,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,wFAAwF;QACxF,4FAA4F;QAC5F,4FAA4F;QAC5F,2FAA2F;QAC3F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvD,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBAC/B,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,SAAS;gBACf,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;gBAC/C,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;aAC7D,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;gBAClB,sFAAsF;gBACtF,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnF,KAAK,EAAE;oBACL,SAAS,EAAE,KAAK,CAAC,QAAQ;oBACzB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,WAAW,EAAE,KAAK,CAAC,UAAU;oBAC7B,YAAY,EAAE,KAAK,CAAC,WAAW;oBAC/B,YAAY,EAAE,KAAK,CAAC,WAAW;iBAChC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,GAAG;QAAE,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI;YACJ,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;SACxE,CAAC,CAAC;IACL,CAAC;IAED,4FAA4F;IAC5F,0FAA0F;IAC1F,qFAAqF;IACrF,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,gGAAgG;IAChG,wEAAwE;IACxE,IAAI,EAAE,EAAE,CAAC;QACP,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,IAAI,OAAmD,CAAC;IACxD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,SAAS;YAChB,IAAI;YACJ,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO,CAAC,EAAE;gBACnB,UAAU,EAAE,OAAO,CAAC,EAAE;gBACtB,QAAQ,EAAE,OAAO,CAAC,OAAO;gBACzB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;gBAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;aAChC;YACD,uFAAuF;YACvF,sFAAsF;YACtF,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aACpD;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE9C,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE;QACpB,GAAG,EAAE,MAAM,CAAC,KAAK;QACjB,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,GAAG;QAC7C,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;QAClC,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,MAAM,CAAC,MAAM;KACnB,CAAC,CAAC;IAEH;;;;;;;;;;OAUG;IACH,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE;YACxB,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,wEAAwE;YAC/E,GAAG,EACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;iBACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvD,IAAI,EAAE;iBACN,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM;YACxB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,IAAI,KAAK,IAAI,WAAW,KAAK,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC5B,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,+DAA+D;YACtE,MAAM,EAAE,yEAAyE;YACjF,IAAI,EAAE,wEAAwE;SAC/E,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnF,IAAI,cAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC5B,SAAS,EAAE,cAAc;YACzB,KAAK,EAAE,OAAO,CAAC,OAAO;gBACpB,CAAC,CAAC,6DAA6D;gBAC/D,CAAC,CAAC,0BAA0B,OAAO,CAAC,EAAE,sCAAsC;YAC9E,MAAM,EAAE,qFAAqF;YAC7F,IAAI,EAAE,aAAa,MAAM,CAAC,KAAK,EAAE;SAClC,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACd,GAAG,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,KAAK,oCAAoC,CAAC,CAAC;IAC7E,GAAG,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,KAAK,iCAAiC,CAAC,CAAC;IAE1E,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,GAAG;QAC7C,cAAc;QACd,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,QAAQ,CACrB,OAAe,EACf,IAAc,EACd,GAAsB,EACtB,GAAW,EACX,WAAW,GAAG,KAAK;IAEnB,4FAA4F;IAC5F,qCAAqC;IACrC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;YAC5C,GAAG;YACH,GAAG;YACH,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;SAChE,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,4FAA4F;QAC5F,MAAM,OAAO,GAAG,CAAC,MAAsB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE9B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/B,MAAM,CACJ,IAAI,KAAK,CACP,qBAAqB,OAAO,KAAK;gBAC/B,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI;gBACpB,qCAAqC,CACxC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { TraceReader } from '@orcareplay/core';
2
+ import { type RecordedExchange } from '@orcareplay/proxy';
3
+ import type { Output } from '../out.js';
4
+ import type { ParsedArgs } from '../args.js';
5
+ export interface ReplayResult {
6
+ /** The run that was *read*: the recording being replayed or forked. */
7
+ runId: string;
8
+ mode: 'exact' | 'fork';
9
+ matchedExact: number;
10
+ divergences: number;
11
+ /**
12
+ * Requests the recording could not serve.
13
+ *
14
+ * Printed in `replay.done` since the beginning and never returned, so every caller that was not
15
+ * a terminal had to scrape it back out of the log line — while `exitCode` folds it into a single
16
+ * bit. It is the number that says whether a replay actually reproduced the run.
17
+ */
18
+ unmatched: number;
19
+ liveCalls: number;
20
+ exitCode: number;
21
+ /**
22
+ * The run this invocation *wrote*, whichever mode it ran in — a fork's continuation, or an exact
23
+ * replay's record of its own findings. Absent only when `--no-trace` turned the latter off.
24
+ *
25
+ * `forkRunId` is kept as the fork-only name because callers use it to mean "there is a fork
26
+ * here": `--ui` opens it in preference to the parent, and `compare` reads token usage out of it.
27
+ * Neither is true of an exact replay's trace, which holds no exchanges at all.
28
+ */
29
+ traceRunId?: string;
30
+ forkRunId?: string;
31
+ /** Scratch worktree a fork ran in, so a verify command can be run against its result. */
32
+ worktree?: string;
33
+ }
34
+ /**
35
+ * Rebuild the recorded exchanges from a trace.
36
+ *
37
+ * The raw request and response bodies are the authoritative record — they are what makes exact
38
+ * replay exact — so they come back verbatim from the blob store rather than being regenerated
39
+ * from the canonical form.
40
+ */
41
+ export declare function loadExchanges(reader: TraceReader): Promise<RecordedExchange[]>;
42
+ export declare function replayCommand(args: ParsedArgs, out: Output, cwd?: string): Promise<ReplayResult>;
43
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,WAAW,EAMZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAKxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoCpF;AA0GD,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,MAAM,EACX,GAAG,SAAgB,GAClB,OAAO,CAAC,YAAY,CAAC,CAqDvB"}