@a5c-ai/agent-mux-harness-mock 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -4
- package/dist/bin/mock-harness.d.ts.map +1 -1
- package/dist/bin/mock-harness.js +11 -10
- package/dist/bin/mock-harness.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mock-process.d.ts +8 -4
- package/dist/mock-process.d.ts.map +1 -1
- package/dist/mock-process.js +79 -28
- package/dist/mock-process.js.map +1 -1
- package/dist/mocks/index.d.ts +50 -0
- package/dist/mocks/index.d.ts.map +1 -0
- package/dist/mocks/index.js +134 -0
- package/dist/mocks/index.js.map +1 -0
- package/dist/mocks/mock-types.d.ts +145 -0
- package/dist/mocks/mock-types.d.ts.map +1 -0
- package/dist/mocks/mock-types.js +2 -0
- package/dist/mocks/mock-types.js.map +1 -0
- package/dist/mocks/programmatic-mocks.d.ts +41 -0
- package/dist/mocks/programmatic-mocks.d.ts.map +1 -0
- package/dist/mocks/programmatic-mocks.js +229 -0
- package/dist/mocks/programmatic-mocks.js.map +1 -0
- package/dist/mocks/remote-mocks.d.ts +44 -0
- package/dist/mocks/remote-mocks.d.ts.map +1 -0
- package/dist/mocks/remote-mocks.js +332 -0
- package/dist/mocks/remote-mocks.js.map +1 -0
- package/dist/scenarios/hooks.d.ts +5 -0
- package/dist/scenarios/hooks.d.ts.map +1 -1
- package/dist/scenarios/hooks.js +68 -0
- package/dist/scenarios/hooks.js.map +1 -1
- package/dist/scenarios/index.d.ts.map +1 -1
- package/dist/scenarios/index.js +4 -0
- package/dist/scenarios/index.js.map +1 -1
- package/dist/scenarios/per-agent.d.ts +9 -44
- package/dist/scenarios/per-agent.d.ts.map +1 -1
- package/dist/scenarios/per-agent.js +272 -143
- package/dist/scenarios/per-agent.js.map +1 -1
- package/dist/scenarios/wire-format.d.ts +21 -0
- package/dist/scenarios/wire-format.d.ts.map +1 -1
- package/dist/scenarios/wire-format.js +165 -0
- package/dist/scenarios/wire-format.js.map +1 -1
- package/dist/types.d.ts +19 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/websocket-mock.d.ts +45 -1
- package/dist/websocket-mock.d.ts.map +1 -1
- package/dist/websocket-mock.js +211 -1
- package/dist/websocket-mock.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# @a5c-ai/agent-mux-harness-mock
|
|
2
2
|
|
|
3
|
-
Mock harness simulator for [agent-mux](https://github.com/a5c-ai/agent-mux) adapter testing.
|
|
3
|
+
Mock harness simulator for [agent-mux](https://github.com/a5c-ai/agent-mux) adapter testing. It is the canonical home for:
|
|
4
|
+
|
|
5
|
+
- adapter-faithful subprocess scenarios for the currently supported CLI harnesses: `claude`, `codex`, `gemini`, `copilot`, `cursor`, `opencode`, `pi`, `omp`, `openclaw`, `hermes`, `amp`, `droid`, and `qwen`
|
|
6
|
+
- programmatic SDK mock builders for `claude-agent-sdk`, `codex-sdk`, and `pi-sdk`
|
|
7
|
+
- remote transport mock builders for `opencode-http` and `codex-websocket`
|
|
4
8
|
|
|
5
9
|
## Install
|
|
6
10
|
|
|
@@ -14,15 +18,33 @@ Requires Node.js >= 20.9.0.
|
|
|
14
18
|
|
|
15
19
|
```bash
|
|
16
20
|
mock-harness --list
|
|
17
|
-
mock-harness --scenario claude-
|
|
21
|
+
mock-harness --scenario claude:stream-json
|
|
22
|
+
mock-harness --scenario codex:code-generation
|
|
18
23
|
```
|
|
19
24
|
|
|
20
25
|
## Programmatic
|
|
21
26
|
|
|
22
27
|
```ts
|
|
23
|
-
import {
|
|
28
|
+
import { MockProcess, AGENT_SCENARIOS, SUBPROCESS_HARNESS_PROFILES } from '@a5c-ai/agent-mux-harness-mock';
|
|
29
|
+
|
|
30
|
+
const proc = new MockProcess(AGENT_SCENARIOS['claude:stream-json']);
|
|
31
|
+
const supported = Object.keys(SUBPROCESS_HARNESS_PROFILES);
|
|
32
|
+
```
|
|
24
33
|
|
|
25
|
-
|
|
34
|
+
## SDK / Remote Mocks
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import {
|
|
38
|
+
createProgrammaticMockBuilder,
|
|
39
|
+
createRemoteMockBuilder,
|
|
40
|
+
ClaudeAgentSdkMock,
|
|
41
|
+
OpenCodeHttpMock,
|
|
42
|
+
} from '@a5c-ai/agent-mux-harness-mock';
|
|
43
|
+
|
|
44
|
+
const sdkMock = ClaudeAgentSdkMock.basicSuccess();
|
|
45
|
+
const remoteMock = OpenCodeHttpMock.basicSuccess();
|
|
46
|
+
const customProgrammatic = createProgrammaticMockBuilder().name('custom').addTextStream('hello').build();
|
|
47
|
+
const customRemote = createRemoteMockBuilder().name('custom-remote').addEvents([{ type: 'text_delta', data: { delta: 'hi' } }]).build();
|
|
26
48
|
```
|
|
27
49
|
|
|
28
50
|
See the [repository README](https://github.com/a5c-ai/agent-mux#readme) for details.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-harness.d.ts","sourceRoot":"","sources":["../../src/bin/mock-harness.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"mock-harness.d.ts","sourceRoot":"","sources":["../../src/bin/mock-harness.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,UAAU,IAAI;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAwB9C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,GAAG,eAAe,CAerF;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAC5B,GACzE,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
|
package/dist/bin/mock-harness.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// @ts-nocheck -- TODO(harness-mock): narrow scenario.output/process optionality
|
|
3
2
|
/**
|
|
4
3
|
* mock-harness — CLI binary that replays a mock scenario to stdout/stderr.
|
|
5
4
|
*
|
|
@@ -57,17 +56,18 @@ export function parseArgs(argv) {
|
|
|
57
56
|
return out;
|
|
58
57
|
}
|
|
59
58
|
export function applyOverrides(scenario, args) {
|
|
59
|
+
const baseProcess = scenario.process ?? { exitCode: 0 };
|
|
60
60
|
const out = {
|
|
61
61
|
...scenario,
|
|
62
|
-
output: scenario.output.map((c) => ({ ...c, delayMs: args.delay ?? c.delayMs })),
|
|
63
|
-
process: { ...
|
|
62
|
+
output: (scenario.output ?? []).map((c) => ({ ...c, delayMs: args.delay ?? c.delayMs })),
|
|
63
|
+
process: { ...baseProcess, exitCode: baseProcess.exitCode ?? 0 },
|
|
64
64
|
};
|
|
65
65
|
if (args.exitCode !== undefined && Number.isFinite(args.exitCode)) {
|
|
66
66
|
out.process = { ...out.process, exitCode: args.exitCode };
|
|
67
67
|
}
|
|
68
68
|
if (args.failAfter !== undefined && Number.isFinite(args.failAfter)) {
|
|
69
|
-
out.output = out.output.slice(0, args.failAfter);
|
|
70
|
-
out.process = { ...out.process, exitCode: out.process
|
|
69
|
+
out.output = (out.output ?? []).slice(0, args.failAfter);
|
|
70
|
+
out.process = { ...out.process, exitCode: out.process?.exitCode || 1 };
|
|
71
71
|
}
|
|
72
72
|
return out;
|
|
73
73
|
}
|
|
@@ -100,13 +100,14 @@ export async function runMockHarness(args, streams = { stdout: process.stdout, s
|
|
|
100
100
|
});
|
|
101
101
|
}
|
|
102
102
|
await replayScenario(scenario, streams);
|
|
103
|
-
return scenario.process
|
|
103
|
+
return scenario.process?.exitCode ?? 0;
|
|
104
104
|
}
|
|
105
105
|
async function replayScenario(scenario, streams) {
|
|
106
|
-
const
|
|
106
|
+
const proc = scenario.process;
|
|
107
|
+
const startup = proc?.startupDelayMs ?? 0;
|
|
107
108
|
if (startup > 0)
|
|
108
109
|
await wait(startup);
|
|
109
|
-
for (const chunk of scenario.output) {
|
|
110
|
+
for (const chunk of scenario.output ?? []) {
|
|
110
111
|
if (chunk.delayMs && chunk.delayMs > 0)
|
|
111
112
|
await wait(chunk.delayMs);
|
|
112
113
|
if (chunk.stream === 'stdout')
|
|
@@ -114,10 +115,10 @@ async function replayScenario(scenario, streams) {
|
|
|
114
115
|
else
|
|
115
116
|
streams.stderr.write(chunk.data);
|
|
116
117
|
}
|
|
117
|
-
if (
|
|
118
|
+
if (proc?.hang) {
|
|
118
119
|
await new Promise(() => { });
|
|
119
120
|
}
|
|
120
|
-
const shutdown =
|
|
121
|
+
const shutdown = proc?.shutdownDelayMs ?? 0;
|
|
121
122
|
if (shutdown > 0)
|
|
122
123
|
await wait(shutdown);
|
|
123
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-harness.js","sourceRoot":"","sources":["../../src/bin/mock-harness.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"mock-harness.js","sourceRoot":"","sources":["../../src/bin/mock-harness.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|
package/dist/mock-process.d.ts
CHANGED
|
@@ -5,24 +5,27 @@
|
|
|
5
5
|
* simulates file operations, and exits with the configured code/timing.
|
|
6
6
|
*/
|
|
7
7
|
import { EventEmitter } from 'node:events';
|
|
8
|
-
import type { HarnessScenario,
|
|
9
|
-
export declare class MockProcess extends EventEmitter implements
|
|
8
|
+
import type { HarnessScenario, MockExecutionResult, FileOperation, SubprocessMockHandle } from './types.js';
|
|
9
|
+
export declare class MockProcess extends EventEmitter implements SubprocessMockHandle {
|
|
10
10
|
readonly scenario: HarnessScenario;
|
|
11
11
|
readonly pid: number;
|
|
12
|
+
readonly id: number;
|
|
12
13
|
private _exited;
|
|
13
14
|
private _exitCode;
|
|
14
15
|
private _stdout;
|
|
15
16
|
private _stderr;
|
|
16
17
|
private _fileChanges;
|
|
17
|
-
private _killed;
|
|
18
18
|
private _timers;
|
|
19
19
|
private _stdinBuffer;
|
|
20
|
+
private readonly _startedAt;
|
|
20
21
|
constructor(scenario: HarnessScenario);
|
|
21
22
|
get exited(): boolean;
|
|
22
23
|
get exitCode(): number | undefined;
|
|
23
24
|
get stdout(): string;
|
|
24
25
|
get stderr(): string;
|
|
25
26
|
get fileChanges(): FileOperation[];
|
|
27
|
+
stop(): Promise<void>;
|
|
28
|
+
forceStop(): void;
|
|
26
29
|
write(data: string): void;
|
|
27
30
|
kill(signal?: string): void;
|
|
28
31
|
waitForExit(): Promise<{
|
|
@@ -30,11 +33,12 @@ export declare class MockProcess extends EventEmitter implements MockHarnessHand
|
|
|
30
33
|
stdout: string;
|
|
31
34
|
stderr: string;
|
|
32
35
|
}>;
|
|
36
|
+
waitForCompletion(): Promise<MockExecutionResult>;
|
|
33
37
|
/**
|
|
34
38
|
* Start the mock process. Call this after setting up event listeners.
|
|
35
39
|
* Returns the handle for chaining.
|
|
36
40
|
*/
|
|
37
|
-
start():
|
|
41
|
+
start(): SubprocessMockHandle;
|
|
38
42
|
private _emitOutputChunks;
|
|
39
43
|
private _applyFileOperations;
|
|
40
44
|
private _checkInteractions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-process.d.ts","sourceRoot":"","sources":["../src/mock-process.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mock-process.d.ts","sourceRoot":"","sources":["../src/mock-process.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EAEnB,aAAa,EACb,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAapB,qBAAa,WAAY,SAAQ,YAAa,YAAW,oBAAoB;IAC3E,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;gBAE7B,QAAQ,EAAE,eAAe;IAWrC,IAAI,MAAM,IAAI,OAAO,CAAyB;IAC9C,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAA2B;IAC7D,IAAI,MAAM,IAAI,MAAM,CAAyB;IAC7C,IAAI,MAAM,IAAI,MAAM,CAAyB;IAC7C,IAAI,WAAW,IAAI,aAAa,EAAE,CAAmC;IAE/D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,SAAS,IAAI,IAAI;IAIjB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMzB,IAAI,CAAC,MAAM,SAAY,GAAG,IAAI;IAM9B,WAAW,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAmBtE,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAyBvD;;;OAGG;IACH,KAAK,IAAI,oBAAoB;IAiC7B,OAAO,CAAC,iBAAiB;IAiDzB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,QAAQ;CAMjB"}
|
package/dist/mock-process.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck -- TODO(harness-mock): implement full MockHarnessHandle interface
|
|
2
1
|
/**
|
|
3
2
|
* MockProcess — simulates a harness subprocess with configurable behavior.
|
|
4
3
|
*
|
|
@@ -10,24 +9,27 @@ import { EventEmitter } from 'node:events';
|
|
|
10
9
|
// Internal state
|
|
11
10
|
// ---------------------------------------------------------------------------
|
|
12
11
|
let nextPid = 10000;
|
|
12
|
+
let nextHandleId = 1;
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
14
14
|
// MockProcess
|
|
15
15
|
// ---------------------------------------------------------------------------
|
|
16
16
|
export class MockProcess extends EventEmitter {
|
|
17
17
|
scenario;
|
|
18
18
|
pid;
|
|
19
|
+
id;
|
|
19
20
|
_exited = false;
|
|
20
21
|
_exitCode;
|
|
21
22
|
_stdout = '';
|
|
22
23
|
_stderr = '';
|
|
23
24
|
_fileChanges = [];
|
|
24
|
-
_killed = false;
|
|
25
25
|
_timers = [];
|
|
26
26
|
_stdinBuffer = '';
|
|
27
|
+
_startedAt = Date.now();
|
|
27
28
|
constructor(scenario) {
|
|
28
29
|
super();
|
|
29
30
|
this.scenario = scenario;
|
|
30
31
|
this.pid = nextPid++;
|
|
32
|
+
this.id = nextHandleId++;
|
|
31
33
|
}
|
|
32
34
|
// -----------------------------------------------------------------------
|
|
33
35
|
// MockHarnessHandle
|
|
@@ -37,6 +39,13 @@ export class MockProcess extends EventEmitter {
|
|
|
37
39
|
get stdout() { return this._stdout; }
|
|
38
40
|
get stderr() { return this._stderr; }
|
|
39
41
|
get fileChanges() { return [...this._fileChanges]; }
|
|
42
|
+
async stop() {
|
|
43
|
+
this.kill('SIGTERM');
|
|
44
|
+
await this.waitForExit();
|
|
45
|
+
}
|
|
46
|
+
forceStop() {
|
|
47
|
+
this.kill('SIGKILL');
|
|
48
|
+
}
|
|
40
49
|
write(data) {
|
|
41
50
|
if (this._exited)
|
|
42
51
|
throw new Error('Cannot write to exited process');
|
|
@@ -46,7 +55,6 @@ export class MockProcess extends EventEmitter {
|
|
|
46
55
|
kill(signal = 'SIGTERM') {
|
|
47
56
|
if (this._exited)
|
|
48
57
|
return;
|
|
49
|
-
this._killed = true;
|
|
50
58
|
this._cleanup();
|
|
51
59
|
this._exit(signal === 'SIGKILL' ? 137 : 143);
|
|
52
60
|
}
|
|
@@ -68,6 +76,26 @@ export class MockProcess extends EventEmitter {
|
|
|
68
76
|
});
|
|
69
77
|
});
|
|
70
78
|
}
|
|
79
|
+
async waitForCompletion() {
|
|
80
|
+
const result = await this.waitForExit();
|
|
81
|
+
const subprocess = {
|
|
82
|
+
type: 'subprocess',
|
|
83
|
+
exitCode: result.exitCode,
|
|
84
|
+
stdout: result.stdout,
|
|
85
|
+
stderr: result.stderr,
|
|
86
|
+
};
|
|
87
|
+
return {
|
|
88
|
+
success: result.exitCode === 0,
|
|
89
|
+
durationMs: Date.now() - this._startedAt,
|
|
90
|
+
error: result.exitCode === 0
|
|
91
|
+
? undefined
|
|
92
|
+
: {
|
|
93
|
+
code: 'PROCESS_EXIT',
|
|
94
|
+
message: result.stderr.trim() || `Process exited with code ${result.exitCode}`,
|
|
95
|
+
},
|
|
96
|
+
results: subprocess,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
71
99
|
// -----------------------------------------------------------------------
|
|
72
100
|
// Lifecycle
|
|
73
101
|
// -----------------------------------------------------------------------
|
|
@@ -76,23 +104,23 @@ export class MockProcess extends EventEmitter {
|
|
|
76
104
|
* Returns the handle for chaining.
|
|
77
105
|
*/
|
|
78
106
|
start() {
|
|
79
|
-
const
|
|
107
|
+
const process = this.scenario.process ?? { exitCode: 0 };
|
|
108
|
+
const startDelay = process.startupDelayMs ?? 0;
|
|
80
109
|
this._schedule(startDelay, () => {
|
|
81
110
|
this.emit('spawn');
|
|
82
111
|
this._validateExpectations();
|
|
83
|
-
this._emitOutputChunks();
|
|
84
112
|
this._applyFileOperations();
|
|
85
113
|
this._emitSimulatedTelemetry();
|
|
86
|
-
this.
|
|
114
|
+
this._emitOutputChunks();
|
|
87
115
|
});
|
|
88
|
-
if (
|
|
116
|
+
if (process.hang) {
|
|
89
117
|
// Don't schedule exit — process hangs
|
|
90
118
|
return this;
|
|
91
119
|
}
|
|
92
|
-
if (
|
|
93
|
-
this._schedule(
|
|
120
|
+
if (process.crashAfterMs !== undefined) {
|
|
121
|
+
this._schedule(process.crashAfterMs, () => {
|
|
94
122
|
if (!this._exited) {
|
|
95
|
-
const signal =
|
|
123
|
+
const signal = process.crashSignal ?? 'SIGTERM';
|
|
96
124
|
this._exit(signal === 'SIGKILL' ? 137 : 143);
|
|
97
125
|
}
|
|
98
126
|
});
|
|
@@ -102,13 +130,17 @@ export class MockProcess extends EventEmitter {
|
|
|
102
130
|
// -----------------------------------------------------------------------
|
|
103
131
|
// Private
|
|
104
132
|
// -----------------------------------------------------------------------
|
|
105
|
-
_emitOutputChunks() {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
133
|
+
_emitOutputChunks(index = 0) {
|
|
134
|
+
if (!this.scenario.output || index >= this.scenario.output.length) {
|
|
135
|
+
this._scheduleExit();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const chunk = this.scenario.output[index];
|
|
139
|
+
this._schedule(chunk.delayMs ?? 0, () => {
|
|
140
|
+
if (this._exited)
|
|
141
|
+
return;
|
|
142
|
+
const hookStep = this.scenario.runtimeHooks?.steps.find((step) => step.chunkIndex === index);
|
|
143
|
+
const proceed = () => {
|
|
112
144
|
if (chunk.stream === 'stdout') {
|
|
113
145
|
this._stdout += chunk.data;
|
|
114
146
|
this.emit('stdout', chunk.data);
|
|
@@ -118,8 +150,30 @@ export class MockProcess extends EventEmitter {
|
|
|
118
150
|
this.emit('stderr', chunk.data);
|
|
119
151
|
}
|
|
120
152
|
this._checkInteractions(chunk);
|
|
153
|
+
this._emitOutputChunks(index + 1);
|
|
154
|
+
};
|
|
155
|
+
if (!hookStep) {
|
|
156
|
+
proceed();
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this.emit('runtime-hook', hookStep);
|
|
160
|
+
if (hookStep.decision === 'timeout') {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
this._schedule(hookStep.delayMs ?? 0, () => {
|
|
164
|
+
if (this._exited)
|
|
165
|
+
return;
|
|
166
|
+
this.emit('runtime-hook-result', hookStep);
|
|
167
|
+
if (hookStep.decision === 'deny') {
|
|
168
|
+
const line = `${hookStep.errorMessage ?? `Runtime hook denied ${hookStep.kind}`}\n`;
|
|
169
|
+
this._stderr += line;
|
|
170
|
+
this.emit('stderr', line);
|
|
171
|
+
this._exit(2);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
proceed();
|
|
121
175
|
});
|
|
122
|
-
}
|
|
176
|
+
});
|
|
123
177
|
}
|
|
124
178
|
_applyFileOperations() {
|
|
125
179
|
if (!this.scenario.fileOperations)
|
|
@@ -132,6 +186,7 @@ export class MockProcess extends EventEmitter {
|
|
|
132
186
|
this._fileChanges.push(op);
|
|
133
187
|
this.emit('file-operation', op);
|
|
134
188
|
});
|
|
189
|
+
cumulativeDelay += 1;
|
|
135
190
|
}
|
|
136
191
|
}
|
|
137
192
|
_checkInteractions(chunk) {
|
|
@@ -178,19 +233,15 @@ export class MockProcess extends EventEmitter {
|
|
|
178
233
|
}
|
|
179
234
|
}
|
|
180
235
|
_scheduleExit() {
|
|
181
|
-
|
|
236
|
+
const process = this.scenario.process ?? { exitCode: 0 };
|
|
237
|
+
if (process.hang)
|
|
182
238
|
return;
|
|
183
|
-
if (
|
|
239
|
+
if (process.crashAfterMs !== undefined)
|
|
184
240
|
return;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
for (const chunk of this.scenario.output) {
|
|
188
|
-
totalOutputTime += (chunk.delayMs ?? 0);
|
|
189
|
-
}
|
|
190
|
-
const shutdownDelay = this.scenario.process.shutdownDelayMs ?? 0;
|
|
191
|
-
this._schedule(totalOutputTime + shutdownDelay, () => {
|
|
241
|
+
const shutdownDelay = process.shutdownDelayMs ?? 0;
|
|
242
|
+
this._schedule(shutdownDelay, () => {
|
|
192
243
|
if (!this._exited) {
|
|
193
|
-
this._exit(
|
|
244
|
+
this._exit(process.exitCode);
|
|
194
245
|
}
|
|
195
246
|
});
|
|
196
247
|
}
|
package/dist/mock-process.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-process.js","sourceRoot":"","sources":["../src/mock-process.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mock-process.js","sourceRoot":"","sources":["../src/mock-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export type { ProgrammaticMockConfig, RemoteMockConfig, MockStreamEvent, ProgrammaticMockResponse, MockServerInfo, MockConnection, ProgrammaticMockBuilder, RemoteMockBuilder, MockConfigFactory, MockScenarios, } from './mock-types.js';
|
|
2
|
+
export { ProgrammaticMockEngine, createProgrammaticMockBuilder, ClaudeAgentSdkMock, CodexSdkMock, PiSdkMock, programmaticMocks, } from './programmatic-mocks.js';
|
|
3
|
+
export { MockServer, createMockServer, createRemoteMockBuilder, OpenCodeHttpMock, CodexWebSocketMock, remoteMocks, } from './remote-mocks.js';
|
|
4
|
+
import { ProgrammaticMockEngine, createProgrammaticMockBuilder, ClaudeAgentSdkMock, CodexSdkMock, PiSdkMock } from './programmatic-mocks.js';
|
|
5
|
+
import { MockServer, createMockServer, createRemoteMockBuilder, OpenCodeHttpMock, CodexWebSocketMock } from './remote-mocks.js';
|
|
6
|
+
import type { MockConfigFactory, MockScenarios } from './mock-types.js';
|
|
7
|
+
export declare class AdapterMockFactory implements MockConfigFactory {
|
|
8
|
+
claudeAgentSdk(): import("./mock-types.js").ProgrammaticMockBuilder;
|
|
9
|
+
codexSdk(): import("./mock-types.js").ProgrammaticMockBuilder;
|
|
10
|
+
piSdk(): import("./mock-types.js").ProgrammaticMockBuilder;
|
|
11
|
+
opencodeHttp(): import("./mock-types.js").RemoteMockBuilder;
|
|
12
|
+
codexWebSocket(): import("./mock-types.js").RemoteMockBuilder;
|
|
13
|
+
programmatic(): import("./mock-types.js").ProgrammaticMockBuilder;
|
|
14
|
+
remote(): import("./mock-types.js").RemoteMockBuilder;
|
|
15
|
+
}
|
|
16
|
+
export declare const mockScenarios: MockScenarios;
|
|
17
|
+
export declare function createAdapterMock(adapterName: 'claude-agent-sdk' | 'codex-sdk' | 'pi-sdk' | 'opencode-http' | 'codex-websocket', scenario?: 'basic' | 'tools' | 'error' | 'performance'): import("./mock-types.js").ProgrammaticMockConfig | import("./mock-types.js").RemoteMockConfig;
|
|
18
|
+
export declare function testMockScenario(mockConfig: unknown, _expectedEventTypes: string[]): Promise<boolean>;
|
|
19
|
+
export declare const adapterMocks: {
|
|
20
|
+
factory: AdapterMockFactory;
|
|
21
|
+
claude: typeof ClaudeAgentSdkMock;
|
|
22
|
+
codex: {
|
|
23
|
+
sdk: typeof CodexSdkMock;
|
|
24
|
+
websocket: typeof CodexWebSocketMock;
|
|
25
|
+
};
|
|
26
|
+
pi: typeof PiSdkMock;
|
|
27
|
+
opencode: typeof OpenCodeHttpMock;
|
|
28
|
+
scenarios: MockScenarios;
|
|
29
|
+
createMock: typeof createAdapterMock;
|
|
30
|
+
testScenario: typeof testMockScenario;
|
|
31
|
+
programmatic: typeof createProgrammaticMockBuilder;
|
|
32
|
+
remote: typeof createRemoteMockBuilder;
|
|
33
|
+
programmaticMocks: {
|
|
34
|
+
claude: typeof ClaudeAgentSdkMock;
|
|
35
|
+
codex: typeof CodexSdkMock;
|
|
36
|
+
pi: typeof PiSdkMock;
|
|
37
|
+
engine: ProgrammaticMockEngine;
|
|
38
|
+
builder: typeof createProgrammaticMockBuilder;
|
|
39
|
+
};
|
|
40
|
+
remoteMocks: {
|
|
41
|
+
opencode: typeof OpenCodeHttpMock;
|
|
42
|
+
codex: typeof CodexWebSocketMock;
|
|
43
|
+
builder: typeof createRemoteMockBuilder;
|
|
44
|
+
server: typeof createMockServer;
|
|
45
|
+
};
|
|
46
|
+
MockServer: typeof MockServer;
|
|
47
|
+
ProgrammaticMockEngine: typeof ProgrammaticMockEngine;
|
|
48
|
+
createMockServer: typeof createMockServer;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mocks/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,YAAY,EACZ,SAAS,EAEV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAExE,qBAAa,kBAAmB,YAAW,iBAAiB;IAC1D,cAAc;IAId,QAAQ;IAIR,KAAK;IAIL,YAAY;IAIZ,cAAc;IAId,YAAY;IAIZ,MAAM;CAGP;AAED,eAAO,MAAM,aAAa,EAAE,aA0C3B,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,kBAAkB,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,iBAAiB,EAC9F,QAAQ,GAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,aAAuB,iGAoChE;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,OAAO,EACnB,mBAAmB,EAAE,MAAM,EAAE,GAC5B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBxB,CAAC"}
|