@tracecode/harness 0.4.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 (55) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/LICENSE +674 -0
  3. package/README.md +266 -0
  4. package/dist/browser.cjs +1352 -0
  5. package/dist/browser.cjs.map +1 -0
  6. package/dist/browser.d.cts +49 -0
  7. package/dist/browser.d.ts +49 -0
  8. package/dist/browser.js +1317 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/cli.cjs +70 -0
  11. package/dist/cli.cjs.map +1 -0
  12. package/dist/cli.d.cts +1 -0
  13. package/dist/cli.d.ts +1 -0
  14. package/dist/cli.js +70 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/core.cjs +286 -0
  17. package/dist/core.cjs.map +1 -0
  18. package/dist/core.d.cts +69 -0
  19. package/dist/core.d.ts +69 -0
  20. package/dist/core.js +254 -0
  21. package/dist/core.js.map +1 -0
  22. package/dist/index.cjs +2603 -0
  23. package/dist/index.cjs.map +1 -0
  24. package/dist/index.d.cts +6 -0
  25. package/dist/index.d.ts +6 -0
  26. package/dist/index.js +2538 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/internal/browser.cjs +647 -0
  29. package/dist/internal/browser.cjs.map +1 -0
  30. package/dist/internal/browser.d.cts +143 -0
  31. package/dist/internal/browser.d.ts +143 -0
  32. package/dist/internal/browser.js +617 -0
  33. package/dist/internal/browser.js.map +1 -0
  34. package/dist/javascript.cjs +549 -0
  35. package/dist/javascript.cjs.map +1 -0
  36. package/dist/javascript.d.cts +11 -0
  37. package/dist/javascript.d.ts +11 -0
  38. package/dist/javascript.js +518 -0
  39. package/dist/javascript.js.map +1 -0
  40. package/dist/python.cjs +744 -0
  41. package/dist/python.cjs.map +1 -0
  42. package/dist/python.d.cts +97 -0
  43. package/dist/python.d.ts +97 -0
  44. package/dist/python.js +698 -0
  45. package/dist/python.js.map +1 -0
  46. package/dist/runtime-types-C7d1LFbx.d.ts +85 -0
  47. package/dist/runtime-types-Dvgn07z9.d.cts +85 -0
  48. package/dist/types-Bzr1Ohcf.d.cts +96 -0
  49. package/dist/types-Bzr1Ohcf.d.ts +96 -0
  50. package/package.json +89 -0
  51. package/workers/javascript/javascript-worker.js +2918 -0
  52. package/workers/python/generated-python-harness-snippets.js +20 -0
  53. package/workers/python/pyodide-worker.js +1197 -0
  54. package/workers/python/runtime-core.js +1529 -0
  55. package/workers/vendor/typescript.js +200276 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../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":["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"]}
package/dist/cli.cjs ADDED
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli.ts
4
+ var import_promises = require("fs/promises");
5
+ var import_node_path = require("path");
6
+ var ASSET_COPY_PLAN = [
7
+ {
8
+ source: ["workers", "python", "pyodide-worker.js"],
9
+ target: ["pyodide-worker.js"]
10
+ },
11
+ {
12
+ source: ["workers", "python", "generated-python-harness-snippets.js"],
13
+ target: ["generated-python-harness-snippets.js"]
14
+ },
15
+ {
16
+ source: ["workers", "python", "runtime-core.js"],
17
+ target: ["pyodide", "runtime-core.js"]
18
+ },
19
+ {
20
+ source: ["workers", "javascript", "javascript-worker.js"],
21
+ target: ["javascript-worker.js"]
22
+ },
23
+ {
24
+ source: ["workers", "vendor", "typescript.js"],
25
+ target: ["vendor", "typescript.js"]
26
+ }
27
+ ];
28
+ function usage() {
29
+ return [
30
+ "Usage:",
31
+ " tracecode-harness sync-assets <target-dir>",
32
+ "",
33
+ "Example:",
34
+ " tracecode-harness sync-assets public/workers"
35
+ ].join("\n");
36
+ }
37
+ async function ensureParentDir(pathname) {
38
+ await (0, import_promises.mkdir)((0, import_node_path.dirname)(pathname), { recursive: true });
39
+ }
40
+ function getPackageRoot() {
41
+ const cliEntrypoint = process.argv[1];
42
+ if (!cliEntrypoint) {
43
+ throw new Error("Unable to resolve tracecode-harness CLI entrypoint");
44
+ }
45
+ return (0, import_node_path.resolve)((0, import_node_path.dirname)(cliEntrypoint), "..");
46
+ }
47
+ async function syncAssets(targetDir) {
48
+ const packageRoot = getPackageRoot();
49
+ const resolvedTargetDir = (0, import_node_path.resolve)(process.cwd(), targetDir);
50
+ for (const asset of ASSET_COPY_PLAN) {
51
+ const sourcePath = (0, import_node_path.join)(packageRoot, ...asset.source);
52
+ const targetPath = (0, import_node_path.join)(resolvedTargetDir, ...asset.target);
53
+ await ensureParentDir(targetPath);
54
+ await (0, import_promises.copyFile)(sourcePath, targetPath);
55
+ }
56
+ console.log(`Synced harness assets to ${resolvedTargetDir}`);
57
+ }
58
+ async function main() {
59
+ const [command, targetDir] = process.argv.slice(2);
60
+ if (command !== "sync-assets" || !targetDir) {
61
+ console.error(usage());
62
+ process.exit(1);
63
+ }
64
+ await syncAssets(targetDir);
65
+ }
66
+ main().catch((error) => {
67
+ console.error(error instanceof Error ? error.message : String(error));
68
+ process.exit(1);
69
+ });
70
+ //# sourceMappingURL=cli.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { copyFile, mkdir } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\n\nconst ASSET_COPY_PLAN = [\n {\n source: ['workers', 'python', 'pyodide-worker.js'],\n target: ['pyodide-worker.js'],\n },\n {\n source: ['workers', 'python', 'generated-python-harness-snippets.js'],\n target: ['generated-python-harness-snippets.js'],\n },\n {\n source: ['workers', 'python', 'runtime-core.js'],\n target: ['pyodide', 'runtime-core.js'],\n },\n {\n source: ['workers', 'javascript', 'javascript-worker.js'],\n target: ['javascript-worker.js'],\n },\n {\n source: ['workers', 'vendor', 'typescript.js'],\n target: ['vendor', 'typescript.js'],\n },\n] as const;\n\nfunction usage(): string {\n return [\n 'Usage:',\n ' tracecode-harness sync-assets <target-dir>',\n '',\n 'Example:',\n ' tracecode-harness sync-assets public/workers',\n ].join('\\n');\n}\n\nasync function ensureParentDir(pathname: string): Promise<void> {\n await mkdir(dirname(pathname), { recursive: true });\n}\n\nfunction getPackageRoot(): string {\n const cliEntrypoint = process.argv[1];\n if (!cliEntrypoint) {\n throw new Error('Unable to resolve tracecode-harness CLI entrypoint');\n }\n\n return resolve(dirname(cliEntrypoint), '..');\n}\n\nasync function syncAssets(targetDir: string): Promise<void> {\n const packageRoot = getPackageRoot();\n const resolvedTargetDir = resolve(process.cwd(), targetDir);\n\n for (const asset of ASSET_COPY_PLAN) {\n const sourcePath = join(packageRoot, ...asset.source);\n const targetPath = join(resolvedTargetDir, ...asset.target);\n await ensureParentDir(targetPath);\n await copyFile(sourcePath, targetPath);\n }\n\n console.log(`Synced harness assets to ${resolvedTargetDir}`);\n}\n\nasync function main(): Promise<void> {\n const [command, targetDir] = process.argv.slice(2);\n\n if (command !== 'sync-assets' || !targetDir) {\n console.error(usage());\n process.exit(1);\n }\n\n await syncAssets(targetDir);\n}\n\nmain().catch((error) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n});\n"],"mappings":";;;AAEA,sBAAgC;AAChC,uBAAuC;AAEvC,IAAM,kBAAkB;AAAA,EACtB;AAAA,IACE,QAAQ,CAAC,WAAW,UAAU,mBAAmB;AAAA,IACjD,QAAQ,CAAC,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,WAAW,UAAU,sCAAsC;AAAA,IACpE,QAAQ,CAAC,sCAAsC;AAAA,EACjD;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,WAAW,UAAU,iBAAiB;AAAA,IAC/C,QAAQ,CAAC,WAAW,iBAAiB;AAAA,EACvC;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,WAAW,cAAc,sBAAsB;AAAA,IACxD,QAAQ,CAAC,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,WAAW,UAAU,eAAe;AAAA,IAC7C,QAAQ,CAAC,UAAU,eAAe;AAAA,EACpC;AACF;AAEA,SAAS,QAAgB;AACvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,eAAe,gBAAgB,UAAiC;AAC9D,YAAM,2BAAM,0BAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACpD;AAEA,SAAS,iBAAyB;AAChC,QAAM,gBAAgB,QAAQ,KAAK,CAAC;AACpC,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,aAAO,8BAAQ,0BAAQ,aAAa,GAAG,IAAI;AAC7C;AAEA,eAAe,WAAW,WAAkC;AAC1D,QAAM,cAAc,eAAe;AACnC,QAAM,wBAAoB,0BAAQ,QAAQ,IAAI,GAAG,SAAS;AAE1D,aAAW,SAAS,iBAAiB;AACnC,UAAM,iBAAa,uBAAK,aAAa,GAAG,MAAM,MAAM;AACpD,UAAM,iBAAa,uBAAK,mBAAmB,GAAG,MAAM,MAAM;AAC1D,UAAM,gBAAgB,UAAU;AAChC,cAAM,0BAAS,YAAY,UAAU;AAAA,EACvC;AAEA,UAAQ,IAAI,4BAA4B,iBAAiB,EAAE;AAC7D;AAEA,eAAe,OAAsB;AACnC,QAAM,CAAC,SAAS,SAAS,IAAI,QAAQ,KAAK,MAAM,CAAC;AAEjD,MAAI,YAAY,iBAAiB,CAAC,WAAW;AAC3C,YAAQ,MAAM,MAAM,CAAC;AACrB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,WAAW,SAAS;AAC5B;AAEA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,UAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AACpE,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
package/dist/cli.d.cts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/cli.js ADDED
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli.ts
4
+ import { copyFile, mkdir } from "fs/promises";
5
+ import { dirname, join, resolve } from "path";
6
+ var ASSET_COPY_PLAN = [
7
+ {
8
+ source: ["workers", "python", "pyodide-worker.js"],
9
+ target: ["pyodide-worker.js"]
10
+ },
11
+ {
12
+ source: ["workers", "python", "generated-python-harness-snippets.js"],
13
+ target: ["generated-python-harness-snippets.js"]
14
+ },
15
+ {
16
+ source: ["workers", "python", "runtime-core.js"],
17
+ target: ["pyodide", "runtime-core.js"]
18
+ },
19
+ {
20
+ source: ["workers", "javascript", "javascript-worker.js"],
21
+ target: ["javascript-worker.js"]
22
+ },
23
+ {
24
+ source: ["workers", "vendor", "typescript.js"],
25
+ target: ["vendor", "typescript.js"]
26
+ }
27
+ ];
28
+ function usage() {
29
+ return [
30
+ "Usage:",
31
+ " tracecode-harness sync-assets <target-dir>",
32
+ "",
33
+ "Example:",
34
+ " tracecode-harness sync-assets public/workers"
35
+ ].join("\n");
36
+ }
37
+ async function ensureParentDir(pathname) {
38
+ await mkdir(dirname(pathname), { recursive: true });
39
+ }
40
+ function getPackageRoot() {
41
+ const cliEntrypoint = process.argv[1];
42
+ if (!cliEntrypoint) {
43
+ throw new Error("Unable to resolve tracecode-harness CLI entrypoint");
44
+ }
45
+ return resolve(dirname(cliEntrypoint), "..");
46
+ }
47
+ async function syncAssets(targetDir) {
48
+ const packageRoot = getPackageRoot();
49
+ const resolvedTargetDir = resolve(process.cwd(), targetDir);
50
+ for (const asset of ASSET_COPY_PLAN) {
51
+ const sourcePath = join(packageRoot, ...asset.source);
52
+ const targetPath = join(resolvedTargetDir, ...asset.target);
53
+ await ensureParentDir(targetPath);
54
+ await copyFile(sourcePath, targetPath);
55
+ }
56
+ console.log(`Synced harness assets to ${resolvedTargetDir}`);
57
+ }
58
+ async function main() {
59
+ const [command, targetDir] = process.argv.slice(2);
60
+ if (command !== "sync-assets" || !targetDir) {
61
+ console.error(usage());
62
+ process.exit(1);
63
+ }
64
+ await syncAssets(targetDir);
65
+ }
66
+ main().catch((error) => {
67
+ console.error(error instanceof Error ? error.message : String(error));
68
+ process.exit(1);
69
+ });
70
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { copyFile, mkdir } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\n\nconst ASSET_COPY_PLAN = [\n {\n source: ['workers', 'python', 'pyodide-worker.js'],\n target: ['pyodide-worker.js'],\n },\n {\n source: ['workers', 'python', 'generated-python-harness-snippets.js'],\n target: ['generated-python-harness-snippets.js'],\n },\n {\n source: ['workers', 'python', 'runtime-core.js'],\n target: ['pyodide', 'runtime-core.js'],\n },\n {\n source: ['workers', 'javascript', 'javascript-worker.js'],\n target: ['javascript-worker.js'],\n },\n {\n source: ['workers', 'vendor', 'typescript.js'],\n target: ['vendor', 'typescript.js'],\n },\n] as const;\n\nfunction usage(): string {\n return [\n 'Usage:',\n ' tracecode-harness sync-assets <target-dir>',\n '',\n 'Example:',\n ' tracecode-harness sync-assets public/workers',\n ].join('\\n');\n}\n\nasync function ensureParentDir(pathname: string): Promise<void> {\n await mkdir(dirname(pathname), { recursive: true });\n}\n\nfunction getPackageRoot(): string {\n const cliEntrypoint = process.argv[1];\n if (!cliEntrypoint) {\n throw new Error('Unable to resolve tracecode-harness CLI entrypoint');\n }\n\n return resolve(dirname(cliEntrypoint), '..');\n}\n\nasync function syncAssets(targetDir: string): Promise<void> {\n const packageRoot = getPackageRoot();\n const resolvedTargetDir = resolve(process.cwd(), targetDir);\n\n for (const asset of ASSET_COPY_PLAN) {\n const sourcePath = join(packageRoot, ...asset.source);\n const targetPath = join(resolvedTargetDir, ...asset.target);\n await ensureParentDir(targetPath);\n await copyFile(sourcePath, targetPath);\n }\n\n console.log(`Synced harness assets to ${resolvedTargetDir}`);\n}\n\nasync function main(): Promise<void> {\n const [command, targetDir] = process.argv.slice(2);\n\n if (command !== 'sync-assets' || !targetDir) {\n console.error(usage());\n process.exit(1);\n }\n\n await syncAssets(targetDir);\n}\n\nmain().catch((error) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n});\n"],"mappings":";;;AAEA,SAAS,UAAU,aAAa;AAChC,SAAS,SAAS,MAAM,eAAe;AAEvC,IAAM,kBAAkB;AAAA,EACtB;AAAA,IACE,QAAQ,CAAC,WAAW,UAAU,mBAAmB;AAAA,IACjD,QAAQ,CAAC,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,WAAW,UAAU,sCAAsC;AAAA,IACpE,QAAQ,CAAC,sCAAsC;AAAA,EACjD;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,WAAW,UAAU,iBAAiB;AAAA,IAC/C,QAAQ,CAAC,WAAW,iBAAiB;AAAA,EACvC;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,WAAW,cAAc,sBAAsB;AAAA,IACxD,QAAQ,CAAC,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,IACE,QAAQ,CAAC,WAAW,UAAU,eAAe;AAAA,IAC7C,QAAQ,CAAC,UAAU,eAAe;AAAA,EACpC;AACF;AAEA,SAAS,QAAgB;AACvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,eAAe,gBAAgB,UAAiC;AAC9D,QAAM,MAAM,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACpD;AAEA,SAAS,iBAAyB;AAChC,QAAM,gBAAgB,QAAQ,KAAK,CAAC;AACpC,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,SAAO,QAAQ,QAAQ,aAAa,GAAG,IAAI;AAC7C;AAEA,eAAe,WAAW,WAAkC;AAC1D,QAAM,cAAc,eAAe;AACnC,QAAM,oBAAoB,QAAQ,QAAQ,IAAI,GAAG,SAAS;AAE1D,aAAW,SAAS,iBAAiB;AACnC,UAAM,aAAa,KAAK,aAAa,GAAG,MAAM,MAAM;AACpD,UAAM,aAAa,KAAK,mBAAmB,GAAG,MAAM,MAAM;AAC1D,UAAM,gBAAgB,UAAU;AAChC,UAAM,SAAS,YAAY,UAAU;AAAA,EACvC;AAEA,UAAQ,IAAI,4BAA4B,iBAAiB,EAAE;AAC7D;AAEA,eAAe,OAAsB;AACnC,QAAM,CAAC,SAAS,SAAS,IAAI,QAAQ,KAAK,MAAM,CAAC;AAEjD,MAAI,YAAY,iBAAiB,CAAC,WAAW;AAC3C,YAAQ,MAAM,MAAM,CAAC;AACrB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,WAAW,SAAS;AAC5B;AAEA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,UAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AACpE,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}