@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.
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,206 @@
1
+ /**
2
+ * HTTP Server mock implementation for harness-mock.
3
+ */
4
+ import { EventEmitter } from 'node:events';
5
+ import { createServer } from 'node:http';
6
+ export class HttpServerMock extends EventEmitter {
7
+ scenario;
8
+ id;
9
+ serverUrl;
10
+ port;
11
+ _exited = false;
12
+ _fileChanges = [];
13
+ _requestHistory = [];
14
+ _server = null;
15
+ _isRunning = false;
16
+ _startTime = Date.now();
17
+ constructor(scenario, id) {
18
+ super();
19
+ this.scenario = scenario;
20
+ this.id = id;
21
+ this.port = scenario.httpServer?.port || 8080;
22
+ this.serverUrl = `http://localhost:${this.port}`;
23
+ }
24
+ get exited() {
25
+ return this._exited;
26
+ }
27
+ get fileChanges() {
28
+ return [...this._fileChanges];
29
+ }
30
+ get isRunning() {
31
+ return this._isRunning;
32
+ }
33
+ get requestHistory() {
34
+ return [...this._requestHistory];
35
+ }
36
+ async start() {
37
+ if (this._server) {
38
+ throw new Error('Server already started');
39
+ }
40
+ // Simulate startup delay
41
+ if (this.scenario.httpServer?.startupDelayMs) {
42
+ await new Promise(resolve => setTimeout(resolve, this.scenario.httpServer.startupDelayMs));
43
+ }
44
+ // Simulate startup failure
45
+ if (this.scenario.httpServer?.startupFails) {
46
+ throw new Error('Mock HTTP server startup failed');
47
+ }
48
+ this._server = createServer((req, res) => {
49
+ this.handleRequest(req, res);
50
+ });
51
+ return new Promise((resolve, reject) => {
52
+ this._server.listen(this.port, (err) => {
53
+ if (err) {
54
+ reject(err);
55
+ }
56
+ else {
57
+ this._isRunning = true;
58
+ this.emit('started');
59
+ resolve();
60
+ }
61
+ });
62
+ });
63
+ }
64
+ async handleRequest(req, res) {
65
+ // Collect request body
66
+ let body = '';
67
+ req.on('data', chunk => {
68
+ body += chunk;
69
+ });
70
+ req.on('end', async () => {
71
+ // Log request
72
+ this._requestHistory.push({
73
+ method: req.method || 'GET',
74
+ path: req.url || '/',
75
+ headers: req.headers,
76
+ body: body ? JSON.parse(body) : undefined,
77
+ timestamp: new Date(),
78
+ });
79
+ // Apply global delay
80
+ if (this.scenario.httpServer?.globalDelayMs) {
81
+ await new Promise(resolve => setTimeout(resolve, this.scenario.httpServer.globalDelayMs));
82
+ }
83
+ // Find route configuration
84
+ const routeKey = `${req.method} ${req.url}`;
85
+ const route = this.scenario.httpServer?.routes?.[routeKey] ||
86
+ this.scenario.httpServer?.routes?.[req.url || '/'];
87
+ // Apply route-specific delay
88
+ if (route?.delayMs) {
89
+ await new Promise(resolve => setTimeout(resolve, route.delayMs));
90
+ }
91
+ // Set headers
92
+ if (this.scenario.httpServer?.enableCors) {
93
+ res.setHeader('Access-Control-Allow-Origin', '*');
94
+ res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS');
95
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Authorization');
96
+ }
97
+ if (route?.headers) {
98
+ Object.entries(route.headers).forEach(([key, value]) => {
99
+ res.setHeader(key, value);
100
+ });
101
+ }
102
+ // Set status code
103
+ res.statusCode = route?.status || 200;
104
+ // Generate response body
105
+ let responseBody = route?.body;
106
+ if (typeof route?.body === 'function') {
107
+ responseBody = route.body(req);
108
+ }
109
+ // Handle streaming responses
110
+ if (route?.streaming && route?.streamChunks) {
111
+ res.setHeader('Content-Type', 'text/event-stream');
112
+ res.setHeader('Cache-Control', 'no-cache');
113
+ res.setHeader('Connection', 'keep-alive');
114
+ for (const chunk of route.streamChunks) {
115
+ if (chunk.delayMs) {
116
+ await new Promise(resolve => setTimeout(resolve, chunk.delayMs));
117
+ }
118
+ res.write(`data: ${JSON.stringify(chunk.data)}\n\n`);
119
+ }
120
+ res.end();
121
+ }
122
+ else {
123
+ // Standard response
124
+ const response = typeof responseBody === 'string'
125
+ ? responseBody
126
+ : JSON.stringify(responseBody || { status: 'ok' });
127
+ res.setHeader('Content-Type', 'application/json');
128
+ res.end(response);
129
+ }
130
+ // Simulate file operations
131
+ if (this.scenario.fileOperations) {
132
+ this._fileChanges.push(...this.scenario.fileOperations);
133
+ }
134
+ // Emit events
135
+ if (this.scenario.events) {
136
+ for (const event of this.scenario.events) {
137
+ if (event.delayMs) {
138
+ setTimeout(() => {
139
+ this.emit('event', event);
140
+ }, event.delayMs);
141
+ }
142
+ else {
143
+ this.emit('event', event);
144
+ }
145
+ }
146
+ }
147
+ });
148
+ }
149
+ getStatus() {
150
+ return {
151
+ isRunning: this._isRunning,
152
+ requestCount: this._requestHistory.length,
153
+ uptime: Date.now() - this._startTime,
154
+ };
155
+ }
156
+ reset() {
157
+ this._requestHistory.length = 0;
158
+ this._fileChanges.length = 0;
159
+ }
160
+ async stop() {
161
+ if (this._server) {
162
+ return new Promise(resolve => {
163
+ this._server.close(() => {
164
+ this._isRunning = false;
165
+ this._exited = true;
166
+ this.emit('stopped');
167
+ resolve();
168
+ });
169
+ });
170
+ }
171
+ }
172
+ forceStop() {
173
+ if (this._server) {
174
+ this._server.closeAllConnections?.();
175
+ this._server.close();
176
+ this._isRunning = false;
177
+ this._exited = true;
178
+ this.emit('stopped');
179
+ }
180
+ }
181
+ async waitForCompletion() {
182
+ if (!this._exited) {
183
+ await new Promise(resolve => this.once('stopped', resolve));
184
+ }
185
+ const durationMs = Date.now() - this._startTime;
186
+ const averageResponseTime = this._requestHistory.length > 0
187
+ ? this._requestHistory.reduce((sum) => sum + 50, 0) / this._requestHistory.length // Mock timing
188
+ : 0;
189
+ const result = {
190
+ type: 'http',
191
+ requestCount: this._requestHistory.length,
192
+ requestHistory: this._requestHistory.map(req => ({
193
+ method: req.method,
194
+ path: req.path,
195
+ status: 200, // Mock successful responses
196
+ })),
197
+ averageResponseTimeMs: averageResponseTime,
198
+ };
199
+ return {
200
+ success: true,
201
+ durationMs,
202
+ results: result,
203
+ };
204
+ }
205
+ }
206
+ //# sourceMappingURL=http-mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-mock.js","sourceRoot":"","sources":["../src/http-mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export * from './mock-process.js';
2
+ export * from './scenarios/index.js';
3
+ export * from './probe.js';
4
+ export * from './types.js';
5
+ export * from './workspace.js';
6
+ export * from './multi-execution.js';
7
+ export * from './http-mock.js';
8
+ export * from './websocket-mock.js';
9
+ export * from './mocks/index.js';
@@ -0,0 +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;AACpC,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export * from './mock-process.js';
2
+ export * from './scenarios/index.js';
3
+ export * from './probe.js';
4
+ export * from './types.js';
5
+ export * from './workspace.js';
6
+ export * from './multi-execution.js';
7
+ export * from './http-mock.js';
8
+ export * from './websocket-mock.js';
9
+ export * from './mocks/index.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * MockProcess — simulates a harness subprocess with configurable behavior.
3
+ *
4
+ * Emits output chunks on a schedule, handles stdin interactions,
5
+ * simulates file operations, and exits with the configured code/timing.
6
+ */
7
+ import { EventEmitter } from 'node:events';
8
+ import type { HarnessScenario, MockExecutionResult, FileOperation, SubprocessMockHandle } from './types.js';
9
+ export declare class MockProcess extends EventEmitter implements SubprocessMockHandle {
10
+ readonly scenario: HarnessScenario;
11
+ readonly pid: number;
12
+ readonly id: number;
13
+ private _exited;
14
+ private _exitCode;
15
+ private _stdout;
16
+ private _stderr;
17
+ private _fileChanges;
18
+ private _timers;
19
+ private _stdinBuffer;
20
+ private _pendingInteraction;
21
+ private readonly _startedAt;
22
+ constructor(scenario: HarnessScenario);
23
+ get exited(): boolean;
24
+ get exitCode(): number | undefined;
25
+ get stdout(): string;
26
+ get stderr(): string;
27
+ get fileChanges(): FileOperation[];
28
+ stop(): Promise<void>;
29
+ forceStop(): void;
30
+ write(data: string): void;
31
+ kill(signal?: string): void;
32
+ waitForExit(): Promise<{
33
+ exitCode: number;
34
+ stdout: string;
35
+ stderr: string;
36
+ }>;
37
+ waitForCompletion(): Promise<MockExecutionResult>;
38
+ /**
39
+ * Start the mock process. Call this after setting up event listeners.
40
+ * Returns the handle for chaining.
41
+ */
42
+ start(): SubprocessMockHandle;
43
+ private _emitOutputChunks;
44
+ private _applyFileOperations;
45
+ private _beginInteraction;
46
+ private _acceptInput;
47
+ private _tryResolveInteractionFromInput;
48
+ private _resolveInteraction;
49
+ private _emitResolution;
50
+ private _toInputPattern;
51
+ private _emitSimulatedTelemetry;
52
+ private _scheduleExit;
53
+ private _validateExpectations;
54
+ private _exit;
55
+ private _schedule;
56
+ private _cleanup;
57
+ }
@@ -0,0 +1 @@
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,EAGb,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,mBAAmB,CAKX;IAChB,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;IAKzB,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;IAmDzB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,iBAAiB;IA4CzB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,+BAA+B;IAuBvC,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,QAAQ;CAOjB"}