@a5c-ai/adapters-harness-mock 5.1.1-staging.00ceebd28cf2

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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +227 -0
  3. package/dist/bin/adapters-harness-mock.d.ts +32 -0
  4. package/dist/bin/adapters-harness-mock.d.ts.map +1 -0
  5. package/dist/bin/adapters-harness-mock.js +155 -0
  6. package/dist/bin/adapters-harness-mock.js.map +1 -0
  7. package/dist/bin/mock-harness.d.ts +2 -0
  8. package/dist/bin/mock-harness.d.ts.map +1 -0
  9. package/dist/bin/mock-harness.js +25 -0
  10. package/dist/bin/mock-harness.js.map +1 -0
  11. package/dist/http-mock.d.ts +39 -0
  12. package/dist/http-mock.d.ts.map +1 -0
  13. package/dist/http-mock.js +206 -0
  14. package/dist/http-mock.js.map +1 -0
  15. package/dist/index.d.ts +9 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +10 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/mock-process.d.ts +57 -0
  20. package/dist/mock-process.d.ts.map +1 -0
  21. package/dist/mock-process.js +388 -0
  22. package/dist/mock-process.js.map +1 -0
  23. package/dist/mocks/index.d.ts +53 -0
  24. package/dist/mocks/index.d.ts.map +1 -0
  25. package/dist/mocks/index.js +140 -0
  26. package/dist/mocks/index.js.map +1 -0
  27. package/dist/mocks/mock-types.d.ts +170 -0
  28. package/dist/mocks/mock-types.d.ts.map +1 -0
  29. package/dist/mocks/mock-types.js +2 -0
  30. package/dist/mocks/mock-types.js.map +1 -0
  31. package/dist/mocks/programmatic-mocks.d.ts +40 -0
  32. package/dist/mocks/programmatic-mocks.d.ts.map +1 -0
  33. package/dist/mocks/programmatic-mocks.js +229 -0
  34. package/dist/mocks/programmatic-mocks.js.map +1 -0
  35. package/dist/mocks/remote-mocks.d.ts +43 -0
  36. package/dist/mocks/remote-mocks.d.ts.map +1 -0
  37. package/dist/mocks/remote-mocks.js +332 -0
  38. package/dist/mocks/remote-mocks.js.map +1 -0
  39. package/dist/mocks/scriptable-transport.d.ts +23 -0
  40. package/dist/mocks/scriptable-transport.d.ts.map +1 -0
  41. package/dist/mocks/scriptable-transport.js +83 -0
  42. package/dist/mocks/scriptable-transport.js.map +1 -0
  43. package/dist/multi-execution.d.ts +1 -0
  44. package/dist/multi-execution.d.ts.map +1 -0
  45. package/dist/multi-execution.js +2 -0
  46. package/dist/multi-execution.js.map +1 -0
  47. package/dist/probe.d.ts +113 -0
  48. package/dist/probe.d.ts.map +1 -0
  49. package/dist/probe.js +722 -0
  50. package/dist/probe.js.map +1 -0
  51. package/dist/scenarios/errors.d.ts +21 -0
  52. package/dist/scenarios/errors.d.ts.map +1 -0
  53. package/dist/scenarios/errors.js +73 -0
  54. package/dist/scenarios/errors.js.map +1 -0
  55. package/dist/scenarios/hooks.d.ts +17 -0
  56. package/dist/scenarios/hooks.d.ts.map +1 -0
  57. package/dist/scenarios/hooks.js +129 -0
  58. package/dist/scenarios/hooks.js.map +1 -0
  59. package/dist/scenarios/index.d.ts +22 -0
  60. package/dist/scenarios/index.d.ts.map +1 -0
  61. package/dist/scenarios/index.js +65 -0
  62. package/dist/scenarios/index.js.map +1 -0
  63. package/dist/scenarios/interactive.d.ts +17 -0
  64. package/dist/scenarios/interactive.d.ts.map +1 -0
  65. package/dist/scenarios/interactive.js +65 -0
  66. package/dist/scenarios/interactive.js.map +1 -0
  67. package/dist/scenarios/per-agent.d.ts +17 -0
  68. package/dist/scenarios/per-agent.d.ts.map +1 -0
  69. package/dist/scenarios/per-agent.js +597 -0
  70. package/dist/scenarios/per-agent.js.map +1 -0
  71. package/dist/scenarios/wire-format.d.ts +56 -0
  72. package/dist/scenarios/wire-format.d.ts.map +1 -0
  73. package/dist/scenarios/wire-format.js +261 -0
  74. package/dist/scenarios/wire-format.js.map +1 -0
  75. package/dist/scenarios.d.ts +29 -0
  76. package/dist/scenarios.d.ts.map +1 -0
  77. package/dist/scenarios.js +141 -0
  78. package/dist/scenarios.js.map +1 -0
  79. package/dist/types.d.ts +463 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +9 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/websocket-mock.d.ts +58 -0
  84. package/dist/websocket-mock.d.ts.map +1 -0
  85. package/dist/websocket-mock.js +367 -0
  86. package/dist/websocket-mock.js.map +1 -0
  87. package/dist/workspace.d.ts +52 -0
  88. package/dist/workspace.d.ts.map +1 -0
  89. package/dist/workspace.js +157 -0
  90. package/dist/workspace.js.map +1 -0
  91. package/package.json +71 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Deterministic wire-format helpers.
3
+ *
4
+ * Produce raw stdout/stderr strings matching the formats the real adapter
5
+ * parseEvent implementations consume. Each helper returns a string ending
6
+ * with a newline where appropriate so chunks can be concatenated cleanly.
7
+ */
8
+ import type { OutputChunk } from '../types.js';
9
+ export interface ToolCall {
10
+ id: string;
11
+ name: string;
12
+ input?: Record<string, unknown>;
13
+ }
14
+ export declare function claudeSystemInit(sessionId: string, tools?: string[]): string;
15
+ export declare function claudeAssistantText(text: string): string;
16
+ export declare function claudeToolUse(call: ToolCall): string;
17
+ export declare function claudeToolResult(toolUseId: string, output: string): string;
18
+ export declare function claudeThinking(text: string): string;
19
+ export declare function claudeStreamEventText(text: string): string;
20
+ export declare function claudeStreamEventThinking(text: string): string;
21
+ export declare function claudeStreamEventToolUse(call: ToolCall, index?: number): string;
22
+ export declare function claudeStreamEventToolInput(partialJson: string, index?: number): string;
23
+ export declare function claudeStreamEventToolStop(index?: number): string;
24
+ export declare function claudeUserToolResult(toolUseId: string, output: unknown): string;
25
+ export declare function claudeMessageStop(): string;
26
+ export declare function claudeResult(sessionId: string, text?: string, cost?: Record<string, unknown>): string;
27
+ export declare function claudeError(message: string): string;
28
+ export declare function codexMessage(text: string): string;
29
+ export declare function codexFunctionCall(call: ToolCall): string;
30
+ export declare function codexFunctionCallOutput(callId: string, output: string): string;
31
+ export declare function codexError(message: string): string;
32
+ export declare function codexThreadStarted(threadId: string): string;
33
+ export declare function codexTurnStarted(id?: string): string;
34
+ export declare function codexItemStarted(item: Record<string, unknown>): string;
35
+ export declare function codexItemCompleted(item: Record<string, unknown>): string;
36
+ export declare function codexTurnCompleted(text?: string, usage?: Record<string, unknown>): string;
37
+ export declare function codexTurnFailed(message: string): string;
38
+ export declare function geminiText(text: string): string;
39
+ export declare function geminiToolCall(call: ToolCall): string;
40
+ export declare function geminiToolResult(id: string, output: string): string;
41
+ export declare function geminiError(message: string): string;
42
+ export declare function genericText(text: string): string;
43
+ export declare function genericToolCall(call: ToolCall): string;
44
+ export declare function genericError(message: string): string;
45
+ export declare function genericSessionStart(sessionId: string, resumed?: boolean): string;
46
+ export declare function genericSessionEnd(finalMessage?: string, usage?: Record<string, unknown>): string;
47
+ export declare function agentTextDelta(text: string, accumulated?: string): string;
48
+ export declare function agentToolCallStart(id: string, name: string, input?: Record<string, unknown>): string;
49
+ export declare function agentToolCallReady(id: string, name: string, input?: Record<string, unknown>): string;
50
+ export declare function agentToolResult(id: string, name: string, output: string, durationMs?: number): string;
51
+ export declare function agentCost(totalUsd: number, inputTokens: number, outputTokens: number): string;
52
+ export declare function agentMessageStop(text: string): string;
53
+ /** Build a stdout chunk with optional delay. */
54
+ export declare function stdoutChunk(data: string, delayMs?: number): OutputChunk;
55
+ /** Build a stderr chunk with optional delay. */
56
+ export declare function stderrChunk(data: string, delayMs?: number): OutputChunk;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-format.d.ts","sourceRoot":"","sources":["../../src/scenarios/wire-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Deterministic wire-format helpers.
3
+ *
4
+ * Produce raw stdout/stderr strings matching the formats the real adapter
5
+ * parseEvent implementations consume. Each helper returns a string ending
6
+ * with a newline where appropriate so chunks can be concatenated cleanly.
7
+ */
8
+ // ---------------------------------------------------------------------------
9
+ // Claude Code JSONL
10
+ // ---------------------------------------------------------------------------
11
+ export function claudeSystemInit(sessionId, tools = []) {
12
+ return JSON.stringify({ type: 'system', subtype: 'init', session_id: sessionId, tools }) + '\n';
13
+ }
14
+ export function claudeAssistantText(text) {
15
+ return JSON.stringify({ type: 'assistant', content: text }) + '\n';
16
+ }
17
+ export function claudeToolUse(call) {
18
+ return JSON.stringify({ type: 'tool_use', id: call.id, name: call.name, input: call.input ?? {} }) + '\n';
19
+ }
20
+ export function claudeToolResult(toolUseId, output) {
21
+ return JSON.stringify({ type: 'tool_result', tool_use_id: toolUseId, content: output }) + '\n';
22
+ }
23
+ export function claudeThinking(text) {
24
+ return JSON.stringify({ type: 'thinking', content: text }) + '\n';
25
+ }
26
+ export function claudeStreamEventText(text) {
27
+ return JSON.stringify({
28
+ type: 'stream_event',
29
+ event: {
30
+ type: 'content_block_delta',
31
+ delta: {
32
+ type: 'text_delta',
33
+ text,
34
+ },
35
+ },
36
+ }) + '\n';
37
+ }
38
+ export function claudeStreamEventThinking(text) {
39
+ return JSON.stringify({
40
+ type: 'stream_event',
41
+ event: {
42
+ type: 'content_block_delta',
43
+ delta: {
44
+ type: 'thinking_delta',
45
+ thinking: text,
46
+ },
47
+ },
48
+ }) + '\n';
49
+ }
50
+ export function claudeStreamEventToolUse(call, index = 0) {
51
+ return JSON.stringify({
52
+ type: 'stream_event',
53
+ event: {
54
+ type: 'content_block_start',
55
+ index,
56
+ content_block: {
57
+ type: 'tool_use',
58
+ id: call.id,
59
+ name: call.name,
60
+ input: call.input ?? {},
61
+ },
62
+ },
63
+ }) + '\n';
64
+ }
65
+ export function claudeStreamEventToolInput(partialJson, index = 0) {
66
+ return JSON.stringify({
67
+ type: 'stream_event',
68
+ event: {
69
+ type: 'content_block_delta',
70
+ index,
71
+ delta: {
72
+ type: 'input_json_delta',
73
+ partial_json: partialJson,
74
+ },
75
+ },
76
+ }) + '\n';
77
+ }
78
+ export function claudeStreamEventToolStop(index = 0) {
79
+ return JSON.stringify({
80
+ type: 'stream_event',
81
+ event: {
82
+ type: 'content_block_stop',
83
+ index,
84
+ },
85
+ }) + '\n';
86
+ }
87
+ export function claudeUserToolResult(toolUseId, output) {
88
+ return JSON.stringify({
89
+ type: 'user',
90
+ parent_tool_use_id: toolUseId,
91
+ tool_use_result: output,
92
+ message: {
93
+ role: 'user',
94
+ content: 'tool result',
95
+ },
96
+ }) + '\n';
97
+ }
98
+ export function claudeMessageStop() {
99
+ return JSON.stringify({
100
+ type: 'stream_event',
101
+ event: {
102
+ type: 'message_stop',
103
+ },
104
+ }) + '\n';
105
+ }
106
+ export function claudeResult(sessionId, text, cost) {
107
+ const obj = { type: 'result', subtype: 'success', session_id: sessionId };
108
+ if (text !== undefined)
109
+ obj['result'] = text;
110
+ if (cost !== undefined)
111
+ obj['cost'] = cost;
112
+ return JSON.stringify(obj) + '\n';
113
+ }
114
+ export function claudeError(message) {
115
+ return JSON.stringify({ type: 'error', message }) + '\n';
116
+ }
117
+ // ---------------------------------------------------------------------------
118
+ // Codex JSONL
119
+ // ---------------------------------------------------------------------------
120
+ export function codexMessage(text) {
121
+ return JSON.stringify({ type: 'message', content: text }) + '\n';
122
+ }
123
+ export function codexFunctionCall(call) {
124
+ return JSON.stringify({
125
+ type: 'function_call',
126
+ id: call.id,
127
+ call_id: call.id,
128
+ name: call.name,
129
+ arguments: JSON.stringify(call.input ?? {}),
130
+ }) + '\n';
131
+ }
132
+ export function codexFunctionCallOutput(callId, output) {
133
+ return JSON.stringify({ type: 'function_call_output', call_id: callId, output }) + '\n';
134
+ }
135
+ export function codexError(message) {
136
+ return JSON.stringify({ type: 'error', message }) + '\n';
137
+ }
138
+ export function codexThreadStarted(threadId) {
139
+ return JSON.stringify({ type: 'thread.started', thread_id: threadId }) + '\n';
140
+ }
141
+ export function codexTurnStarted(id = 'turn_1') {
142
+ return JSON.stringify({ type: 'turn.started', turn_id: id }) + '\n';
143
+ }
144
+ export function codexItemStarted(item) {
145
+ return JSON.stringify({ type: 'item.started', item }) + '\n';
146
+ }
147
+ export function codexItemCompleted(item) {
148
+ return JSON.stringify({ type: 'item.completed', item }) + '\n';
149
+ }
150
+ export function codexTurnCompleted(text, usage) {
151
+ const payload = { type: 'turn.completed' };
152
+ if (text !== undefined)
153
+ payload['text'] = text;
154
+ if (usage !== undefined)
155
+ payload['usage'] = usage;
156
+ return JSON.stringify(payload) + '\n';
157
+ }
158
+ export function codexTurnFailed(message) {
159
+ return JSON.stringify({ type: 'turn.failed', message }) + '\n';
160
+ }
161
+ // ---------------------------------------------------------------------------
162
+ // Gemini / generic JSONL
163
+ // ---------------------------------------------------------------------------
164
+ export function geminiText(text) {
165
+ return JSON.stringify({ type: 'text', content: text }) + '\n';
166
+ }
167
+ export function geminiToolCall(call) {
168
+ return JSON.stringify({ type: 'tool_call', id: call.id, name: call.name, args: call.input ?? {} }) + '\n';
169
+ }
170
+ export function geminiToolResult(id, output) {
171
+ return JSON.stringify({ type: 'tool_result', id, output }) + '\n';
172
+ }
173
+ export function geminiError(message) {
174
+ return JSON.stringify({ type: 'error', message }) + '\n';
175
+ }
176
+ // ---------------------------------------------------------------------------
177
+ // Generic "type+content" (used by copilot/cursor/opencode/pi/omp/openclaw/hermes)
178
+ // ---------------------------------------------------------------------------
179
+ export function genericText(text) {
180
+ return JSON.stringify({ type: 'text', content: text }) + '\n';
181
+ }
182
+ export function genericToolCall(call) {
183
+ return JSON.stringify({ type: 'tool_call', id: call.id, name: call.name, input: call.input ?? {} }) + '\n';
184
+ }
185
+ export function genericError(message) {
186
+ return JSON.stringify({ type: 'error', message }) + '\n';
187
+ }
188
+ export function genericSessionStart(sessionId, resumed = false) {
189
+ return JSON.stringify({ type: 'session_start', session_id: sessionId, resumed }) + '\n';
190
+ }
191
+ export function genericSessionEnd(finalMessage, usage) {
192
+ const payload = { type: 'session_end' };
193
+ if (finalMessage !== undefined)
194
+ payload['final_message'] = finalMessage;
195
+ if (usage !== undefined)
196
+ payload['usage'] = usage;
197
+ return JSON.stringify(payload) + '\n';
198
+ }
199
+ export function agentTextDelta(text, accumulated) {
200
+ return JSON.stringify({
201
+ type: 'text_delta',
202
+ content: text,
203
+ accumulated: accumulated ?? text,
204
+ }) + '\n';
205
+ }
206
+ export function agentToolCallStart(id, name, input) {
207
+ return JSON.stringify({
208
+ type: 'tool_call_start',
209
+ id,
210
+ tool: name,
211
+ name,
212
+ input,
213
+ arguments: input,
214
+ args: input,
215
+ }) + '\n';
216
+ }
217
+ export function agentToolCallReady(id, name, input) {
218
+ const serialized = JSON.stringify(input ?? {});
219
+ return JSON.stringify({
220
+ type: 'tool_call_ready',
221
+ id,
222
+ tool: name,
223
+ name,
224
+ input: serialized,
225
+ }) + '\n';
226
+ }
227
+ export function agentToolResult(id, name, output, durationMs = 0) {
228
+ return JSON.stringify({
229
+ type: 'tool_result',
230
+ id,
231
+ tool: name,
232
+ name,
233
+ result: output,
234
+ output,
235
+ duration: durationMs,
236
+ durationMs,
237
+ }) + '\n';
238
+ }
239
+ export function agentCost(totalUsd, inputTokens, outputTokens) {
240
+ return JSON.stringify({
241
+ type: 'cost',
242
+ totalUsd,
243
+ inputTokens,
244
+ outputTokens,
245
+ }) + '\n';
246
+ }
247
+ export function agentMessageStop(text) {
248
+ return JSON.stringify({ type: 'message_stop', text }) + '\n';
249
+ }
250
+ // ---------------------------------------------------------------------------
251
+ // OutputChunk helpers
252
+ // ---------------------------------------------------------------------------
253
+ /** Build a stdout chunk with optional delay. */
254
+ export function stdoutChunk(data, delayMs = 10) {
255
+ return { stream: 'stdout', data, delayMs };
256
+ }
257
+ /** Build a stderr chunk with optional delay. */
258
+ export function stderrChunk(data, delayMs = 10) {
259
+ return { stream: 'stderr', data, delayMs };
260
+ }
261
+ //# sourceMappingURL=wire-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire-format.js","sourceRoot":"","sources":["../../src/scenarios/wire-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Pre-built scenarios for common harness behaviors.
3
+ *
4
+ * These scenarios model real harness behavior observed via probing,
5
+ * providing ready-made test fixtures for adapter development.
6
+ */
7
+ import type { HarnessScenario } from './types.js';
8
+ /** Claude Code: successful run with streaming JSONL output. */
9
+ export declare const claudeCodeSuccess: HarnessScenario;
10
+ /** Claude Code: run that requires tool approval. */
11
+ export declare const claudeCodeToolApproval: HarnessScenario;
12
+ /** Claude Code: run that times out (hangs). */
13
+ export declare const claudeCodeTimeout: HarnessScenario;
14
+ /** Claude Code: run that crashes. */
15
+ export declare const claudeCodeCrash: HarnessScenario;
16
+ /** Claude Code: run with file modifications. */
17
+ export declare const claudeCodeFileOps: HarnessScenario;
18
+ /** Codex: successful run with JSONL output. */
19
+ export declare const codexSuccess: HarnessScenario;
20
+ /** Codex: run that produces file changes. */
21
+ export declare const codexFileOps: HarnessScenario;
22
+ /** Codex: run that fails with non-zero exit. */
23
+ export declare const codexFailure: HarnessScenario;
24
+ /** Generic: immediate success with no output. */
25
+ export declare const emptySuccess: HarnessScenario;
26
+ /** Generic: slow startup. */
27
+ export declare const slowStartup: HarnessScenario;
28
+ /** Generic: large output (for buffer/backpressure testing). */
29
+ export declare function largeOutput(lineCount: number): HarnessScenario;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.d.ts","sourceRoot":"","sources":["../src/scenarios.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,EAAE,eAU/B,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,EAAE,eAYpC,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,EAAE,eAO/B,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,eAAe,EAAE,eAQ7B,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,EAAE,eAa/B,CAAC;AAMF,+CAA+C;AAC/C,eAAO,MAAM,YAAY,EAAE,eAQ1B,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,YAAY,EAAE,eAW1B,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,YAAY,EAAE,eAO1B,CAAC;AAMF,iDAAiD;AACjD,eAAO,MAAM,YAAY,EAAE,eAK1B,CAAC;AAEF,6BAA6B;AAC7B,eAAO,MAAM,WAAW,EAAE,eAOzB,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAe9D"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Pre-built scenarios for common harness behaviors.
3
+ *
4
+ * These scenarios model real harness behavior observed via probing,
5
+ * providing ready-made test fixtures for adapter development.
6
+ */
7
+ // ---------------------------------------------------------------------------
8
+ // Claude Code scenarios
9
+ // ---------------------------------------------------------------------------
10
+ /** Claude Code: successful run with streaming JSONL output. */
11
+ export const claudeCodeSuccess = {
12
+ harness: 'claude-code',
13
+ name: 'claude-code-success',
14
+ process: { exitCode: 0 },
15
+ output: [
16
+ { stream: 'stdout', data: '{"type":"system","subtype":"init","session_id":"sess_001","tools":[]}\n', delayMs: 50 },
17
+ { stream: 'stdout', data: '{"type":"assistant","subtype":"text","text":"Hello! "}\n', delayMs: 100 },
18
+ { stream: 'stdout', data: '{"type":"assistant","subtype":"text","text":"How can I help?"}\n', delayMs: 50 },
19
+ { stream: 'stdout', data: '{"type":"result","subtype":"success","session_id":"sess_001","cost_usd":0.003,"duration_ms":450,"num_turns":1}\n', delayMs: 20 },
20
+ ],
21
+ };
22
+ /** Claude Code: run that requires tool approval. */
23
+ export const claudeCodeToolApproval = {
24
+ harness: 'claude-code',
25
+ name: 'claude-code-tool-approval',
26
+ process: { exitCode: 0 },
27
+ output: [
28
+ { stream: 'stdout', data: '{"type":"system","subtype":"init","session_id":"sess_002","tools":["Read","Write","Bash"]}\n', delayMs: 50 },
29
+ { stream: 'stdout', data: '{"type":"assistant","subtype":"tool_use","id":"tool_1","name":"Read","input":{"file_path":"/tmp/test.txt"}}\n', delayMs: 100 },
30
+ { stream: 'stderr', data: 'Do you want to allow Read /tmp/test.txt? (y/n)\n', delayMs: 10 },
31
+ ],
32
+ interactions: [
33
+ { triggerPattern: 'Do you want to allow', response: 'y\n', delayMs: 50 },
34
+ ],
35
+ };
36
+ /** Claude Code: run that times out (hangs). */
37
+ export const claudeCodeTimeout = {
38
+ harness: 'claude-code',
39
+ name: 'claude-code-timeout',
40
+ process: { exitCode: 0, hang: true },
41
+ output: [
42
+ { stream: 'stdout', data: '{"type":"system","subtype":"init","session_id":"sess_003","tools":[]}\n', delayMs: 50 },
43
+ ],
44
+ };
45
+ /** Claude Code: run that crashes. */
46
+ export const claudeCodeCrash = {
47
+ harness: 'claude-code',
48
+ name: 'claude-code-crash',
49
+ process: { exitCode: 1, crashAfterMs: 200, crashSignal: 'SIGTERM' },
50
+ output: [
51
+ { stream: 'stdout', data: '{"type":"system","subtype":"init","session_id":"sess_004","tools":[]}\n', delayMs: 50 },
52
+ { stream: 'stderr', data: 'Error: Connection refused\n', delayMs: 100 },
53
+ ],
54
+ };
55
+ /** Claude Code: run with file modifications. */
56
+ export const claudeCodeFileOps = {
57
+ harness: 'claude-code',
58
+ name: 'claude-code-file-ops',
59
+ process: { exitCode: 0 },
60
+ output: [
61
+ { stream: 'stdout', data: '{"type":"system","subtype":"init","session_id":"sess_005","tools":["Write"]}\n', delayMs: 50 },
62
+ { stream: 'stdout', data: '{"type":"assistant","subtype":"tool_use","id":"tool_1","name":"Write","input":{"file_path":"/tmp/output.txt","content":"hello world"}}\n', delayMs: 100 },
63
+ { stream: 'stdout', data: '{"type":"assistant","subtype":"tool_result","id":"tool_1","output":"File written"}\n', delayMs: 20 },
64
+ { stream: 'stdout', data: '{"type":"result","subtype":"success","session_id":"sess_005","cost_usd":0.005}\n', delayMs: 20 },
65
+ ],
66
+ fileOperations: [
67
+ { type: 'create', path: '/tmp/output.txt', content: 'hello world' },
68
+ ],
69
+ };
70
+ // ---------------------------------------------------------------------------
71
+ // Codex scenarios
72
+ // ---------------------------------------------------------------------------
73
+ /** Codex: successful run with JSONL output. */
74
+ export const codexSuccess = {
75
+ harness: 'codex',
76
+ name: 'codex-success',
77
+ process: { exitCode: 0 },
78
+ output: [
79
+ { stream: 'stdout', data: '{"type":"message","role":"assistant","content":[{"type":"output_text","text":"Here is the solution."}]}\n', delayMs: 100 },
80
+ { stream: 'stdout', data: '{"type":"completed","status":"completed"}\n', delayMs: 50 },
81
+ ],
82
+ };
83
+ /** Codex: run that produces file changes. */
84
+ export const codexFileOps = {
85
+ harness: 'codex',
86
+ name: 'codex-file-ops',
87
+ process: { exitCode: 0 },
88
+ output: [
89
+ { stream: 'stdout', data: '{"type":"message","role":"assistant","content":[{"type":"output_text","text":"I will create a file."}]}\n', delayMs: 100 },
90
+ { stream: 'stdout', data: '{"type":"completed","status":"completed"}\n', delayMs: 50 },
91
+ ],
92
+ fileOperations: [
93
+ { type: 'create', path: '/tmp/codex-output.ts', content: 'export const x = 1;\n' },
94
+ ],
95
+ };
96
+ /** Codex: run that fails with non-zero exit. */
97
+ export const codexFailure = {
98
+ harness: 'codex',
99
+ name: 'codex-failure',
100
+ process: { exitCode: 1 },
101
+ output: [
102
+ { stream: 'stderr', data: 'Error: Invalid API key\n', delayMs: 50 },
103
+ ],
104
+ };
105
+ // ---------------------------------------------------------------------------
106
+ // Generic scenarios
107
+ // ---------------------------------------------------------------------------
108
+ /** Generic: immediate success with no output. */
109
+ export const emptySuccess = {
110
+ harness: 'custom',
111
+ name: 'empty-success',
112
+ process: { exitCode: 0 },
113
+ output: [],
114
+ };
115
+ /** Generic: slow startup. */
116
+ export const slowStartup = {
117
+ harness: 'custom',
118
+ name: 'slow-startup',
119
+ process: { exitCode: 0, startupDelayMs: 500 },
120
+ output: [
121
+ { stream: 'stdout', data: 'ready\n', delayMs: 0 },
122
+ ],
123
+ };
124
+ /** Generic: large output (for buffer/backpressure testing). */
125
+ export function largeOutput(lineCount) {
126
+ const output = [];
127
+ for (let i = 0; i < lineCount; i++) {
128
+ output.push({
129
+ stream: 'stdout',
130
+ data: `{"line":${i},"data":"${'x'.repeat(200)}"}\n`,
131
+ delayMs: 0,
132
+ });
133
+ }
134
+ return {
135
+ harness: 'custom',
136
+ name: `large-output-${lineCount}`,
137
+ process: { exitCode: 0 },
138
+ output,
139
+ };
140
+ }
141
+ //# sourceMappingURL=scenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.js","sourceRoot":"","sources":["../src/scenarios.ts"],"names":[],"mappings":"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"}