@clowder-ai/plugin-contract 0.1.0-beta.1 → 0.1.0-beta.3

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 (118) hide show
  1. package/dist/codegen/generate-contract.d.ts +1 -0
  2. package/dist/codegen/generate-contract.d.ts.map +1 -1
  3. package/dist/codegen/generate-contract.js +26 -2
  4. package/dist/codegen/generate-contract.js.map +1 -1
  5. package/dist/conformance/behavior-executor.d.ts +18 -0
  6. package/dist/conformance/behavior-executor.d.ts.map +1 -0
  7. package/dist/conformance/behavior-executor.js +52 -0
  8. package/dist/conformance/behavior-executor.js.map +1 -0
  9. package/dist/conformance/index.d.ts +3 -0
  10. package/dist/conformance/index.d.ts.map +1 -1
  11. package/dist/conformance/index.js +3 -0
  12. package/dist/conformance/index.js.map +1 -1
  13. package/dist/conformance/messaging-loopback-adapter.d.ts +23 -0
  14. package/dist/conformance/messaging-loopback-adapter.d.ts.map +1 -0
  15. package/dist/conformance/messaging-loopback-adapter.js +389 -0
  16. package/dist/conformance/messaging-loopback-adapter.js.map +1 -0
  17. package/dist/conformance/messaging-loopback-state.d.ts +22 -0
  18. package/dist/conformance/messaging-loopback-state.d.ts.map +1 -0
  19. package/dist/conformance/messaging-loopback-state.js +101 -0
  20. package/dist/conformance/messaging-loopback-state.js.map +1 -0
  21. package/dist/conformance/runner.d.ts +18 -1
  22. package/dist/conformance/runner.d.ts.map +1 -1
  23. package/dist/conformance/runner.js +133 -64
  24. package/dist/conformance/runner.js.map +1 -1
  25. package/dist/conformance/stdio-harness/child-process-harness.d.ts +59 -0
  26. package/dist/conformance/stdio-harness/child-process-harness.d.ts.map +1 -0
  27. package/dist/conformance/stdio-harness/child-process-harness.js +279 -0
  28. package/dist/conformance/stdio-harness/child-process-harness.js.map +1 -0
  29. package/dist/conformance/stdio-harness/dual-transport-oracle.d.ts +26 -0
  30. package/dist/conformance/stdio-harness/dual-transport-oracle.d.ts.map +1 -0
  31. package/dist/conformance/stdio-harness/dual-transport-oracle.js +32 -0
  32. package/dist/conformance/stdio-harness/dual-transport-oracle.js.map +1 -0
  33. package/dist/conformance/stdio-harness/harness-process-spawn.d.ts +27 -0
  34. package/dist/conformance/stdio-harness/harness-process-spawn.d.ts.map +1 -0
  35. package/dist/conformance/stdio-harness/harness-process-spawn.js +43 -0
  36. package/dist/conformance/stdio-harness/harness-process-spawn.js.map +1 -0
  37. package/dist/conformance/stdio-harness/index.d.ts +5 -0
  38. package/dist/conformance/stdio-harness/index.d.ts.map +1 -0
  39. package/dist/conformance/stdio-harness/index.js +4 -0
  40. package/dist/conformance/stdio-harness/index.js.map +1 -0
  41. package/dist/conformance/stdio-harness/ndjson-frame.d.ts +26 -0
  42. package/dist/conformance/stdio-harness/ndjson-frame.d.ts.map +1 -0
  43. package/dist/conformance/stdio-harness/ndjson-frame.js +119 -0
  44. package/dist/conformance/stdio-harness/ndjson-frame.js.map +1 -0
  45. package/dist/conformance/stdio-harness/node-process-tree-runtime.d.ts +15 -0
  46. package/dist/conformance/stdio-harness/node-process-tree-runtime.d.ts.map +1 -0
  47. package/dist/conformance/stdio-harness/node-process-tree-runtime.js +78 -0
  48. package/dist/conformance/stdio-harness/node-process-tree-runtime.js.map +1 -0
  49. package/dist/conformance/stdio-harness/process-tree-controller.d.ts +51 -0
  50. package/dist/conformance/stdio-harness/process-tree-controller.d.ts.map +1 -0
  51. package/dist/conformance/stdio-harness/process-tree-controller.js +162 -0
  52. package/dist/conformance/stdio-harness/process-tree-controller.js.map +1 -0
  53. package/dist/conformance/stdio-harness/windows-sentinel.d.ts +15 -0
  54. package/dist/conformance/stdio-harness/windows-sentinel.d.ts.map +1 -0
  55. package/dist/conformance/stdio-harness/windows-sentinel.js +160 -0
  56. package/dist/conformance/stdio-harness/windows-sentinel.js.map +1 -0
  57. package/dist/conformance/stdio-harness/wire-shape.d.ts +18 -0
  58. package/dist/conformance/stdio-harness/wire-shape.d.ts.map +1 -0
  59. package/dist/conformance/stdio-harness/wire-shape.js +2 -0
  60. package/dist/conformance/stdio-harness/wire-shape.js.map +1 -0
  61. package/dist/generated/contract.generated.d.ts +129 -1
  62. package/dist/generated/contract.generated.d.ts.map +1 -1
  63. package/dist/generated/contract.generated.js +1 -1
  64. package/dist/generated/contract.generated.js.map +1 -1
  65. package/dist/index.d.ts +1 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +3 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/wire/constants.d.ts +36 -0
  70. package/dist/wire/constants.d.ts.map +1 -0
  71. package/dist/wire/constants.js +36 -0
  72. package/dist/wire/constants.js.map +1 -0
  73. package/dist/wire/disposition-fixtures.d.ts +99 -0
  74. package/dist/wire/disposition-fixtures.d.ts.map +1 -0
  75. package/dist/wire/disposition-fixtures.js +623 -0
  76. package/dist/wire/disposition-fixtures.js.map +1 -0
  77. package/dist/wire/disposition.d.ts +100 -0
  78. package/dist/wire/disposition.d.ts.map +1 -0
  79. package/dist/wire/disposition.js +205 -0
  80. package/dist/wire/disposition.js.map +1 -0
  81. package/dist/wire/envelope.d.ts +253 -0
  82. package/dist/wire/envelope.d.ts.map +1 -0
  83. package/dist/wire/envelope.js +19 -0
  84. package/dist/wire/envelope.js.map +1 -0
  85. package/dist/wire/errors.d.ts +222 -0
  86. package/dist/wire/errors.d.ts.map +1 -0
  87. package/dist/wire/errors.js +153 -0
  88. package/dist/wire/errors.js.map +1 -0
  89. package/dist/wire/grants.d.ts +57 -0
  90. package/dist/wire/grants.d.ts.map +1 -0
  91. package/dist/wire/grants.js +59 -0
  92. package/dist/wire/grants.js.map +1 -0
  93. package/dist/wire/handshake.d.ts +100 -0
  94. package/dist/wire/handshake.d.ts.map +1 -0
  95. package/dist/wire/handshake.js +70 -0
  96. package/dist/wire/handshake.js.map +1 -0
  97. package/dist/wire/index.d.ts +26 -0
  98. package/dist/wire/index.d.ts.map +1 -0
  99. package/dist/wire/index.js +45 -0
  100. package/dist/wire/index.js.map +1 -0
  101. package/dist/wire/registry.d.ts +90 -0
  102. package/dist/wire/registry.d.ts.map +1 -0
  103. package/dist/wire/registry.js +232 -0
  104. package/dist/wire/registry.js.map +1 -0
  105. package/dist/wire/request-id.d.ts +34 -0
  106. package/dist/wire/request-id.d.ts.map +1 -0
  107. package/dist/wire/request-id.js +40 -0
  108. package/dist/wire/request-id.js.map +1 -0
  109. package/dist/wire/row-shapes.d.ts +212 -0
  110. package/dist/wire/row-shapes.d.ts.map +1 -0
  111. package/dist/wire/row-shapes.js +59 -0
  112. package/dist/wire/row-shapes.js.map +1 -0
  113. package/dist/wire/wire-uint53.d.ts +26 -0
  114. package/dist/wire/wire-uint53.d.ts.map +1 -0
  115. package/dist/wire/wire-uint53.js +32 -0
  116. package/dist/wire/wire-uint53.js.map +1 -0
  117. package/fixtures/behavior/messaging/adversarial-invariants.json +56 -5
  118. package/package.json +7 -3
@@ -16,9 +16,11 @@
16
16
  */
17
17
  import { readdir, readFile } from 'node:fs/promises';
18
18
  import { createRequire } from 'node:module';
19
- import { join, relative } from 'node:path';
19
+ import { join, relative, resolve } from 'node:path';
20
20
  import { fileURLToPath } from 'node:url';
21
21
  import { validateMessagingSemantics } from '../validation/messaging-semantic.js';
22
+ import { executeBehaviorCase, } from './behavior-executor.js';
23
+ import { MessagingLoopbackAdapter } from './messaging-loopback-adapter.js';
22
24
  // Ajv is CJS — use createRequire for clean interop with ESM + verbatimModuleSyntax
23
25
  // Use ajv/dist/2020 for JSON Schema 2020-12 ($defs, etc.)
24
26
  const require = createRequire(import.meta.url);
@@ -136,16 +138,25 @@ async function validateFixture(ajv, fixture, schemas) {
136
138
  };
137
139
  }
138
140
  }
139
- // ---------------------------------------------------------------------------
140
- // Main
141
- // ---------------------------------------------------------------------------
142
- async function main() {
143
- const fixturesDir = join(PKG_ROOT, 'fixtures');
141
+ const defaultBehaviorAdapters = {
142
+ loopback: () => new MessagingLoopbackAdapter(),
143
+ };
144
+ function isMissingDirectory(error) {
145
+ return (typeof error === 'object' &&
146
+ error !== null &&
147
+ 'code' in error &&
148
+ error.code === 'ENOENT');
149
+ }
150
+ export async function runConformance(options = {}) {
151
+ const fixturesDir = options.fixturesDir ?? join(PKG_ROOT, 'fixtures');
144
152
  const schemasDir = join(PKG_ROOT, 'src', 'schemas');
145
- console.log('🔍 Conformance runner — @clowder-ai/plugin-contract');
146
- console.log(` Fixtures: ${fixturesDir}`);
147
- console.log(` Schemas: ${schemasDir}`);
148
- console.log();
153
+ const write = options.write ?? console.log;
154
+ const behaviorAdapters = options.behaviorAdapters ?? defaultBehaviorAdapters;
155
+ const failures = [];
156
+ write('🔍 Conformance runner — @clowder-ai/plugin-contract');
157
+ write(` Fixtures: ${fixturesDir}`);
158
+ write(` Schemas: ${schemasDir}`);
159
+ write('');
149
160
  // Load schemas
150
161
  const schemas = new Map();
151
162
  const manifestSchema = await loadSchema(join(schemasDir, 'manifest.schema.json'));
@@ -161,92 +172,150 @@ async function main() {
161
172
  ajv.addSchema(behaviorSchema, behaviorSchema['$id']);
162
173
  // Discover and validate fixtures
163
174
  const fixtures = await discoverFixtures(fixturesDir);
164
- if (fixtures.length === 0) {
165
- console.log('📭 No fixtures found — runner OK (empty run).');
166
- console.log(' Fixtures will be added by sol per the three-tier fixture plan.');
167
- process.exit(0);
168
- }
169
175
  const results = [];
170
176
  for (const fixture of fixtures) {
171
177
  results.push(await validateFixture(ajv, fixture, schemas));
172
178
  }
173
179
  // Report schema fixtures
174
- let schemaFailures = 0;
175
180
  for (const result of results) {
176
181
  const icon = result.passed ? '✅' : '❌';
177
182
  const expect = result.fixture.validity === 'valid' ? 'should pass' : 'should fail';
178
- console.log(`${icon} ${result.fixture.relativePath} (${expect})`);
179
- if (result.errors) {
183
+ write(`${icon} ${result.fixture.relativePath} (${expect})`);
184
+ if (!result.passed) {
185
+ const errors = result.errors ?? ['fixture did not meet its expected validity'];
186
+ failures.push(...errors.map((message) => `${result.fixture.relativePath}: ${message}`));
187
+ }
188
+ if (result.errors && !result.passed) {
180
189
  for (const err of result.errors) {
181
- console.log(` → ${err}`);
190
+ write(` → ${err}`);
182
191
  }
183
- schemaFailures++;
184
192
  }
185
193
  }
186
- // Validate and report behavioral fixtures before deferring their execution.
194
+ // Validate and execute behavioral fixtures through registered adapters.
187
195
  const behaviorDir = join(fixturesDir, 'behavior');
188
- let behaviorCount = 0;
196
+ let behaviorTotal = 0;
197
+ let behaviorPassed = 0;
189
198
  let behaviorFileCount = 0;
190
- let behaviorFailures = 0;
191
199
  const validateBehavior = ajv.getSchema(behaviorSchema['$id']);
192
200
  if (!validateBehavior) {
193
201
  throw new Error('Behavior fixture schema was not registered');
194
202
  }
203
+ let behaviorDomains = [];
195
204
  try {
196
- const behaviorDomains = await readdir(behaviorDir);
197
- for (const domain of behaviorDomains) {
198
- const domainDir = join(behaviorDir, domain);
199
- let entries;
205
+ behaviorDomains = await readdir(behaviorDir);
206
+ }
207
+ catch (error) {
208
+ if (!isMissingDirectory(error)) {
209
+ throw error;
210
+ }
211
+ }
212
+ for (const domain of behaviorDomains) {
213
+ const domainDir = join(behaviorDir, domain);
214
+ let entries;
215
+ try {
216
+ entries = await readdir(domainDir);
217
+ }
218
+ catch (error) {
219
+ if (isMissingDirectory(error)) {
220
+ continue;
221
+ }
222
+ throw error;
223
+ }
224
+ for (const entry of entries) {
225
+ if (!entry.endsWith('.json'))
226
+ continue;
227
+ const path = join(domainDir, entry);
228
+ const fixturePath = relative(fixturesDir, path);
229
+ let parsed;
200
230
  try {
201
- entries = await readdir(domainDir);
231
+ parsed = JSON.parse(await readFile(path, 'utf-8'));
202
232
  }
203
- catch {
233
+ catch (error) {
234
+ const message = error instanceof Error ? error.message : String(error);
235
+ write(`❌ ${fixturePath} (invalid JSON)`);
236
+ write(` → ${message}`);
237
+ failures.push(`${fixturePath}: invalid JSON: ${message}`);
204
238
  continue;
205
239
  }
206
- for (const entry of entries) {
207
- if (!entry.endsWith('.json'))
208
- continue;
209
- const path = join(domainDir, entry);
210
- const fixturePath = relative(fixturesDir, path);
211
- let data;
212
- try {
213
- data = JSON.parse(await readFile(path, 'utf-8'));
240
+ if (!validateBehavior(parsed)) {
241
+ write(`❌ ${fixturePath} (malformed behavior fixture)`);
242
+ const errors = validateBehavior.errors ?? [];
243
+ for (const validationError of errors) {
244
+ const message = `${validationError.instancePath}: ${validationError.message}`;
245
+ write(` → ${message}`);
246
+ failures.push(`${fixturePath}: ${message}`);
214
247
  }
215
- catch (error) {
216
- console.log(`❌ ${fixturePath} (invalid JSON)`);
217
- console.log(` → ${error instanceof Error ? error.message : String(error)}`);
218
- behaviorFailures++;
219
- continue;
248
+ if (errors.length === 0) {
249
+ failures.push(`${fixturePath}: malformed behavior fixture`);
220
250
  }
221
- if (!validateBehavior(data)) {
222
- console.log(`❌ ${fixturePath} (malformed behavior fixture)`);
223
- for (const error of validateBehavior.errors ?? []) {
224
- console.log(` → ${error.instancePath}: ${error.message}`);
251
+ continue;
252
+ }
253
+ const data = parsed;
254
+ const caseCount = data.cases.length;
255
+ behaviorTotal += caseCount;
256
+ behaviorFileCount++;
257
+ const createAdapter = behaviorAdapters[data._meta.executor];
258
+ if (!createAdapter) {
259
+ const message = `unsupported behavior executor ${data._meta.executor}`;
260
+ write(`❌ ${fixturePath} (${message})`);
261
+ failures.push(`${fixturePath}: ${message}`);
262
+ continue;
263
+ }
264
+ let filePassed = 0;
265
+ for (const behaviorCase of data.cases) {
266
+ try {
267
+ const report = await executeBehaviorCase(behaviorCase, createAdapter());
268
+ if (report.passed) {
269
+ behaviorPassed++;
270
+ filePassed++;
225
271
  }
226
- behaviorFailures++;
227
- continue;
272
+ else {
273
+ failures.push(...report.failures.map((failure) => `${fixturePath}/${report.id}: ${failure}`));
274
+ }
275
+ }
276
+ catch (error) {
277
+ const message = error instanceof Error ? error.message : String(error);
278
+ failures.push(`${fixturePath}/${behaviorCase.id}: adapter threw: ${message}`);
228
279
  }
229
- const caseCount = data.cases.length;
230
- behaviorCount += caseCount;
231
- behaviorFileCount++;
232
- console.log(`✅ ${fixturePath} (${caseCount} validated cases, executor: ${data._meta.executor}; execution skipped — requires P-2)`);
233
280
  }
281
+ write(`${filePassed === caseCount ? '✅' : '❌'} ${fixturePath}`);
282
+ write(` ${filePassed}/${caseCount} ${data._meta.executor} behavior cases executed`);
234
283
  }
235
284
  }
236
- catch {
237
- // No behavior directory yet — that's fine
285
+ const contractPassed = results.filter(({ passed }) => passed).length;
286
+ write('');
287
+ write(`Results: ${contractPassed}/${results.length} contract fixtures passed`);
288
+ if (behaviorTotal > 0) {
289
+ write(` ${behaviorPassed}/${behaviorTotal} behavior cases executed across ${behaviorFileCount} file(s)`);
238
290
  }
239
- console.log();
240
- console.log(`Results: ${results.length - schemaFailures}/${results.length} contract fixtures passed`);
241
- if (behaviorCount > 0) {
242
- console.log(`⏭️ ${behaviorCount} validated behavioral cases across ${behaviorFileCount} file(s); loopback execution requires P-2`);
291
+ if (results.length === 0) {
292
+ const message = 'no contract fixtures discovered';
293
+ failures.push(message);
294
+ write(`❌ ${message}`);
243
295
  }
244
- if (schemaFailures + behaviorFailures > 0) {
245
- process.exit(1);
296
+ if (behaviorTotal === 0) {
297
+ const message = 'no behavior cases discovered';
298
+ failures.push(message);
299
+ write(`❌ ${message}`);
246
300
  }
301
+ return {
302
+ contractFixtures: { passed: contractPassed, total: results.length },
303
+ behaviorCases: { passed: behaviorPassed, total: behaviorTotal },
304
+ failures,
305
+ };
306
+ }
307
+ const isMain = process.argv[1] !== undefined &&
308
+ resolve(process.argv[1]) === fileURLToPath(import.meta.url);
309
+ if (isMain) {
310
+ runConformance()
311
+ .then((report) => {
312
+ if (report.failures.length > 0) {
313
+ process.exitCode = 1;
314
+ }
315
+ })
316
+ .catch((err) => {
317
+ console.error('Conformance runner crashed:', err);
318
+ process.exitCode = 1;
319
+ });
247
320
  }
248
- main().catch((err) => {
249
- console.error('Conformance runner crashed:', err);
250
- process.exit(1);
251
- });
252
321
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/conformance/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/conformance/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { type ChildProcessWithoutNullStreams } from 'node:child_process';
2
+ import { type HarnessPlatformAdapter, type HarnessTargetLifecycle, type SpawnHarnessChildOptions } from './harness-process-spawn.js';
3
+ import { type DecodedNdjsonFrame, type JsonObject } from './ndjson-frame.js';
4
+ import { type ProcessTreeRuntime } from './process-tree-controller.js';
5
+ export { HarnessCleanupError } from './process-tree-controller.js';
6
+ export type { HarnessPlatformAdapter, SpawnHarnessChildOptions, } from './harness-process-spawn.js';
7
+ export declare const MAX_HARNESS_QUEUED_FRAMES = 16;
8
+ export interface HarnessReceiveOptions {
9
+ readonly timeoutMs: number;
10
+ }
11
+ export interface HarnessChildExit {
12
+ readonly code: number | null;
13
+ readonly signal: NodeJS.Signals | null;
14
+ }
15
+ export interface RunHarnessCaseOptions extends SpawnHarnessChildOptions {
16
+ readonly timeoutMs: number;
17
+ readonly terminateGraceMs?: number;
18
+ }
19
+ export declare class HarnessTimeoutError extends Error {
20
+ constructor(message: string);
21
+ }
22
+ export declare class HarnessChildExitedError extends Error {
23
+ readonly exit: HarnessChildExit;
24
+ constructor(exit: HarnessChildExit);
25
+ }
26
+ export declare class HarnessFrameBacklogError extends Error {
27
+ readonly maxQueuedFrames: number;
28
+ constructor(maxQueuedFrames?: number);
29
+ }
30
+ export declare class HarnessChild {
31
+ private readonly child;
32
+ readonly pid: number | undefined;
33
+ private readonly decoder;
34
+ private readonly frames;
35
+ private readonly waiters;
36
+ private readonly exitPromise;
37
+ private readonly processTree;
38
+ private resolveExit;
39
+ private exit;
40
+ private streamsClosed;
41
+ private stopPromise;
42
+ constructor(child: ChildProcessWithoutNullStreams, target?: HarnessTargetLifecycle, runtime?: ProcessTreeRuntime);
43
+ send(frame: JsonObject): Promise<void>;
44
+ receive(options: HarnessReceiveOptions): Promise<DecodedNdjsonFrame>;
45
+ kill(signal?: NodeJS.Signals): void;
46
+ waitForExit(): Promise<HarnessChildExit>;
47
+ stop(terminateGraceMs?: number): Promise<HarnessChildExit>;
48
+ private stopOnce;
49
+ private assertRunning;
50
+ private enqueue;
51
+ private fail;
52
+ private rejectWaiters;
53
+ private failAndKill;
54
+ private startReap;
55
+ }
56
+ export declare function spawnHarnessChild(options: SpawnHarnessChildOptions): HarnessChild;
57
+ export declare function spawnHarnessChildWithAdapter(options: SpawnHarnessChildOptions, adapter: HarnessPlatformAdapter): HarnessChild;
58
+ export declare function runHarnessCase<T>(options: RunHarnessCaseOptions, execute: (child: HarnessChild) => Promise<T>): Promise<T>;
59
+ //# sourceMappingURL=child-process-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-process-harness.d.ts","sourceRoot":"","sources":["../../../src/conformance/stdio-harness/child-process-harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,279 @@
1
+ import {} from 'node:child_process';
2
+ import { createDirectTargetLifecycle, spawnHarnessProcess, spawnHarnessProcessWithAdapter, } from './harness-process-spawn.js';
3
+ import { NdjsonFrameDecoder, encodeNdjsonFrame, } from './ndjson-frame.js';
4
+ import { createNodeProcessTreeRuntime } from './node-process-tree-runtime.js';
5
+ import { HarnessCleanupError, ProcessTreeController, } from './process-tree-controller.js';
6
+ export { HarnessCleanupError } from './process-tree-controller.js';
7
+ export const MAX_HARNESS_QUEUED_FRAMES = 16;
8
+ const HARNESS_CLEANUP_TIMEOUT_MS = 1_000;
9
+ const HARNESS_CLEANUP_PROBE_INTERVAL_MS = 5;
10
+ const TASKKILL_TIMEOUT_MS = 500;
11
+ const TARGET_EXIT_GRACE_MS = 500;
12
+ export class HarnessTimeoutError extends Error {
13
+ constructor(message) {
14
+ super(message);
15
+ this.name = 'HarnessTimeoutError';
16
+ }
17
+ }
18
+ export class HarnessChildExitedError extends Error {
19
+ exit;
20
+ constructor(exit) {
21
+ super(`harness child exited before another frame was available (code=${String(exit.code)}, signal=${String(exit.signal)})`);
22
+ this.exit = exit;
23
+ this.name = 'HarnessChildExitedError';
24
+ }
25
+ }
26
+ export class HarnessFrameBacklogError extends Error {
27
+ maxQueuedFrames;
28
+ constructor(maxQueuedFrames = MAX_HARNESS_QUEUED_FRAMES) {
29
+ super(`decoded child frame backlog exceeded ${maxQueuedFrames} queued frames`);
30
+ this.maxQueuedFrames = maxQueuedFrames;
31
+ this.name = 'HarnessFrameBacklogError';
32
+ }
33
+ }
34
+ export class HarnessChild {
35
+ child;
36
+ pid;
37
+ decoder = new NdjsonFrameDecoder();
38
+ frames = [];
39
+ waiters = [];
40
+ exitPromise;
41
+ processTree;
42
+ resolveExit;
43
+ exit;
44
+ streamsClosed = false;
45
+ stopPromise;
46
+ constructor(child, target = createDirectTargetLifecycle(child), runtime = createNodeProcessTreeRuntime(process.platform, target.signalTarget)) {
47
+ this.child = child;
48
+ this.pid = child.pid;
49
+ this.processTree = new ProcessTreeController(this.pid, runtime);
50
+ this.exitPromise = new Promise((resolve) => {
51
+ this.resolveExit = resolve;
52
+ });
53
+ child.stdout.on('data', (chunk) => {
54
+ try {
55
+ for (const frame of this.decoder.push(chunk)) {
56
+ this.enqueue(frame);
57
+ }
58
+ }
59
+ catch (error) {
60
+ this.failAndKill(error);
61
+ }
62
+ });
63
+ child.stdout.on('end', () => {
64
+ if (harnessFatalErrors.has(this)) {
65
+ return;
66
+ }
67
+ try {
68
+ for (const frame of this.decoder.end()) {
69
+ this.enqueue(frame);
70
+ }
71
+ }
72
+ catch (error) {
73
+ this.failAndKill(error);
74
+ }
75
+ });
76
+ child.stdin.on('error', (error) => this.failAndKill(error));
77
+ child.stdout.on('error', (error) => this.failAndKill(error));
78
+ child.stderr.on('error', (error) => this.failAndKill(error));
79
+ target.onTargetError((error) => this.failAndKill(error));
80
+ child.stderr.resume();
81
+ const recordExit = (code, signal) => {
82
+ if (this.exit === undefined) {
83
+ this.exit = { code, signal };
84
+ this.processTree.markTargetExited();
85
+ this.resolveExit(this.exit);
86
+ }
87
+ return this.exit;
88
+ };
89
+ target.onTargetExit(recordExit);
90
+ child.once('close', (code, signal) => {
91
+ const exit = recordExit(code, signal);
92
+ this.streamsClosed = true;
93
+ this.processTree.markStreamsClosed();
94
+ if (!harnessFatalErrors.has(this)) {
95
+ this.rejectWaiters(new HarnessChildExitedError(exit));
96
+ }
97
+ });
98
+ this.processTree.markRunning();
99
+ }
100
+ async send(frame) {
101
+ this.assertRunning();
102
+ const encoded = encodeNdjsonFrame(frame);
103
+ await new Promise((resolve, reject) => {
104
+ this.child.stdin.write(encoded, (error) => {
105
+ if (error === null || error === undefined) {
106
+ resolve();
107
+ }
108
+ else {
109
+ reject(error);
110
+ }
111
+ });
112
+ });
113
+ }
114
+ async receive(options) {
115
+ if (!Number.isSafeInteger(options.timeoutMs) || options.timeoutMs <= 0) {
116
+ throw new RangeError('receive timeoutMs must be a positive safe integer');
117
+ }
118
+ const frame = this.frames.shift();
119
+ if (frame !== undefined) {
120
+ return frame;
121
+ }
122
+ const fatalError = harnessFatalErrors.get(this);
123
+ if (fatalError !== undefined) {
124
+ throw fatalError;
125
+ }
126
+ if (this.streamsClosed && this.exit !== undefined) {
127
+ throw new HarnessChildExitedError(this.exit);
128
+ }
129
+ return new Promise((resolve, reject) => {
130
+ const waiter = {
131
+ resolve,
132
+ reject,
133
+ timer: setTimeout(() => {
134
+ const index = this.waiters.indexOf(waiter);
135
+ if (index !== -1) {
136
+ this.waiters.splice(index, 1);
137
+ }
138
+ reject(new HarnessTimeoutError(`timed out after ${options.timeoutMs}ms waiting for child frame`));
139
+ }, options.timeoutMs),
140
+ };
141
+ this.waiters.push(waiter);
142
+ });
143
+ }
144
+ kill(signal = 'SIGKILL') {
145
+ this.processTree.requestTermination(signal);
146
+ if (signal === 'SIGKILL') {
147
+ void this.startReap();
148
+ }
149
+ }
150
+ waitForExit() {
151
+ return this.exitPromise;
152
+ }
153
+ async stop(terminateGraceMs = 100) {
154
+ if (!Number.isSafeInteger(terminateGraceMs) || terminateGraceMs < 0) {
155
+ throw new RangeError('terminateGraceMs must be a non-negative safe integer');
156
+ }
157
+ this.stopPromise ??= this.stopOnce(terminateGraceMs);
158
+ return await this.stopPromise;
159
+ }
160
+ async stopOnce(terminateGraceMs) {
161
+ this.child.stdin.end();
162
+ this.processTree.requestTermination('SIGTERM');
163
+ await new Promise((resolve) => {
164
+ const timer = setTimeout(resolve, terminateGraceMs);
165
+ this.exitPromise.then(() => {
166
+ clearTimeout(timer);
167
+ resolve();
168
+ });
169
+ });
170
+ this.processTree.requestTermination('SIGKILL');
171
+ await this.startReap();
172
+ return await this.exitPromise;
173
+ }
174
+ assertRunning() {
175
+ const fatalError = harnessFatalErrors.get(this);
176
+ if (fatalError !== undefined) {
177
+ throw fatalError;
178
+ }
179
+ if (this.exit !== undefined) {
180
+ throw new HarnessChildExitedError(this.exit);
181
+ }
182
+ }
183
+ enqueue(frame) {
184
+ const waiter = this.waiters.shift();
185
+ if (waiter === undefined) {
186
+ if (this.frames.length >= MAX_HARNESS_QUEUED_FRAMES) {
187
+ throw new HarnessFrameBacklogError();
188
+ }
189
+ this.frames.push(frame);
190
+ return;
191
+ }
192
+ clearTimeout(waiter.timer);
193
+ waiter.resolve(frame);
194
+ }
195
+ fail(error, discardQueuedFrames = false) {
196
+ if (harnessFatalErrors.has(this)) {
197
+ if (discardQueuedFrames) {
198
+ this.frames.splice(0);
199
+ }
200
+ return;
201
+ }
202
+ harnessFatalErrors.set(this, error);
203
+ if (discardQueuedFrames) {
204
+ this.frames.splice(0);
205
+ }
206
+ this.rejectWaiters(error);
207
+ }
208
+ rejectWaiters(error) {
209
+ for (const waiter of this.waiters.splice(0)) {
210
+ clearTimeout(waiter.timer);
211
+ waiter.reject(error);
212
+ }
213
+ }
214
+ failAndKill(error) {
215
+ this.fail(error instanceof Error ? error : new Error(String(error)), true);
216
+ this.kill('SIGKILL');
217
+ }
218
+ startReap() {
219
+ const cleanup = this.processTree.reap({
220
+ timeoutMs: HARNESS_CLEANUP_TIMEOUT_MS,
221
+ probeIntervalMs: HARNESS_CLEANUP_PROBE_INTERVAL_MS,
222
+ taskkillTimeoutMs: TASKKILL_TIMEOUT_MS,
223
+ targetExitGraceMs: TARGET_EXIT_GRACE_MS,
224
+ });
225
+ void cleanup.catch((error) => {
226
+ this.fail(error instanceof Error ? error : new Error(String(error)), true);
227
+ });
228
+ return cleanup;
229
+ }
230
+ }
231
+ const harnessFatalErrors = new WeakMap();
232
+ export function spawnHarnessChild(options) {
233
+ const spawned = spawnHarnessProcess(options);
234
+ return new HarnessChild(spawned.root, spawned.target, spawned.runtime);
235
+ }
236
+ export function spawnHarnessChildWithAdapter(options, adapter) {
237
+ const spawned = spawnHarnessProcessWithAdapter(options, adapter);
238
+ return new HarnessChild(spawned.root, spawned.target, spawned.runtime);
239
+ }
240
+ export async function runHarnessCase(options, execute) {
241
+ if (!Number.isSafeInteger(options.timeoutMs) || options.timeoutMs <= 0) {
242
+ throw new RangeError('case timeoutMs must be a positive safe integer');
243
+ }
244
+ const child = spawnHarnessChild(options);
245
+ let timer;
246
+ let completed = false;
247
+ let result;
248
+ let executionError;
249
+ try {
250
+ result = await Promise.race([
251
+ execute(child),
252
+ new Promise((_, reject) => {
253
+ timer = setTimeout(() => {
254
+ child.kill('SIGKILL');
255
+ reject(new HarnessTimeoutError(`harness case timed out after ${options.timeoutMs}ms`));
256
+ }, options.timeoutMs);
257
+ }),
258
+ ]);
259
+ completed = true;
260
+ }
261
+ catch (error) {
262
+ executionError = error;
263
+ }
264
+ finally {
265
+ if (timer !== undefined) {
266
+ clearTimeout(timer);
267
+ }
268
+ await child.stop(options.terminateGraceMs);
269
+ }
270
+ const fatalError = harnessFatalErrors.get(child);
271
+ if (fatalError !== undefined) {
272
+ throw fatalError;
273
+ }
274
+ if (!completed) {
275
+ throw executionError;
276
+ }
277
+ return result;
278
+ }
279
+ //# sourceMappingURL=child-process-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-process-harness.js","sourceRoot":"","sources":["../../../src/conformance/stdio-harness/child-process-harness.ts"],"names":[],"mappings":"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"}