@a5c-ai/adapters-harness-mock 5.1.1-staging.52898ebfc24f
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/LICENSE +21 -0
- package/README.md +227 -0
- package/dist/bin/adapters-harness-mock.d.ts +32 -0
- package/dist/bin/adapters-harness-mock.d.ts.map +1 -0
- package/dist/bin/adapters-harness-mock.js +155 -0
- package/dist/bin/adapters-harness-mock.js.map +1 -0
- package/dist/bin/mock-harness.d.ts +2 -0
- package/dist/bin/mock-harness.d.ts.map +1 -0
- package/dist/bin/mock-harness.js +25 -0
- package/dist/bin/mock-harness.js.map +1 -0
- package/dist/http-mock.d.ts +39 -0
- package/dist/http-mock.d.ts.map +1 -0
- package/dist/http-mock.js +206 -0
- package/dist/http-mock.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mock-process.d.ts +57 -0
- package/dist/mock-process.d.ts.map +1 -0
- package/dist/mock-process.js +388 -0
- package/dist/mock-process.js.map +1 -0
- package/dist/mocks/index.d.ts +53 -0
- package/dist/mocks/index.d.ts.map +1 -0
- package/dist/mocks/index.js +140 -0
- package/dist/mocks/index.js.map +1 -0
- package/dist/mocks/mock-types.d.ts +170 -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 +40 -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 +43 -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/mocks/scriptable-transport.d.ts +23 -0
- package/dist/mocks/scriptable-transport.d.ts.map +1 -0
- package/dist/mocks/scriptable-transport.js +83 -0
- package/dist/mocks/scriptable-transport.js.map +1 -0
- package/dist/multi-execution.d.ts +1 -0
- package/dist/multi-execution.d.ts.map +1 -0
- package/dist/multi-execution.js +2 -0
- package/dist/multi-execution.js.map +1 -0
- package/dist/probe.d.ts +113 -0
- package/dist/probe.d.ts.map +1 -0
- package/dist/probe.js +722 -0
- package/dist/probe.js.map +1 -0
- package/dist/scenarios/errors.d.ts +21 -0
- package/dist/scenarios/errors.d.ts.map +1 -0
- package/dist/scenarios/errors.js +73 -0
- package/dist/scenarios/errors.js.map +1 -0
- package/dist/scenarios/hooks.d.ts +17 -0
- package/dist/scenarios/hooks.d.ts.map +1 -0
- package/dist/scenarios/hooks.js +129 -0
- package/dist/scenarios/hooks.js.map +1 -0
- package/dist/scenarios/index.d.ts +22 -0
- package/dist/scenarios/index.d.ts.map +1 -0
- package/dist/scenarios/index.js +65 -0
- package/dist/scenarios/index.js.map +1 -0
- package/dist/scenarios/interactive.d.ts +17 -0
- package/dist/scenarios/interactive.d.ts.map +1 -0
- package/dist/scenarios/interactive.js +65 -0
- package/dist/scenarios/interactive.js.map +1 -0
- package/dist/scenarios/per-agent.d.ts +17 -0
- package/dist/scenarios/per-agent.d.ts.map +1 -0
- package/dist/scenarios/per-agent.js +597 -0
- package/dist/scenarios/per-agent.js.map +1 -0
- package/dist/scenarios/wire-format.d.ts +56 -0
- package/dist/scenarios/wire-format.d.ts.map +1 -0
- package/dist/scenarios/wire-format.js +261 -0
- package/dist/scenarios/wire-format.js.map +1 -0
- package/dist/scenarios.d.ts +29 -0
- package/dist/scenarios.d.ts.map +1 -0
- package/dist/scenarios.js +141 -0
- package/dist/scenarios.js.map +1 -0
- package/dist/types.d.ts +463 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/websocket-mock.d.ts +58 -0
- package/dist/websocket-mock.d.ts.map +1 -0
- package/dist/websocket-mock.js +367 -0
- package/dist/websocket-mock.js.map +1 -0
- package/dist/workspace.d.ts +52 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +157 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +71 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 a5c-ai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# @a5c-ai/adapters-harness-mock
|
|
2
|
+
|
|
3
|
+
This README is the canonical package documentation for `@a5c-ai/adapters-harness-mock`.
|
|
4
|
+
Canonical package doc path: `packages/adapters/harness-mock/README.md`.
|
|
5
|
+
The repository reference mirror lives at `docs/adapters/reference/14-harness-mock.md` and
|
|
6
|
+
should match this file.
|
|
7
|
+
|
|
8
|
+
`@a5c-ai/adapters-harness-mock` is the public test-fixture package at
|
|
9
|
+
`packages/adapters/harness-mock/` for adapters harness simulations. It covers four
|
|
10
|
+
execution shapes:
|
|
11
|
+
|
|
12
|
+
- subprocess fixtures and parser-backed scenario registries for the current CLI harness matrix
|
|
13
|
+
- in-process helpers such as `MockProcess`, `WorkspaceSandbox`, `resolveScenario`, and `listScenarioNames`
|
|
14
|
+
- bindable transport mocks via `HttpServerMock`, `WebSocketServerMock`, and the adapter-oriented remote builders
|
|
15
|
+
- programmatic SDK-style mocks and real-harness probe helpers
|
|
16
|
+
- offline probe baseline contracts for drift review
|
|
17
|
+
|
|
18
|
+
Execution shapes: `subprocess`, `sdk`, `http`, `websocket`.
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install --save-dev @a5c-ai/adapters-harness-mock
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Requires Node.js `>=20.9.0`.
|
|
27
|
+
|
|
28
|
+
## CLI
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
adapters-harness-mock --list
|
|
32
|
+
adapters-harness-mock --agent claude --list
|
|
33
|
+
adapters-harness-mock --scenario claude:stream-json
|
|
34
|
+
adapters-harness-mock --agent cursor --scenario error
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`--agent <name>` filters `--list` to `<name>:*` scenarios and lets bare
|
|
38
|
+
`--scenario` values resolve within that prefix. For example,
|
|
39
|
+
`adapters-harness-mock --agent cursor --scenario error` resolves `cursor:error`.
|
|
40
|
+
|
|
41
|
+
## Supported Surfaces
|
|
42
|
+
|
|
43
|
+
### Subprocess registry
|
|
44
|
+
|
|
45
|
+
The subprocess surface is centered on these exports:
|
|
46
|
+
|
|
47
|
+
- `AGENT_SCENARIOS`
|
|
48
|
+
- `SUBPROCESS_HARNESS_PROFILES`
|
|
49
|
+
- `SUBPROCESS_SCENARIO_EXPECTATIONS`
|
|
50
|
+
- `resolveScenario(name)`
|
|
51
|
+
- `listScenarioNames()`
|
|
52
|
+
- `adapters-harness-mock --list`
|
|
53
|
+
|
|
54
|
+
The canonical subprocess harness keys are:
|
|
55
|
+
`claude`, `codex`, `gemini`, `copilot`, `cursor`, `opencode`, `pi`, `omp`,
|
|
56
|
+
`openclaw`, `hermes`, `amp`, `droid`, and `qwen`.
|
|
57
|
+
|
|
58
|
+
Legacy aliases such as `claude:basic-text`, `cursor:basic-text`, and
|
|
59
|
+
`pi:basic-text` still resolve through `AGENT_SCENARIOS`, but new tests and docs
|
|
60
|
+
should prefer the canonical names from `SUBPROCESS_HARNESS_PROFILES`.
|
|
61
|
+
|
|
62
|
+
### SDK and remote builders
|
|
63
|
+
|
|
64
|
+
The package also exports higher-level mock builders and named presets for these
|
|
65
|
+
non-subprocess adapters:
|
|
66
|
+
|
|
67
|
+
- SDK/programmatic: `claude-agent-sdk`, `codex-sdk`, `pi-sdk`
|
|
68
|
+
- Remote transports: `opencode-http`, `codex-websocket`
|
|
69
|
+
|
|
70
|
+
Important exports in this layer include:
|
|
71
|
+
|
|
72
|
+
- `createProgrammaticMockBuilder`
|
|
73
|
+
- `createRemoteMockBuilder`
|
|
74
|
+
- `createScriptableTransportBuilder`
|
|
75
|
+
- `ClaudeAgentSdkMock`, `CodexSdkMock`, `PiSdkMock`
|
|
76
|
+
- `OpenCodeHttpMock`, `CodexWebSocketMock`
|
|
77
|
+
- `AdapterMockFactory`, `adapterMocks`, `mockScenarios`
|
|
78
|
+
- `MockServer`, `createMockServer`
|
|
79
|
+
|
|
80
|
+
### Low-level helpers
|
|
81
|
+
|
|
82
|
+
The top-level entrypoint also exports:
|
|
83
|
+
|
|
84
|
+
- `MockProcess`
|
|
85
|
+
- `WorkspaceSandbox`
|
|
86
|
+
- `HttpServerMock`
|
|
87
|
+
- `WebSocketServerMock`
|
|
88
|
+
- `probeHarness`, `probeAllHarnesses`, `compareProfiles`, `PROBE_CONFIGS`
|
|
89
|
+
|
|
90
|
+
## Usage
|
|
91
|
+
|
|
92
|
+
### Subprocess fixtures
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
import {
|
|
96
|
+
AGENT_SCENARIOS,
|
|
97
|
+
MockProcess,
|
|
98
|
+
SUBPROCESS_HARNESS_PROFILES,
|
|
99
|
+
SUBPROCESS_SCENARIO_EXPECTATIONS,
|
|
100
|
+
WorkspaceSandbox,
|
|
101
|
+
} from '@a5c-ai/adapters-harness-mock';
|
|
102
|
+
|
|
103
|
+
const scenarioName = SUBPROCESS_HARNESS_PROFILES.cursor.scenarios[0];
|
|
104
|
+
const scenario = AGENT_SCENARIOS[scenarioName];
|
|
105
|
+
const proc = new MockProcess(scenario);
|
|
106
|
+
const sandbox = new WorkspaceSandbox();
|
|
107
|
+
|
|
108
|
+
proc.start();
|
|
109
|
+
const result = await proc.waitForExit();
|
|
110
|
+
|
|
111
|
+
if (scenario.fileOperations) {
|
|
112
|
+
sandbox.applyOperations(scenario.fileOperations);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
console.log(result.exitCode);
|
|
116
|
+
console.log(SUBPROCESS_SCENARIO_EXPECTATIONS[scenarioName]);
|
|
117
|
+
|
|
118
|
+
sandbox.dispose();
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Programmatic and remote builders
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
import {
|
|
125
|
+
ClaudeAgentSdkMock,
|
|
126
|
+
CodexWebSocketMock,
|
|
127
|
+
MockServer,
|
|
128
|
+
createProgrammaticMockBuilder,
|
|
129
|
+
createRemoteMockBuilder,
|
|
130
|
+
} from '@a5c-ai/adapters-harness-mock';
|
|
131
|
+
|
|
132
|
+
const sdkPreset = ClaudeAgentSdkMock.toolCalling();
|
|
133
|
+
const customSdk = createProgrammaticMockBuilder()
|
|
134
|
+
.name('custom-sdk')
|
|
135
|
+
.addTextStream('hello from a custom stream')
|
|
136
|
+
.withCost(20, 10)
|
|
137
|
+
.build();
|
|
138
|
+
|
|
139
|
+
const remotePreset = CodexWebSocketMock.connectionDrop();
|
|
140
|
+
const customRemote = createRemoteMockBuilder()
|
|
141
|
+
.name('custom-remote')
|
|
142
|
+
.withServer({ port: 0 })
|
|
143
|
+
.addEvents([{ type: 'text_delta', data: { delta: 'hi' }, delayMs: 5 }])
|
|
144
|
+
.build();
|
|
145
|
+
|
|
146
|
+
const server = new MockServer(remotePreset);
|
|
147
|
+
await server.start();
|
|
148
|
+
await server.stop();
|
|
149
|
+
|
|
150
|
+
void sdkPreset;
|
|
151
|
+
void customSdk;
|
|
152
|
+
void customRemote;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Bindable transport mocks
|
|
156
|
+
|
|
157
|
+
`HttpServerMock` and `WebSocketServerMock` are lower-level scenario-backed
|
|
158
|
+
servers. They bind real local ports, which makes them useful when you want an
|
|
159
|
+
external client to connect to a scripted HTTP or WebSocket endpoint.
|
|
160
|
+
|
|
161
|
+
## Probe Helpers
|
|
162
|
+
|
|
163
|
+
`probeHarness` and `probeAllHarnesses` execute real harness binaries. They are
|
|
164
|
+
for drift detection and fixture maintenance, not for pure unit tests.
|
|
165
|
+
|
|
166
|
+
The built-in `PROBE_CONFIGS` now cover the subprocess harness matrix:
|
|
167
|
+
|
|
168
|
+
- `claude-code`
|
|
169
|
+
- `codex`
|
|
170
|
+
- `gemini`
|
|
171
|
+
- `copilot`
|
|
172
|
+
- `cursor`
|
|
173
|
+
- `opencode`
|
|
174
|
+
- `pi`
|
|
175
|
+
- `omp`
|
|
176
|
+
- `openclaw`
|
|
177
|
+
- `hermes`
|
|
178
|
+
- `amp`
|
|
179
|
+
- `droid`
|
|
180
|
+
- `qwen`
|
|
181
|
+
|
|
182
|
+
They also cover the SDK/programmatic targets as fixture-backed contract probes:
|
|
183
|
+
|
|
184
|
+
- `claude-agent-sdk`
|
|
185
|
+
- `codex-sdk`
|
|
186
|
+
- `pi-sdk`
|
|
187
|
+
|
|
188
|
+
They also cover the transport-oriented targets:
|
|
189
|
+
|
|
190
|
+
- `codex-websocket`
|
|
191
|
+
- `opencode-http`
|
|
192
|
+
|
|
193
|
+
Each probe profile now records:
|
|
194
|
+
|
|
195
|
+
- `executionType`
|
|
196
|
+
- `outputFormat` and `outputFormatTraits`
|
|
197
|
+
- `supportsStdin` and `stdinSignals`
|
|
198
|
+
- scenario exit codes such as `version`, `help`, `success`, and `error`
|
|
199
|
+
- relevant `environmentVariables`, `fileOperationPatterns`, and `cliPatterns`
|
|
200
|
+
- `availability` and `probeNotes`
|
|
201
|
+
|
|
202
|
+
Checked-in baseline contracts live at
|
|
203
|
+
`packages/adapters/harness-mock/tests/fixtures/probes/baseline-profiles.json`.
|
|
204
|
+
|
|
205
|
+
CI vs local/manual:
|
|
206
|
+
|
|
207
|
+
- CI-safe: fixture coverage checks, contract-shape validation, the node-based
|
|
208
|
+
offline probe tests in `tests/probe-offline.test.ts`, and the offline-only SDK
|
|
209
|
+
contract profiles for `claude-agent-sdk`, `codex-sdk`, and `pi-sdk`
|
|
210
|
+
- Local/manual: authenticated vendor CLI probes and transport startup probes for
|
|
211
|
+
binaries that are not expected to exist in CI
|
|
212
|
+
- Offline-only: SDK entries materialize reviewed contract profiles without
|
|
213
|
+
executing a harness binary, so drift review happens through the checked-in
|
|
214
|
+
fixture rather than a live probe run
|
|
215
|
+
|
|
216
|
+
## Limitations
|
|
217
|
+
|
|
218
|
+
- `MockProcess` is an in-process emitter. It does not spawn a real subprocess.
|
|
219
|
+
- `HttpServerMock`, `WebSocketServerMock`, and `MockServer` bind local ports and
|
|
220
|
+
are therefore heavier than the pure subprocess fixtures.
|
|
221
|
+
- Probe helpers execute real binaries and may require installed harnesses,
|
|
222
|
+
credentials, transport startup support, and a writable output directory.
|
|
223
|
+
- The package replays scripted behavior; it does not synthesize fresh model output.
|
|
224
|
+
|
|
225
|
+
## License
|
|
226
|
+
|
|
227
|
+
MIT © a5c-ai
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* adapters-harness-mock — CLI binary that replays a mock scenario to stdout/stderr.
|
|
4
|
+
*
|
|
5
|
+
* Flags:
|
|
6
|
+
* --scenario <name> Scenario id (see `--list`).
|
|
7
|
+
* --agent <name> Restrict resolution to a specific agent prefix.
|
|
8
|
+
* --delay <ms> Per-chunk delay override.
|
|
9
|
+
* --stdin-echo Echo stdin back to stdout (for interaction tests).
|
|
10
|
+
* --exit-code <n> Force exit code after scenario finishes.
|
|
11
|
+
* --fail-after <n> Exit with code n after emitting n output chunks.
|
|
12
|
+
* --list Print scenario names and exit.
|
|
13
|
+
*/
|
|
14
|
+
import type { HarnessScenario } from '../types.js';
|
|
15
|
+
interface Args {
|
|
16
|
+
scenario?: string;
|
|
17
|
+
agent?: string;
|
|
18
|
+
delay?: number;
|
|
19
|
+
stdinEcho: boolean;
|
|
20
|
+
exitCode?: number;
|
|
21
|
+
failAfter?: number;
|
|
22
|
+
list: boolean;
|
|
23
|
+
help: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function parseArgs(argv: string[]): Args;
|
|
26
|
+
export declare function applyOverrides(scenario: HarnessScenario, args: Args): HarnessScenario;
|
|
27
|
+
export declare function runMockHarness(args: Args, streams?: {
|
|
28
|
+
stdout: NodeJS.WritableStream;
|
|
29
|
+
stderr: NodeJS.WritableStream;
|
|
30
|
+
stdin?: NodeJS.ReadableStream;
|
|
31
|
+
}): Promise<number>;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters-harness-mock.d.ts","sourceRoot":"","sources":["../../src/bin/adapters-harness-mock.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,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,CAyCjB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* adapters-harness-mock — CLI binary that replays a mock scenario to stdout/stderr.
|
|
4
|
+
*
|
|
5
|
+
* Flags:
|
|
6
|
+
* --scenario <name> Scenario id (see `--list`).
|
|
7
|
+
* --agent <name> Restrict resolution to a specific agent prefix.
|
|
8
|
+
* --delay <ms> Per-chunk delay override.
|
|
9
|
+
* --stdin-echo Echo stdin back to stdout (for interaction tests).
|
|
10
|
+
* --exit-code <n> Force exit code after scenario finishes.
|
|
11
|
+
* --fail-after <n> Exit with code n after emitting n output chunks.
|
|
12
|
+
* --list Print scenario names and exit.
|
|
13
|
+
*/
|
|
14
|
+
import { resolveScenario, listScenarioNames } from '../scenarios/index.js';
|
|
15
|
+
import { MockProcess } from '../mock-process.js';
|
|
16
|
+
export function parseArgs(argv) {
|
|
17
|
+
const out = { stdinEcho: false, list: false, help: false };
|
|
18
|
+
for (let i = 0; i < argv.length; i++) {
|
|
19
|
+
const a = argv[i];
|
|
20
|
+
const next = () => {
|
|
21
|
+
const v = argv[++i];
|
|
22
|
+
if (v === undefined)
|
|
23
|
+
throw new Error(`Missing value for ${a}`);
|
|
24
|
+
return v;
|
|
25
|
+
};
|
|
26
|
+
switch (a) {
|
|
27
|
+
case '--scenario':
|
|
28
|
+
out.scenario = next();
|
|
29
|
+
break;
|
|
30
|
+
case '--agent':
|
|
31
|
+
out.agent = next();
|
|
32
|
+
break;
|
|
33
|
+
case '--delay':
|
|
34
|
+
out.delay = Number(next());
|
|
35
|
+
break;
|
|
36
|
+
case '--stdin-echo':
|
|
37
|
+
out.stdinEcho = true;
|
|
38
|
+
break;
|
|
39
|
+
case '--exit-code':
|
|
40
|
+
out.exitCode = Number(next());
|
|
41
|
+
break;
|
|
42
|
+
case '--fail-after':
|
|
43
|
+
out.failAfter = Number(next());
|
|
44
|
+
break;
|
|
45
|
+
case '--list':
|
|
46
|
+
out.list = true;
|
|
47
|
+
break;
|
|
48
|
+
case '-h':
|
|
49
|
+
case '--help':
|
|
50
|
+
out.help = true;
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
if (a && a.startsWith('--'))
|
|
54
|
+
throw new Error(`Unknown flag: ${a}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
export function applyOverrides(scenario, args) {
|
|
60
|
+
const baseProcess = scenario.process ?? { exitCode: 0 };
|
|
61
|
+
const out = {
|
|
62
|
+
...scenario,
|
|
63
|
+
output: (scenario.output ?? []).map((c) => ({ ...c, delayMs: args.delay ?? c.delayMs })),
|
|
64
|
+
process: { ...baseProcess, exitCode: baseProcess.exitCode ?? 0 },
|
|
65
|
+
};
|
|
66
|
+
if (args.exitCode !== undefined && Number.isFinite(args.exitCode)) {
|
|
67
|
+
out.process = { ...out.process, exitCode: args.exitCode };
|
|
68
|
+
}
|
|
69
|
+
if (args.failAfter !== undefined && Number.isFinite(args.failAfter)) {
|
|
70
|
+
out.output = (out.output ?? []).slice(0, args.failAfter);
|
|
71
|
+
out.process = { ...out.process, exitCode: out.process?.exitCode || 1 };
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
export async function runMockHarness(args, streams = { stdout: process.stdout, stderr: process.stderr, stdin: process.stdin }) {
|
|
76
|
+
if (args.help) {
|
|
77
|
+
streams.stderr.write(helpText());
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
if (args.list) {
|
|
81
|
+
for (const n of listScenarioNames(args.agent))
|
|
82
|
+
streams.stdout.write(n + '\n');
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
if (!args.scenario) {
|
|
86
|
+
streams.stderr.write('error: --scenario is required (use --list)\n');
|
|
87
|
+
return 2;
|
|
88
|
+
}
|
|
89
|
+
const resolved = resolveScenario(args.scenario, args.agent);
|
|
90
|
+
if (!resolved) {
|
|
91
|
+
streams.stderr.write(`error: unknown scenario: ${args.scenario}\n`);
|
|
92
|
+
return 2;
|
|
93
|
+
}
|
|
94
|
+
const scenario = applyOverrides(resolved, args);
|
|
95
|
+
// Stdin echo: pipe stdin lines straight to stdout so interaction tests
|
|
96
|
+
// can verify which approval response arrived.
|
|
97
|
+
if (args.stdinEcho && streams.stdin) {
|
|
98
|
+
streams.stdin.on('data', (chunk) => {
|
|
99
|
+
const s = typeof chunk === 'string' ? chunk : chunk.toString('utf8');
|
|
100
|
+
streams.stdout.write(`stdin:${s}`);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
const proc = new MockProcess(scenario);
|
|
104
|
+
proc.on('stdout', (data) => streams.stdout.write(data));
|
|
105
|
+
proc.on('stderr', (data) => streams.stderr.write(data));
|
|
106
|
+
if (streams.stdin) {
|
|
107
|
+
streams.stdin.on('data', (chunk) => {
|
|
108
|
+
const s = typeof chunk === 'string' ? chunk : chunk.toString('utf8');
|
|
109
|
+
proc.write(s);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
proc.start();
|
|
113
|
+
const result = await proc.waitForExit();
|
|
114
|
+
return result.exitCode;
|
|
115
|
+
}
|
|
116
|
+
function helpText() {
|
|
117
|
+
return [
|
|
118
|
+
'adapters-harness-mock — replay a mock agent scenario.',
|
|
119
|
+
'',
|
|
120
|
+
'Usage: adapters-harness-mock --scenario <name> [--agent <name>] [flags]',
|
|
121
|
+
'',
|
|
122
|
+
'Flags:',
|
|
123
|
+
' --scenario <name> Scenario id (try --list); bare names resolve within --agent',
|
|
124
|
+
' --agent <name> Restrict --list and scenario lookup to <name>:*',
|
|
125
|
+
' --delay <ms> Override per-chunk delay',
|
|
126
|
+
' --stdin-echo Echo stdin back to stdout',
|
|
127
|
+
' --exit-code <n> Force process exit code',
|
|
128
|
+
' --fail-after <n> Truncate scenario to n chunks and fail',
|
|
129
|
+
' --list List scenario names (filtered by --agent)',
|
|
130
|
+
' -h, --help Show this help',
|
|
131
|
+
'',
|
|
132
|
+
].join('\n');
|
|
133
|
+
}
|
|
134
|
+
// Entrypoint guard — invoked only when executed as a script.
|
|
135
|
+
const invokedAsScript = (() => {
|
|
136
|
+
try {
|
|
137
|
+
const argv1 = process.argv[1];
|
|
138
|
+
if (!argv1)
|
|
139
|
+
return false;
|
|
140
|
+
// Match on known filename fragment rather than import.meta.url, which
|
|
141
|
+
// requires ESM-only syntax that plays poorly with the tsconfig setup.
|
|
142
|
+
return /adapters-harness-mock(\.js|\.ts)?$/.test(argv1);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
})();
|
|
148
|
+
if (invokedAsScript) {
|
|
149
|
+
const args = parseArgs(process.argv.slice(2));
|
|
150
|
+
runMockHarness(args).then((code) => { process.exit(code); }, (err) => {
|
|
151
|
+
process.stderr.write(`adapters-harness-mock failed: ${err.message}\n`);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=adapters-harness-mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters-harness-mock.js","sourceRoot":"","sources":["../../src/bin/adapters-harness-mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-harness.d.ts","sourceRoot":"","sources":["../../src/bin/mock-harness.ts"],"names":[],"mappings":";AAEA,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export * from './adapters-harness-mock.js';
|
|
3
|
+
import { parseArgs, runMockHarness } from './adapters-harness-mock.js';
|
|
4
|
+
const invokedAsScript = (() => {
|
|
5
|
+
try {
|
|
6
|
+
const argv1 = process.argv[1];
|
|
7
|
+
if (!argv1)
|
|
8
|
+
return false;
|
|
9
|
+
return /mock-harness(\.js|\.ts)?$/.test(argv1);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
})();
|
|
15
|
+
if (invokedAsScript) {
|
|
16
|
+
process.stderr.write('[adapters] "mock-harness" is deprecated, use "adapters-harness-mock" instead.\n');
|
|
17
|
+
const args = parseArgs(process.argv.slice(2));
|
|
18
|
+
runMockHarness(args).then((code) => {
|
|
19
|
+
process.exit(code);
|
|
20
|
+
}, (err) => {
|
|
21
|
+
process.stderr.write(`mock-harness failed: ${err.message}\n`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=mock-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-harness.js","sourceRoot":"","sources":["../../src/bin/mock-harness.ts"],"names":[],"mappings":";AAEA,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;IAC5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,IAAI,eAAe,EAAE,CAAC;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CACvB,CAAC,IAAI,EAAE,EAAE;QACP,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAyB,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Server mock implementation for harness-mock.
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
5
|
+
import type { HarnessScenario, HttpServerMockHandle, MockExecutionResult, FileOperation } from './types.js';
|
|
6
|
+
export declare class HttpServerMock extends EventEmitter implements HttpServerMockHandle {
|
|
7
|
+
readonly scenario: HarnessScenario;
|
|
8
|
+
readonly id: number;
|
|
9
|
+
readonly serverUrl: string;
|
|
10
|
+
readonly port: number;
|
|
11
|
+
private _exited;
|
|
12
|
+
private _fileChanges;
|
|
13
|
+
private _requestHistory;
|
|
14
|
+
private _server;
|
|
15
|
+
private _isRunning;
|
|
16
|
+
private _startTime;
|
|
17
|
+
constructor(scenario: HarnessScenario, id: number);
|
|
18
|
+
get exited(): boolean;
|
|
19
|
+
get fileChanges(): FileOperation[];
|
|
20
|
+
get isRunning(): boolean;
|
|
21
|
+
get requestHistory(): {
|
|
22
|
+
method: string;
|
|
23
|
+
path: string;
|
|
24
|
+
headers: Record<string, string>;
|
|
25
|
+
body: unknown;
|
|
26
|
+
timestamp: Date;
|
|
27
|
+
}[];
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
private handleRequest;
|
|
30
|
+
getStatus(): {
|
|
31
|
+
isRunning: boolean;
|
|
32
|
+
requestCount: number;
|
|
33
|
+
uptime: number;
|
|
34
|
+
};
|
|
35
|
+
reset(): void;
|
|
36
|
+
stop(): Promise<void>;
|
|
37
|
+
forceStop(): void;
|
|
38
|
+
waitForCompletion(): Promise<MockExecutionResult>;
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-mock.d.ts","sourceRoot":"","sources":["../src/http-mock.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EAEnB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAe,SAAQ,YAAa,YAAW,oBAAoB;IAC9E,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,eAAe,CAMf;IACR,OAAO,CAAC,OAAO,CAAgD;IAC/D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAc;gBAEpB,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM;IAQjD,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,WAAW,IAAI,aAAa,EAAE,CAEjC;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,cAAc;gBA9BR,MAAM;cACR,MAAM;iBACH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cACzB,OAAO;mBACF,IAAI;QA4BhB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAgCd,aAAa;IAiG3B,SAAS;;;;;IAQT,KAAK,IAAI,IAAI;IAKP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,SAAS,IAAI,IAAI;IAUX,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CA2BxD"}
|