@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.
- 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
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
function delay(ms) {
|
|
3
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
4
|
+
}
|
|
5
|
+
function generateId() {
|
|
6
|
+
return `mock_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
7
|
+
}
|
|
8
|
+
function createBaseEvent(type, runId, agent = 'mock-agent') {
|
|
9
|
+
return {
|
|
10
|
+
timestamp: new Date().toISOString(),
|
|
11
|
+
runId,
|
|
12
|
+
type,
|
|
13
|
+
agent,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export class MockServer extends EventEmitter {
|
|
17
|
+
info;
|
|
18
|
+
config;
|
|
19
|
+
connections = new Map();
|
|
20
|
+
_started = false;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
super();
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.info = {
|
|
25
|
+
serverId: generateId(),
|
|
26
|
+
endpoint: config.http?.baseUrl || `ws://localhost:${config.server?.port || 8080}`,
|
|
27
|
+
port: config.server?.port || 8080,
|
|
28
|
+
startedAt: new Date(),
|
|
29
|
+
status: 'starting',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
async start() {
|
|
33
|
+
if (this._started) {
|
|
34
|
+
throw new Error('Server already started');
|
|
35
|
+
}
|
|
36
|
+
this.info.status = 'starting';
|
|
37
|
+
if (this.config.server?.startupDelayMs) {
|
|
38
|
+
await delay(this.config.server.startupDelayMs);
|
|
39
|
+
}
|
|
40
|
+
if (this.config.server?.startupFails) {
|
|
41
|
+
this.info.status = 'error';
|
|
42
|
+
throw new Error('Mock server startup failed');
|
|
43
|
+
}
|
|
44
|
+
this._started = true;
|
|
45
|
+
this.info.status = 'running';
|
|
46
|
+
this.emit('started', this.info);
|
|
47
|
+
return this.info;
|
|
48
|
+
}
|
|
49
|
+
async stop() {
|
|
50
|
+
if (!this._started) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.info.status = 'stopped';
|
|
54
|
+
this._started = false;
|
|
55
|
+
for (const connection of this.connections.values()) {
|
|
56
|
+
await connection.close();
|
|
57
|
+
}
|
|
58
|
+
this.connections.clear();
|
|
59
|
+
this.emit('stopped');
|
|
60
|
+
}
|
|
61
|
+
async createConnection(connectionType) {
|
|
62
|
+
if (!this._started) {
|
|
63
|
+
throw new Error('Server not started');
|
|
64
|
+
}
|
|
65
|
+
const connection = new MockConnectionImpl(connectionType, this.info.endpoint, this.config);
|
|
66
|
+
this.connections.set(connection.connectionId, connection);
|
|
67
|
+
this.emit('connection', connection);
|
|
68
|
+
return connection;
|
|
69
|
+
}
|
|
70
|
+
getInfo() {
|
|
71
|
+
return { ...this.info };
|
|
72
|
+
}
|
|
73
|
+
getConnections() {
|
|
74
|
+
return Array.from(this.connections.values());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
class MockConnectionImpl extends EventEmitter {
|
|
78
|
+
connectionId;
|
|
79
|
+
connectionType;
|
|
80
|
+
endpoint;
|
|
81
|
+
config;
|
|
82
|
+
_state = 'connecting';
|
|
83
|
+
stats = {
|
|
84
|
+
eventsReceived: 0,
|
|
85
|
+
eventsSent: 0,
|
|
86
|
+
connectTime: new Date(),
|
|
87
|
+
lastActivity: new Date(),
|
|
88
|
+
};
|
|
89
|
+
eventQueue = [];
|
|
90
|
+
constructor(connectionType, endpoint, config) {
|
|
91
|
+
super();
|
|
92
|
+
this.connectionId = generateId();
|
|
93
|
+
this.connectionType = connectionType;
|
|
94
|
+
this.endpoint = endpoint;
|
|
95
|
+
this.config = config;
|
|
96
|
+
void this.connect();
|
|
97
|
+
}
|
|
98
|
+
get state() {
|
|
99
|
+
return this._state;
|
|
100
|
+
}
|
|
101
|
+
async connect() {
|
|
102
|
+
try {
|
|
103
|
+
if (this.config.connection?.connectDelayMs) {
|
|
104
|
+
await delay(this.config.connection.connectDelayMs);
|
|
105
|
+
}
|
|
106
|
+
if (this.config.connection?.connectFails) {
|
|
107
|
+
this._state = 'error';
|
|
108
|
+
this.emit('error', new Error('Mock connection failed'));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this._state = 'connected';
|
|
112
|
+
this.stats.connectTime = new Date();
|
|
113
|
+
this.emit('connected');
|
|
114
|
+
void this.startEventGeneration();
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
this._state = 'error';
|
|
118
|
+
this.emit('error', error);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async startEventGeneration() {
|
|
122
|
+
const runId = generateId();
|
|
123
|
+
try {
|
|
124
|
+
for (const [index, mockEvent] of this.config.events.entries()) {
|
|
125
|
+
if (this._state !== 'connected')
|
|
126
|
+
break;
|
|
127
|
+
if (mockEvent.delayMs) {
|
|
128
|
+
await delay(mockEvent.delayMs);
|
|
129
|
+
}
|
|
130
|
+
const event = {
|
|
131
|
+
...createBaseEvent(mockEvent.type, runId),
|
|
132
|
+
...mockEvent.data,
|
|
133
|
+
};
|
|
134
|
+
this.eventQueue.push(event);
|
|
135
|
+
this.stats.eventsReceived += 1;
|
|
136
|
+
this.stats.lastActivity = new Date();
|
|
137
|
+
this.emit('event', event);
|
|
138
|
+
if (this.config.connection?.disconnectAfterEvents &&
|
|
139
|
+
index >= this.config.connection.disconnectAfterEvents - 1) {
|
|
140
|
+
await this.simulateDisconnection();
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
this._state = 'error';
|
|
147
|
+
this.emit('error', error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async simulateDisconnection() {
|
|
151
|
+
this._state = 'disconnected';
|
|
152
|
+
this.emit('disconnected');
|
|
153
|
+
if (this.config.websocket?.dropConnection?.reconnectDelayMs) {
|
|
154
|
+
await delay(this.config.websocket.dropConnection.reconnectDelayMs);
|
|
155
|
+
await this.connect();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async send(data) {
|
|
159
|
+
if (this._state !== 'connected') {
|
|
160
|
+
throw new Error(`Cannot send data: connection state is ${this._state}`);
|
|
161
|
+
}
|
|
162
|
+
this.stats.eventsSent += 1;
|
|
163
|
+
this.stats.lastActivity = new Date();
|
|
164
|
+
if (this.connectionType === 'websocket' && this.config.websocket?.pingIntervalMs) {
|
|
165
|
+
await delay(10);
|
|
166
|
+
}
|
|
167
|
+
this.emit('sent', data);
|
|
168
|
+
}
|
|
169
|
+
async *receive() {
|
|
170
|
+
while (this._state === 'connected' || this.eventQueue.length > 0) {
|
|
171
|
+
if (this.eventQueue.length === 0) {
|
|
172
|
+
await delay(10);
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const event = this.eventQueue.shift();
|
|
176
|
+
if (event) {
|
|
177
|
+
yield event;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (this._state === 'error') {
|
|
181
|
+
yield {
|
|
182
|
+
...createBaseEvent('error', generateId()),
|
|
183
|
+
code: 'CONNECTION_ERROR',
|
|
184
|
+
message: 'Mock connection error',
|
|
185
|
+
fatal: false,
|
|
186
|
+
recoverable: true,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async close() {
|
|
191
|
+
if (this._state === 'disconnected')
|
|
192
|
+
return;
|
|
193
|
+
this._state = 'disconnected';
|
|
194
|
+
this.eventQueue.length = 0;
|
|
195
|
+
this.emit('closed');
|
|
196
|
+
}
|
|
197
|
+
getStats() {
|
|
198
|
+
return { ...this.stats };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
export class RemoteMockBuilderImpl {
|
|
202
|
+
config = {
|
|
203
|
+
events: [],
|
|
204
|
+
};
|
|
205
|
+
name(name) {
|
|
206
|
+
this.config.name = name;
|
|
207
|
+
return this;
|
|
208
|
+
}
|
|
209
|
+
withServer(serverConfig) {
|
|
210
|
+
this.config.server = { ...this.config.server, ...serverConfig };
|
|
211
|
+
return this;
|
|
212
|
+
}
|
|
213
|
+
withConnection(connectionConfig) {
|
|
214
|
+
this.config.connection = { ...this.config.connection, ...connectionConfig };
|
|
215
|
+
return this;
|
|
216
|
+
}
|
|
217
|
+
withWebSocket(wsConfig) {
|
|
218
|
+
this.config.websocket = { ...this.config.websocket, ...wsConfig };
|
|
219
|
+
return this;
|
|
220
|
+
}
|
|
221
|
+
withHttp(httpConfig) {
|
|
222
|
+
this.config.http = { ...this.config.http, ...httpConfig };
|
|
223
|
+
return this;
|
|
224
|
+
}
|
|
225
|
+
addEvents(events) {
|
|
226
|
+
this.config.events = [...(this.config.events || []), ...events];
|
|
227
|
+
return this;
|
|
228
|
+
}
|
|
229
|
+
withErrors(errors) {
|
|
230
|
+
this.config.simulateErrors = { ...this.config.simulateErrors, ...errors };
|
|
231
|
+
return this;
|
|
232
|
+
}
|
|
233
|
+
build() {
|
|
234
|
+
return {
|
|
235
|
+
events: [],
|
|
236
|
+
...this.config,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
export class OpenCodeHttpMock {
|
|
241
|
+
static basicSuccess() {
|
|
242
|
+
return new RemoteMockBuilderImpl()
|
|
243
|
+
.name('opencode-http-basic')
|
|
244
|
+
.withServer({ startupDelayMs: 100, port: 3000 })
|
|
245
|
+
.withConnection({ connectDelayMs: 50 })
|
|
246
|
+
.withHttp({
|
|
247
|
+
baseUrl: 'http://localhost:3000',
|
|
248
|
+
endpointDelays: { '/execute': 200, '/status': 50 },
|
|
249
|
+
})
|
|
250
|
+
.addEvents([
|
|
251
|
+
{ type: 'session_start', data: { sessionId: 'mock_session' }, delayMs: 100 },
|
|
252
|
+
{ type: 'text_delta', data: { delta: 'Starting OpenCode execution...', accumulated: 'Starting OpenCode execution...' }, delayMs: 200 },
|
|
253
|
+
{ type: 'text_delta', data: { delta: '\nCode executed successfully!', accumulated: 'Starting OpenCode execution...\nCode executed successfully!' }, delayMs: 300 },
|
|
254
|
+
{ type: 'message_stop', data: {}, delayMs: 100 },
|
|
255
|
+
])
|
|
256
|
+
.build();
|
|
257
|
+
}
|
|
258
|
+
static serverStartupFailure() {
|
|
259
|
+
return new RemoteMockBuilderImpl()
|
|
260
|
+
.name('opencode-http-startup-fail')
|
|
261
|
+
.withServer({ startupFails: true })
|
|
262
|
+
.build();
|
|
263
|
+
}
|
|
264
|
+
static networkTimeout() {
|
|
265
|
+
return new RemoteMockBuilderImpl()
|
|
266
|
+
.name('opencode-http-timeout')
|
|
267
|
+
.withServer({ startupDelayMs: 100 })
|
|
268
|
+
.withConnection({ connectDelayMs: 50 })
|
|
269
|
+
.withErrors({ networkTimeout: true })
|
|
270
|
+
.build();
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
export class CodexWebSocketMock {
|
|
274
|
+
static basicSuccess() {
|
|
275
|
+
return new RemoteMockBuilderImpl()
|
|
276
|
+
.name('codex-websocket-basic')
|
|
277
|
+
.withServer({ startupDelayMs: 150, port: 8080 })
|
|
278
|
+
.withConnection({ connectDelayMs: 30 })
|
|
279
|
+
.withWebSocket({ channels: ['code', 'output'], pingIntervalMs: 5000 })
|
|
280
|
+
.addEvents([
|
|
281
|
+
{ type: 'session_start', data: { sessionId: 'mock_ws_session' }, delayMs: 50 },
|
|
282
|
+
{ type: 'text_delta', data: { delta: '# Generated Code\n', accumulated: '# Generated Code\n' }, delayMs: 100 },
|
|
283
|
+
{ type: 'text_delta', data: { delta: 'def hello():\n return "Hello, World!"', accumulated: '# Generated Code\ndef hello():\n return "Hello, World!"' }, delayMs: 200 },
|
|
284
|
+
{ type: 'message_stop', data: {}, delayMs: 50 },
|
|
285
|
+
])
|
|
286
|
+
.build();
|
|
287
|
+
}
|
|
288
|
+
static connectionDrop() {
|
|
289
|
+
return new RemoteMockBuilderImpl()
|
|
290
|
+
.name('codex-websocket-drop')
|
|
291
|
+
.withServer({ startupDelayMs: 100 })
|
|
292
|
+
.withConnection({ disconnectAfterEvents: 2 })
|
|
293
|
+
.withWebSocket({ dropConnection: { afterMs: 1000, reconnectDelayMs: 500 } })
|
|
294
|
+
.addEvents([
|
|
295
|
+
{ type: 'session_start', data: { sessionId: 'mock_session' }, delayMs: 50 },
|
|
296
|
+
{ type: 'text_delta', data: { delta: 'Starting...', accumulated: 'Starting...' }, delayMs: 100 },
|
|
297
|
+
{ type: 'text_delta', data: { delta: ' reconnecting...', accumulated: 'Starting... reconnecting...' }, delayMs: 200 },
|
|
298
|
+
])
|
|
299
|
+
.build();
|
|
300
|
+
}
|
|
301
|
+
static highThroughput() {
|
|
302
|
+
const events = [
|
|
303
|
+
{ type: 'session_start', data: { sessionId: 'high_throughput_session' }, delayMs: 10 },
|
|
304
|
+
];
|
|
305
|
+
for (let i = 0; i < 50; i++) {
|
|
306
|
+
events.push({
|
|
307
|
+
type: 'text_delta',
|
|
308
|
+
data: { delta: `chunk_${i} `, accumulated: `chunk_0 ${'chunk_'.repeat(i)}${i} ` },
|
|
309
|
+
delayMs: 5,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
events.push({ type: 'message_stop', data: {}, delayMs: 10 });
|
|
313
|
+
return new RemoteMockBuilderImpl()
|
|
314
|
+
.name('codex-websocket-high-throughput')
|
|
315
|
+
.withWebSocket({ pingIntervalMs: 1000 })
|
|
316
|
+
.addEvents(events)
|
|
317
|
+
.build();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
export function createRemoteMockBuilder() {
|
|
321
|
+
return new RemoteMockBuilderImpl();
|
|
322
|
+
}
|
|
323
|
+
export function createMockServer(config) {
|
|
324
|
+
return new MockServer(config);
|
|
325
|
+
}
|
|
326
|
+
export const remoteMocks = {
|
|
327
|
+
opencode: OpenCodeHttpMock,
|
|
328
|
+
codex: CodexWebSocketMock,
|
|
329
|
+
builder: createRemoteMockBuilder,
|
|
330
|
+
server: createMockServer,
|
|
331
|
+
};
|
|
332
|
+
//# sourceMappingURL=remote-mocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-mocks.js","sourceRoot":"","sources":["../../src/mocks/remote-mocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { HarnessScenario } from '../types.js';
|
|
2
|
+
import type { ScriptableTransportBuilder, ScriptableTransportResponse } from './mock-types.js';
|
|
3
|
+
export declare class ScriptableTransportBuilderImpl implements ScriptableTransportBuilder {
|
|
4
|
+
private nameValue;
|
|
5
|
+
private transport;
|
|
6
|
+
private httpConfig;
|
|
7
|
+
private websocketConfig;
|
|
8
|
+
private readonly steps;
|
|
9
|
+
private readonly events;
|
|
10
|
+
name(name: string): this;
|
|
11
|
+
http(config?: {
|
|
12
|
+
port?: number;
|
|
13
|
+
enableCors?: boolean;
|
|
14
|
+
}): this;
|
|
15
|
+
websocket(config?: {
|
|
16
|
+
port?: number;
|
|
17
|
+
reconnectDelayMs?: number;
|
|
18
|
+
}): this;
|
|
19
|
+
onRequest(path: string, response: ScriptableTransportResponse, method?: string): this;
|
|
20
|
+
emitEvent(type: string, data: Record<string, unknown>, delayMs?: number): this;
|
|
21
|
+
build(): HarnessScenario;
|
|
22
|
+
}
|
|
23
|
+
export declare function createScriptableTransportBuilder(): ScriptableTransportBuilder;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scriptable-transport.d.ts","sourceRoot":"","sources":["../../src/mocks/scriptable-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAE5B,MAAM,iBAAiB,CAAC;AAIzB,qBAAa,8BAA+B,YAAW,0BAA0B;IAC/E,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,eAAe,CAAoD;IAC3E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgF;IAEvG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,IAAI,CAAC,MAAM,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAMhE,SAAS,CAAC,MAAM,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,IAAI;IAM1E,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,SAAS,GAAG,IAAI;IASrF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9E,KAAK,IAAI,eAAe;CA+CzB;AAED,wBAAgB,gCAAgC,IAAI,0BAA0B,CAE7E"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export class ScriptableTransportBuilderImpl {
|
|
2
|
+
nameValue = 'scriptable-transport';
|
|
3
|
+
transport = 'http';
|
|
4
|
+
httpConfig = {};
|
|
5
|
+
websocketConfig = {};
|
|
6
|
+
steps = [];
|
|
7
|
+
events = [];
|
|
8
|
+
name(name) {
|
|
9
|
+
this.nameValue = name;
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
http(config = {}) {
|
|
13
|
+
this.transport = 'http';
|
|
14
|
+
this.httpConfig = { ...this.httpConfig, ...config };
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
websocket(config = {}) {
|
|
18
|
+
this.transport = 'websocket';
|
|
19
|
+
this.websocketConfig = { ...this.websocketConfig, ...config };
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
onRequest(path, response, method = 'POST') {
|
|
23
|
+
this.steps.push({
|
|
24
|
+
method: method.toUpperCase(),
|
|
25
|
+
path,
|
|
26
|
+
response,
|
|
27
|
+
});
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
emitEvent(type, data, delayMs) {
|
|
31
|
+
this.events.push({ type, data, delayMs });
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
build() {
|
|
35
|
+
if (this.transport === 'websocket') {
|
|
36
|
+
return {
|
|
37
|
+
harness: 'codex-websocket',
|
|
38
|
+
executionType: 'websocket',
|
|
39
|
+
name: this.nameValue,
|
|
40
|
+
websocketServer: {
|
|
41
|
+
port: this.websocketConfig.port,
|
|
42
|
+
simulateDrops: this.websocketConfig.reconnectDelayMs == null
|
|
43
|
+
? undefined
|
|
44
|
+
: { reconnectDelayMs: this.websocketConfig.reconnectDelayMs },
|
|
45
|
+
},
|
|
46
|
+
events: this.events.map((event) => ({
|
|
47
|
+
type: event.type,
|
|
48
|
+
data: event.data,
|
|
49
|
+
delayMs: event.delayMs,
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const routes = {};
|
|
54
|
+
for (const step of this.steps) {
|
|
55
|
+
const key = `${step.method ?? 'POST'} ${step.path}`;
|
|
56
|
+
routes[key] = {
|
|
57
|
+
status: step.response?.status ?? 200,
|
|
58
|
+
headers: step.response?.headers,
|
|
59
|
+
body: step.response?.body,
|
|
60
|
+
delayMs: step.response?.delayMs,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
harness: 'opencode-http',
|
|
65
|
+
executionType: 'http',
|
|
66
|
+
name: this.nameValue,
|
|
67
|
+
httpServer: {
|
|
68
|
+
port: this.httpConfig.port,
|
|
69
|
+
enableCors: this.httpConfig.enableCors,
|
|
70
|
+
routes,
|
|
71
|
+
},
|
|
72
|
+
events: this.events.map((event) => ({
|
|
73
|
+
type: event.type,
|
|
74
|
+
data: event.data,
|
|
75
|
+
delayMs: event.delayMs,
|
|
76
|
+
})),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function createScriptableTransportBuilder() {
|
|
81
|
+
return new ScriptableTransportBuilderImpl();
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=scriptable-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scriptable-transport.js","sourceRoot":"","sources":["../../src/mocks/scriptable-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-execution.d.ts","sourceRoot":"","sources":["../src/multi-execution.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-execution.js","sourceRoot":"","sources":["../src/multi-execution.ts"],"names":[],"mappings":""}
|
package/dist/probe.d.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HarnessProbe — probes real harness installations to capture behavior profiles.
|
|
3
|
+
*
|
|
4
|
+
* Used by the CI pipeline to periodically compare mock fidelity against
|
|
5
|
+
* real harness behavior. Runs the actual CLI tools with controlled inputs
|
|
6
|
+
* and records output format, timing, exit codes, etc.
|
|
7
|
+
*/
|
|
8
|
+
import type { AdapterExecutionType, HarnessType, HarnessBehaviorProfile } from './types.js';
|
|
9
|
+
export interface ProbeConfig {
|
|
10
|
+
/** The harness to probe. */
|
|
11
|
+
harness: HarnessType;
|
|
12
|
+
/** Execution transport for this probe target. */
|
|
13
|
+
executionType?: AdapterExecutionType;
|
|
14
|
+
/** Command to invoke (e.g., 'claude', 'codex'). */
|
|
15
|
+
command: string;
|
|
16
|
+
/** Legacy arguments for a simple success probe run. */
|
|
17
|
+
args?: string[];
|
|
18
|
+
/** Arguments for version detection. */
|
|
19
|
+
versionArgs?: string[];
|
|
20
|
+
/** Arguments for help detection. */
|
|
21
|
+
helpArgs?: string[];
|
|
22
|
+
/** Environment overrides for the probe. */
|
|
23
|
+
env?: Record<string, string>;
|
|
24
|
+
/** Timeout for each probe run (ms). */
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
/** Working directory for the probe. */
|
|
27
|
+
cwd?: string;
|
|
28
|
+
/** Where this probe should be expected to run. */
|
|
29
|
+
availability?: 'ci' | 'ci-or-local' | 'local-manual' | 'offline-only';
|
|
30
|
+
/** Known stdin prompt markers for this harness. */
|
|
31
|
+
stdinSignals?: string[];
|
|
32
|
+
/** Relevant file operation patterns exposed by the harness. */
|
|
33
|
+
fileOperationPatterns?: string[];
|
|
34
|
+
/** Relevant environment variables for auth/session/config. */
|
|
35
|
+
environmentVariables?: string[];
|
|
36
|
+
/** Additional CLI/transport metadata to carry into the profile. */
|
|
37
|
+
cliPatterns?: Record<string, string>;
|
|
38
|
+
/** Declared output format when the probe is contract-only or transport-specific. */
|
|
39
|
+
outputFormat?: string;
|
|
40
|
+
/** Additional traits expected for the output stream. */
|
|
41
|
+
outputFormatTraits?: string[];
|
|
42
|
+
/** Review notes for the probe target. */
|
|
43
|
+
probeNotes?: string[];
|
|
44
|
+
/** Named scenario probes beyond version/help. */
|
|
45
|
+
scenarios?: ProbeScenario[];
|
|
46
|
+
/** Contract version to use when the probe target is fixture-only. */
|
|
47
|
+
contractVersion?: string;
|
|
48
|
+
/** Contract startup time to use when the probe target is fixture-only. */
|
|
49
|
+
contractStartupTimeMs?: number;
|
|
50
|
+
/** Contract exit codes to use when the probe target is fixture-only. */
|
|
51
|
+
contractExitCodes?: Record<string, number>;
|
|
52
|
+
}
|
|
53
|
+
export interface ProbeScenario {
|
|
54
|
+
/** Stable scenario name used in exitCodes. */
|
|
55
|
+
name: string;
|
|
56
|
+
/** Arguments to execute. */
|
|
57
|
+
args: string[];
|
|
58
|
+
/** Optional stdin payload. */
|
|
59
|
+
stdin?: string;
|
|
60
|
+
/** Optional environment overrides. */
|
|
61
|
+
env?: Record<string, string>;
|
|
62
|
+
/** Optional working directory override. */
|
|
63
|
+
cwd?: string;
|
|
64
|
+
/** Optional timeout override. */
|
|
65
|
+
timeoutMs?: number;
|
|
66
|
+
}
|
|
67
|
+
/** Pre-configured probe configurations for built-in harness and transport targets. */
|
|
68
|
+
export declare const PROBE_CONFIGS: Record<string, ProbeConfig>;
|
|
69
|
+
export interface ProbeResult {
|
|
70
|
+
/** Whether the probe succeeded. */
|
|
71
|
+
success: boolean;
|
|
72
|
+
/** Error message if the probe failed. */
|
|
73
|
+
error?: string;
|
|
74
|
+
/** The captured behavior profile. */
|
|
75
|
+
profile?: HarnessBehaviorProfile;
|
|
76
|
+
/** Raw stdout from the probe. */
|
|
77
|
+
stdout?: string;
|
|
78
|
+
/** Raw stderr from the probe. */
|
|
79
|
+
stderr?: string;
|
|
80
|
+
/** Exit code from the probe. */
|
|
81
|
+
exitCode?: number;
|
|
82
|
+
/** Wall-clock duration of the probe (ms). */
|
|
83
|
+
durationMs?: number;
|
|
84
|
+
/** Per-scenario observations collected during the probe. */
|
|
85
|
+
scenarioResults?: Record<string, ProbeObservation>;
|
|
86
|
+
}
|
|
87
|
+
export interface ProbeObservation {
|
|
88
|
+
success: boolean;
|
|
89
|
+
stdout: string;
|
|
90
|
+
stderr: string;
|
|
91
|
+
exitCode: number;
|
|
92
|
+
durationMs: number;
|
|
93
|
+
error?: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Probe a real harness installation and capture its behavior profile.
|
|
97
|
+
*/
|
|
98
|
+
export declare function probeHarness(config: ProbeConfig): Promise<ProbeResult>;
|
|
99
|
+
/**
|
|
100
|
+
* Probe all configured harnesses and save profiles to a directory.
|
|
101
|
+
*/
|
|
102
|
+
export declare function probeAllHarnesses(outputDir: string, configs?: Record<string, ProbeConfig>): Promise<Map<string, ProbeResult>>;
|
|
103
|
+
/**
|
|
104
|
+
* Compare a behavior profile against a previous baseline.
|
|
105
|
+
* Returns a list of differences.
|
|
106
|
+
*/
|
|
107
|
+
export declare function compareProfiles(baseline: HarnessBehaviorProfile, current: HarnessBehaviorProfile): ProfileDiff[];
|
|
108
|
+
export interface ProfileDiff {
|
|
109
|
+
field: string;
|
|
110
|
+
baseline: unknown;
|
|
111
|
+
current: unknown;
|
|
112
|
+
severity: 'info' | 'warning' | 'breaking';
|
|
113
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../src/probe.ts"],"names":[],"mappings":"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"}
|