@tracecode/harness 0.4.0 → 0.5.0

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 (43) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/browser.cjs +16 -4
  3. package/dist/browser.cjs.map +1 -1
  4. package/dist/browser.d.cts +2 -2
  5. package/dist/browser.d.ts +2 -2
  6. package/dist/browser.js +16 -4
  7. package/dist/browser.js.map +1 -1
  8. package/dist/cli.js +0 -0
  9. package/dist/core.cjs +16 -4
  10. package/dist/core.cjs.map +1 -1
  11. package/dist/core.d.cts +9 -6
  12. package/dist/core.d.ts +9 -6
  13. package/dist/core.js +16 -4
  14. package/dist/core.js.map +1 -1
  15. package/dist/index.cjs +305 -13
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +2 -2
  18. package/dist/index.d.ts +2 -2
  19. package/dist/index.js +305 -13
  20. package/dist/index.js.map +1 -1
  21. package/dist/internal/browser.d.cts +1 -1
  22. package/dist/internal/browser.d.ts +1 -1
  23. package/dist/javascript.cjs +227 -9
  24. package/dist/javascript.cjs.map +1 -1
  25. package/dist/javascript.d.cts +4 -4
  26. package/dist/javascript.d.ts +4 -4
  27. package/dist/javascript.js +227 -9
  28. package/dist/javascript.js.map +1 -1
  29. package/dist/python.cjs +62 -0
  30. package/dist/python.cjs.map +1 -1
  31. package/dist/python.d.cts +2 -2
  32. package/dist/python.d.ts +2 -2
  33. package/dist/python.js +62 -0
  34. package/dist/python.js.map +1 -1
  35. package/dist/{runtime-types-Dvgn07z9.d.cts → runtime-types--lBQ6rYu.d.cts} +1 -1
  36. package/dist/{runtime-types-C7d1LFbx.d.ts → runtime-types-DtaaAhHL.d.ts} +1 -1
  37. package/dist/{types-Bzr1Ohcf.d.cts → types-DwIYM3Ku.d.cts} +5 -2
  38. package/dist/{types-Bzr1Ohcf.d.ts → types-DwIYM3Ku.d.ts} +5 -2
  39. package/package.json +12 -10
  40. package/workers/javascript/javascript-worker.js +455 -31
  41. package/workers/python/generated-python-harness-snippets.js +1 -1
  42. package/workers/python/pyodide-worker.js +31 -0
  43. package/workers/python/runtime-core.js +235 -8
package/CHANGELOG.md CHANGED
@@ -4,6 +4,21 @@ All notable changes to this project are documented here.
4
4
 
5
5
  This repo uses Git tags as release boundaries. Version notes below summarize what shipped in each tagged release.
6
6
 
7
+ ## [0.5.0] - 2026-03-14
8
+
9
+ ### Fixed
10
+
11
+ - JavaScript function-style tree inputs now hydrate fallback `root`/`head` array inputs even when no explicit static parameter materializer is available.
12
+ - Sparse level-order tree arrays now deserialize correctly in the JavaScript worker instead of being rebuilt as complete binary trees.
13
+
14
+ ### Changed
15
+
16
+ - GitHub CI now runs the non-browser harness verification set and skips Playwright/Chrome example-app coverage.
17
+
18
+ ### Notes
19
+
20
+ - `0.5.0` is a JavaScript runtime correctness and CI-trim release ahead of the next app cut.
21
+
7
22
  ## [0.4.0] - 2026-03-10
8
23
 
9
24
  ### Added
package/dist/browser.cjs CHANGED
@@ -289,7 +289,7 @@ var JavaScriptWorkerClient = class {
289
289
  };
290
290
 
291
291
  // packages/harness-core/src/trace-contract.ts
292
- var RUNTIME_TRACE_CONTRACT_SCHEMA_VERSION = "2026-03-07";
292
+ var RUNTIME_TRACE_CONTRACT_SCHEMA_VERSION = "2026-03-13";
293
293
  var TRACE_EVENTS = /* @__PURE__ */ new Set([
294
294
  "line",
295
295
  "call",
@@ -332,13 +332,13 @@ function normalizeFunctionName(value) {
332
332
  return "<module>";
333
333
  }
334
334
  function normalizeKind(value) {
335
- if (value === "map" || value === "set" || value === "hashmap") {
335
+ if (value === "map" || value === "set" || value === "hashmap" || value === "object") {
336
336
  return value;
337
337
  }
338
338
  return "hashmap";
339
339
  }
340
340
  function normalizeObjectKind(value) {
341
- if (value === "hashmap" || value === "map" || value === "set" || value === "tree" || value === "linked-list" || value === "graph-adjacency") {
341
+ if (value === "hashmap" || value === "object" || value === "map" || value === "set" || value === "tree" || value === "linked-list" || value === "graph-adjacency") {
342
342
  return value;
343
343
  }
344
344
  return null;
@@ -416,6 +416,14 @@ function normalizeRecord(value) {
416
416
  if (!value || typeof value !== "object" || Array.isArray(value)) return {};
417
417
  return normalizeUnknown(value);
418
418
  }
419
+ function normalizeVariableSources(value) {
420
+ if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
421
+ const entries = Object.entries(value).filter(
422
+ ([name, source]) => typeof name === "string" && name.length > 0 && (source === "user" || source === "user-input" || source === "harness-prelude")
423
+ ).sort((a, b) => a[0].localeCompare(b[0]));
424
+ if (entries.length === 0) return void 0;
425
+ return Object.fromEntries(entries);
426
+ }
419
427
  function normalizeCallStackFrame(frame) {
420
428
  return {
421
429
  function: normalizeFunctionName(frame?.function),
@@ -433,7 +441,9 @@ function normalizeVisualizationPayload(payload) {
433
441
  ...item?.highlight ? { highlight: true } : {}
434
442
  })) : [],
435
443
  ...entry?.highlightedKey !== void 0 ? { highlightedKey: normalizeUnknown(entry.highlightedKey) } : {},
436
- ...entry?.deletedKey !== void 0 ? { deletedKey: normalizeUnknown(entry.deletedKey) } : {}
444
+ ...entry?.deletedKey !== void 0 ? { deletedKey: normalizeUnknown(entry.deletedKey) } : {},
445
+ ...typeof entry?.objectClassName === "string" && entry.objectClassName.length > 0 ? { objectClassName: entry.objectClassName } : {},
446
+ ...typeof entry?.objectId === "string" && entry.objectId.length > 0 ? { objectId: entry.objectId } : {}
437
447
  })).sort((a, b) => `${a.name}:${a.kind}`.localeCompare(`${b.name}:${b.kind}`)) : [];
438
448
  const objectKinds = payload?.objectKinds && typeof payload.objectKinds === "object" ? Object.fromEntries(
439
449
  Object.entries(payload.objectKinds).filter(([name]) => typeof name === "string" && name.length > 0).map(([name, kind]) => [name, normalizeObjectKind(kind)]).filter((entry) => entry[1] !== null).sort((a, b) => a[0].localeCompare(b[0]))
@@ -450,11 +460,13 @@ function normalizeTraceStep(step) {
450
460
  const normalizedStdoutCount = normalizeOutputLineCount(step?.stdoutLineCount);
451
461
  const normalizedVisualization = normalizeVisualizationPayload(step?.visualization);
452
462
  const normalizedAccesses = normalizeAccesses(step?.accesses);
463
+ const normalizedVariableSources = normalizeVariableSources(step?.variableSources);
453
464
  return {
454
465
  event: normalizeEvent(step?.event),
455
466
  line: normalizeLineNumber(step?.line, 1),
456
467
  function: normalizeFunctionName(step?.function),
457
468
  variables: normalizeRecord(step?.variables),
469
+ ...normalizedVariableSources ? { variableSources: normalizedVariableSources } : {},
458
470
  ...Array.isArray(step?.callStack) && step.callStack.length > 0 ? { callStack: step.callStack.map(normalizeCallStackFrame) } : {},
459
471
  ...normalizedAccesses ? { accesses: normalizedAccesses } : {},
460
472
  ...step?.returnValue !== void 0 ? { returnValue: normalizeUnknown(step.returnValue) } : {},
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/harness-browser/src/index.ts","../packages/harness-browser/src/javascript-worker-client.ts","../packages/harness-core/src/trace-contract.ts","../packages/harness-core/src/trace-adapters/shared.ts","../packages/harness-core/src/trace-adapters/javascript.ts","../packages/harness-browser/src/runtime-capability-guards.ts","../packages/harness-browser/src/runtime-profiles.ts","../packages/harness-browser/src/javascript-runtime-client.ts","../packages/harness-browser/src/pyodide-worker-client.ts","../packages/harness-core/src/trace-adapters/python.ts","../packages/harness-browser/src/python-runtime-client.ts","../packages/harness-browser/src/runtime-assets.ts","../packages/harness-browser/src/browser-harness.ts"],"sourcesContent":["export * from './browser-harness';\nexport * from './runtime-capability-guards';\nexport * from './runtime-profiles';\n","import type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\n\ntype MessageId = string;\nexport type JavaScriptExecutionStyle = 'function' | 'solution-method' | 'ops-class';\nexport type JavaScriptWorkerLanguage = 'javascript' | 'typescript';\n\nexport interface JavaScriptWorkerClientOptions {\n workerUrl: string;\n debug?: boolean;\n}\n\ninterface PendingMessage {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\ninterface WorkerMessage {\n id?: MessageId;\n type: string;\n payload?: unknown;\n}\n\ninterface InitResult {\n success: boolean;\n loadTimeMs: number;\n}\n\nconst EXECUTION_TIMEOUT_MS = 7000;\nconst INTERVIEW_MODE_TIMEOUT_MS = 5000;\nconst TRACING_TIMEOUT_MS = 7000;\nconst INIT_TIMEOUT_MS = 10000;\nconst MESSAGE_TIMEOUT_MS = 12000;\nconst WORKER_READY_TIMEOUT_MS = 10000;\n\nexport class JavaScriptWorkerClient {\n private worker: Worker | null = null;\n private pendingMessages = new Map<MessageId, PendingMessage>();\n private messageId = 0;\n private isInitializing = false;\n private initPromise: Promise<InitResult> | null = null;\n private workerReadyPromise: Promise<void> | null = null;\n private workerReadyResolve: (() => void) | null = null;\n private workerReadyReject: ((error: Error) => void) | null = null;\n private readonly debug: boolean;\n\n constructor(private readonly options: JavaScriptWorkerClientOptions) {\n this.debug = options.debug ?? process.env.NODE_ENV === 'development';\n }\n\n isSupported(): boolean {\n return typeof Worker !== 'undefined';\n }\n\n private getWorker(): Worker {\n if (this.worker) return this.worker;\n\n if (!this.isSupported()) {\n throw new Error('Web Workers are not supported in this environment');\n }\n\n this.workerReadyPromise = new Promise((resolve, reject) => {\n this.workerReadyResolve = resolve;\n this.workerReadyReject = (error: Error) => reject(error);\n });\n\n const workerUrl =\n this.debug && !this.options.workerUrl.includes('?')\n ? `${this.options.workerUrl}?dev=${Date.now()}`\n : this.options.workerUrl;\n this.worker = new Worker(workerUrl);\n\n this.worker.onmessage = (event: MessageEvent<WorkerMessage>) => {\n const { id, type, payload } = event.data;\n\n if (type === 'worker-ready') {\n this.workerReadyResolve?.();\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n if (this.debug) console.log('[JavaScriptWorkerClient] worker-ready');\n return;\n }\n\n if (id) {\n const pending = this.pendingMessages.get(id);\n if (!pending) return;\n\n this.pendingMessages.delete(id);\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n\n if (type === 'error') {\n pending.reject(new Error((payload as { error: string }).error));\n return;\n }\n\n pending.resolve(payload);\n }\n };\n\n this.worker.onerror = (error) => {\n console.error('[JavaScriptWorkerClient] Worker error:', error);\n const workerError = new Error('Worker error');\n this.workerReadyReject?.(workerError);\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n\n for (const [id, pending] of this.pendingMessages) {\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n pending.reject(workerError);\n this.pendingMessages.delete(id);\n }\n };\n\n return this.worker;\n }\n\n private async waitForWorkerReady(): Promise<void> {\n const readyPromise = this.workerReadyPromise;\n if (!readyPromise) return;\n\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n\n const timeoutId = globalThis.setTimeout(() => {\n if (settled) return;\n settled = true;\n const timeoutError = new Error(\n `JavaScript worker failed to initialize in time (${Math.round(WORKER_READY_TIMEOUT_MS / 1000)}s)`\n );\n this.terminateAndReset(timeoutError);\n reject(timeoutError);\n }, WORKER_READY_TIMEOUT_MS);\n\n readyPromise\n .then(() => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n resolve();\n })\n .catch((error) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n reject(error instanceof Error ? error : new Error(String(error)));\n });\n });\n }\n\n private async sendMessage<T>(\n type: string,\n payload?: unknown,\n timeoutMs: number = MESSAGE_TIMEOUT_MS\n ): Promise<T> {\n const worker = this.getWorker();\n await this.waitForWorkerReady();\n const id = String(++this.messageId);\n\n return new Promise<T>((resolve, reject) => {\n this.pendingMessages.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n });\n\n const timeoutId = globalThis.setTimeout(() => {\n const pending = this.pendingMessages.get(id);\n if (!pending) return;\n this.pendingMessages.delete(id);\n pending.reject(new Error(`Worker request timed out: ${type}`));\n }, timeoutMs);\n\n const pending = this.pendingMessages.get(id);\n if (pending) pending.timeoutId = timeoutId;\n\n worker.postMessage({ id, type, payload });\n });\n }\n\n private async executeWithTimeout<T>(executor: () => Promise<T>, timeoutMs: number): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n\n const timeoutId = globalThis.setTimeout(() => {\n if (settled) return;\n settled = true;\n this.terminateAndReset();\n reject(\n new Error(\n `Execution timed out (possible infinite loop). Code execution was stopped after ${Math.round(timeoutMs / 1000)} seconds.`\n )\n );\n }, timeoutMs);\n\n executor()\n .then((result) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n resolve(result);\n })\n .catch((error) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n reject(error);\n });\n });\n }\n\n private terminateAndReset(reason: Error = new Error('Worker was terminated')): void {\n this.workerReadyReject?.(reason);\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n }\n this.initPromise = null;\n this.isInitializing = false;\n this.workerReadyPromise = null;\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n\n for (const [, pending] of this.pendingMessages) {\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n pending.reject(reason);\n }\n this.pendingMessages.clear();\n }\n\n async init(): Promise<InitResult> {\n if (this.initPromise) return this.initPromise;\n\n if (this.isInitializing) {\n await new Promise((resolve) => globalThis.setTimeout(resolve, 100));\n return this.init();\n }\n\n this.isInitializing = true;\n this.initPromise = this.sendMessage<InitResult>('init', undefined, INIT_TIMEOUT_MS);\n\n try {\n return await this.initPromise;\n } catch (error) {\n this.initPromise = null;\n throw error;\n } finally {\n this.isInitializing = false;\n }\n }\n\n async executeWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n options?: {\n maxTraceSteps?: number;\n maxLineEvents?: number;\n maxSingleLineHits?: number;\n minimalTrace?: boolean;\n },\n executionStyle: JavaScriptExecutionStyle = 'function',\n language: JavaScriptWorkerLanguage = 'javascript'\n ): Promise<ExecutionResult> {\n await this.init();\n return this.executeWithTimeout(\n () =>\n this.sendMessage<ExecutionResult>(\n 'execute-with-tracing',\n {\n code,\n functionName,\n inputs,\n options,\n executionStyle,\n language,\n },\n TRACING_TIMEOUT_MS + 2000\n ),\n TRACING_TIMEOUT_MS\n );\n }\n\n async executeCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: JavaScriptExecutionStyle = 'function',\n language: JavaScriptWorkerLanguage = 'javascript'\n ): Promise<CodeExecutionResult> {\n await this.init();\n return this.executeWithTimeout(\n () =>\n this.sendMessage<CodeExecutionResult>(\n 'execute-code',\n {\n code,\n functionName,\n inputs,\n executionStyle,\n language,\n },\n EXECUTION_TIMEOUT_MS + 2000\n ),\n EXECUTION_TIMEOUT_MS\n );\n }\n\n async executeCodeInterviewMode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: JavaScriptExecutionStyle = 'function',\n language: JavaScriptWorkerLanguage = 'javascript'\n ): Promise<CodeExecutionResult> {\n await this.init();\n\n try {\n const result = await this.executeWithTimeout(\n () =>\n this.sendMessage<CodeExecutionResult>(\n 'execute-code-interview',\n {\n code,\n functionName,\n inputs,\n executionStyle,\n language,\n },\n INTERVIEW_MODE_TIMEOUT_MS + 2000\n ),\n INTERVIEW_MODE_TIMEOUT_MS\n );\n\n if (!result.success && result.error) {\n const normalized = result.error.toLowerCase();\n const isTimeoutOrResourceLimit =\n normalized.includes('timed out') ||\n normalized.includes('infinite loop') ||\n normalized.includes('line-limit') ||\n normalized.includes('single-line-limit') ||\n normalized.includes('recursion-limit') ||\n normalized.includes('trace-limit') ||\n normalized.includes('line events') ||\n normalized.includes('trace steps') ||\n normalized.includes('call depth');\n if (isTimeoutOrResourceLimit) {\n return {\n success: false,\n output: null,\n error: 'Time Limit Exceeded',\n consoleOutput: result.consoleOutput ?? [],\n };\n }\n }\n\n return result;\n } catch {\n return {\n success: false,\n output: null,\n error: 'Time Limit Exceeded',\n consoleOutput: [],\n };\n }\n }\n\n terminate(): void {\n this.terminateAndReset();\n }\n}\n\nexport function isJavaScriptWorkerSupported(): boolean {\n return typeof Worker !== 'undefined';\n}\n","import type { Language } from './runtime-types';\nimport type {\n CallStackFrame,\n ExecutionResult,\n RawTraceStep,\n RuntimeTraceAccessEvent,\n RuntimeTraceAccessKind,\n RuntimeObjectKind,\n RuntimeVisualizationPayload,\n} from './types';\n\n/**\n * Runtime trace contract schema version.\n *\n * Bump this when payload shape/normalization semantics change in a way that\n * should invalidate golden fixtures.\n */\nexport const RUNTIME_TRACE_CONTRACT_SCHEMA_VERSION = '2026-03-07';\n\nexport type RuntimeTraceContractEvent =\n | 'line'\n | 'call'\n | 'return'\n | 'exception'\n | 'timeout'\n | 'stdout';\n\nexport interface RuntimeTraceContractHashMapEntry {\n key: unknown;\n value: unknown;\n highlight?: boolean;\n}\n\nexport interface RuntimeTraceContractHashMap {\n name: string;\n kind: 'hashmap' | 'map' | 'set';\n entries: RuntimeTraceContractHashMapEntry[];\n highlightedKey?: unknown;\n deletedKey?: unknown;\n}\n\nexport interface RuntimeTraceContractVisualization {\n hashMaps?: RuntimeTraceContractHashMap[];\n objectKinds?: Partial<Record<string, RuntimeObjectKind>>;\n}\n\nexport interface RuntimeTraceContractCallStackFrame {\n function: string;\n line: number;\n args: Record<string, unknown>;\n}\n\nexport interface RuntimeTraceContractStep {\n event: RuntimeTraceContractEvent;\n line: number;\n function: string;\n variables: Record<string, unknown>;\n callStack?: RuntimeTraceContractCallStackFrame[];\n accesses?: RuntimeTraceAccessEvent[];\n returnValue?: unknown;\n stdoutLineCount?: number;\n visualization?: RuntimeTraceContractVisualization;\n}\n\nexport interface RuntimeTraceContractResult {\n schemaVersion: typeof RUNTIME_TRACE_CONTRACT_SCHEMA_VERSION;\n language: Language;\n success: boolean;\n output?: unknown;\n error?: string;\n errorLine?: number;\n consoleOutput: string[];\n trace: RuntimeTraceContractStep[];\n traceLimitExceeded?: boolean;\n timeoutReason?: string;\n lineEventCount: number;\n traceStepCount: number;\n}\n\nconst TRACE_EVENTS: ReadonlySet<string> = new Set([\n 'line',\n 'call',\n 'return',\n 'exception',\n 'timeout',\n 'stdout',\n]);\n\nconst TRACE_ACCESS_KINDS: ReadonlySet<RuntimeTraceAccessKind> = new Set([\n 'indexed-read',\n 'indexed-write',\n 'cell-read',\n 'cell-write',\n 'mutating-call',\n]);\n\nfunction normalizeLineNumber(value: unknown, fallback = 1): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) return fallback;\n const normalized = Math.floor(value);\n return normalized > 0 ? normalized : fallback;\n}\n\nfunction normalizeOutputLineCount(value: unknown): number | undefined {\n if (typeof value !== 'number' || !Number.isFinite(value)) return undefined;\n const normalized = Math.floor(value);\n return normalized >= 0 ? normalized : undefined;\n}\n\nfunction normalizeEvent(value: unknown): RuntimeTraceContractEvent {\n if (typeof value === 'string' && TRACE_EVENTS.has(value)) {\n return value as RuntimeTraceContractEvent;\n }\n return 'line';\n}\n\nfunction normalizeAccessKind(value: unknown): RuntimeTraceAccessKind | null {\n if (typeof value === 'string' && TRACE_ACCESS_KINDS.has(value as RuntimeTraceAccessKind)) {\n return value as RuntimeTraceAccessKind;\n }\n return null;\n}\n\nfunction normalizeFunctionName(value: unknown): string {\n if (typeof value === 'string' && value.length > 0) return value;\n return '<module>';\n}\n\nfunction normalizeKind(value: unknown): 'hashmap' | 'map' | 'set' {\n if (value === 'map' || value === 'set' || value === 'hashmap') {\n return value;\n }\n return 'hashmap';\n}\n\nfunction normalizeObjectKind(value: unknown): RuntimeObjectKind | null {\n if (\n value === 'hashmap' ||\n value === 'map' ||\n value === 'set' ||\n value === 'tree' ||\n value === 'linked-list' ||\n value === 'graph-adjacency'\n ) {\n return value;\n }\n return null;\n}\n\nfunction normalizeScalar(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string' || typeof value === 'boolean') return value;\n if (typeof value === 'number') return Number.isFinite(value) ? value : String(value);\n if (typeof value === 'bigint') {\n const asNumber = Number(value);\n return Number.isSafeInteger(asNumber) ? asNumber : String(value);\n }\n if (typeof value === 'function') return '<function>';\n return null;\n}\n\nfunction normalizeUnknown(value: unknown, depth = 0, seen = new WeakSet<object>()): unknown {\n if (depth > 48) return '<max depth>';\n\n const scalar = normalizeScalar(value);\n if (scalar !== null || value === null || value === undefined) {\n return scalar;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => {\n if (item === undefined) return null;\n return normalizeUnknown(item, depth + 1, seen);\n });\n }\n\n if (typeof value === 'object' && value) {\n if (seen.has(value)) return '<cycle>';\n seen.add(value);\n\n const normalized: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n const child = (value as Record<string, unknown>)[key];\n if (child === undefined) continue;\n normalized[key] = normalizeUnknown(child, depth + 1, seen);\n }\n\n seen.delete(value);\n return normalized;\n }\n\n return String(value);\n}\n\nfunction normalizeAccesses(\n accesses: RuntimeTraceAccessEvent[] | undefined\n): RuntimeTraceAccessEvent[] | undefined {\n if (!Array.isArray(accesses) || accesses.length === 0) {\n return undefined;\n }\n\n const normalized = accesses\n .map((access) => {\n const variable =\n typeof access?.variable === 'string' && access.variable.length > 0 ? access.variable : '';\n const kind = normalizeAccessKind(access?.kind);\n if (!variable || !kind) {\n return null;\n }\n\n const indices = Array.isArray(access?.indices)\n ? access.indices\n .map((index) =>\n typeof index === 'number' && Number.isFinite(index) ? Math.floor(index) : null\n )\n .filter((index): index is number => index !== null)\n : undefined;\n const pathDepth =\n access?.pathDepth === 1 || access?.pathDepth === 2 ? access.pathDepth : undefined;\n const method =\n typeof access?.method === 'string' && access.method.length > 0 ? access.method : undefined;\n\n const payload: RuntimeTraceAccessEvent = {\n variable,\n kind,\n };\n\n if (indices && indices.length > 0) {\n payload.indices = indices;\n }\n if (pathDepth !== undefined) {\n payload.pathDepth = pathDepth;\n }\n if (method) {\n payload.method = method;\n }\n\n return payload;\n })\n .filter((access): access is RuntimeTraceAccessEvent => access !== null);\n\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {};\n return normalizeUnknown(value) as Record<string, unknown>;\n}\n\nfunction normalizeCallStackFrame(frame: CallStackFrame): RuntimeTraceContractCallStackFrame {\n return {\n function: normalizeFunctionName(frame?.function),\n line: normalizeLineNumber(frame?.line, 1),\n args: normalizeRecord(frame?.args),\n };\n}\n\nfunction normalizeVisualizationPayload(\n payload: RuntimeVisualizationPayload | undefined\n): RuntimeTraceContractVisualization | undefined {\n const hashMaps = Array.isArray(payload?.hashMaps)\n ? payload.hashMaps\n .map((entry) => ({\n name: typeof entry?.name === 'string' ? entry.name : '',\n kind: normalizeKind(entry?.kind),\n entries: Array.isArray(entry?.entries)\n ? entry.entries.map((item) => ({\n key: normalizeUnknown(item?.key),\n value: normalizeUnknown(item?.value),\n ...(item?.highlight ? { highlight: true } : {}),\n }))\n : [],\n ...(entry?.highlightedKey !== undefined\n ? { highlightedKey: normalizeUnknown(entry.highlightedKey) }\n : {}),\n ...(entry?.deletedKey !== undefined\n ? { deletedKey: normalizeUnknown(entry.deletedKey) }\n : {}),\n }))\n .sort((a, b) => `${a.name}:${a.kind}`.localeCompare(`${b.name}:${b.kind}`))\n : [];\n\n const objectKinds =\n payload?.objectKinds && typeof payload.objectKinds === 'object'\n ? Object.fromEntries(\n Object.entries(payload.objectKinds)\n .filter(([name]) => typeof name === 'string' && name.length > 0)\n .map(([name, kind]) => [name, normalizeObjectKind(kind)])\n .filter((entry): entry is [string, RuntimeObjectKind] => entry[1] !== null)\n .sort((a, b) => a[0].localeCompare(b[0]))\n )\n : undefined;\n\n if (hashMaps.length === 0 && (!objectKinds || Object.keys(objectKinds).length === 0)) {\n return undefined;\n }\n\n return {\n ...(hashMaps.length > 0 ? { hashMaps } : {}),\n ...(objectKinds && Object.keys(objectKinds).length > 0 ? { objectKinds } : {}),\n };\n}\n\nfunction normalizeTraceStep(step: RawTraceStep): RuntimeTraceContractStep {\n const normalizedStdoutCount = normalizeOutputLineCount(step?.stdoutLineCount);\n const normalizedVisualization = normalizeVisualizationPayload(step?.visualization);\n const normalizedAccesses = normalizeAccesses(step?.accesses);\n\n return {\n event: normalizeEvent(step?.event),\n line: normalizeLineNumber(step?.line, 1),\n function: normalizeFunctionName(step?.function),\n variables: normalizeRecord(step?.variables),\n ...(Array.isArray(step?.callStack) && step.callStack.length > 0\n ? { callStack: step.callStack.map(normalizeCallStackFrame) }\n : {}),\n ...(normalizedAccesses ? { accesses: normalizedAccesses } : {}),\n ...(step?.returnValue !== undefined ? { returnValue: normalizeUnknown(step.returnValue) } : {}),\n ...(normalizedStdoutCount !== undefined ? { stdoutLineCount: normalizedStdoutCount } : {}),\n ...(normalizedVisualization ? { visualization: normalizedVisualization } : {}),\n };\n}\n\nexport function normalizeRuntimeTraceContract(\n language: Language,\n result: ExecutionResult\n): RuntimeTraceContractResult {\n const normalizedTrace = Array.isArray(result.trace) ? result.trace.map(normalizeTraceStep) : [];\n const lineEventCount =\n typeof result.lineEventCount === 'number' && Number.isFinite(result.lineEventCount)\n ? Math.floor(result.lineEventCount)\n : normalizedTrace.filter((step) => step.event === 'line').length;\n\n const normalizedConsole = Array.isArray(result.consoleOutput)\n ? result.consoleOutput.map((line) => String(line))\n : [];\n\n return {\n schemaVersion: RUNTIME_TRACE_CONTRACT_SCHEMA_VERSION,\n language,\n success: Boolean(result.success),\n ...(Object.prototype.hasOwnProperty.call(result, 'output')\n ? { output: normalizeUnknown(result.output) }\n : {}),\n ...(typeof result.error === 'string' && result.error.length > 0\n ? { error: result.error }\n : {}),\n ...(typeof result.errorLine === 'number' && Number.isFinite(result.errorLine)\n ? { errorLine: Math.floor(result.errorLine) }\n : {}),\n consoleOutput: normalizedConsole,\n trace: normalizedTrace,\n ...(result.traceLimitExceeded !== undefined\n ? { traceLimitExceeded: Boolean(result.traceLimitExceeded) }\n : {}),\n ...(typeof result.timeoutReason === 'string' && result.timeoutReason.length > 0\n ? { timeoutReason: result.timeoutReason }\n : {}),\n lineEventCount: Math.max(0, lineEventCount),\n traceStepCount: normalizedTrace.length,\n };\n}\n\nexport function stableStringifyRuntimeTraceContract(value: unknown): string {\n return JSON.stringify(normalizeUnknown(value), null, 2);\n}\n","import type { Language } from '../runtime-types';\nimport {\n normalizeRuntimeTraceContract,\n type RuntimeTraceContractCallStackFrame,\n type RuntimeTraceContractStep,\n} from '../trace-contract';\nimport type {\n CallStackFrame,\n ExecutionResult,\n RawTraceStep,\n RuntimeVisualizationPayload,\n} from '../types';\n\nfunction denormalizeCallStackFrame(frame: RuntimeTraceContractCallStackFrame): CallStackFrame {\n return {\n function: frame.function,\n line: frame.line,\n args: frame.args,\n };\n}\n\nfunction denormalizeTraceStep(step: RuntimeTraceContractStep): RawTraceStep {\n return {\n line: step.line,\n event: step.event,\n variables: step.variables,\n function: step.function,\n ...(step.callStack ? { callStack: step.callStack.map(denormalizeCallStackFrame) } : {}),\n ...(step.accesses ? { accesses: step.accesses } : {}),\n ...(step.returnValue !== undefined ? { returnValue: step.returnValue } : {}),\n ...(step.stdoutLineCount !== undefined ? { stdoutLineCount: step.stdoutLineCount } : {}),\n ...(step.visualization ? { visualization: step.visualization as RuntimeVisualizationPayload } : {}),\n };\n}\n\nexport function adaptTraceExecutionResult(\n language: Language,\n result: ExecutionResult\n): ExecutionResult {\n const normalized = normalizeRuntimeTraceContract(language, result);\n const adaptedTrace: RawTraceStep[] = normalized.trace.map(denormalizeTraceStep);\n\n return {\n success: normalized.success,\n ...(Object.prototype.hasOwnProperty.call(normalized, 'output') ? { output: normalized.output } : {}),\n ...(normalized.error ? { error: normalized.error } : {}),\n ...(normalized.errorLine !== undefined ? { errorLine: normalized.errorLine } : {}),\n trace: adaptedTrace,\n executionTimeMs:\n typeof result.executionTimeMs === 'number' && Number.isFinite(result.executionTimeMs)\n ? result.executionTimeMs\n : 0,\n consoleOutput: normalized.consoleOutput,\n ...(normalized.traceLimitExceeded !== undefined ? { traceLimitExceeded: normalized.traceLimitExceeded } : {}),\n ...(normalized.timeoutReason\n ? { timeoutReason: normalized.timeoutReason as ExecutionResult['timeoutReason'] }\n : {}),\n lineEventCount: normalized.lineEventCount,\n traceStepCount: adaptedTrace.length,\n };\n}\n","import type { Language } from '../runtime-types';\nimport type { ExecutionResult } from '../types';\nimport { adaptTraceExecutionResult } from './shared';\n\nexport function adaptJavaScriptTraceExecutionResult(\n language: Extract<Language, 'javascript' | 'typescript'>,\n result: ExecutionResult\n): ExecutionResult {\n return adaptTraceExecutionResult(language, result);\n}\n","import type {\n LanguageRuntimeProfile,\n RuntimeExecutionStyle,\n} from '../../harness-core/src/runtime-types';\n\ntype RuntimeRequestKind = 'execute' | 'trace' | 'interview';\n\ninterface RuntimeRequestSupportOptions {\n request: RuntimeRequestKind;\n executionStyle: RuntimeExecutionStyle;\n functionName?: string | null;\n}\n\nfunction isScriptRequest(functionName: string | null | undefined): boolean {\n if (functionName == null) return true;\n return functionName.trim().length === 0;\n}\n\nfunction executionStyleLabel(executionStyle: RuntimeExecutionStyle): string {\n if (executionStyle === 'solution-method') return 'solution-method';\n if (executionStyle === 'ops-class') return 'ops-class';\n return 'function';\n}\n\nfunction isExecutionStyleSupported(\n profile: LanguageRuntimeProfile,\n executionStyle: RuntimeExecutionStyle\n): boolean {\n const styles = profile.capabilities.execution.styles;\n if (executionStyle === 'solution-method') return styles.solutionMethod;\n if (executionStyle === 'ops-class') return styles.opsClass;\n return styles.function;\n}\n\nfunction describeRequest(request: RuntimeRequestKind): string {\n if (request === 'trace') return 'tracing';\n if (request === 'interview') return 'interview execution';\n return 'execution';\n}\n\nexport function assertRuntimeRequestSupported(\n profile: LanguageRuntimeProfile,\n options: RuntimeRequestSupportOptions\n): void {\n if (options.request === 'trace' && !profile.capabilities.tracing.supported) {\n throw new Error(`Runtime \"${profile.language}\" does not support tracing.`);\n }\n\n if (options.request === 'interview' && !profile.capabilities.execution.styles.interviewMode) {\n throw new Error(`Runtime \"${profile.language}\" does not support interview execution.`);\n }\n\n if (!isExecutionStyleSupported(profile, options.executionStyle)) {\n throw new Error(\n `Runtime \"${profile.language}\" does not support execution style \"${executionStyleLabel(options.executionStyle)}\".`\n );\n }\n\n if (isScriptRequest(options.functionName) && !profile.capabilities.execution.styles.script) {\n throw new Error(`Runtime \"${profile.language}\" does not support script mode ${describeRequest(options.request)}.`);\n }\n}\n","import type { Language, LanguageRuntimeProfile } from '../../harness-core/src/runtime-types';\n\nconst PYTHON_RUNTIME_PROFILE: LanguageRuntimeProfile = {\n language: 'python',\n maturity: 'stable',\n capabilities: {\n execution: {\n styles: {\n function: true,\n solutionMethod: true,\n opsClass: true,\n script: true,\n interviewMode: true,\n },\n timeouts: {\n clientTimeouts: true,\n runtimeTimeouts: true,\n },\n },\n tracing: {\n supported: true,\n events: {\n line: true,\n call: true,\n return: true,\n exception: true,\n stdout: true,\n timeout: true,\n },\n controls: {\n maxTraceSteps: true,\n maxLineEvents: true,\n maxSingleLineHits: true,\n minimalTrace: true,\n },\n fidelity: {\n preciseLineMapping: true,\n stableFunctionNames: true,\n callStack: true,\n },\n },\n diagnostics: {\n compileErrors: false,\n runtimeErrors: true,\n mappedErrorLines: true,\n stackTraces: false,\n },\n structures: {\n treeNodeRefs: true,\n listNodeRefs: true,\n mapSerialization: true,\n setSerialization: true,\n graphSerialization: true,\n cycleReferences: true,\n },\n visualization: {\n runtimePayloads: true,\n objectKinds: true,\n hashMaps: true,\n stepVisualization: true,\n },\n },\n};\n\nconst JAVASCRIPT_RUNTIME_PROFILE: LanguageRuntimeProfile = {\n language: 'javascript',\n maturity: 'stable',\n capabilities: {\n execution: {\n styles: {\n function: true,\n solutionMethod: true,\n opsClass: true,\n script: true,\n interviewMode: true,\n },\n timeouts: {\n clientTimeouts: true,\n runtimeTimeouts: false,\n },\n },\n tracing: {\n supported: true,\n events: {\n line: true,\n call: true,\n return: true,\n exception: true,\n stdout: false,\n timeout: true,\n },\n controls: {\n maxTraceSteps: true,\n maxLineEvents: true,\n maxSingleLineHits: true,\n minimalTrace: true,\n },\n fidelity: {\n preciseLineMapping: true,\n stableFunctionNames: true,\n callStack: true,\n },\n },\n diagnostics: {\n compileErrors: false,\n runtimeErrors: true,\n mappedErrorLines: false,\n stackTraces: false,\n },\n structures: {\n treeNodeRefs: true,\n listNodeRefs: true,\n mapSerialization: true,\n setSerialization: true,\n graphSerialization: true,\n cycleReferences: true,\n },\n visualization: {\n runtimePayloads: true,\n objectKinds: true,\n hashMaps: true,\n stepVisualization: true,\n },\n },\n};\n\nconst TYPESCRIPT_RUNTIME_PROFILE: LanguageRuntimeProfile = {\n language: 'typescript',\n maturity: 'stable',\n capabilities: {\n execution: {\n styles: {\n function: true,\n solutionMethod: true,\n opsClass: true,\n script: true,\n interviewMode: true,\n },\n timeouts: {\n clientTimeouts: true,\n runtimeTimeouts: false,\n },\n },\n tracing: {\n supported: true,\n events: {\n line: true,\n call: true,\n return: true,\n exception: true,\n stdout: false,\n timeout: true,\n },\n controls: {\n maxTraceSteps: true,\n maxLineEvents: true,\n maxSingleLineHits: true,\n minimalTrace: true,\n },\n fidelity: {\n preciseLineMapping: true,\n stableFunctionNames: true,\n callStack: true,\n },\n },\n diagnostics: {\n compileErrors: true,\n runtimeErrors: true,\n mappedErrorLines: true,\n stackTraces: false,\n },\n structures: {\n treeNodeRefs: true,\n listNodeRefs: true,\n mapSerialization: true,\n setSerialization: true,\n graphSerialization: true,\n cycleReferences: true,\n },\n visualization: {\n runtimePayloads: true,\n objectKinds: true,\n hashMaps: true,\n stepVisualization: true,\n },\n },\n};\n\nexport const LANGUAGE_RUNTIME_PROFILES: Record<Language, LanguageRuntimeProfile> = {\n python: PYTHON_RUNTIME_PROFILE,\n javascript: JAVASCRIPT_RUNTIME_PROFILE,\n typescript: TYPESCRIPT_RUNTIME_PROFILE,\n};\n\nexport const SUPPORTED_LANGUAGES: readonly Language[] = Object.freeze(\n Object.keys(LANGUAGE_RUNTIME_PROFILES) as Language[]\n);\n\nexport function getLanguageRuntimeProfile(language: Language): LanguageRuntimeProfile {\n const profile = LANGUAGE_RUNTIME_PROFILES[language];\n if (!profile) {\n throw new Error(`Runtime profile for language \"${language}\" is not implemented yet.`);\n }\n return profile;\n}\n\nexport function getSupportedLanguageProfiles(): readonly LanguageRuntimeProfile[] {\n return SUPPORTED_LANGUAGES.map((language) => LANGUAGE_RUNTIME_PROFILES[language]);\n}\n\nexport function isLanguageSupported(language: Language): boolean {\n return SUPPORTED_LANGUAGES.includes(language);\n}\n","import {\n type JavaScriptExecutionStyle,\n type JavaScriptWorkerLanguage,\n type JavaScriptWorkerClient,\n} from './javascript-worker-client';\nimport type {\n RuntimeClient,\n RuntimeExecutionStyle,\n TraceExecutionOptions,\n} from '../../harness-core/src/runtime-types';\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\nimport { adaptJavaScriptTraceExecutionResult } from '../../harness-core/src/trace-adapters/javascript';\nimport { assertRuntimeRequestSupported } from './runtime-capability-guards';\nimport { getLanguageRuntimeProfile } from './runtime-profiles';\n\nclass JavaScriptRuntimeClient implements RuntimeClient {\n constructor(\n private readonly runtimeLanguage: JavaScriptWorkerLanguage,\n private readonly workerClient: JavaScriptWorkerClient\n ) {}\n\n async init(): Promise<{ success: boolean; loadTimeMs: number }> {\n return this.workerClient.init();\n }\n\n async executeWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n options?: TraceExecutionOptions,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<ExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile(this.runtimeLanguage), {\n request: 'trace',\n executionStyle,\n functionName,\n });\n const rawResult = await this.workerClient.executeWithTracing(\n code,\n functionName,\n inputs,\n options,\n executionStyle as JavaScriptExecutionStyle,\n this.runtimeLanguage\n );\n return adaptJavaScriptTraceExecutionResult(this.runtimeLanguage, rawResult);\n }\n\n async executeCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile(this.runtimeLanguage), {\n request: 'execute',\n executionStyle,\n functionName,\n });\n return this.workerClient.executeCode(\n code,\n functionName,\n inputs,\n executionStyle as JavaScriptExecutionStyle,\n this.runtimeLanguage\n );\n }\n\n async executeCodeInterviewMode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile(this.runtimeLanguage), {\n request: 'interview',\n executionStyle,\n functionName,\n });\n return this.workerClient.executeCodeInterviewMode(\n code,\n functionName,\n inputs,\n executionStyle as JavaScriptExecutionStyle,\n this.runtimeLanguage\n );\n }\n}\n\nexport function createJavaScriptRuntimeClient(\n runtimeLanguage: JavaScriptWorkerLanguage,\n workerClient: JavaScriptWorkerClient\n): RuntimeClient {\n return new JavaScriptRuntimeClient(runtimeLanguage, workerClient);\n}\n","/**\n * Pyodide Worker Client\n * \n * TypeScript client for communicating with the Pyodide Web Worker.\n * Provides a promise-based API for executing Python code off the main thread.\n */\n\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\n\ntype MessageId = string;\nexport type ExecutionStyle = 'function' | 'solution-method' | 'ops-class';\n\nexport interface PyodideWorkerClientOptions {\n workerUrl: string;\n debug?: boolean;\n}\n\ninterface PendingMessage {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof globalThis.setTimeout>;\n}\n\ninterface WorkerMessage {\n id?: MessageId;\n type: string;\n payload?: unknown;\n}\n\ninterface InitResult {\n success: boolean;\n loadTimeMs: number;\n}\n\ninterface StatusResult {\n isReady: boolean;\n isLoading: boolean;\n}\n\n// Execution timeout in milliseconds for simple code execution (10 seconds)\nconst EXECUTION_TIMEOUT_MS = 10000;\n\n// Interview mode timeout - shorter, no detailed error info (5 seconds)\nconst INTERVIEW_MODE_TIMEOUT_MS = 5000;\n\n// Tracing timeout - longer because Python heuristic detection handles infinite loops\n// This is just a safety net for truly stuck executions\nconst TRACING_TIMEOUT_MS = 30000;\n\n// Initial Pyodide load timeout can be significantly higher on first boot/network-constrained setups\nconst INIT_TIMEOUT_MS = 120000;\n\n// Message timeout for non-execution operations (20 seconds)\nconst MESSAGE_TIMEOUT_MS = 20000;\n// Worker bootstrap timeout - prevents deadlock when worker never emits \"worker-ready\"\nconst WORKER_READY_TIMEOUT_MS = 10000;\n\nexport class PyodideWorkerClient {\n private worker: Worker | null = null;\n private pendingMessages = new Map<MessageId, PendingMessage>();\n private messageId = 0;\n private isInitializing = false;\n private initPromise: Promise<InitResult> | null = null;\n private workerReadyPromise: Promise<void> | null = null;\n private workerReadyResolve: (() => void) | null = null;\n private workerReadyReject: ((error: Error) => void) | null = null;\n private readonly debug: boolean;\n\n constructor(private readonly options: PyodideWorkerClientOptions) {\n this.debug = options.debug ?? process.env.NODE_ENV === 'development';\n }\n\n /**\n * Check if Web Workers are supported\n */\n isSupported(): boolean {\n return typeof Worker !== 'undefined';\n }\n\n /**\n * Get or create the worker instance\n */\n private getWorker(): Worker {\n if (this.worker) return this.worker;\n\n if (!this.isSupported()) {\n throw new Error('Web Workers are not supported in this environment');\n }\n\n // Create promise that resolves when worker signals it's ready\n this.workerReadyPromise = new Promise((resolve, reject) => {\n this.workerReadyResolve = resolve;\n this.workerReadyReject = (error: Error) => reject(error);\n });\n\n const workerUrl =\n this.debug && !this.options.workerUrl.includes('?')\n ? `${this.options.workerUrl}?dev=${Date.now()}`\n : this.options.workerUrl;\n this.worker = new Worker(workerUrl);\n \n this.worker.onmessage = (event: MessageEvent<WorkerMessage>) => {\n const { id, type, payload } = event.data;\n\n // Handle worker-ready signal\n if (type === 'worker-ready') {\n this.workerReadyResolve?.();\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n if (this.debug) console.log('[PyodideWorkerClient] worker-ready');\n return;\n }\n\n if (this.debug && !id) {\n console.log('[PyodideWorkerClient] event', { type, payload });\n }\n\n // Handle responses to our messages\n if (id) {\n const pending = this.pendingMessages.get(id);\n if (pending) {\n this.pendingMessages.delete(id);\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n \n if (type === 'error') {\n pending.reject(new Error((payload as { error: string }).error));\n } else {\n if (this.debug) console.log('[PyodideWorkerClient] recv', { id, type });\n pending.resolve(payload);\n }\n }\n }\n };\n\n this.worker.onerror = (error) => {\n console.error('[PyodideWorkerClient] Worker error:', error);\n const workerError = new Error('Worker error');\n this.workerReadyReject?.(workerError);\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n // Reject all pending messages and clear their timeouts\n for (const [id, pending] of this.pendingMessages) {\n if (pending.timeoutId) {\n globalThis.clearTimeout(pending.timeoutId);\n }\n pending.reject(workerError);\n this.pendingMessages.delete(id);\n }\n };\n\n return this.worker;\n }\n\n /**\n * Wait for worker bootstrap signal with timeout.\n * Guards against deadlocks when the worker script fails before posting \"worker-ready\".\n */\n private async waitForWorkerReady(): Promise<void> {\n const readyPromise = this.workerReadyPromise;\n if (!readyPromise) return;\n\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n\n const timeoutId = globalThis.setTimeout(() => {\n if (settled) return;\n settled = true;\n const timeoutError = new Error(\n `Python worker failed to initialize in time (${Math.round(WORKER_READY_TIMEOUT_MS / 1000)}s)`\n );\n if (this.debug) {\n console.warn('[PyodideWorkerClient] worker-ready timeout', { timeoutMs: WORKER_READY_TIMEOUT_MS });\n }\n this.terminateAndReset(timeoutError);\n reject(timeoutError);\n }, WORKER_READY_TIMEOUT_MS);\n\n readyPromise\n .then(() => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n resolve();\n })\n .catch((error) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n reject(error instanceof Error ? error : new Error(String(error)));\n });\n });\n }\n\n /**\n * Send a message to the worker and wait for a response\n */\n private async sendMessage<T>(type: string, payload?: unknown, timeoutMs: number = MESSAGE_TIMEOUT_MS): Promise<T> {\n const worker = this.getWorker();\n \n // Wait for worker to be ready before sending messages\n await this.waitForWorkerReady();\n \n const id = String(++this.messageId);\n\n return new Promise<T>((resolve, reject) => {\n this.pendingMessages.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n });\n\n if (this.debug) console.log('[PyodideWorkerClient] send', { id, type });\n\n const timeoutId = globalThis.setTimeout(() => {\n const pending = this.pendingMessages.get(id);\n if (!pending) return;\n this.pendingMessages.delete(id);\n if (this.debug) console.warn('[PyodideWorkerClient] timeout', { id, type });\n pending.reject(new Error(`Worker request timed out: ${type}`));\n }, timeoutMs);\n\n const pending = this.pendingMessages.get(id);\n if (pending) pending.timeoutId = timeoutId;\n\n worker.postMessage({ id, type, payload });\n });\n }\n\n /**\n * Execute code with a timeout - terminates worker if execution takes too long\n */\n private async executeWithTimeout<T>(\n executor: () => Promise<T>,\n timeoutMs: number = EXECUTION_TIMEOUT_MS\n ): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n \n const timeoutId = globalThis.setTimeout(() => {\n if (settled) return;\n settled = true;\n \n // Terminate the stuck worker and clear state\n if (this.debug) {\n console.warn('[PyodideWorkerClient] Execution timeout - terminating worker');\n }\n this.terminateAndReset();\n \n const seconds = Math.round(timeoutMs / 1000);\n reject(new Error(`Execution timed out (possible infinite loop). Code execution was stopped after ${seconds} seconds.`));\n }, timeoutMs);\n \n executor()\n .then((result) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n resolve(result);\n })\n .catch((error) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n reject(error);\n });\n });\n }\n\n /**\n * Terminate the worker and reset state for recreation\n */\n private terminateAndReset(reason: Error = new Error('Worker was terminated')): void {\n this.workerReadyReject?.(reason);\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n }\n this.initPromise = null;\n this.isInitializing = false;\n this.workerReadyPromise = null;\n this.workerReadyResolve = null;\n \n // Reject all pending messages\n for (const [, pending] of this.pendingMessages) {\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n pending.reject(reason);\n }\n this.pendingMessages.clear();\n }\n\n /**\n * Initialize Pyodide in the worker\n */\n async init(): Promise<InitResult> {\n // Return existing promise if already initializing\n if (this.initPromise) {\n return this.initPromise;\n }\n\n if (this.isInitializing) {\n // Wait for existing init to complete\n await new Promise((resolve) => setTimeout(resolve, 100));\n return this.init();\n }\n\n this.isInitializing = true;\n\n this.initPromise = (async () => {\n try {\n return await this.sendMessage<InitResult>('init', undefined, INIT_TIMEOUT_MS);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n const shouldRetry =\n message.includes('Worker request timed out: init') ||\n message.includes('Worker was terminated') ||\n message.includes('Worker error') ||\n message.includes('failed to initialize in time');\n\n if (!shouldRetry) {\n throw error;\n }\n\n if (this.debug) {\n console.warn('[PyodideWorkerClient] init failed, resetting worker and retrying once', { message });\n }\n\n this.terminateAndReset();\n return this.sendMessage<InitResult>('init', undefined, INIT_TIMEOUT_MS);\n }\n })();\n \n try {\n const result = await this.initPromise;\n return result;\n } catch (error) {\n this.initPromise = null;\n throw error;\n } finally {\n this.isInitializing = false;\n }\n }\n\n /**\n * Execute Python code with tracing for step-by-step visualization\n * @param options.maxLineEvents - Max line events before abort (for complexity analysis, use higher values)\n */\n async executeWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n options?: {\n maxTraceSteps?: number;\n maxLineEvents?: number;\n maxSingleLineHits?: number;\n minimalTrace?: boolean;\n },\n executionStyle: ExecutionStyle = 'function'\n ): Promise<ExecutionResult> {\n // Ensure Pyodide is initialized\n await this.init();\n \n // Use longer timeout for tracing - Python heuristic detection handles infinite loops\n try {\n return await this.executeWithTimeout(\n () => this.sendMessage<ExecutionResult>('execute-with-tracing', {\n code,\n functionName,\n inputs,\n executionStyle,\n options,\n }, TRACING_TIMEOUT_MS + 5000), // Message timeout slightly longer than execution timeout\n TRACING_TIMEOUT_MS\n );\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isClientTimeout =\n errorMessage.includes('Execution timed out') ||\n errorMessage.includes('possible infinite loop');\n\n if (isClientTimeout) {\n return {\n success: false,\n error: errorMessage,\n trace: [],\n executionTimeMs: TRACING_TIMEOUT_MS,\n consoleOutput: [],\n traceLimitExceeded: true,\n timeoutReason: 'client-timeout',\n lineEventCount: 0,\n traceStepCount: 0,\n };\n }\n\n throw error;\n }\n }\n\n /**\n * Execute Python code without tracing (for running tests)\n */\n async executeCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: ExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n // Ensure Pyodide is initialized\n await this.init();\n \n return this.executeWithTimeout(\n () => this.sendMessage<CodeExecutionResult>('execute-code', {\n code,\n functionName,\n inputs,\n executionStyle,\n }, EXECUTION_TIMEOUT_MS + 5000),\n EXECUTION_TIMEOUT_MS\n );\n }\n\n /**\n * Execute Python code in interview mode - 5 second timeout, generic error messages\n * Does not reveal which line caused the timeout\n */\n async executeCodeInterviewMode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: ExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n // Ensure Pyodide is initialized\n await this.init();\n \n try {\n const result = await this.executeWithTimeout(\n () => this.sendMessage<CodeExecutionResult>('execute-code-interview', {\n code,\n functionName,\n inputs,\n executionStyle,\n }, INTERVIEW_MODE_TIMEOUT_MS + 2000),\n INTERVIEW_MODE_TIMEOUT_MS\n );\n \n // Sanitize error messages in interview mode - don't reveal line numbers for timeouts\n if (!result.success && result.error) {\n // Keep basic error types but remove line-specific info for timeouts\n const normalizedError = result.error.toLowerCase();\n const isTimeoutOrResourceLimit =\n normalizedError.includes('timed out') ||\n normalizedError.includes('execution timeout') ||\n normalizedError.includes('infinite loop') ||\n normalizedError.includes('interview_guard_triggered') ||\n normalizedError.includes('memory-limit') ||\n normalizedError.includes('line-limit') ||\n normalizedError.includes('single-line-limit') ||\n normalizedError.includes('recursion-limit');\n\n if (isTimeoutOrResourceLimit) {\n return {\n success: false,\n output: null,\n error: 'Time Limit Exceeded',\n consoleOutput: result.consoleOutput ?? [],\n };\n }\n }\n \n return result;\n } catch (error) {\n // Handle timeout from executeWithTimeout\n const errorMsg = error instanceof Error ? error.message : String(error);\n if (errorMsg.includes('timed out') || errorMsg.includes('Execution timeout')) {\n return {\n success: false,\n output: null,\n error: 'Time Limit Exceeded',\n consoleOutput: [],\n };\n }\n return {\n success: false,\n output: null,\n error: errorMsg,\n consoleOutput: [],\n };\n }\n }\n\n /**\n * Check the status of the worker\n */\n async getStatus(): Promise<StatusResult> {\n return this.sendMessage<StatusResult>('status');\n }\n\n /**\n * Analyze Python code using AST (off main thread)\n * Returns CodeFacts with semantic information about the code\n */\n async analyzeCode(code: string): Promise<unknown> {\n // Ensure Pyodide is initialized\n await this.init();\n \n // Use a shorter timeout for analysis (5 seconds should be plenty)\n return this.sendMessage<unknown>('analyze-code', { code }, 5000);\n }\n\n /**\n * Terminate the worker and clean up resources\n */\n terminate(): void {\n this.terminateAndReset();\n }\n}\n\n/**\n * Check if the worker client is supported\n */\nexport function isWorkerSupported(): boolean {\n return typeof Worker !== 'undefined';\n}\n","import type { ExecutionResult } from '../types';\nimport { adaptTraceExecutionResult } from './shared';\n\nexport function adaptPythonTraceExecutionResult(result: ExecutionResult): ExecutionResult {\n return adaptTraceExecutionResult('python', result);\n}\n","import type { ExecutionStyle, PyodideWorkerClient } from './pyodide-worker-client';\nimport type {\n RuntimeClient,\n RuntimeExecutionStyle,\n TraceExecutionOptions,\n} from '../../harness-core/src/runtime-types';\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\nimport { adaptPythonTraceExecutionResult } from '../../harness-core/src/trace-adapters/python';\nimport { assertRuntimeRequestSupported } from './runtime-capability-guards';\nimport { getLanguageRuntimeProfile } from './runtime-profiles';\n\nclass PythonRuntimeClient implements RuntimeClient {\n constructor(private readonly workerClient: PyodideWorkerClient) {}\n\n async init(): Promise<{ success: boolean; loadTimeMs: number }> {\n return this.workerClient.init();\n }\n\n async executeWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n options?: TraceExecutionOptions,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<ExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile('python'), {\n request: 'trace',\n executionStyle,\n functionName,\n });\n const rawResult = await this.workerClient.executeWithTracing(\n code,\n functionName,\n inputs,\n options,\n executionStyle as ExecutionStyle\n );\n return adaptPythonTraceExecutionResult(rawResult);\n }\n\n async executeCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile('python'), {\n request: 'execute',\n executionStyle,\n functionName,\n });\n return this.workerClient.executeCode(\n code,\n functionName,\n inputs,\n executionStyle as ExecutionStyle\n );\n }\n\n async executeCodeInterviewMode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile('python'), {\n request: 'interview',\n executionStyle,\n functionName,\n });\n return this.workerClient.executeCodeInterviewMode(\n code,\n functionName,\n inputs,\n executionStyle as ExecutionStyle\n );\n }\n}\n\nexport function createPythonRuntimeClient(workerClient: PyodideWorkerClient): RuntimeClient {\n return new PythonRuntimeClient(workerClient);\n}\n","const DEFAULT_ASSET_BASE_URL = '/workers';\n\nexport interface BrowserHarnessAssets {\n pythonWorker: string;\n pythonRuntimeCore: string;\n pythonSnippets: string;\n javascriptWorker: string;\n typescriptCompiler: string;\n}\n\nexport type BrowserHarnessAssetOverrides = Partial<BrowserHarnessAssets>;\n\nexport const DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS: Readonly<BrowserHarnessAssets> = Object.freeze({\n pythonWorker: 'pyodide-worker.js',\n pythonRuntimeCore: 'pyodide/runtime-core.js',\n pythonSnippets: 'generated-python-harness-snippets.js',\n javascriptWorker: 'javascript-worker.js',\n typescriptCompiler: 'vendor/typescript.js',\n});\n\nfunction isExplicitAssetPath(pathname: string): boolean {\n return (\n pathname.startsWith('/') ||\n pathname.startsWith('./') ||\n pathname.startsWith('../') ||\n pathname.startsWith('http://') ||\n pathname.startsWith('https://') ||\n pathname.startsWith('data:') ||\n pathname.startsWith('blob:')\n );\n}\n\nfunction stripTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, '');\n}\n\nfunction trimLeadingSlash(value: string): string {\n return value.replace(/^\\/+/, '');\n}\n\nfunction resolveAssetPath(baseUrl: string, pathname: string): string {\n if (isExplicitAssetPath(pathname)) {\n return pathname;\n }\n const normalizedBase = stripTrailingSlash(baseUrl || DEFAULT_ASSET_BASE_URL);\n const normalizedPath = trimLeadingSlash(pathname);\n return `${normalizedBase}/${normalizedPath}`;\n}\n\nexport function resolveBrowserHarnessAssets(options: {\n assetBaseUrl?: string;\n assets?: BrowserHarnessAssetOverrides;\n} = {}): BrowserHarnessAssets {\n const assetBaseUrl = options.assetBaseUrl ?? DEFAULT_ASSET_BASE_URL;\n const assets = options.assets ?? {};\n return {\n pythonWorker: resolveAssetPath(assetBaseUrl, assets.pythonWorker ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.pythonWorker),\n pythonRuntimeCore: resolveAssetPath(\n assetBaseUrl,\n assets.pythonRuntimeCore ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.pythonRuntimeCore\n ),\n pythonSnippets: resolveAssetPath(assetBaseUrl, assets.pythonSnippets ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.pythonSnippets),\n javascriptWorker: resolveAssetPath(\n assetBaseUrl,\n assets.javascriptWorker ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.javascriptWorker\n ),\n typescriptCompiler: resolveAssetPath(\n assetBaseUrl,\n assets.typescriptCompiler ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.typescriptCompiler\n ),\n };\n}\n","import type {\n Language,\n LanguageRuntimeProfile,\n RuntimeClient,\n} from '../../harness-core/src/runtime-types';\nimport { JavaScriptWorkerClient } from './javascript-worker-client';\nimport { createJavaScriptRuntimeClient } from './javascript-runtime-client';\nimport { PyodideWorkerClient } from './pyodide-worker-client';\nimport { createPythonRuntimeClient } from './python-runtime-client';\nimport {\n DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS,\n resolveBrowserHarnessAssets,\n type BrowserHarnessAssets,\n type BrowserHarnessAssetOverrides,\n} from './runtime-assets';\nimport {\n getLanguageRuntimeProfile,\n getSupportedLanguageProfiles,\n isLanguageSupported,\n SUPPORTED_LANGUAGES,\n} from './runtime-profiles';\n\nexport interface CreateBrowserHarnessOptions {\n assetBaseUrl?: string;\n assets?: BrowserHarnessAssetOverrides;\n debug?: boolean;\n}\n\nexport interface BrowserHarness {\n readonly assets: BrowserHarnessAssets;\n readonly supportedLanguages: readonly Language[];\n getClient(language: Language): RuntimeClient;\n getProfile(language: Language): LanguageRuntimeProfile;\n getSupportedLanguageProfiles(): readonly LanguageRuntimeProfile[];\n isLanguageSupported(language: Language): boolean;\n disposeLanguage(language: Language): void;\n dispose(): void;\n}\n\nclass BrowserHarnessRuntime implements BrowserHarness {\n readonly assets: BrowserHarnessAssets;\n readonly supportedLanguages = SUPPORTED_LANGUAGES;\n\n private readonly pythonWorkerClient: PyodideWorkerClient;\n private readonly javaScriptWorkerClient: JavaScriptWorkerClient;\n private readonly clients: Record<Language, RuntimeClient>;\n\n constructor(options: CreateBrowserHarnessOptions = {}) {\n this.assets = resolveBrowserHarnessAssets(options);\n this.pythonWorkerClient = new PyodideWorkerClient({\n workerUrl: this.assets.pythonWorker,\n debug: options.debug,\n });\n this.javaScriptWorkerClient = new JavaScriptWorkerClient({\n workerUrl: this.assets.javascriptWorker,\n debug: options.debug,\n });\n this.clients = {\n python: createPythonRuntimeClient(this.pythonWorkerClient),\n javascript: createJavaScriptRuntimeClient('javascript', this.javaScriptWorkerClient),\n typescript: createJavaScriptRuntimeClient('typescript', this.javaScriptWorkerClient),\n };\n }\n\n getClient(language: Language): RuntimeClient {\n const client = this.clients[language];\n if (!client) {\n throw new Error(`Runtime for language \"${language}\" is not implemented yet.`);\n }\n return client;\n }\n\n getProfile(language: Language): LanguageRuntimeProfile {\n return getLanguageRuntimeProfile(language);\n }\n\n getSupportedLanguageProfiles(): readonly LanguageRuntimeProfile[] {\n return getSupportedLanguageProfiles();\n }\n\n isLanguageSupported(language: Language): boolean {\n return isLanguageSupported(language);\n }\n\n disposeLanguage(language: Language): void {\n if (language === 'python') {\n this.pythonWorkerClient.terminate();\n return;\n }\n this.javaScriptWorkerClient.terminate();\n }\n\n dispose(): void {\n this.pythonWorkerClient.terminate();\n this.javaScriptWorkerClient.terminate();\n }\n}\n\nexport function createBrowserHarness(options: CreateBrowserHarnessOptions = {}): BrowserHarness {\n return new BrowserHarnessRuntime(options);\n}\n\nexport {\n DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS,\n resolveBrowserHarnessAssets,\n type BrowserHarnessAssets,\n type BrowserHarnessAssetOverrides,\n};\n"],"mappings":"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","names":["pending","EXECUTION_TIMEOUT_MS","INTERVIEW_MODE_TIMEOUT_MS","TRACING_TIMEOUT_MS","INIT_TIMEOUT_MS","MESSAGE_TIMEOUT_MS","WORKER_READY_TIMEOUT_MS","pending"]}
1
+ {"version":3,"sources":["../packages/harness-browser/src/index.ts","../packages/harness-browser/src/javascript-worker-client.ts","../packages/harness-core/src/trace-contract.ts","../packages/harness-core/src/trace-adapters/shared.ts","../packages/harness-core/src/trace-adapters/javascript.ts","../packages/harness-browser/src/runtime-capability-guards.ts","../packages/harness-browser/src/runtime-profiles.ts","../packages/harness-browser/src/javascript-runtime-client.ts","../packages/harness-browser/src/pyodide-worker-client.ts","../packages/harness-core/src/trace-adapters/python.ts","../packages/harness-browser/src/python-runtime-client.ts","../packages/harness-browser/src/runtime-assets.ts","../packages/harness-browser/src/browser-harness.ts"],"sourcesContent":["export * from './browser-harness';\nexport * from './runtime-capability-guards';\nexport * from './runtime-profiles';\n","import type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\n\ntype MessageId = string;\nexport type JavaScriptExecutionStyle = 'function' | 'solution-method' | 'ops-class';\nexport type JavaScriptWorkerLanguage = 'javascript' | 'typescript';\n\nexport interface JavaScriptWorkerClientOptions {\n workerUrl: string;\n debug?: boolean;\n}\n\ninterface PendingMessage {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n}\n\ninterface WorkerMessage {\n id?: MessageId;\n type: string;\n payload?: unknown;\n}\n\ninterface InitResult {\n success: boolean;\n loadTimeMs: number;\n}\n\nconst EXECUTION_TIMEOUT_MS = 7000;\nconst INTERVIEW_MODE_TIMEOUT_MS = 5000;\nconst TRACING_TIMEOUT_MS = 7000;\nconst INIT_TIMEOUT_MS = 10000;\nconst MESSAGE_TIMEOUT_MS = 12000;\nconst WORKER_READY_TIMEOUT_MS = 10000;\n\nexport class JavaScriptWorkerClient {\n private worker: Worker | null = null;\n private pendingMessages = new Map<MessageId, PendingMessage>();\n private messageId = 0;\n private isInitializing = false;\n private initPromise: Promise<InitResult> | null = null;\n private workerReadyPromise: Promise<void> | null = null;\n private workerReadyResolve: (() => void) | null = null;\n private workerReadyReject: ((error: Error) => void) | null = null;\n private readonly debug: boolean;\n\n constructor(private readonly options: JavaScriptWorkerClientOptions) {\n this.debug = options.debug ?? process.env.NODE_ENV === 'development';\n }\n\n isSupported(): boolean {\n return typeof Worker !== 'undefined';\n }\n\n private getWorker(): Worker {\n if (this.worker) return this.worker;\n\n if (!this.isSupported()) {\n throw new Error('Web Workers are not supported in this environment');\n }\n\n this.workerReadyPromise = new Promise((resolve, reject) => {\n this.workerReadyResolve = resolve;\n this.workerReadyReject = (error: Error) => reject(error);\n });\n\n const workerUrl =\n this.debug && !this.options.workerUrl.includes('?')\n ? `${this.options.workerUrl}?dev=${Date.now()}`\n : this.options.workerUrl;\n this.worker = new Worker(workerUrl);\n\n this.worker.onmessage = (event: MessageEvent<WorkerMessage>) => {\n const { id, type, payload } = event.data;\n\n if (type === 'worker-ready') {\n this.workerReadyResolve?.();\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n if (this.debug) console.log('[JavaScriptWorkerClient] worker-ready');\n return;\n }\n\n if (id) {\n const pending = this.pendingMessages.get(id);\n if (!pending) return;\n\n this.pendingMessages.delete(id);\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n\n if (type === 'error') {\n pending.reject(new Error((payload as { error: string }).error));\n return;\n }\n\n pending.resolve(payload);\n }\n };\n\n this.worker.onerror = (error) => {\n console.error('[JavaScriptWorkerClient] Worker error:', error);\n const workerError = new Error('Worker error');\n this.workerReadyReject?.(workerError);\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n\n for (const [id, pending] of this.pendingMessages) {\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n pending.reject(workerError);\n this.pendingMessages.delete(id);\n }\n };\n\n return this.worker;\n }\n\n private async waitForWorkerReady(): Promise<void> {\n const readyPromise = this.workerReadyPromise;\n if (!readyPromise) return;\n\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n\n const timeoutId = globalThis.setTimeout(() => {\n if (settled) return;\n settled = true;\n const timeoutError = new Error(\n `JavaScript worker failed to initialize in time (${Math.round(WORKER_READY_TIMEOUT_MS / 1000)}s)`\n );\n this.terminateAndReset(timeoutError);\n reject(timeoutError);\n }, WORKER_READY_TIMEOUT_MS);\n\n readyPromise\n .then(() => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n resolve();\n })\n .catch((error) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n reject(error instanceof Error ? error : new Error(String(error)));\n });\n });\n }\n\n private async sendMessage<T>(\n type: string,\n payload?: unknown,\n timeoutMs: number = MESSAGE_TIMEOUT_MS\n ): Promise<T> {\n const worker = this.getWorker();\n await this.waitForWorkerReady();\n const id = String(++this.messageId);\n\n return new Promise<T>((resolve, reject) => {\n this.pendingMessages.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n });\n\n const timeoutId = globalThis.setTimeout(() => {\n const pending = this.pendingMessages.get(id);\n if (!pending) return;\n this.pendingMessages.delete(id);\n pending.reject(new Error(`Worker request timed out: ${type}`));\n }, timeoutMs);\n\n const pending = this.pendingMessages.get(id);\n if (pending) pending.timeoutId = timeoutId;\n\n worker.postMessage({ id, type, payload });\n });\n }\n\n private async executeWithTimeout<T>(executor: () => Promise<T>, timeoutMs: number): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n\n const timeoutId = globalThis.setTimeout(() => {\n if (settled) return;\n settled = true;\n this.terminateAndReset();\n reject(\n new Error(\n `Execution timed out (possible infinite loop). Code execution was stopped after ${Math.round(timeoutMs / 1000)} seconds.`\n )\n );\n }, timeoutMs);\n\n executor()\n .then((result) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n resolve(result);\n })\n .catch((error) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n reject(error);\n });\n });\n }\n\n private terminateAndReset(reason: Error = new Error('Worker was terminated')): void {\n this.workerReadyReject?.(reason);\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n }\n this.initPromise = null;\n this.isInitializing = false;\n this.workerReadyPromise = null;\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n\n for (const [, pending] of this.pendingMessages) {\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n pending.reject(reason);\n }\n this.pendingMessages.clear();\n }\n\n async init(): Promise<InitResult> {\n if (this.initPromise) return this.initPromise;\n\n if (this.isInitializing) {\n await new Promise((resolve) => globalThis.setTimeout(resolve, 100));\n return this.init();\n }\n\n this.isInitializing = true;\n this.initPromise = this.sendMessage<InitResult>('init', undefined, INIT_TIMEOUT_MS);\n\n try {\n return await this.initPromise;\n } catch (error) {\n this.initPromise = null;\n throw error;\n } finally {\n this.isInitializing = false;\n }\n }\n\n async executeWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n options?: {\n maxTraceSteps?: number;\n maxLineEvents?: number;\n maxSingleLineHits?: number;\n minimalTrace?: boolean;\n },\n executionStyle: JavaScriptExecutionStyle = 'function',\n language: JavaScriptWorkerLanguage = 'javascript'\n ): Promise<ExecutionResult> {\n await this.init();\n return this.executeWithTimeout(\n () =>\n this.sendMessage<ExecutionResult>(\n 'execute-with-tracing',\n {\n code,\n functionName,\n inputs,\n options,\n executionStyle,\n language,\n },\n TRACING_TIMEOUT_MS + 2000\n ),\n TRACING_TIMEOUT_MS\n );\n }\n\n async executeCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: JavaScriptExecutionStyle = 'function',\n language: JavaScriptWorkerLanguage = 'javascript'\n ): Promise<CodeExecutionResult> {\n await this.init();\n return this.executeWithTimeout(\n () =>\n this.sendMessage<CodeExecutionResult>(\n 'execute-code',\n {\n code,\n functionName,\n inputs,\n executionStyle,\n language,\n },\n EXECUTION_TIMEOUT_MS + 2000\n ),\n EXECUTION_TIMEOUT_MS\n );\n }\n\n async executeCodeInterviewMode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: JavaScriptExecutionStyle = 'function',\n language: JavaScriptWorkerLanguage = 'javascript'\n ): Promise<CodeExecutionResult> {\n await this.init();\n\n try {\n const result = await this.executeWithTimeout(\n () =>\n this.sendMessage<CodeExecutionResult>(\n 'execute-code-interview',\n {\n code,\n functionName,\n inputs,\n executionStyle,\n language,\n },\n INTERVIEW_MODE_TIMEOUT_MS + 2000\n ),\n INTERVIEW_MODE_TIMEOUT_MS\n );\n\n if (!result.success && result.error) {\n const normalized = result.error.toLowerCase();\n const isTimeoutOrResourceLimit =\n normalized.includes('timed out') ||\n normalized.includes('infinite loop') ||\n normalized.includes('line-limit') ||\n normalized.includes('single-line-limit') ||\n normalized.includes('recursion-limit') ||\n normalized.includes('trace-limit') ||\n normalized.includes('line events') ||\n normalized.includes('trace steps') ||\n normalized.includes('call depth');\n if (isTimeoutOrResourceLimit) {\n return {\n success: false,\n output: null,\n error: 'Time Limit Exceeded',\n consoleOutput: result.consoleOutput ?? [],\n };\n }\n }\n\n return result;\n } catch {\n return {\n success: false,\n output: null,\n error: 'Time Limit Exceeded',\n consoleOutput: [],\n };\n }\n }\n\n terminate(): void {\n this.terminateAndReset();\n }\n}\n\nexport function isJavaScriptWorkerSupported(): boolean {\n return typeof Worker !== 'undefined';\n}\n","import type { Language } from './runtime-types';\nimport type {\n CallStackFrame,\n ExecutionResult,\n RawTraceStep,\n RuntimeTraceAccessEvent,\n RuntimeTraceAccessKind,\n RuntimeObjectKind,\n RuntimeVisualizationPayload,\n} from './types';\n\n/**\n * Runtime trace contract schema version.\n *\n * Bump this when payload shape/normalization semantics change in a way that\n * should invalidate golden fixtures.\n */\nexport const RUNTIME_TRACE_CONTRACT_SCHEMA_VERSION = '2026-03-13';\n\nexport type RuntimeTraceContractEvent =\n | 'line'\n | 'call'\n | 'return'\n | 'exception'\n | 'timeout'\n | 'stdout';\n\nexport interface RuntimeTraceContractHashMapEntry {\n key: unknown;\n value: unknown;\n highlight?: boolean;\n}\n\nexport interface RuntimeTraceContractHashMap {\n name: string;\n kind: 'hashmap' | 'object' | 'map' | 'set';\n entries: RuntimeTraceContractHashMapEntry[];\n highlightedKey?: unknown;\n deletedKey?: unknown;\n objectClassName?: string;\n objectId?: string;\n}\n\nexport interface RuntimeTraceContractVisualization {\n hashMaps?: RuntimeTraceContractHashMap[];\n objectKinds?: Partial<Record<string, RuntimeObjectKind>>;\n}\n\nexport interface RuntimeTraceContractCallStackFrame {\n function: string;\n line: number;\n args: Record<string, unknown>;\n}\n\nexport interface RuntimeTraceContractStep {\n event: RuntimeTraceContractEvent;\n line: number;\n function: string;\n variables: Record<string, unknown>;\n variableSources?: Record<string, 'user' | 'user-input' | 'harness-prelude'>;\n callStack?: RuntimeTraceContractCallStackFrame[];\n accesses?: RuntimeTraceAccessEvent[];\n returnValue?: unknown;\n stdoutLineCount?: number;\n visualization?: RuntimeTraceContractVisualization;\n}\n\nexport interface RuntimeTraceContractResult {\n schemaVersion: typeof RUNTIME_TRACE_CONTRACT_SCHEMA_VERSION;\n language: Language;\n success: boolean;\n output?: unknown;\n error?: string;\n errorLine?: number;\n consoleOutput: string[];\n trace: RuntimeTraceContractStep[];\n traceLimitExceeded?: boolean;\n timeoutReason?: string;\n lineEventCount: number;\n traceStepCount: number;\n}\n\nconst TRACE_EVENTS: ReadonlySet<string> = new Set([\n 'line',\n 'call',\n 'return',\n 'exception',\n 'timeout',\n 'stdout',\n]);\n\nconst TRACE_ACCESS_KINDS: ReadonlySet<RuntimeTraceAccessKind> = new Set([\n 'indexed-read',\n 'indexed-write',\n 'cell-read',\n 'cell-write',\n 'mutating-call',\n]);\n\nfunction normalizeLineNumber(value: unknown, fallback = 1): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) return fallback;\n const normalized = Math.floor(value);\n return normalized > 0 ? normalized : fallback;\n}\n\nfunction normalizeOutputLineCount(value: unknown): number | undefined {\n if (typeof value !== 'number' || !Number.isFinite(value)) return undefined;\n const normalized = Math.floor(value);\n return normalized >= 0 ? normalized : undefined;\n}\n\nfunction normalizeEvent(value: unknown): RuntimeTraceContractEvent {\n if (typeof value === 'string' && TRACE_EVENTS.has(value)) {\n return value as RuntimeTraceContractEvent;\n }\n return 'line';\n}\n\nfunction normalizeAccessKind(value: unknown): RuntimeTraceAccessKind | null {\n if (typeof value === 'string' && TRACE_ACCESS_KINDS.has(value as RuntimeTraceAccessKind)) {\n return value as RuntimeTraceAccessKind;\n }\n return null;\n}\n\nfunction normalizeFunctionName(value: unknown): string {\n if (typeof value === 'string' && value.length > 0) return value;\n return '<module>';\n}\n\nfunction normalizeKind(value: unknown): 'hashmap' | 'object' | 'map' | 'set' {\n if (value === 'map' || value === 'set' || value === 'hashmap' || value === 'object') {\n return value;\n }\n return 'hashmap';\n}\n\nfunction normalizeObjectKind(value: unknown): RuntimeObjectKind | null {\n if (\n value === 'hashmap' ||\n value === 'object' ||\n value === 'map' ||\n value === 'set' ||\n value === 'tree' ||\n value === 'linked-list' ||\n value === 'graph-adjacency'\n ) {\n return value;\n }\n return null;\n}\n\nfunction normalizeScalar(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string' || typeof value === 'boolean') return value;\n if (typeof value === 'number') return Number.isFinite(value) ? value : String(value);\n if (typeof value === 'bigint') {\n const asNumber = Number(value);\n return Number.isSafeInteger(asNumber) ? asNumber : String(value);\n }\n if (typeof value === 'function') return '<function>';\n return null;\n}\n\nfunction normalizeUnknown(value: unknown, depth = 0, seen = new WeakSet<object>()): unknown {\n if (depth > 48) return '<max depth>';\n\n const scalar = normalizeScalar(value);\n if (scalar !== null || value === null || value === undefined) {\n return scalar;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => {\n if (item === undefined) return null;\n return normalizeUnknown(item, depth + 1, seen);\n });\n }\n\n if (typeof value === 'object' && value) {\n if (seen.has(value)) return '<cycle>';\n seen.add(value);\n\n const normalized: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n const child = (value as Record<string, unknown>)[key];\n if (child === undefined) continue;\n normalized[key] = normalizeUnknown(child, depth + 1, seen);\n }\n\n seen.delete(value);\n return normalized;\n }\n\n return String(value);\n}\n\nfunction normalizeAccesses(\n accesses: RuntimeTraceAccessEvent[] | undefined\n): RuntimeTraceAccessEvent[] | undefined {\n if (!Array.isArray(accesses) || accesses.length === 0) {\n return undefined;\n }\n\n const normalized = accesses\n .map((access) => {\n const variable =\n typeof access?.variable === 'string' && access.variable.length > 0 ? access.variable : '';\n const kind = normalizeAccessKind(access?.kind);\n if (!variable || !kind) {\n return null;\n }\n\n const indices = Array.isArray(access?.indices)\n ? access.indices\n .map((index) =>\n typeof index === 'number' && Number.isFinite(index) ? Math.floor(index) : null\n )\n .filter((index): index is number => index !== null)\n : undefined;\n const pathDepth =\n access?.pathDepth === 1 || access?.pathDepth === 2 ? access.pathDepth : undefined;\n const method =\n typeof access?.method === 'string' && access.method.length > 0 ? access.method : undefined;\n\n const payload: RuntimeTraceAccessEvent = {\n variable,\n kind,\n };\n\n if (indices && indices.length > 0) {\n payload.indices = indices;\n }\n if (pathDepth !== undefined) {\n payload.pathDepth = pathDepth;\n }\n if (method) {\n payload.method = method;\n }\n\n return payload;\n })\n .filter((access): access is RuntimeTraceAccessEvent => access !== null);\n\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {};\n return normalizeUnknown(value) as Record<string, unknown>;\n}\n\nfunction normalizeVariableSources(\n value: unknown\n): Record<string, 'user' | 'user-input' | 'harness-prelude'> | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([name, source]) =>\n typeof name === 'string' &&\n name.length > 0 &&\n (source === 'user' || source === 'user-input' || source === 'harness-prelude')\n )\n .sort((a, b) => a[0].localeCompare(b[0])) as Array<\n [string, 'user' | 'user-input' | 'harness-prelude']\n >;\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n}\n\nfunction normalizeCallStackFrame(frame: CallStackFrame): RuntimeTraceContractCallStackFrame {\n return {\n function: normalizeFunctionName(frame?.function),\n line: normalizeLineNumber(frame?.line, 1),\n args: normalizeRecord(frame?.args),\n };\n}\n\nfunction normalizeVisualizationPayload(\n payload: RuntimeVisualizationPayload | undefined\n): RuntimeTraceContractVisualization | undefined {\n const hashMaps = Array.isArray(payload?.hashMaps)\n ? payload.hashMaps\n .map((entry) => ({\n name: typeof entry?.name === 'string' ? entry.name : '',\n kind: normalizeKind(entry?.kind),\n entries: Array.isArray(entry?.entries)\n ? entry.entries.map((item) => ({\n key: normalizeUnknown(item?.key),\n value: normalizeUnknown(item?.value),\n ...(item?.highlight ? { highlight: true } : {}),\n }))\n : [],\n ...(entry?.highlightedKey !== undefined\n ? { highlightedKey: normalizeUnknown(entry.highlightedKey) }\n : {}),\n ...(entry?.deletedKey !== undefined\n ? { deletedKey: normalizeUnknown(entry.deletedKey) }\n : {}),\n ...(typeof entry?.objectClassName === 'string' && entry.objectClassName.length > 0\n ? { objectClassName: entry.objectClassName }\n : {}),\n ...(typeof entry?.objectId === 'string' && entry.objectId.length > 0\n ? { objectId: entry.objectId }\n : {}),\n }))\n .sort((a, b) => `${a.name}:${a.kind}`.localeCompare(`${b.name}:${b.kind}`))\n : [];\n\n const objectKinds =\n payload?.objectKinds && typeof payload.objectKinds === 'object'\n ? Object.fromEntries(\n Object.entries(payload.objectKinds)\n .filter(([name]) => typeof name === 'string' && name.length > 0)\n .map(([name, kind]) => [name, normalizeObjectKind(kind)])\n .filter((entry): entry is [string, RuntimeObjectKind] => entry[1] !== null)\n .sort((a, b) => a[0].localeCompare(b[0]))\n )\n : undefined;\n\n if (hashMaps.length === 0 && (!objectKinds || Object.keys(objectKinds).length === 0)) {\n return undefined;\n }\n\n return {\n ...(hashMaps.length > 0 ? { hashMaps } : {}),\n ...(objectKinds && Object.keys(objectKinds).length > 0 ? { objectKinds } : {}),\n };\n}\n\nfunction normalizeTraceStep(step: RawTraceStep): RuntimeTraceContractStep {\n const normalizedStdoutCount = normalizeOutputLineCount(step?.stdoutLineCount);\n const normalizedVisualization = normalizeVisualizationPayload(step?.visualization);\n const normalizedAccesses = normalizeAccesses(step?.accesses);\n const normalizedVariableSources = normalizeVariableSources(step?.variableSources);\n\n return {\n event: normalizeEvent(step?.event),\n line: normalizeLineNumber(step?.line, 1),\n function: normalizeFunctionName(step?.function),\n variables: normalizeRecord(step?.variables),\n ...(normalizedVariableSources ? { variableSources: normalizedVariableSources } : {}),\n ...(Array.isArray(step?.callStack) && step.callStack.length > 0\n ? { callStack: step.callStack.map(normalizeCallStackFrame) }\n : {}),\n ...(normalizedAccesses ? { accesses: normalizedAccesses } : {}),\n ...(step?.returnValue !== undefined ? { returnValue: normalizeUnknown(step.returnValue) } : {}),\n ...(normalizedStdoutCount !== undefined ? { stdoutLineCount: normalizedStdoutCount } : {}),\n ...(normalizedVisualization ? { visualization: normalizedVisualization } : {}),\n };\n}\n\nexport function normalizeRuntimeTraceContract(\n language: Language,\n result: ExecutionResult\n): RuntimeTraceContractResult {\n const normalizedTrace = Array.isArray(result.trace) ? result.trace.map(normalizeTraceStep) : [];\n const lineEventCount =\n typeof result.lineEventCount === 'number' && Number.isFinite(result.lineEventCount)\n ? Math.floor(result.lineEventCount)\n : normalizedTrace.filter((step) => step.event === 'line').length;\n\n const normalizedConsole = Array.isArray(result.consoleOutput)\n ? result.consoleOutput.map((line) => String(line))\n : [];\n\n return {\n schemaVersion: RUNTIME_TRACE_CONTRACT_SCHEMA_VERSION,\n language,\n success: Boolean(result.success),\n ...(Object.prototype.hasOwnProperty.call(result, 'output')\n ? { output: normalizeUnknown(result.output) }\n : {}),\n ...(typeof result.error === 'string' && result.error.length > 0\n ? { error: result.error }\n : {}),\n ...(typeof result.errorLine === 'number' && Number.isFinite(result.errorLine)\n ? { errorLine: Math.floor(result.errorLine) }\n : {}),\n consoleOutput: normalizedConsole,\n trace: normalizedTrace,\n ...(result.traceLimitExceeded !== undefined\n ? { traceLimitExceeded: Boolean(result.traceLimitExceeded) }\n : {}),\n ...(typeof result.timeoutReason === 'string' && result.timeoutReason.length > 0\n ? { timeoutReason: result.timeoutReason }\n : {}),\n lineEventCount: Math.max(0, lineEventCount),\n traceStepCount: normalizedTrace.length,\n };\n}\n\nexport function stableStringifyRuntimeTraceContract(value: unknown): string {\n return JSON.stringify(normalizeUnknown(value), null, 2);\n}\n","import type { Language } from '../runtime-types';\nimport {\n normalizeRuntimeTraceContract,\n type RuntimeTraceContractCallStackFrame,\n type RuntimeTraceContractStep,\n} from '../trace-contract';\nimport type {\n CallStackFrame,\n ExecutionResult,\n RawTraceStep,\n RuntimeVisualizationPayload,\n} from '../types';\n\nfunction denormalizeCallStackFrame(frame: RuntimeTraceContractCallStackFrame): CallStackFrame {\n return {\n function: frame.function,\n line: frame.line,\n args: frame.args,\n };\n}\n\nfunction denormalizeTraceStep(step: RuntimeTraceContractStep): RawTraceStep {\n return {\n line: step.line,\n event: step.event,\n variables: step.variables,\n function: step.function,\n ...(step.callStack ? { callStack: step.callStack.map(denormalizeCallStackFrame) } : {}),\n ...(step.accesses ? { accesses: step.accesses } : {}),\n ...(step.returnValue !== undefined ? { returnValue: step.returnValue } : {}),\n ...(step.stdoutLineCount !== undefined ? { stdoutLineCount: step.stdoutLineCount } : {}),\n ...(step.visualization ? { visualization: step.visualization as RuntimeVisualizationPayload } : {}),\n };\n}\n\nexport function adaptTraceExecutionResult(\n language: Language,\n result: ExecutionResult\n): ExecutionResult {\n const normalized = normalizeRuntimeTraceContract(language, result);\n const adaptedTrace: RawTraceStep[] = normalized.trace.map(denormalizeTraceStep);\n\n return {\n success: normalized.success,\n ...(Object.prototype.hasOwnProperty.call(normalized, 'output') ? { output: normalized.output } : {}),\n ...(normalized.error ? { error: normalized.error } : {}),\n ...(normalized.errorLine !== undefined ? { errorLine: normalized.errorLine } : {}),\n trace: adaptedTrace,\n executionTimeMs:\n typeof result.executionTimeMs === 'number' && Number.isFinite(result.executionTimeMs)\n ? result.executionTimeMs\n : 0,\n consoleOutput: normalized.consoleOutput,\n ...(normalized.traceLimitExceeded !== undefined ? { traceLimitExceeded: normalized.traceLimitExceeded } : {}),\n ...(normalized.timeoutReason\n ? { timeoutReason: normalized.timeoutReason as ExecutionResult['timeoutReason'] }\n : {}),\n lineEventCount: normalized.lineEventCount,\n traceStepCount: adaptedTrace.length,\n };\n}\n","import type { Language } from '../runtime-types';\nimport type { ExecutionResult } from '../types';\nimport { adaptTraceExecutionResult } from './shared';\n\nexport function adaptJavaScriptTraceExecutionResult(\n language: Extract<Language, 'javascript' | 'typescript'>,\n result: ExecutionResult\n): ExecutionResult {\n return adaptTraceExecutionResult(language, result);\n}\n","import type {\n LanguageRuntimeProfile,\n RuntimeExecutionStyle,\n} from '../../harness-core/src/runtime-types';\n\ntype RuntimeRequestKind = 'execute' | 'trace' | 'interview';\n\ninterface RuntimeRequestSupportOptions {\n request: RuntimeRequestKind;\n executionStyle: RuntimeExecutionStyle;\n functionName?: string | null;\n}\n\nfunction isScriptRequest(functionName: string | null | undefined): boolean {\n if (functionName == null) return true;\n return functionName.trim().length === 0;\n}\n\nfunction executionStyleLabel(executionStyle: RuntimeExecutionStyle): string {\n if (executionStyle === 'solution-method') return 'solution-method';\n if (executionStyle === 'ops-class') return 'ops-class';\n return 'function';\n}\n\nfunction isExecutionStyleSupported(\n profile: LanguageRuntimeProfile,\n executionStyle: RuntimeExecutionStyle\n): boolean {\n const styles = profile.capabilities.execution.styles;\n if (executionStyle === 'solution-method') return styles.solutionMethod;\n if (executionStyle === 'ops-class') return styles.opsClass;\n return styles.function;\n}\n\nfunction describeRequest(request: RuntimeRequestKind): string {\n if (request === 'trace') return 'tracing';\n if (request === 'interview') return 'interview execution';\n return 'execution';\n}\n\nexport function assertRuntimeRequestSupported(\n profile: LanguageRuntimeProfile,\n options: RuntimeRequestSupportOptions\n): void {\n if (options.request === 'trace' && !profile.capabilities.tracing.supported) {\n throw new Error(`Runtime \"${profile.language}\" does not support tracing.`);\n }\n\n if (options.request === 'interview' && !profile.capabilities.execution.styles.interviewMode) {\n throw new Error(`Runtime \"${profile.language}\" does not support interview execution.`);\n }\n\n if (!isExecutionStyleSupported(profile, options.executionStyle)) {\n throw new Error(\n `Runtime \"${profile.language}\" does not support execution style \"${executionStyleLabel(options.executionStyle)}\".`\n );\n }\n\n if (isScriptRequest(options.functionName) && !profile.capabilities.execution.styles.script) {\n throw new Error(`Runtime \"${profile.language}\" does not support script mode ${describeRequest(options.request)}.`);\n }\n}\n","import type { Language, LanguageRuntimeProfile } from '../../harness-core/src/runtime-types';\n\nconst PYTHON_RUNTIME_PROFILE: LanguageRuntimeProfile = {\n language: 'python',\n maturity: 'stable',\n capabilities: {\n execution: {\n styles: {\n function: true,\n solutionMethod: true,\n opsClass: true,\n script: true,\n interviewMode: true,\n },\n timeouts: {\n clientTimeouts: true,\n runtimeTimeouts: true,\n },\n },\n tracing: {\n supported: true,\n events: {\n line: true,\n call: true,\n return: true,\n exception: true,\n stdout: true,\n timeout: true,\n },\n controls: {\n maxTraceSteps: true,\n maxLineEvents: true,\n maxSingleLineHits: true,\n minimalTrace: true,\n },\n fidelity: {\n preciseLineMapping: true,\n stableFunctionNames: true,\n callStack: true,\n },\n },\n diagnostics: {\n compileErrors: false,\n runtimeErrors: true,\n mappedErrorLines: true,\n stackTraces: false,\n },\n structures: {\n treeNodeRefs: true,\n listNodeRefs: true,\n mapSerialization: true,\n setSerialization: true,\n graphSerialization: true,\n cycleReferences: true,\n },\n visualization: {\n runtimePayloads: true,\n objectKinds: true,\n hashMaps: true,\n stepVisualization: true,\n },\n },\n};\n\nconst JAVASCRIPT_RUNTIME_PROFILE: LanguageRuntimeProfile = {\n language: 'javascript',\n maturity: 'stable',\n capabilities: {\n execution: {\n styles: {\n function: true,\n solutionMethod: true,\n opsClass: true,\n script: true,\n interviewMode: true,\n },\n timeouts: {\n clientTimeouts: true,\n runtimeTimeouts: false,\n },\n },\n tracing: {\n supported: true,\n events: {\n line: true,\n call: true,\n return: true,\n exception: true,\n stdout: false,\n timeout: true,\n },\n controls: {\n maxTraceSteps: true,\n maxLineEvents: true,\n maxSingleLineHits: true,\n minimalTrace: true,\n },\n fidelity: {\n preciseLineMapping: true,\n stableFunctionNames: true,\n callStack: true,\n },\n },\n diagnostics: {\n compileErrors: false,\n runtimeErrors: true,\n mappedErrorLines: false,\n stackTraces: false,\n },\n structures: {\n treeNodeRefs: true,\n listNodeRefs: true,\n mapSerialization: true,\n setSerialization: true,\n graphSerialization: true,\n cycleReferences: true,\n },\n visualization: {\n runtimePayloads: true,\n objectKinds: true,\n hashMaps: true,\n stepVisualization: true,\n },\n },\n};\n\nconst TYPESCRIPT_RUNTIME_PROFILE: LanguageRuntimeProfile = {\n language: 'typescript',\n maturity: 'stable',\n capabilities: {\n execution: {\n styles: {\n function: true,\n solutionMethod: true,\n opsClass: true,\n script: true,\n interviewMode: true,\n },\n timeouts: {\n clientTimeouts: true,\n runtimeTimeouts: false,\n },\n },\n tracing: {\n supported: true,\n events: {\n line: true,\n call: true,\n return: true,\n exception: true,\n stdout: false,\n timeout: true,\n },\n controls: {\n maxTraceSteps: true,\n maxLineEvents: true,\n maxSingleLineHits: true,\n minimalTrace: true,\n },\n fidelity: {\n preciseLineMapping: true,\n stableFunctionNames: true,\n callStack: true,\n },\n },\n diagnostics: {\n compileErrors: true,\n runtimeErrors: true,\n mappedErrorLines: true,\n stackTraces: false,\n },\n structures: {\n treeNodeRefs: true,\n listNodeRefs: true,\n mapSerialization: true,\n setSerialization: true,\n graphSerialization: true,\n cycleReferences: true,\n },\n visualization: {\n runtimePayloads: true,\n objectKinds: true,\n hashMaps: true,\n stepVisualization: true,\n },\n },\n};\n\nexport const LANGUAGE_RUNTIME_PROFILES: Record<Language, LanguageRuntimeProfile> = {\n python: PYTHON_RUNTIME_PROFILE,\n javascript: JAVASCRIPT_RUNTIME_PROFILE,\n typescript: TYPESCRIPT_RUNTIME_PROFILE,\n};\n\nexport const SUPPORTED_LANGUAGES: readonly Language[] = Object.freeze(\n Object.keys(LANGUAGE_RUNTIME_PROFILES) as Language[]\n);\n\nexport function getLanguageRuntimeProfile(language: Language): LanguageRuntimeProfile {\n const profile = LANGUAGE_RUNTIME_PROFILES[language];\n if (!profile) {\n throw new Error(`Runtime profile for language \"${language}\" is not implemented yet.`);\n }\n return profile;\n}\n\nexport function getSupportedLanguageProfiles(): readonly LanguageRuntimeProfile[] {\n return SUPPORTED_LANGUAGES.map((language) => LANGUAGE_RUNTIME_PROFILES[language]);\n}\n\nexport function isLanguageSupported(language: Language): boolean {\n return SUPPORTED_LANGUAGES.includes(language);\n}\n","import {\n type JavaScriptExecutionStyle,\n type JavaScriptWorkerLanguage,\n type JavaScriptWorkerClient,\n} from './javascript-worker-client';\nimport type {\n RuntimeClient,\n RuntimeExecutionStyle,\n TraceExecutionOptions,\n} from '../../harness-core/src/runtime-types';\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\nimport { adaptJavaScriptTraceExecutionResult } from '../../harness-core/src/trace-adapters/javascript';\nimport { assertRuntimeRequestSupported } from './runtime-capability-guards';\nimport { getLanguageRuntimeProfile } from './runtime-profiles';\n\nclass JavaScriptRuntimeClient implements RuntimeClient {\n constructor(\n private readonly runtimeLanguage: JavaScriptWorkerLanguage,\n private readonly workerClient: JavaScriptWorkerClient\n ) {}\n\n async init(): Promise<{ success: boolean; loadTimeMs: number }> {\n return this.workerClient.init();\n }\n\n async executeWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n options?: TraceExecutionOptions,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<ExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile(this.runtimeLanguage), {\n request: 'trace',\n executionStyle,\n functionName,\n });\n const rawResult = await this.workerClient.executeWithTracing(\n code,\n functionName,\n inputs,\n options,\n executionStyle as JavaScriptExecutionStyle,\n this.runtimeLanguage\n );\n return adaptJavaScriptTraceExecutionResult(this.runtimeLanguage, rawResult);\n }\n\n async executeCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile(this.runtimeLanguage), {\n request: 'execute',\n executionStyle,\n functionName,\n });\n return this.workerClient.executeCode(\n code,\n functionName,\n inputs,\n executionStyle as JavaScriptExecutionStyle,\n this.runtimeLanguage\n );\n }\n\n async executeCodeInterviewMode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile(this.runtimeLanguage), {\n request: 'interview',\n executionStyle,\n functionName,\n });\n return this.workerClient.executeCodeInterviewMode(\n code,\n functionName,\n inputs,\n executionStyle as JavaScriptExecutionStyle,\n this.runtimeLanguage\n );\n }\n}\n\nexport function createJavaScriptRuntimeClient(\n runtimeLanguage: JavaScriptWorkerLanguage,\n workerClient: JavaScriptWorkerClient\n): RuntimeClient {\n return new JavaScriptRuntimeClient(runtimeLanguage, workerClient);\n}\n","/**\n * Pyodide Worker Client\n * \n * TypeScript client for communicating with the Pyodide Web Worker.\n * Provides a promise-based API for executing Python code off the main thread.\n */\n\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\n\ntype MessageId = string;\nexport type ExecutionStyle = 'function' | 'solution-method' | 'ops-class';\n\nexport interface PyodideWorkerClientOptions {\n workerUrl: string;\n debug?: boolean;\n}\n\ninterface PendingMessage {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof globalThis.setTimeout>;\n}\n\ninterface WorkerMessage {\n id?: MessageId;\n type: string;\n payload?: unknown;\n}\n\ninterface InitResult {\n success: boolean;\n loadTimeMs: number;\n}\n\ninterface StatusResult {\n isReady: boolean;\n isLoading: boolean;\n}\n\n// Execution timeout in milliseconds for simple code execution (10 seconds)\nconst EXECUTION_TIMEOUT_MS = 10000;\n\n// Interview mode timeout - shorter, no detailed error info (5 seconds)\nconst INTERVIEW_MODE_TIMEOUT_MS = 5000;\n\n// Tracing timeout - longer because Python heuristic detection handles infinite loops\n// This is just a safety net for truly stuck executions\nconst TRACING_TIMEOUT_MS = 30000;\n\n// Initial Pyodide load timeout can be significantly higher on first boot/network-constrained setups\nconst INIT_TIMEOUT_MS = 120000;\n\n// Message timeout for non-execution operations (20 seconds)\nconst MESSAGE_TIMEOUT_MS = 20000;\n// Worker bootstrap timeout - prevents deadlock when worker never emits \"worker-ready\"\nconst WORKER_READY_TIMEOUT_MS = 10000;\n\nexport class PyodideWorkerClient {\n private worker: Worker | null = null;\n private pendingMessages = new Map<MessageId, PendingMessage>();\n private messageId = 0;\n private isInitializing = false;\n private initPromise: Promise<InitResult> | null = null;\n private workerReadyPromise: Promise<void> | null = null;\n private workerReadyResolve: (() => void) | null = null;\n private workerReadyReject: ((error: Error) => void) | null = null;\n private readonly debug: boolean;\n\n constructor(private readonly options: PyodideWorkerClientOptions) {\n this.debug = options.debug ?? process.env.NODE_ENV === 'development';\n }\n\n /**\n * Check if Web Workers are supported\n */\n isSupported(): boolean {\n return typeof Worker !== 'undefined';\n }\n\n /**\n * Get or create the worker instance\n */\n private getWorker(): Worker {\n if (this.worker) return this.worker;\n\n if (!this.isSupported()) {\n throw new Error('Web Workers are not supported in this environment');\n }\n\n // Create promise that resolves when worker signals it's ready\n this.workerReadyPromise = new Promise((resolve, reject) => {\n this.workerReadyResolve = resolve;\n this.workerReadyReject = (error: Error) => reject(error);\n });\n\n const workerUrl =\n this.debug && !this.options.workerUrl.includes('?')\n ? `${this.options.workerUrl}?dev=${Date.now()}`\n : this.options.workerUrl;\n this.worker = new Worker(workerUrl);\n \n this.worker.onmessage = (event: MessageEvent<WorkerMessage>) => {\n const { id, type, payload } = event.data;\n\n // Handle worker-ready signal\n if (type === 'worker-ready') {\n this.workerReadyResolve?.();\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n if (this.debug) console.log('[PyodideWorkerClient] worker-ready');\n return;\n }\n\n if (this.debug && !id) {\n console.log('[PyodideWorkerClient] event', { type, payload });\n }\n\n // Handle responses to our messages\n if (id) {\n const pending = this.pendingMessages.get(id);\n if (pending) {\n this.pendingMessages.delete(id);\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n \n if (type === 'error') {\n pending.reject(new Error((payload as { error: string }).error));\n } else {\n if (this.debug) console.log('[PyodideWorkerClient] recv', { id, type });\n pending.resolve(payload);\n }\n }\n }\n };\n\n this.worker.onerror = (error) => {\n console.error('[PyodideWorkerClient] Worker error:', error);\n const workerError = new Error('Worker error');\n this.workerReadyReject?.(workerError);\n this.workerReadyResolve = null;\n this.workerReadyReject = null;\n // Reject all pending messages and clear their timeouts\n for (const [id, pending] of this.pendingMessages) {\n if (pending.timeoutId) {\n globalThis.clearTimeout(pending.timeoutId);\n }\n pending.reject(workerError);\n this.pendingMessages.delete(id);\n }\n };\n\n return this.worker;\n }\n\n /**\n * Wait for worker bootstrap signal with timeout.\n * Guards against deadlocks when the worker script fails before posting \"worker-ready\".\n */\n private async waitForWorkerReady(): Promise<void> {\n const readyPromise = this.workerReadyPromise;\n if (!readyPromise) return;\n\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n\n const timeoutId = globalThis.setTimeout(() => {\n if (settled) return;\n settled = true;\n const timeoutError = new Error(\n `Python worker failed to initialize in time (${Math.round(WORKER_READY_TIMEOUT_MS / 1000)}s)`\n );\n if (this.debug) {\n console.warn('[PyodideWorkerClient] worker-ready timeout', { timeoutMs: WORKER_READY_TIMEOUT_MS });\n }\n this.terminateAndReset(timeoutError);\n reject(timeoutError);\n }, WORKER_READY_TIMEOUT_MS);\n\n readyPromise\n .then(() => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n resolve();\n })\n .catch((error) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n reject(error instanceof Error ? error : new Error(String(error)));\n });\n });\n }\n\n /**\n * Send a message to the worker and wait for a response\n */\n private async sendMessage<T>(type: string, payload?: unknown, timeoutMs: number = MESSAGE_TIMEOUT_MS): Promise<T> {\n const worker = this.getWorker();\n \n // Wait for worker to be ready before sending messages\n await this.waitForWorkerReady();\n \n const id = String(++this.messageId);\n\n return new Promise<T>((resolve, reject) => {\n this.pendingMessages.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n });\n\n if (this.debug) console.log('[PyodideWorkerClient] send', { id, type });\n\n const timeoutId = globalThis.setTimeout(() => {\n const pending = this.pendingMessages.get(id);\n if (!pending) return;\n this.pendingMessages.delete(id);\n if (this.debug) console.warn('[PyodideWorkerClient] timeout', { id, type });\n pending.reject(new Error(`Worker request timed out: ${type}`));\n }, timeoutMs);\n\n const pending = this.pendingMessages.get(id);\n if (pending) pending.timeoutId = timeoutId;\n\n worker.postMessage({ id, type, payload });\n });\n }\n\n /**\n * Execute code with a timeout - terminates worker if execution takes too long\n */\n private async executeWithTimeout<T>(\n executor: () => Promise<T>,\n timeoutMs: number = EXECUTION_TIMEOUT_MS\n ): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n \n const timeoutId = globalThis.setTimeout(() => {\n if (settled) return;\n settled = true;\n \n // Terminate the stuck worker and clear state\n if (this.debug) {\n console.warn('[PyodideWorkerClient] Execution timeout - terminating worker');\n }\n this.terminateAndReset();\n \n const seconds = Math.round(timeoutMs / 1000);\n reject(new Error(`Execution timed out (possible infinite loop). Code execution was stopped after ${seconds} seconds.`));\n }, timeoutMs);\n \n executor()\n .then((result) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n resolve(result);\n })\n .catch((error) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n reject(error);\n });\n });\n }\n\n /**\n * Terminate the worker and reset state for recreation\n */\n private terminateAndReset(reason: Error = new Error('Worker was terminated')): void {\n this.workerReadyReject?.(reason);\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n }\n this.initPromise = null;\n this.isInitializing = false;\n this.workerReadyPromise = null;\n this.workerReadyResolve = null;\n \n // Reject all pending messages\n for (const [, pending] of this.pendingMessages) {\n if (pending.timeoutId) globalThis.clearTimeout(pending.timeoutId);\n pending.reject(reason);\n }\n this.pendingMessages.clear();\n }\n\n /**\n * Initialize Pyodide in the worker\n */\n async init(): Promise<InitResult> {\n // Return existing promise if already initializing\n if (this.initPromise) {\n return this.initPromise;\n }\n\n if (this.isInitializing) {\n // Wait for existing init to complete\n await new Promise((resolve) => setTimeout(resolve, 100));\n return this.init();\n }\n\n this.isInitializing = true;\n\n this.initPromise = (async () => {\n try {\n return await this.sendMessage<InitResult>('init', undefined, INIT_TIMEOUT_MS);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n const shouldRetry =\n message.includes('Worker request timed out: init') ||\n message.includes('Worker was terminated') ||\n message.includes('Worker error') ||\n message.includes('failed to initialize in time');\n\n if (!shouldRetry) {\n throw error;\n }\n\n if (this.debug) {\n console.warn('[PyodideWorkerClient] init failed, resetting worker and retrying once', { message });\n }\n\n this.terminateAndReset();\n return this.sendMessage<InitResult>('init', undefined, INIT_TIMEOUT_MS);\n }\n })();\n \n try {\n const result = await this.initPromise;\n return result;\n } catch (error) {\n this.initPromise = null;\n throw error;\n } finally {\n this.isInitializing = false;\n }\n }\n\n /**\n * Execute Python code with tracing for step-by-step visualization\n * @param options.maxLineEvents - Max line events before abort (for complexity analysis, use higher values)\n */\n async executeWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n options?: {\n maxTraceSteps?: number;\n maxLineEvents?: number;\n maxSingleLineHits?: number;\n minimalTrace?: boolean;\n },\n executionStyle: ExecutionStyle = 'function'\n ): Promise<ExecutionResult> {\n // Ensure Pyodide is initialized\n await this.init();\n \n // Use longer timeout for tracing - Python heuristic detection handles infinite loops\n try {\n return await this.executeWithTimeout(\n () => this.sendMessage<ExecutionResult>('execute-with-tracing', {\n code,\n functionName,\n inputs,\n executionStyle,\n options,\n }, TRACING_TIMEOUT_MS + 5000), // Message timeout slightly longer than execution timeout\n TRACING_TIMEOUT_MS\n );\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isClientTimeout =\n errorMessage.includes('Execution timed out') ||\n errorMessage.includes('possible infinite loop');\n\n if (isClientTimeout) {\n return {\n success: false,\n error: errorMessage,\n trace: [],\n executionTimeMs: TRACING_TIMEOUT_MS,\n consoleOutput: [],\n traceLimitExceeded: true,\n timeoutReason: 'client-timeout',\n lineEventCount: 0,\n traceStepCount: 0,\n };\n }\n\n throw error;\n }\n }\n\n /**\n * Execute Python code without tracing (for running tests)\n */\n async executeCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: ExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n // Ensure Pyodide is initialized\n await this.init();\n \n return this.executeWithTimeout(\n () => this.sendMessage<CodeExecutionResult>('execute-code', {\n code,\n functionName,\n inputs,\n executionStyle,\n }, EXECUTION_TIMEOUT_MS + 5000),\n EXECUTION_TIMEOUT_MS\n );\n }\n\n /**\n * Execute Python code in interview mode - 5 second timeout, generic error messages\n * Does not reveal which line caused the timeout\n */\n async executeCodeInterviewMode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: ExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n // Ensure Pyodide is initialized\n await this.init();\n \n try {\n const result = await this.executeWithTimeout(\n () => this.sendMessage<CodeExecutionResult>('execute-code-interview', {\n code,\n functionName,\n inputs,\n executionStyle,\n }, INTERVIEW_MODE_TIMEOUT_MS + 2000),\n INTERVIEW_MODE_TIMEOUT_MS\n );\n \n // Sanitize error messages in interview mode - don't reveal line numbers for timeouts\n if (!result.success && result.error) {\n // Keep basic error types but remove line-specific info for timeouts\n const normalizedError = result.error.toLowerCase();\n const isTimeoutOrResourceLimit =\n normalizedError.includes('timed out') ||\n normalizedError.includes('execution timeout') ||\n normalizedError.includes('infinite loop') ||\n normalizedError.includes('interview_guard_triggered') ||\n normalizedError.includes('memory-limit') ||\n normalizedError.includes('line-limit') ||\n normalizedError.includes('single-line-limit') ||\n normalizedError.includes('recursion-limit');\n\n if (isTimeoutOrResourceLimit) {\n return {\n success: false,\n output: null,\n error: 'Time Limit Exceeded',\n consoleOutput: result.consoleOutput ?? [],\n };\n }\n }\n \n return result;\n } catch (error) {\n // Handle timeout from executeWithTimeout\n const errorMsg = error instanceof Error ? error.message : String(error);\n if (errorMsg.includes('timed out') || errorMsg.includes('Execution timeout')) {\n return {\n success: false,\n output: null,\n error: 'Time Limit Exceeded',\n consoleOutput: [],\n };\n }\n return {\n success: false,\n output: null,\n error: errorMsg,\n consoleOutput: [],\n };\n }\n }\n\n /**\n * Check the status of the worker\n */\n async getStatus(): Promise<StatusResult> {\n return this.sendMessage<StatusResult>('status');\n }\n\n /**\n * Analyze Python code using AST (off main thread)\n * Returns CodeFacts with semantic information about the code\n */\n async analyzeCode(code: string): Promise<unknown> {\n // Ensure Pyodide is initialized\n await this.init();\n \n // Use a shorter timeout for analysis (5 seconds should be plenty)\n return this.sendMessage<unknown>('analyze-code', { code }, 5000);\n }\n\n /**\n * Terminate the worker and clean up resources\n */\n terminate(): void {\n this.terminateAndReset();\n }\n}\n\n/**\n * Check if the worker client is supported\n */\nexport function isWorkerSupported(): boolean {\n return typeof Worker !== 'undefined';\n}\n","import type { ExecutionResult } from '../types';\nimport { adaptTraceExecutionResult } from './shared';\n\nexport function adaptPythonTraceExecutionResult(result: ExecutionResult): ExecutionResult {\n return adaptTraceExecutionResult('python', result);\n}\n","import type { ExecutionStyle, PyodideWorkerClient } from './pyodide-worker-client';\nimport type {\n RuntimeClient,\n RuntimeExecutionStyle,\n TraceExecutionOptions,\n} from '../../harness-core/src/runtime-types';\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\nimport { adaptPythonTraceExecutionResult } from '../../harness-core/src/trace-adapters/python';\nimport { assertRuntimeRequestSupported } from './runtime-capability-guards';\nimport { getLanguageRuntimeProfile } from './runtime-profiles';\n\nclass PythonRuntimeClient implements RuntimeClient {\n constructor(private readonly workerClient: PyodideWorkerClient) {}\n\n async init(): Promise<{ success: boolean; loadTimeMs: number }> {\n return this.workerClient.init();\n }\n\n async executeWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n options?: TraceExecutionOptions,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<ExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile('python'), {\n request: 'trace',\n executionStyle,\n functionName,\n });\n const rawResult = await this.workerClient.executeWithTracing(\n code,\n functionName,\n inputs,\n options,\n executionStyle as ExecutionStyle\n );\n return adaptPythonTraceExecutionResult(rawResult);\n }\n\n async executeCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile('python'), {\n request: 'execute',\n executionStyle,\n functionName,\n });\n return this.workerClient.executeCode(\n code,\n functionName,\n inputs,\n executionStyle as ExecutionStyle\n );\n }\n\n async executeCodeInterviewMode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n ): Promise<CodeExecutionResult> {\n assertRuntimeRequestSupported(getLanguageRuntimeProfile('python'), {\n request: 'interview',\n executionStyle,\n functionName,\n });\n return this.workerClient.executeCodeInterviewMode(\n code,\n functionName,\n inputs,\n executionStyle as ExecutionStyle\n );\n }\n}\n\nexport function createPythonRuntimeClient(workerClient: PyodideWorkerClient): RuntimeClient {\n return new PythonRuntimeClient(workerClient);\n}\n","const DEFAULT_ASSET_BASE_URL = '/workers';\n\nexport interface BrowserHarnessAssets {\n pythonWorker: string;\n pythonRuntimeCore: string;\n pythonSnippets: string;\n javascriptWorker: string;\n typescriptCompiler: string;\n}\n\nexport type BrowserHarnessAssetOverrides = Partial<BrowserHarnessAssets>;\n\nexport const DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS: Readonly<BrowserHarnessAssets> = Object.freeze({\n pythonWorker: 'pyodide-worker.js',\n pythonRuntimeCore: 'pyodide/runtime-core.js',\n pythonSnippets: 'generated-python-harness-snippets.js',\n javascriptWorker: 'javascript-worker.js',\n typescriptCompiler: 'vendor/typescript.js',\n});\n\nfunction isExplicitAssetPath(pathname: string): boolean {\n return (\n pathname.startsWith('/') ||\n pathname.startsWith('./') ||\n pathname.startsWith('../') ||\n pathname.startsWith('http://') ||\n pathname.startsWith('https://') ||\n pathname.startsWith('data:') ||\n pathname.startsWith('blob:')\n );\n}\n\nfunction stripTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, '');\n}\n\nfunction trimLeadingSlash(value: string): string {\n return value.replace(/^\\/+/, '');\n}\n\nfunction resolveAssetPath(baseUrl: string, pathname: string): string {\n if (isExplicitAssetPath(pathname)) {\n return pathname;\n }\n const normalizedBase = stripTrailingSlash(baseUrl || DEFAULT_ASSET_BASE_URL);\n const normalizedPath = trimLeadingSlash(pathname);\n return `${normalizedBase}/${normalizedPath}`;\n}\n\nexport function resolveBrowserHarnessAssets(options: {\n assetBaseUrl?: string;\n assets?: BrowserHarnessAssetOverrides;\n} = {}): BrowserHarnessAssets {\n const assetBaseUrl = options.assetBaseUrl ?? DEFAULT_ASSET_BASE_URL;\n const assets = options.assets ?? {};\n return {\n pythonWorker: resolveAssetPath(assetBaseUrl, assets.pythonWorker ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.pythonWorker),\n pythonRuntimeCore: resolveAssetPath(\n assetBaseUrl,\n assets.pythonRuntimeCore ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.pythonRuntimeCore\n ),\n pythonSnippets: resolveAssetPath(assetBaseUrl, assets.pythonSnippets ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.pythonSnippets),\n javascriptWorker: resolveAssetPath(\n assetBaseUrl,\n assets.javascriptWorker ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.javascriptWorker\n ),\n typescriptCompiler: resolveAssetPath(\n assetBaseUrl,\n assets.typescriptCompiler ?? DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS.typescriptCompiler\n ),\n };\n}\n","import type {\n Language,\n LanguageRuntimeProfile,\n RuntimeClient,\n} from '../../harness-core/src/runtime-types';\nimport { JavaScriptWorkerClient } from './javascript-worker-client';\nimport { createJavaScriptRuntimeClient } from './javascript-runtime-client';\nimport { PyodideWorkerClient } from './pyodide-worker-client';\nimport { createPythonRuntimeClient } from './python-runtime-client';\nimport {\n DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS,\n resolveBrowserHarnessAssets,\n type BrowserHarnessAssets,\n type BrowserHarnessAssetOverrides,\n} from './runtime-assets';\nimport {\n getLanguageRuntimeProfile,\n getSupportedLanguageProfiles,\n isLanguageSupported,\n SUPPORTED_LANGUAGES,\n} from './runtime-profiles';\n\nexport interface CreateBrowserHarnessOptions {\n assetBaseUrl?: string;\n assets?: BrowserHarnessAssetOverrides;\n debug?: boolean;\n}\n\nexport interface BrowserHarness {\n readonly assets: BrowserHarnessAssets;\n readonly supportedLanguages: readonly Language[];\n getClient(language: Language): RuntimeClient;\n getProfile(language: Language): LanguageRuntimeProfile;\n getSupportedLanguageProfiles(): readonly LanguageRuntimeProfile[];\n isLanguageSupported(language: Language): boolean;\n disposeLanguage(language: Language): void;\n dispose(): void;\n}\n\nclass BrowserHarnessRuntime implements BrowserHarness {\n readonly assets: BrowserHarnessAssets;\n readonly supportedLanguages = SUPPORTED_LANGUAGES;\n\n private readonly pythonWorkerClient: PyodideWorkerClient;\n private readonly javaScriptWorkerClient: JavaScriptWorkerClient;\n private readonly clients: Record<Language, RuntimeClient>;\n\n constructor(options: CreateBrowserHarnessOptions = {}) {\n this.assets = resolveBrowserHarnessAssets(options);\n this.pythonWorkerClient = new PyodideWorkerClient({\n workerUrl: this.assets.pythonWorker,\n debug: options.debug,\n });\n this.javaScriptWorkerClient = new JavaScriptWorkerClient({\n workerUrl: this.assets.javascriptWorker,\n debug: options.debug,\n });\n this.clients = {\n python: createPythonRuntimeClient(this.pythonWorkerClient),\n javascript: createJavaScriptRuntimeClient('javascript', this.javaScriptWorkerClient),\n typescript: createJavaScriptRuntimeClient('typescript', this.javaScriptWorkerClient),\n };\n }\n\n getClient(language: Language): RuntimeClient {\n const client = this.clients[language];\n if (!client) {\n throw new Error(`Runtime for language \"${language}\" is not implemented yet.`);\n }\n return client;\n }\n\n getProfile(language: Language): LanguageRuntimeProfile {\n return getLanguageRuntimeProfile(language);\n }\n\n getSupportedLanguageProfiles(): readonly LanguageRuntimeProfile[] {\n return getSupportedLanguageProfiles();\n }\n\n isLanguageSupported(language: Language): boolean {\n return isLanguageSupported(language);\n }\n\n disposeLanguage(language: Language): void {\n if (language === 'python') {\n this.pythonWorkerClient.terminate();\n return;\n }\n this.javaScriptWorkerClient.terminate();\n }\n\n dispose(): void {\n this.pythonWorkerClient.terminate();\n this.javaScriptWorkerClient.terminate();\n }\n}\n\nexport function createBrowserHarness(options: CreateBrowserHarnessOptions = {}): BrowserHarness {\n return new BrowserHarnessRuntime(options);\n}\n\nexport {\n DEFAULT_BROWSER_HARNESS_ASSET_RELATIVE_PATHS,\n resolveBrowserHarnessAssets,\n type BrowserHarnessAssets,\n type BrowserHarnessAssetOverrides,\n};\n"],"mappings":"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","names":["pending","EXECUTION_TIMEOUT_MS","INTERVIEW_MODE_TIMEOUT_MS","TRACING_TIMEOUT_MS","INIT_TIMEOUT_MS","MESSAGE_TIMEOUT_MS","WORKER_READY_TIMEOUT_MS","pending"]}
@@ -1,5 +1,5 @@
1
- import { L as Language, b as RuntimeClient, a as LanguageRuntimeProfile, c as RuntimeExecutionStyle } from './runtime-types-Dvgn07z9.cjs';
2
- import './types-Bzr1Ohcf.cjs';
1
+ import { L as Language, b as RuntimeClient, a as LanguageRuntimeProfile, c as RuntimeExecutionStyle } from './runtime-types--lBQ6rYu.cjs';
2
+ import './types-DwIYM3Ku.cjs';
3
3
 
4
4
  interface BrowserHarnessAssets {
5
5
  pythonWorker: string;
package/dist/browser.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { L as Language, b as RuntimeClient, a as LanguageRuntimeProfile, c as RuntimeExecutionStyle } from './runtime-types-C7d1LFbx.js';
2
- import './types-Bzr1Ohcf.js';
1
+ import { L as Language, b as RuntimeClient, a as LanguageRuntimeProfile, c as RuntimeExecutionStyle } from './runtime-types-DtaaAhHL.js';
2
+ import './types-DwIYM3Ku.js';
3
3
 
4
4
  interface BrowserHarnessAssets {
5
5
  pythonWorker: string;