@tracecode/harness 0.6.2 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.js CHANGED
@@ -359,6 +359,16 @@ function parseScalar(raw) {
359
359
  }
360
360
  return raw;
361
361
  }
362
+ function normalizeJavaSerializedResult(output) {
363
+ if (typeof output !== "string") {
364
+ return output;
365
+ }
366
+ try {
367
+ return JSON.parse(output);
368
+ } catch {
369
+ return output;
370
+ }
371
+ }
362
372
  function parseKeyValuePairs(fragment) {
363
373
  const variables = {};
364
374
  const matches = Array.from(fragment.matchAll(/\b([A-Za-z_][A-Za-z0-9_.]*)=/g));
@@ -539,10 +549,29 @@ function parseAccessEvent(payload) {
539
549
  pathDepth: 1
540
550
  }];
541
551
  }
552
+ const indexedMutatingCall = payload.match(/^mutate-indexed ([A-Za-z_][A-Za-z0-9_]*)\[(\d+)\] method=([A-Za-z_][A-Za-z0-9_]*)$/);
553
+ if (indexedMutatingCall) {
554
+ return [{
555
+ variable: indexedMutatingCall[1],
556
+ kind: "mutating-call",
557
+ indices: [Number.parseInt(indexedMutatingCall[2], 10)],
558
+ method: indexedMutatingCall[3],
559
+ pathDepth: 1
560
+ }];
561
+ }
562
+ const keyedCall = payload.match(/^keyed-call ([A-Za-z_][A-Za-z0-9_]*) method=([A-Za-z_][A-Za-z0-9_]*)(?:\s+.*)?$/);
563
+ if (keyedCall) {
564
+ return [{
565
+ variable: keyedCall[1],
566
+ kind: "mutating-call",
567
+ method: keyedCall[2],
568
+ pathDepth: 1
569
+ }];
570
+ }
542
571
  return void 0;
543
572
  }
544
573
  function parseStructureState(payload) {
545
- const match = payload.match(/^state (linked-list|tree) ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);
574
+ const match = payload.match(/^state (linked-list|tree|graph-adjacency) ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);
546
575
  if (!match) return null;
547
576
  return {
548
577
  structure: match[1],
@@ -558,6 +587,22 @@ function parseObjectState(payload) {
558
587
  visualization: JSON.parse(match[2])
559
588
  };
560
589
  }
590
+ function parseMapState(payload) {
591
+ const match = payload.match(/^map-state ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);
592
+ if (!match) return null;
593
+ return {
594
+ variable: match[1],
595
+ visualization: JSON.parse(match[2])
596
+ };
597
+ }
598
+ function parseSetState(payload) {
599
+ const match = payload.match(/^set-state ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);
600
+ if (!match) return null;
601
+ return {
602
+ variable: match[1],
603
+ visualization: JSON.parse(match[2])
604
+ };
605
+ }
561
606
  function parseObjectFieldEvent(payload) {
562
607
  const match = payload.match(/^(access|write) ([A-Za-z_][A-Za-z0-9_]*)\.([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);
563
608
  if (!match) return null;
@@ -567,6 +612,9 @@ function parseObjectFieldEvent(payload) {
567
612
  value: parseScalar(match[4])
568
613
  };
569
614
  }
615
+ function isArrayLengthAccessEvent(payload) {
616
+ return /^access [A-Za-z_][A-Za-z0-9_]*\.length=\d+$/.test(payload);
617
+ }
570
618
  function buildFieldVisualization(event) {
571
619
  return {
572
620
  objectKinds: {
@@ -646,12 +694,13 @@ function filterStructuredVariables(variables) {
646
694
  }
647
695
  return Object.fromEntries(entries);
648
696
  }
649
- function appendJavaTraceStep(trace, step, pendingAccesses) {
697
+ function appendJavaTraceStep(trace, step, pendingAccesses, options = {}) {
650
698
  const nextStep = pendingAccesses.length > 0 ? { ...step, accesses: [...pendingAccesses] } : step;
651
699
  pendingAccesses.length = 0;
652
- if (!maybeMergeConsecutiveLineStep(trace, nextStep)) {
653
- trace.push(nextStep);
700
+ if (options.allowMerge !== false && maybeMergeConsecutiveLineStep(trace, nextStep)) {
701
+ return;
654
702
  }
703
+ trace.push(nextStep);
655
704
  }
656
705
  function mergeIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, patch) {
657
706
  const candidate = trace.at(-1);
@@ -685,11 +734,14 @@ function eventsToRawTrace(events, sourceText) {
685
734
  const stack = [];
686
735
  const pendingAccesses = [];
687
736
  let currentFunction = "<module>";
737
+ let previousRawLine = null;
688
738
  const lineRemap = buildLineRemap(sourceText);
689
739
  const declarationLines = buildMethodDeclarationLineSet(sourceText);
690
740
  for (const rawEvent of events) {
691
741
  if (rawEvent === "clear" || rawEvent === "reset") continue;
692
742
  const metadata = extractLineMetadata(rawEvent);
743
+ const previousEventRawLine = previousRawLine;
744
+ previousRawLine = metadata.line;
693
745
  const line = lineRemap?.get(metadata.line) ?? metadata.line;
694
746
  const payload = metadata.payload;
695
747
  const isDeclarationLine = declarationLines?.has(line) === true;
@@ -697,28 +749,31 @@ function eventsToRawTrace(events, sourceText) {
697
749
  const match = payload.match(/^call\s+(\S+)(?:\s+(.*))?$/);
698
750
  const functionName = match?.[1] ?? currentFunction;
699
751
  const argsFragment = match?.[2] ?? "";
700
- Object.assign(variables, parseKeyValuePairs(argsFragment));
752
+ const args = parseKeyValuePairs(argsFragment);
753
+ Object.assign(variables, args);
701
754
  currentFunction = functionName || currentFunction;
702
- stack.push({ function: currentFunction, line });
755
+ stack.push({ function: currentFunction, line, args });
703
756
  appendJavaTraceStep(trace, {
704
757
  line,
705
758
  event: "call",
706
759
  function: currentFunction,
707
760
  variables: { ...variables },
708
- callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} }))
761
+ callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } }))
709
762
  }, pendingAccesses);
710
763
  continue;
711
764
  }
712
765
  if (payload.startsWith("return ")) {
713
- const match = payload.match(/^return\s+(\S+)$/);
766
+ const match = payload.match(/^return\s+(\S+)(?:\s+value=(.*))?$/);
714
767
  const functionName = match?.[1] ?? currentFunction;
768
+ const returnValue = match?.[2] !== void 0 ? parseScalar(match[2].trim()) : void 0;
715
769
  const returnVariables = functionName === "<module>" ? { ...variables } : filterStructuredVariables(variables) ?? {};
716
770
  appendJavaTraceStep(trace, {
717
771
  line,
718
772
  event: "return",
719
773
  function: functionName || currentFunction,
720
774
  variables: returnVariables,
721
- callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} }))
775
+ callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),
776
+ ...returnValue !== void 0 ? { returnValue } : {}
722
777
  }, pendingAccesses);
723
778
  stack.pop();
724
779
  currentFunction = stack[stack.length - 1]?.function ?? "<module>";
@@ -733,8 +788,8 @@ function eventsToRawTrace(events, sourceText) {
733
788
  event: "line",
734
789
  function: currentFunction,
735
790
  variables: { ...variables },
736
- ...stack.length > 0 ? { callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })) } : {}
737
- }, pendingAccesses);
791
+ ...stack.length > 0 ? { callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })) } : {}
792
+ }, pendingAccesses, { allowMerge: previousEventRawLine !== metadata.line });
738
793
  continue;
739
794
  }
740
795
  const structureState = parseStructureState(payload);
@@ -746,7 +801,7 @@ function eventsToRawTrace(events, sourceText) {
746
801
  event: "line",
747
802
  function: currentFunction,
748
803
  variables: { ...variables },
749
- callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })),
804
+ callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),
750
805
  visualization: {
751
806
  objectKinds: { ...objectKinds }
752
807
  }
@@ -761,7 +816,7 @@ function eventsToRawTrace(events, sourceText) {
761
816
  event: "line",
762
817
  function: currentFunction,
763
818
  variables: { ...variables },
764
- callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })),
819
+ callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),
765
820
  visualization: {
766
821
  objectKinds: { [objectState.variable]: "object" },
767
822
  hashMaps: [objectState.visualization]
@@ -769,10 +824,56 @@ function eventsToRawTrace(events, sourceText) {
769
824
  }, pendingAccesses);
770
825
  continue;
771
826
  }
827
+ const mapState = parseMapState(payload);
828
+ if (mapState) {
829
+ const entries = mapState.visualization.entries.map((entry) => [entry.key, entry.value]);
830
+ variables[mapState.variable] = { __type__: "map", entries };
831
+ appendJavaTraceStep(trace, {
832
+ line,
833
+ event: "line",
834
+ function: currentFunction,
835
+ variables: { ...variables },
836
+ callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),
837
+ visualization: {
838
+ objectKinds: { [mapState.variable]: "map" },
839
+ hashMaps: [mapState.visualization]
840
+ }
841
+ }, pendingAccesses);
842
+ continue;
843
+ }
844
+ const setState = parseSetState(payload);
845
+ if (setState) {
846
+ const values = setState.visualization.entries.map((entry) => entry.key);
847
+ variables[setState.variable] = { __type__: "set", values };
848
+ appendJavaTraceStep(trace, {
849
+ line,
850
+ event: "line",
851
+ function: currentFunction,
852
+ variables: { ...variables },
853
+ callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),
854
+ visualization: {
855
+ objectKinds: { [setState.variable]: "set" },
856
+ hashMaps: [setState.visualization]
857
+ }
858
+ }, pendingAccesses);
859
+ continue;
860
+ }
861
+ if (isArrayLengthAccessEvent(payload)) {
862
+ continue;
863
+ }
864
+ const accesses = parseAccessEvent(payload);
865
+ if (accesses) {
866
+ const currentCallStack = stack.length > 0 ? stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })) : void 0;
867
+ if (mergeAccessesIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, accesses)) {
868
+ continue;
869
+ }
870
+ pendingAccesses.push(...accesses);
871
+ continue;
872
+ }
772
873
  const objectField = parseObjectFieldEvent(payload);
773
874
  if (objectField) {
774
875
  variables[objectField.variable] = { __ref__: `${objectField.variable}-object` };
775
- const currentCallStack = stack.length > 0 ? stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })) : void 0;
876
+ const currentCallStack = stack.length > 0 ? stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })) : void 0;
776
877
  if (mergeIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, {
777
878
  variables: { ...variables },
778
879
  accesses: void 0,
@@ -785,27 +886,18 @@ function eventsToRawTrace(events, sourceText) {
785
886
  event: "line",
786
887
  function: currentFunction,
787
888
  variables: { ...variables },
788
- callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })),
889
+ callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),
789
890
  visualization: buildFieldVisualization(objectField)
790
891
  }, pendingAccesses);
791
892
  continue;
792
893
  }
793
894
  Object.assign(variables, parseKeyValuePairs(payload));
794
- const accesses = parseAccessEvent(payload);
795
- if (accesses) {
796
- const currentCallStack = stack.length > 0 ? stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })) : void 0;
797
- if (mergeAccessesIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, accesses)) {
798
- continue;
799
- }
800
- pendingAccesses.push(...accesses);
801
- continue;
802
- }
803
895
  appendJavaTraceStep(trace, {
804
896
  line,
805
897
  event: "line",
806
898
  function: currentFunction,
807
899
  variables: { ...variables },
808
- ...stack.length > 0 ? { callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })) } : {}
900
+ ...stack.length > 0 ? { callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })) } : {}
809
901
  }, pendingAccesses);
810
902
  }
811
903
  if (pendingAccesses.length > 0 && trace.length > 0) {
@@ -814,11 +906,11 @@ function eventsToRawTrace(events, sourceText) {
814
906
  }
815
907
  return trace;
816
908
  }
817
- function buildJavaExecutionResult(output, events, executionTimeMs = 0, traceLimitExceeded, timeoutReason, maxTraceSteps, sourceText) {
909
+ function buildJavaExecutionResult(output, events, executionTimeMs = 0, traceLimitExceeded, timeoutReason, maxTraceSteps, sourceText, options = {}) {
818
910
  const trace = eventsToRawTrace(events, sourceText);
819
911
  return {
820
912
  success: true,
821
- output,
913
+ output: options.outputIsSerialized === false ? output : normalizeJavaSerializedResult(output),
822
914
  trace,
823
915
  executionTimeMs,
824
916
  consoleOutput: [],
@@ -859,6 +951,7 @@ export {
859
951
  adaptTraceExecutionResult,
860
952
  buildJavaExecutionResult,
861
953
  buildJavaExecutionResult as buildJavaSpikeExecutionResult,
954
+ normalizeJavaSerializedResult,
862
955
  normalizeJavaTraceContract as normalizeJavaSpikeTraceContract,
863
956
  normalizeJavaTraceContract,
864
957
  normalizeRuntimeTraceContract,
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/harness-core/src/trace-contract.ts","../packages/harness-core/src/trace-adapters/shared.ts","../packages/harness-core/src/trace-adapters/python.ts","../packages/harness-core/src/trace-adapters/javascript.ts","../packages/harness-core/src/trace-adapters/java.ts"],"sourcesContent":["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-04-21';\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 if (normalized.length === 0) {\n return undefined;\n }\n\n const statsByVariable = new Map<\n string,\n { hasCellRead: boolean; hasCellWrite: boolean }\n >();\n for (const access of normalized) {\n const stats =\n statsByVariable.get(access.variable) ?? { hasCellRead: false, hasCellWrite: false };\n if (access.kind === 'cell-read') stats.hasCellRead = true;\n if (access.kind === 'cell-write') stats.hasCellWrite = true;\n statsByVariable.set(access.variable, stats);\n }\n\n const deduped = new Set<string>();\n const collapsed = normalized.filter((access) => {\n const stats = statsByVariable.get(access.variable);\n if (access.kind === 'indexed-read' && (stats?.hasCellRead || stats?.hasCellWrite)) {\n return false;\n }\n if (access.kind === 'indexed-write' && stats?.hasCellWrite) {\n return false;\n }\n const key = JSON.stringify([\n access.variable,\n access.kind,\n access.indices ?? null,\n access.pathDepth ?? null,\n access.method ?? null,\n ]);\n if (deduped.has(key)) {\n return false;\n }\n deduped.add(key);\n return true;\n });\n\n return collapsed.length > 0 ? collapsed : 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\nfunction collapseTraceAccessNoise(\n trace: RuntimeTraceContractStep[]\n): RuntimeTraceContractStep[] {\n const variablesWithCellAccess = new Set<string>();\n const accessStatsByVariable = new Map<\n string,\n {\n hasCellRead: boolean;\n hasCellWrite: boolean;\n hasMutatingCall: boolean;\n hasIndexedWrite: boolean;\n }\n >();\n for (const step of trace) {\n for (const access of step.accesses ?? []) {\n const stats =\n accessStatsByVariable.get(access.variable) ?? {\n hasCellRead: false,\n hasCellWrite: false,\n hasMutatingCall: false,\n hasIndexedWrite: false,\n };\n if (access.kind === 'cell-read' || access.kind === 'cell-write') {\n variablesWithCellAccess.add(access.variable);\n }\n if (access.kind === 'cell-read') stats.hasCellRead = true;\n if (access.kind === 'cell-write') stats.hasCellWrite = true;\n if (access.kind === 'mutating-call') stats.hasMutatingCall = true;\n if (access.kind === 'indexed-write') stats.hasIndexedWrite = true;\n accessStatsByVariable.set(access.variable, stats);\n }\n }\n if (variablesWithCellAccess.size === 0) {\n return trace;\n }\n\n return trace.map((step) => {\n if (!step.accesses?.length) {\n return step;\n }\n const filtered = step.accesses.filter((access) => {\n const stats = accessStatsByVariable.get(access.variable);\n if (variablesWithCellAccess.has(access.variable)) {\n return access.kind !== 'indexed-read' && access.kind !== 'indexed-write';\n }\n if (\n access.kind === 'mutating-call' &&\n stats?.hasIndexedWrite &&\n !stats.hasCellRead &&\n !stats.hasCellWrite\n ) {\n return false;\n }\n if (\n access.kind === 'indexed-read' &&\n stats?.hasMutatingCall &&\n !stats.hasIndexedWrite &&\n !stats.hasCellRead &&\n !stats.hasCellWrite\n ) {\n return false;\n }\n return true;\n });\n if (filtered.length === step.accesses.length) {\n return step;\n }\n return {\n ...step,\n ...(filtered.length > 0 ? { accesses: filtered } : {}),\n ...(filtered.length === 0 ? { accesses: undefined } : {}),\n };\n });\n}\n\nexport function normalizeRuntimeTraceContract(\n language: Language,\n result: ExecutionResult\n): RuntimeTraceContractResult {\n const rawNormalizedTrace = collapseTraceAccessNoise(\n Array.isArray(result.trace) ? result.trace.map(normalizeTraceStep) : []\n );\n const maxTraceSteps =\n typeof result.maxTraceSteps === 'number' && Number.isFinite(result.maxTraceSteps)\n ? Math.max(1, Math.floor(result.maxTraceSteps))\n : undefined;\n const traceWasClipped =\n maxTraceSteps !== undefined && rawNormalizedTrace.length > maxTraceSteps;\n const normalizedTrace =\n traceWasClipped && maxTraceSteps !== undefined\n ? rawNormalizedTrace.slice(0, maxTraceSteps)\n : rawNormalizedTrace;\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 || traceWasClipped)\n ? { traceLimitExceeded: Boolean(result.traceLimitExceeded) || traceWasClipped }\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 { ExecutionResult } from '../types';\nimport { adaptTraceExecutionResult } from './shared';\n\nexport function adaptPythonTraceExecutionResult(result: ExecutionResult): ExecutionResult {\n return adaptTraceExecutionResult('python', result);\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 ExecutionResult,\n RawTraceStep,\n RuntimeHashMapVisualization,\n RuntimeTraceAccessEvent,\n RuntimeVisualizationPayload,\n} from '../types';\nimport { normalizeRuntimeTraceContract, type RuntimeTraceContractResult } from '../trace-contract';\nimport { adaptTraceExecutionResult } from './shared';\n\nexport interface JavaTraceResult {\n output: unknown;\n events: string[];\n sourceText?: string;\n traceLimitExceeded?: boolean;\n timeoutReason?: ExecutionResult['timeoutReason'];\n}\n\nexport interface JavaTraceContractResult\n extends Omit<RuntimeTraceContractResult, 'language'> {\n language: 'java';\n}\n\nfunction parseScalar(raw: string): unknown {\n if (raw === 'null') return null;\n if (raw === 'true') return true;\n if (raw === 'false') return false;\n if (/^-?\\d+$/.test(raw)) return Number.parseInt(raw, 10);\n if (/^-?\\d+\\.\\d+$/.test(raw)) return Number.parseFloat(raw);\n if (\n (raw.startsWith('\"') && raw.endsWith('\"')) ||\n (raw.startsWith('[') && raw.endsWith(']')) ||\n (raw.startsWith('{') && raw.endsWith('}'))\n ) {\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n // Fall through to raw string return.\n }\n }\n return raw;\n}\n\nfunction parseKeyValuePairs(fragment: string): Record<string, unknown> {\n const variables: Record<string, unknown> = {};\n const matches = Array.from(fragment.matchAll(/\\b([A-Za-z_][A-Za-z0-9_.]*)=/g));\n for (let index = 0; index < matches.length; index += 1) {\n const match = matches[index];\n const rawKey = match[1];\n const valueStart = (match.index ?? 0) + match[0].length;\n const valueEnd = index + 1 < matches.length ? (matches[index + 1].index ?? fragment.length) : fragment.length;\n const rawValue = fragment.slice(valueStart, valueEnd).trim();\n if (!rawKey || rawValue === undefined) continue;\n if (rawKey === 'method') continue;\n variables[rawKey.replaceAll('.', '_')] = parseScalar(rawValue);\n }\n return variables;\n}\n\nfunction extractLineMetadata(event: string): { line: number; payload: string } {\n const match = event.match(/^line=(\\d+)(?:\\s+(.*))?$/);\n if (!match) {\n return { line: 1, payload: event };\n }\n return {\n line: Number.parseInt(match[1], 10),\n payload: match[2] ?? '',\n };\n}\n\nfunction stripInlineComments(line: string, inBlockComment: boolean): { text: string; inBlockComment: boolean } {\n let result = '';\n let index = 0;\n let inBlock = inBlockComment;\n while (index < line.length) {\n const current = line[index];\n const next = index + 1 < line.length ? line[index + 1] : '';\n\n if (inBlock) {\n if (current === '*' && next === '/') {\n inBlock = false;\n index += 2;\n continue;\n }\n index += 1;\n continue;\n }\n\n if (current === '/' && next === '*') {\n inBlock = true;\n index += 2;\n continue;\n }\n\n if (current === '/' && next === '/') {\n break;\n }\n\n result += current;\n index += 1;\n }\n\n return { text: result, inBlockComment: inBlock };\n}\n\nfunction isMethodDeclarationLine(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (trimmed.startsWith('@')) return false;\n if (!trimmed.includes('(') || !trimmed.includes(')')) return false;\n if (trimmed.endsWith(';')) return false;\n if (trimmed.includes('->')) return false;\n if (/^(?:if|for|while|switch|catch|do|try|else|return|throw|new)\\b/.test(trimmed)) {\n return false;\n }\n if (!/[A-Za-z_][A-Za-z0-9_]*\\s*\\([^{};]*\\)/.test(trimmed)) {\n return false;\n }\n return /(?:\\{\\s*)?$/.test(trimmed);\n}\n\nfunction buildLineRemap(sourceText: string | undefined): Map<number, number> | null {\n if (typeof sourceText !== 'string' || sourceText.length === 0) {\n return null;\n }\n\n const lines = sourceText.split(/\\r?\\n/);\n const executable = new Set<number>();\n let inBlockComment = false;\n\n for (let index = 0; index < lines.length; index += 1) {\n const { text, inBlockComment: nextInBlockComment } = stripInlineComments(lines[index] ?? '', inBlockComment);\n inBlockComment = nextInBlockComment;\n if (text.trim().length > 0) {\n executable.add(index + 1);\n }\n }\n\n if (executable.size === 0) {\n return null;\n }\n\n const nextExecutableAtOrAfter: Array<number | null> = new Array(lines.length + 2).fill(null);\n let nextExecutable: number | null = null;\n for (let line = lines.length; line >= 1; line -= 1) {\n if (executable.has(line)) {\n nextExecutable = line;\n }\n nextExecutableAtOrAfter[line] = nextExecutable;\n }\n\n const previousExecutableAtOrBefore: Array<number | null> = new Array(lines.length + 2).fill(null);\n let previousExecutable: number | null = null;\n for (let line = 1; line <= lines.length; line += 1) {\n if (executable.has(line)) {\n previousExecutable = line;\n }\n previousExecutableAtOrBefore[line] = previousExecutable;\n }\n\n const remap = new Map<number, number>();\n for (let line = 1; line <= lines.length; line += 1) {\n if (executable.has(line)) continue;\n const forward = nextExecutableAtOrAfter[line];\n const backward = previousExecutableAtOrBefore[line];\n const target = forward ?? backward;\n if (target !== null && target !== line) {\n remap.set(line, target);\n }\n }\n\n return remap;\n}\n\nfunction buildMethodDeclarationLineSet(sourceText: string | undefined): Set<number> | null {\n if (typeof sourceText !== 'string' || sourceText.length === 0) {\n return null;\n }\n\n const declarationLines = new Set<number>();\n const lines = sourceText.split(/\\r?\\n/);\n let inBlockComment = false;\n for (let index = 0; index < lines.length; index += 1) {\n const { text, inBlockComment: nextInBlockComment } = stripInlineComments(lines[index] ?? '', inBlockComment);\n inBlockComment = nextInBlockComment;\n if (isMethodDeclarationLine(text)) {\n declarationLines.add(index + 1);\n }\n }\n\n return declarationLines;\n}\n\nfunction parseAccessEvent(payload: string): RuntimeTraceAccessEvent[] | undefined {\n const isEphemeralOutputArrayName = (name: string): boolean =>\n /^(output|outputs)$/i.test(name);\n\n const cellRead = payload.match(/^access ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\]\\[(\\d+)\\]=(.+)$/);\n if (cellRead) {\n return [{\n variable: cellRead[1],\n kind: 'cell-read',\n indices: [Number.parseInt(cellRead[2], 10), Number.parseInt(cellRead[3], 10)],\n pathDepth: 2,\n }];\n }\n const indexedRead = payload.match(/^access ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\]=(.+)$/);\n if (indexedRead) {\n return [{\n variable: indexedRead[1],\n kind: 'indexed-read',\n indices: [Number.parseInt(indexedRead[2], 10)],\n pathDepth: 1,\n }];\n }\n const cellWrite = payload.match(/^write-array ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\]\\[(\\d+)\\]=(.+)$/);\n if (cellWrite) {\n return [{\n variable: cellWrite[1],\n kind: 'cell-write',\n indices: [Number.parseInt(cellWrite[2], 10), Number.parseInt(cellWrite[3], 10)],\n pathDepth: 2,\n }];\n }\n const indexedWrite = payload.match(/^write-array ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\]=(.+)$/);\n if (indexedWrite) {\n if (isEphemeralOutputArrayName(indexedWrite[1])) {\n return undefined;\n }\n return [{\n variable: indexedWrite[1],\n kind: 'indexed-write',\n indices: [Number.parseInt(indexedWrite[2], 10)],\n pathDepth: 1,\n }];\n }\n const mutatingCall = payload.match(/^mutate ([A-Za-z_][A-Za-z0-9_]*) method=([A-Za-z_][A-Za-z0-9_]*)$/);\n if (mutatingCall) {\n return [{\n variable: mutatingCall[1],\n kind: 'mutating-call',\n method: mutatingCall[2],\n pathDepth: 1,\n }];\n }\n return undefined;\n}\n\nfunction parseStructureState(payload: string): { structure: 'linked-list' | 'tree'; variable: string; value: unknown } | null {\n const match = payload.match(/^state (linked-list|tree) ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);\n if (!match) return null;\n return {\n structure: match[1] as 'linked-list' | 'tree',\n variable: match[2],\n value: JSON.parse(match[3]) as unknown,\n };\n}\n\nfunction parseObjectState(payload: string): { variable: string; visualization: RuntimeHashMapVisualization } | null {\n const match = payload.match(/^object-state ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);\n if (!match) return null;\n return {\n variable: match[1],\n visualization: JSON.parse(match[2]) as RuntimeHashMapVisualization,\n };\n}\n\nfunction parseObjectFieldEvent(payload: string): { variable: string; field: string; value: unknown } | null {\n const match = payload.match(/^(access|write) ([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);\n if (!match) return null;\n return {\n variable: match[2],\n field: match[3],\n value: parseScalar(match[4]),\n };\n}\n\nfunction buildFieldVisualization(event: { variable: string; field: string; value: unknown }): RuntimeVisualizationPayload {\n return {\n objectKinds: {\n [event.variable]: 'object',\n },\n hashMaps: [\n {\n name: event.variable,\n kind: 'object',\n objectClassName:\n event.field === 'next' || event.field === 'prev'\n ? 'ListNode'\n : event.field === 'left' || event.field === 'right'\n ? 'TreeNode'\n : undefined,\n objectId: `${event.variable}-object`,\n highlightedKey: event.field,\n entries: [{ key: event.field, value: event.value, highlight: true }],\n },\n ],\n };\n}\n\nfunction callStacksEqual(\n left: RawTraceStep['callStack'] | undefined,\n right: RawTraceStep['callStack'] | undefined\n): boolean {\n return JSON.stringify(left ?? []) === JSON.stringify(right ?? []);\n}\n\nfunction mergeVisualizationPayloads(\n left: RuntimeVisualizationPayload | undefined,\n right: RuntimeVisualizationPayload | undefined\n): RuntimeVisualizationPayload | undefined {\n if (!left) return right;\n if (!right) return left;\n return {\n ...left,\n ...right,\n objectKinds: {\n ...(left.objectKinds ?? {}),\n ...(right.objectKinds ?? {}),\n },\n hashMaps: [\n ...(left.hashMaps ?? []),\n ...(right.hashMaps ?? []),\n ],\n };\n}\n\nfunction maybeMergeConsecutiveLineStep(trace: RawTraceStep[], nextStep: RawTraceStep): boolean {\n if (nextStep.event !== 'line') {\n return false;\n }\n const previous = trace.at(-1);\n if (!previous || previous.event !== 'line') {\n return false;\n }\n if (previous.line !== nextStep.line || previous.function !== nextStep.function) {\n return false;\n }\n if (!callStacksEqual(previous.callStack, nextStep.callStack)) {\n return false;\n }\n\n previous.variables = { ...(previous.variables ?? {}), ...(nextStep.variables ?? {}) };\n if (nextStep.accesses?.length) {\n previous.accesses = [...(previous.accesses ?? []), ...nextStep.accesses];\n }\n previous.visualization = mergeVisualizationPayloads(previous.visualization, nextStep.visualization);\n return true;\n}\n\nfunction filterStructuredVariables(\n variables: Record<string, unknown> | undefined\n): Record<string, unknown> | undefined {\n if (!variables) {\n return undefined;\n }\n const isEphemeralOutputArrayName = (name: string): boolean =>\n /^(output|outputs)$/i.test(name);\n const entries = Object.entries(variables).filter(([name, value]) => {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n if (!Array.isArray(value)) {\n return true;\n }\n if (Array.isArray(value[0])) {\n return true;\n }\n return !isEphemeralOutputArrayName(name);\n });\n if (entries.length === 0) {\n return undefined;\n }\n return Object.fromEntries(entries);\n}\n\nfunction appendJavaTraceStep(\n trace: RawTraceStep[],\n step: RawTraceStep,\n pendingAccesses: RuntimeTraceAccessEvent[]\n): void {\n const nextStep: RawTraceStep = pendingAccesses.length > 0\n ? { ...step, accesses: [...pendingAccesses] }\n : step;\n pendingAccesses.length = 0;\n if (!maybeMergeConsecutiveLineStep(trace, nextStep)) {\n trace.push(nextStep);\n }\n}\n\nfunction mergeIntoPreviousMatchingLineStep(\n trace: RawTraceStep[],\n line: number,\n currentFunction: string,\n currentCallStack: RawTraceStep['callStack'],\n patch: Partial<Pick<RawTraceStep, 'variables' | 'accesses' | 'visualization'>>\n): boolean {\n const candidate = trace.at(-1);\n if (!candidate || candidate.event !== 'line') {\n return false;\n }\n if (candidate.line !== line || candidate.function !== currentFunction) {\n return false;\n }\n if (!callStacksEqual(candidate.callStack, currentCallStack)) {\n return false;\n }\n\n candidate.variables = { ...(candidate.variables ?? {}), ...(patch.variables ?? {}) };\n if (patch.accesses?.length) {\n candidate.accesses = [...(candidate.accesses ?? []), ...patch.accesses];\n }\n candidate.visualization = mergeVisualizationPayloads(candidate.visualization, patch.visualization);\n return true;\n}\n\nfunction mergeAccessesIntoPreviousMatchingLineStep(\n trace: RawTraceStep[],\n line: number,\n currentFunction: string,\n currentCallStack: RawTraceStep['callStack'],\n accesses: RuntimeTraceAccessEvent[]\n): boolean {\n return mergeIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, {\n variables: undefined,\n accesses,\n visualization: undefined,\n });\n}\n\nfunction eventsToRawTrace(events: string[], sourceText?: string): RawTraceStep[] {\n const trace: RawTraceStep[] = [];\n const variables: Record<string, unknown> = {};\n const objectKinds: Record<string, 'linked-list' | 'tree'> = {};\n const stack: Array<{ function: string; line: number }> = [];\n const pendingAccesses: RuntimeTraceAccessEvent[] = [];\n let currentFunction = '<module>';\n const lineRemap = buildLineRemap(sourceText);\n const declarationLines = buildMethodDeclarationLineSet(sourceText);\n\n for (const rawEvent of events) {\n if (rawEvent === 'clear' || rawEvent === 'reset') continue;\n const metadata = extractLineMetadata(rawEvent);\n const line = lineRemap?.get(metadata.line) ?? metadata.line;\n const payload = metadata.payload;\n const isDeclarationLine = declarationLines?.has(line) === true;\n\n if (payload.startsWith('call ')) {\n const match = payload.match(/^call\\s+(\\S+)(?:\\s+(.*))?$/);\n const functionName = match?.[1] ?? currentFunction;\n const argsFragment = match?.[2] ?? '';\n Object.assign(variables, parseKeyValuePairs(argsFragment));\n currentFunction = functionName || currentFunction;\n stack.push({ function: currentFunction, line });\n appendJavaTraceStep(trace, {\n line,\n event: 'call',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })),\n }, pendingAccesses);\n continue;\n }\n\n if (payload.startsWith('return ')) {\n const match = payload.match(/^return\\s+(\\S+)$/);\n const functionName = match?.[1] ?? currentFunction;\n const returnVariables = functionName === '<module>'\n ? { ...variables }\n : (filterStructuredVariables(variables) ?? {});\n appendJavaTraceStep(trace, {\n line,\n event: 'return',\n function: functionName || currentFunction,\n variables: returnVariables,\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })),\n }, pendingAccesses);\n stack.pop();\n currentFunction = stack[stack.length - 1]?.function ?? '<module>';\n continue;\n }\n\n if (isDeclarationLine) {\n continue;\n }\n\n if (payload.length === 0) {\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n ...(stack.length > 0\n ? { callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })) }\n : {}),\n }, pendingAccesses);\n continue;\n }\n\n const structureState = parseStructureState(payload);\n if (structureState) {\n variables[structureState.variable] = structureState.value;\n objectKinds[structureState.variable] = structureState.structure;\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })),\n visualization: {\n objectKinds: { ...objectKinds },\n },\n }, pendingAccesses);\n continue;\n }\n\n const objectState = parseObjectState(payload);\n if (objectState) {\n variables[objectState.variable] = { __ref__: objectState.visualization.objectId ?? `${objectState.variable}-object` };\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })),\n visualization: {\n objectKinds: { [objectState.variable]: 'object' },\n hashMaps: [objectState.visualization],\n },\n }, pendingAccesses);\n continue;\n }\n\n const objectField = parseObjectFieldEvent(payload);\n if (objectField) {\n variables[objectField.variable] = { __ref__: `${objectField.variable}-object` };\n const currentCallStack =\n stack.length > 0 ? stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })) : undefined;\n if (mergeIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, {\n variables: { ...variables },\n accesses: undefined,\n visualization: buildFieldVisualization(objectField),\n })) {\n continue;\n }\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })),\n visualization: buildFieldVisualization(objectField),\n }, pendingAccesses);\n continue;\n }\n\n Object.assign(variables, parseKeyValuePairs(payload));\n const accesses = parseAccessEvent(payload);\n if (accesses) {\n const currentCallStack =\n stack.length > 0 ? stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })) : undefined;\n if (mergeAccessesIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, accesses)) {\n continue;\n }\n pendingAccesses.push(...accesses);\n continue;\n }\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n ...(stack.length > 0\n ? { callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: {} })) }\n : {}),\n }, pendingAccesses);\n }\n\n if (pendingAccesses.length > 0 && trace.length > 0) {\n const last = trace[trace.length - 1];\n last.accesses = [...(last.accesses ?? []), ...pendingAccesses];\n }\n\n return trace;\n}\n\nexport function buildJavaExecutionResult(\n output: unknown,\n events: string[],\n executionTimeMs = 0,\n traceLimitExceeded?: boolean,\n timeoutReason?: ExecutionResult['timeoutReason'],\n maxTraceSteps?: number,\n sourceText?: string\n): ExecutionResult {\n const trace = eventsToRawTrace(events, sourceText);\n return {\n success: true,\n output,\n trace,\n executionTimeMs,\n consoleOutput: [],\n ...(traceLimitExceeded !== undefined ? { traceLimitExceeded } : {}),\n ...(maxTraceSteps !== undefined ? { maxTraceSteps } : {}),\n ...(timeoutReason ? { timeoutReason } : {}),\n lineEventCount: trace.filter((step) => step.event === 'line').length,\n traceStepCount: trace.length,\n };\n}\n\nexport function normalizeJavaTraceContract(result: JavaTraceResult): JavaTraceContractResult {\n const normalized = normalizeRuntimeTraceContract(\n 'java',\n buildJavaExecutionResult(\n result.output,\n result.events,\n 0,\n result.traceLimitExceeded,\n result.timeoutReason,\n undefined,\n result.sourceText\n )\n );\n return {\n ...normalized,\n language: 'java',\n };\n}\n\nexport function adaptJavaTraceExecutionResult(result: ExecutionResult): ExecutionResult {\n return adaptTraceExecutionResult('java', result);\n}\n"],"mappings":";AAiBO,IAAM,wCAAwC;AAiErD,IAAM,eAAoC,oBAAI,IAAI;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,qBAA0D,oBAAI,IAAI;AAAA,EACtE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,oBAAoB,OAAgB,WAAW,GAAW;AACjE,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACjE,QAAM,aAAa,KAAK,MAAM,KAAK;AACnC,SAAO,aAAa,IAAI,aAAa;AACvC;AAEA,SAAS,yBAAyB,OAAoC;AACpE,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACjE,QAAM,aAAa,KAAK,MAAM,KAAK;AACnC,SAAO,cAAc,IAAI,aAAa;AACxC;AAEA,SAAS,eAAe,OAA2C;AACjE,MAAI,OAAO,UAAU,YAAY,aAAa,IAAI,KAAK,GAAG;AACxD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAA+C;AAC1E,MAAI,OAAO,UAAU,YAAY,mBAAmB,IAAI,KAA+B,GAAG;AACxF,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAwB;AACrD,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,EAAG,QAAO;AAC1D,SAAO;AACT;AAEA,SAAS,cAAc,OAAsD;AAC3E,MAAI,UAAU,SAAS,UAAU,SAAS,UAAU,aAAa,UAAU,UAAU;AACnF,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAA0C;AACrE,MACE,UAAU,aACV,UAAU,YACV,UAAU,SACV,UAAU,SACV,UAAU,UACV,UAAU,iBACV,UAAU,mBACV;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAyB;AAChD,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW,QAAO;AACpE,MAAI,OAAO,UAAU,SAAU,QAAO,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK;AACnF,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,WAAW,OAAO,KAAK;AAC7B,WAAO,OAAO,cAAc,QAAQ,IAAI,WAAW,OAAO,KAAK;AAAA,EACjE;AACA,MAAI,OAAO,UAAU,WAAY,QAAO;AACxC,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAgB,QAAQ,GAAG,OAAO,oBAAI,QAAgB,GAAY;AAC1F,MAAI,QAAQ,GAAI,QAAO;AAEvB,QAAM,SAAS,gBAAgB,KAAK;AACpC,MAAI,WAAW,QAAQ,UAAU,QAAQ,UAAU,QAAW;AAC5D,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,SAAS;AACzB,UAAI,SAAS,OAAW,QAAO;AAC/B,aAAO,iBAAiB,MAAM,QAAQ,GAAG,IAAI;AAAA,IAC/C,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,UAAU,YAAY,OAAO;AACtC,QAAI,KAAK,IAAI,KAAK,EAAG,QAAO;AAC5B,SAAK,IAAI,KAAK;AAEd,UAAM,aAAsC,CAAC;AAC7C,eAAW,OAAO,OAAO,KAAK,KAAgC,EAAE,KAAK,GAAG;AACtE,YAAM,QAAS,MAAkC,GAAG;AACpD,UAAI,UAAU,OAAW;AACzB,iBAAW,GAAG,IAAI,iBAAiB,OAAO,QAAQ,GAAG,IAAI;AAAA,IAC3D;AAEA,SAAK,OAAO,KAAK;AACjB,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,kBACP,UACuC;AACvC,MAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAAG;AACrD,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,SAChB,IAAI,CAAC,WAAW;AACf,UAAM,WACJ,OAAO,QAAQ,aAAa,YAAY,OAAO,SAAS,SAAS,IAAI,OAAO,WAAW;AACzF,UAAM,OAAO,oBAAoB,QAAQ,IAAI;AAC7C,QAAI,CAAC,YAAY,CAAC,MAAM;AACtB,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM,QAAQ,QAAQ,OAAO,IACzC,OAAO,QACJ;AAAA,MAAI,CAAC,UACJ,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI;AAAA,IAC5E,EACC,OAAO,CAAC,UAA2B,UAAU,IAAI,IACpD;AACJ,UAAM,YACJ,QAAQ,cAAc,KAAK,QAAQ,cAAc,IAAI,OAAO,YAAY;AAC1E,UAAM,SACJ,OAAO,QAAQ,WAAW,YAAY,OAAO,OAAO,SAAS,IAAI,OAAO,SAAS;AAEnF,UAAM,UAAmC;AAAA,MACvC;AAAA,MACA;AAAA,IACF;AAEA,QAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,cAAQ,UAAU;AAAA,IACpB;AACA,QAAI,cAAc,QAAW;AAC3B,cAAQ,YAAY;AAAA,IACtB;AACA,QAAI,QAAQ;AACV,cAAQ,SAAS;AAAA,IACnB;AAEA,WAAO;AAAA,EACT,CAAC,EACA,OAAO,CAAC,WAA8C,WAAW,IAAI;AAExE,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,oBAAI,IAG1B;AACF,aAAW,UAAU,YAAY;AAC/B,UAAM,QACJ,gBAAgB,IAAI,OAAO,QAAQ,KAAK,EAAE,aAAa,OAAO,cAAc,MAAM;AACpF,QAAI,OAAO,SAAS,YAAa,OAAM,cAAc;AACrD,QAAI,OAAO,SAAS,aAAc,OAAM,eAAe;AACvD,oBAAgB,IAAI,OAAO,UAAU,KAAK;AAAA,EAC5C;AAEA,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,YAAY,WAAW,OAAO,CAAC,WAAW;AAC9C,UAAM,QAAQ,gBAAgB,IAAI,OAAO,QAAQ;AACjD,QAAI,OAAO,SAAS,mBAAmB,OAAO,eAAe,OAAO,eAAe;AACjF,aAAO;AAAA,IACT;AACA,QAAI,OAAO,SAAS,mBAAmB,OAAO,cAAc;AAC1D,aAAO;AAAA,IACT;AACA,UAAM,MAAM,KAAK,UAAU;AAAA,MACzB,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO,WAAW;AAAA,MAClB,OAAO,aAAa;AAAA,MACpB,OAAO,UAAU;AAAA,IACnB,CAAC;AACD,QAAI,QAAQ,IAAI,GAAG,GAAG;AACpB,aAAO;AAAA,IACT;AACA,YAAQ,IAAI,GAAG;AACf,WAAO;AAAA,EACT,CAAC;AAED,SAAO,UAAU,SAAS,IAAI,YAAY;AAC5C;AAEA,SAAS,gBAAgB,OAAyC;AAChE,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACzE,SAAO,iBAAiB,KAAK;AAC/B;AAEA,SAAS,yBACP,OACuE;AACvE,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,UAAU,OAAO,QAAQ,KAAgC,EAC5D;AAAA,IAAO,CAAC,CAAC,MAAM,MAAM,MACpB,OAAO,SAAS,YAChB,KAAK,SAAS,MACb,WAAW,UAAU,WAAW,gBAAgB,WAAW;AAAA,EAC9D,EACC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;AAG1C,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SAAO,OAAO,YAAY,OAAO;AACnC;AAEA,SAAS,wBAAwB,OAA2D;AAC1F,SAAO;AAAA,IACL,UAAU,sBAAsB,OAAO,QAAQ;AAAA,IAC/C,MAAM,oBAAoB,OAAO,MAAM,CAAC;AAAA,IACxC,MAAM,gBAAgB,OAAO,IAAI;AAAA,EACnC;AACF;AAEA,SAAS,8BACP,SAC+C;AAC/C,QAAM,WAAW,MAAM,QAAQ,SAAS,QAAQ,IAC5C,QAAQ,SACL,IAAI,CAAC,WAAW;AAAA,IACf,MAAM,OAAO,OAAO,SAAS,WAAW,MAAM,OAAO;AAAA,IACrD,MAAM,cAAc,OAAO,IAAI;AAAA,IAC/B,SAAS,MAAM,QAAQ,OAAO,OAAO,IACjC,MAAM,QAAQ,IAAI,CAAC,UAAU;AAAA,MAC3B,KAAK,iBAAiB,MAAM,GAAG;AAAA,MAC/B,OAAO,iBAAiB,MAAM,KAAK;AAAA,MACnC,GAAI,MAAM,YAAY,EAAE,WAAW,KAAK,IAAI,CAAC;AAAA,IAC/C,EAAE,IACF,CAAC;AAAA,IACL,GAAI,OAAO,mBAAmB,SAC1B,EAAE,gBAAgB,iBAAiB,MAAM,cAAc,EAAE,IACzD,CAAC;AAAA,IACL,GAAI,OAAO,eAAe,SACtB,EAAE,YAAY,iBAAiB,MAAM,UAAU,EAAE,IACjD,CAAC;AAAA,IACL,GAAI,OAAO,OAAO,oBAAoB,YAAY,MAAM,gBAAgB,SAAS,IAC7E,EAAE,iBAAiB,MAAM,gBAAgB,IACzC,CAAC;AAAA,IACL,GAAI,OAAO,OAAO,aAAa,YAAY,MAAM,SAAS,SAAS,IAC/D,EAAE,UAAU,MAAM,SAAS,IAC3B,CAAC;AAAA,EACP,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,IAC5E,CAAC;AAEL,QAAM,cACJ,SAAS,eAAe,OAAO,QAAQ,gBAAgB,WACnD,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,WAAW,EAC/B,OAAO,CAAC,CAAC,IAAI,MAAM,OAAO,SAAS,YAAY,KAAK,SAAS,CAAC,EAC9D,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,oBAAoB,IAAI,CAAC,CAAC,EACvD,OAAO,CAAC,UAAgD,MAAM,CAAC,MAAM,IAAI,EACzE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;AAAA,EAC5C,IACA;AAEN,MAAI,SAAS,WAAW,MAAM,CAAC,eAAe,OAAO,KAAK,WAAW,EAAE,WAAW,IAAI;AACpF,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAI,SAAS,SAAS,IAAI,EAAE,SAAS,IAAI,CAAC;AAAA,IAC1C,GAAI,eAAe,OAAO,KAAK,WAAW,EAAE,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;AAAA,EAC9E;AACF;AAEA,SAAS,mBAAmB,MAA8C;AACxE,QAAM,wBAAwB,yBAAyB,MAAM,eAAe;AAC5E,QAAM,0BAA0B,8BAA8B,MAAM,aAAa;AACjF,QAAM,qBAAqB,kBAAkB,MAAM,QAAQ;AAC3D,QAAM,4BAA4B,yBAAyB,MAAM,eAAe;AAEhF,SAAO;AAAA,IACL,OAAO,eAAe,MAAM,KAAK;AAAA,IACjC,MAAM,oBAAoB,MAAM,MAAM,CAAC;AAAA,IACvC,UAAU,sBAAsB,MAAM,QAAQ;AAAA,IAC9C,WAAW,gBAAgB,MAAM,SAAS;AAAA,IAC1C,GAAI,4BAA4B,EAAE,iBAAiB,0BAA0B,IAAI,CAAC;AAAA,IAClF,GAAI,MAAM,QAAQ,MAAM,SAAS,KAAK,KAAK,UAAU,SAAS,IAC1D,EAAE,WAAW,KAAK,UAAU,IAAI,uBAAuB,EAAE,IACzD,CAAC;AAAA,IACL,GAAI,qBAAqB,EAAE,UAAU,mBAAmB,IAAI,CAAC;AAAA,IAC7D,GAAI,MAAM,gBAAgB,SAAY,EAAE,aAAa,iBAAiB,KAAK,WAAW,EAAE,IAAI,CAAC;AAAA,IAC7F,GAAI,0BAA0B,SAAY,EAAE,iBAAiB,sBAAsB,IAAI,CAAC;AAAA,IACxF,GAAI,0BAA0B,EAAE,eAAe,wBAAwB,IAAI,CAAC;AAAA,EAC9E;AACF;AAEA,SAAS,yBACP,OAC4B;AAC5B,QAAM,0BAA0B,oBAAI,IAAY;AAChD,QAAM,wBAAwB,oBAAI,IAQhC;AACF,aAAW,QAAQ,OAAO;AACxB,eAAW,UAAU,KAAK,YAAY,CAAC,GAAG;AACxC,YAAM,QACJ,sBAAsB,IAAI,OAAO,QAAQ,KAAK;AAAA,QAC5C,aAAa;AAAA,QACb,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,MACnB;AACF,UAAI,OAAO,SAAS,eAAe,OAAO,SAAS,cAAc;AAC/D,gCAAwB,IAAI,OAAO,QAAQ;AAAA,MAC7C;AACA,UAAI,OAAO,SAAS,YAAa,OAAM,cAAc;AACrD,UAAI,OAAO,SAAS,aAAc,OAAM,eAAe;AACvD,UAAI,OAAO,SAAS,gBAAiB,OAAM,kBAAkB;AAC7D,UAAI,OAAO,SAAS,gBAAiB,OAAM,kBAAkB;AAC7D,4BAAsB,IAAI,OAAO,UAAU,KAAK;AAAA,IAClD;AAAA,EACF;AACA,MAAI,wBAAwB,SAAS,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,QAAI,CAAC,KAAK,UAAU,QAAQ;AAC1B,aAAO;AAAA,IACT;AACA,UAAM,WAAW,KAAK,SAAS,OAAO,CAAC,WAAW;AAChD,YAAM,QAAQ,sBAAsB,IAAI,OAAO,QAAQ;AACvD,UAAI,wBAAwB,IAAI,OAAO,QAAQ,GAAG;AAChD,eAAO,OAAO,SAAS,kBAAkB,OAAO,SAAS;AAAA,MAC3D;AACA,UACE,OAAO,SAAS,mBAChB,OAAO,mBACP,CAAC,MAAM,eACP,CAAC,MAAM,cACP;AACA,eAAO;AAAA,MACT;AACA,UACE,OAAO,SAAS,kBAChB,OAAO,mBACP,CAAC,MAAM,mBACP,CAAC,MAAM,eACP,CAAC,MAAM,cACP;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AACD,QAAI,SAAS,WAAW,KAAK,SAAS,QAAQ;AAC5C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAI,SAAS,SAAS,IAAI,EAAE,UAAU,SAAS,IAAI,CAAC;AAAA,MACpD,GAAI,SAAS,WAAW,IAAI,EAAE,UAAU,OAAU,IAAI,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,8BACd,UACA,QAC4B;AAC5B,QAAM,qBAAqB;AAAA,IACzB,MAAM,QAAQ,OAAO,KAAK,IAAI,OAAO,MAAM,IAAI,kBAAkB,IAAI,CAAC;AAAA,EACxE;AACA,QAAM,gBACJ,OAAO,OAAO,kBAAkB,YAAY,OAAO,SAAS,OAAO,aAAa,IAC5E,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,aAAa,CAAC,IAC5C;AACN,QAAM,kBACJ,kBAAkB,UAAa,mBAAmB,SAAS;AAC7D,QAAM,kBACJ,mBAAmB,kBAAkB,SACjC,mBAAmB,MAAM,GAAG,aAAa,IACzC;AACN,QAAM,iBACJ,OAAO,OAAO,mBAAmB,YAAY,OAAO,SAAS,OAAO,cAAc,IAC9E,KAAK,MAAM,OAAO,cAAc,IAChC,gBAAgB,OAAO,CAAC,SAAS,KAAK,UAAU,MAAM,EAAE;AAE9D,QAAM,oBAAoB,MAAM,QAAQ,OAAO,aAAa,IACxD,OAAO,cAAc,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,IAC/C,CAAC;AAEL,SAAO;AAAA,IACL,eAAe;AAAA,IACf;AAAA,IACA,SAAS,QAAQ,OAAO,OAAO;AAAA,IAC/B,GAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,QAAQ,IACrD,EAAE,QAAQ,iBAAiB,OAAO,MAAM,EAAE,IAC1C,CAAC;AAAA,IACL,GAAI,OAAO,OAAO,UAAU,YAAY,OAAO,MAAM,SAAS,IAC1D,EAAE,OAAO,OAAO,MAAM,IACtB,CAAC;AAAA,IACL,GAAI,OAAO,OAAO,cAAc,YAAY,OAAO,SAAS,OAAO,SAAS,IACxE,EAAE,WAAW,KAAK,MAAM,OAAO,SAAS,EAAE,IAC1C,CAAC;AAAA,IACL,eAAe;AAAA,IACf,OAAO;AAAA,IACP,GAAK,OAAO,uBAAuB,UAAa,kBAC5C,EAAE,oBAAoB,QAAQ,OAAO,kBAAkB,KAAK,gBAAgB,IAC5E,CAAC;AAAA,IACL,GAAI,OAAO,OAAO,kBAAkB,YAAY,OAAO,cAAc,SAAS,IAC1E,EAAE,eAAe,OAAO,cAAc,IACtC,CAAC;AAAA,IACL,gBAAgB,KAAK,IAAI,GAAG,cAAc;AAAA,IAC1C,gBAAgB,gBAAgB;AAAA,EAClC;AACF;AAEO,SAAS,oCAAoC,OAAwB;AAC1E,SAAO,KAAK,UAAU,iBAAiB,KAAK,GAAG,MAAM,CAAC;AACxD;;;AC1fA,SAAS,0BAA0B,OAA2D;AAC5F,SAAO;AAAA,IACL,UAAU,MAAM;AAAA,IAChB,MAAM,MAAM;AAAA,IACZ,MAAM,MAAM;AAAA,EACd;AACF;AAEA,SAAS,qBAAqB,MAA8C;AAC1E,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,OAAO,KAAK;AAAA,IACZ,WAAW,KAAK;AAAA,IAChB,UAAU,KAAK;AAAA,IACf,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAU,IAAI,yBAAyB,EAAE,IAAI,CAAC;AAAA,IACrF,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAS,IAAI,CAAC;AAAA,IACnD,GAAI,KAAK,gBAAgB,SAAY,EAAE,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,IAC1E,GAAI,KAAK,oBAAoB,SAAY,EAAE,iBAAiB,KAAK,gBAAgB,IAAI,CAAC;AAAA,IACtF,GAAI,KAAK,gBAAgB,EAAE,eAAe,KAAK,cAA6C,IAAI,CAAC;AAAA,EACnG;AACF;AAEO,SAAS,0BACd,UACA,QACiB;AACjB,QAAM,aAAa,8BAA8B,UAAU,MAAM;AACjE,QAAM,eAA+B,WAAW,MAAM,IAAI,oBAAoB;AAE9E,SAAO;AAAA,IACL,SAAS,WAAW;AAAA,IACpB,GAAI,OAAO,UAAU,eAAe,KAAK,YAAY,QAAQ,IAAI,EAAE,QAAQ,WAAW,OAAO,IAAI,CAAC;AAAA,IAClG,GAAI,WAAW,QAAQ,EAAE,OAAO,WAAW,MAAM,IAAI,CAAC;AAAA,IACtD,GAAI,WAAW,cAAc,SAAY,EAAE,WAAW,WAAW,UAAU,IAAI,CAAC;AAAA,IAChF,OAAO;AAAA,IACP,iBACE,OAAO,OAAO,oBAAoB,YAAY,OAAO,SAAS,OAAO,eAAe,IAChF,OAAO,kBACP;AAAA,IACN,eAAe,WAAW;AAAA,IAC1B,GAAI,WAAW,uBAAuB,SAAY,EAAE,oBAAoB,WAAW,mBAAmB,IAAI,CAAC;AAAA,IAC3G,GAAI,WAAW,gBACX,EAAE,eAAe,WAAW,cAAkD,IAC9E,CAAC;AAAA,IACL,gBAAgB,WAAW;AAAA,IAC3B,gBAAgB,aAAa;AAAA,EAC/B;AACF;;;ACzDO,SAAS,gCAAgC,QAA0C;AACxF,SAAO,0BAA0B,UAAU,MAAM;AACnD;;;ACDO,SAAS,oCACd,UACA,QACiB;AACjB,SAAO,0BAA0B,UAAU,MAAM;AACnD;;;ACcA,SAAS,YAAY,KAAsB;AACzC,MAAI,QAAQ,OAAQ,QAAO;AAC3B,MAAI,QAAQ,OAAQ,QAAO;AAC3B,MAAI,QAAQ,QAAS,QAAO;AAC5B,MAAI,UAAU,KAAK,GAAG,EAAG,QAAO,OAAO,SAAS,KAAK,EAAE;AACvD,MAAI,eAAe,KAAK,GAAG,EAAG,QAAO,OAAO,WAAW,GAAG;AAC1D,MACG,IAAI,WAAW,GAAG,KAAK,IAAI,SAAS,GAAG,KACvC,IAAI,WAAW,GAAG,KAAK,IAAI,SAAS,GAAG,KACvC,IAAI,WAAW,GAAG,KAAK,IAAI,SAAS,GAAG,GACxC;AACA,QAAI;AACF,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB,QAAQ;AAAA,IAER;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,UAA2C;AACrE,QAAM,YAAqC,CAAC;AAC5C,QAAM,UAAU,MAAM,KAAK,SAAS,SAAS,+BAA+B,CAAC;AAC7E,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,UAAM,QAAQ,QAAQ,KAAK;AAC3B,UAAM,SAAS,MAAM,CAAC;AACtB,UAAM,cAAc,MAAM,SAAS,KAAK,MAAM,CAAC,EAAE;AACjD,UAAM,WAAW,QAAQ,IAAI,QAAQ,SAAU,QAAQ,QAAQ,CAAC,EAAE,SAAS,SAAS,SAAU,SAAS;AACvG,UAAM,WAAW,SAAS,MAAM,YAAY,QAAQ,EAAE,KAAK;AAC3D,QAAI,CAAC,UAAU,aAAa,OAAW;AACvC,QAAI,WAAW,SAAU;AACzB,cAAU,OAAO,WAAW,KAAK,GAAG,CAAC,IAAI,YAAY,QAAQ;AAAA,EAC/D;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,OAAkD;AAC7E,QAAM,QAAQ,MAAM,MAAM,0BAA0B;AACpD,MAAI,CAAC,OAAO;AACV,WAAO,EAAE,MAAM,GAAG,SAAS,MAAM;AAAA,EACnC;AACA,SAAO;AAAA,IACL,MAAM,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA,IAClC,SAAS,MAAM,CAAC,KAAK;AAAA,EACvB;AACF;AAEA,SAAS,oBAAoB,MAAc,gBAAoE;AAC7G,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,MAAI,UAAU;AACd,SAAO,QAAQ,KAAK,QAAQ;AAC1B,UAAM,UAAU,KAAK,KAAK;AAC1B,UAAM,OAAO,QAAQ,IAAI,KAAK,SAAS,KAAK,QAAQ,CAAC,IAAI;AAEzD,QAAI,SAAS;AACX,UAAI,YAAY,OAAO,SAAS,KAAK;AACnC,kBAAU;AACV,iBAAS;AACT;AAAA,MACF;AACA,eAAS;AACT;AAAA,IACF;AAEA,QAAI,YAAY,OAAO,SAAS,KAAK;AACnC,gBAAU;AACV,eAAS;AACT;AAAA,IACF;AAEA,QAAI,YAAY,OAAO,SAAS,KAAK;AACnC;AAAA,IACF;AAEA,cAAU;AACV,aAAS;AAAA,EACX;AAEA,SAAO,EAAE,MAAM,QAAQ,gBAAgB,QAAQ;AACjD;AAEA,SAAS,wBAAwB,MAAuB;AACtD,QAAM,UAAU,KAAK,KAAK;AAC1B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,QAAQ,WAAW,GAAG,EAAG,QAAO;AACpC,MAAI,CAAC,QAAQ,SAAS,GAAG,KAAK,CAAC,QAAQ,SAAS,GAAG,EAAG,QAAO;AAC7D,MAAI,QAAQ,SAAS,GAAG,EAAG,QAAO;AAClC,MAAI,QAAQ,SAAS,IAAI,EAAG,QAAO;AACnC,MAAI,gEAAgE,KAAK,OAAO,GAAG;AACjF,WAAO;AAAA,EACT;AACA,MAAI,CAAC,uCAAuC,KAAK,OAAO,GAAG;AACzD,WAAO;AAAA,EACT;AACA,SAAO,cAAc,KAAK,OAAO;AACnC;AAEA,SAAS,eAAe,YAA4D;AAClF,MAAI,OAAO,eAAe,YAAY,WAAW,WAAW,GAAG;AAC7D,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,WAAW,MAAM,OAAO;AACtC,QAAM,aAAa,oBAAI,IAAY;AACnC,MAAI,iBAAiB;AAErB,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,EAAE,MAAM,gBAAgB,mBAAmB,IAAI,oBAAoB,MAAM,KAAK,KAAK,IAAI,cAAc;AAC3G,qBAAiB;AACjB,QAAI,KAAK,KAAK,EAAE,SAAS,GAAG;AAC1B,iBAAW,IAAI,QAAQ,CAAC;AAAA,IAC1B;AAAA,EACF;AAEA,MAAI,WAAW,SAAS,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,QAAM,0BAAgD,IAAI,MAAM,MAAM,SAAS,CAAC,EAAE,KAAK,IAAI;AAC3F,MAAI,iBAAgC;AACpC,WAAS,OAAO,MAAM,QAAQ,QAAQ,GAAG,QAAQ,GAAG;AAClD,QAAI,WAAW,IAAI,IAAI,GAAG;AACxB,uBAAiB;AAAA,IACnB;AACA,4BAAwB,IAAI,IAAI;AAAA,EAClC;AAEA,QAAM,+BAAqD,IAAI,MAAM,MAAM,SAAS,CAAC,EAAE,KAAK,IAAI;AAChG,MAAI,qBAAoC;AACxC,WAAS,OAAO,GAAG,QAAQ,MAAM,QAAQ,QAAQ,GAAG;AAClD,QAAI,WAAW,IAAI,IAAI,GAAG;AACxB,2BAAqB;AAAA,IACvB;AACA,iCAA6B,IAAI,IAAI;AAAA,EACvC;AAEA,QAAM,QAAQ,oBAAI,IAAoB;AACtC,WAAS,OAAO,GAAG,QAAQ,MAAM,QAAQ,QAAQ,GAAG;AAClD,QAAI,WAAW,IAAI,IAAI,EAAG;AAC1B,UAAM,UAAU,wBAAwB,IAAI;AAC5C,UAAM,WAAW,6BAA6B,IAAI;AAClD,UAAM,SAAS,WAAW;AAC1B,QAAI,WAAW,QAAQ,WAAW,MAAM;AACtC,YAAM,IAAI,MAAM,MAAM;AAAA,IACxB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,8BAA8B,YAAoD;AACzF,MAAI,OAAO,eAAe,YAAY,WAAW,WAAW,GAAG;AAC7D,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,oBAAI,IAAY;AACzC,QAAM,QAAQ,WAAW,MAAM,OAAO;AACtC,MAAI,iBAAiB;AACrB,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,EAAE,MAAM,gBAAgB,mBAAmB,IAAI,oBAAoB,MAAM,KAAK,KAAK,IAAI,cAAc;AAC3G,qBAAiB;AACjB,QAAI,wBAAwB,IAAI,GAAG;AACjC,uBAAiB,IAAI,QAAQ,CAAC;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,SAAwD;AAChF,QAAM,6BAA6B,CAAC,SAClC,sBAAsB,KAAK,IAAI;AAEjC,QAAM,WAAW,QAAQ,MAAM,0DAA0D;AACzF,MAAI,UAAU;AACZ,WAAO,CAAC;AAAA,MACN,UAAU,SAAS,CAAC;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,CAAC,OAAO,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC;AAAA,MAC5E,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACA,QAAM,cAAc,QAAQ,MAAM,iDAAiD;AACnF,MAAI,aAAa;AACf,WAAO,CAAC;AAAA,MACN,UAAU,YAAY,CAAC;AAAA,MACvB,MAAM;AAAA,MACN,SAAS,CAAC,OAAO,SAAS,YAAY,CAAC,GAAG,EAAE,CAAC;AAAA,MAC7C,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACA,QAAM,YAAY,QAAQ,MAAM,+DAA+D;AAC/F,MAAI,WAAW;AACb,WAAO,CAAC;AAAA,MACN,UAAU,UAAU,CAAC;AAAA,MACrB,MAAM;AAAA,MACN,SAAS,CAAC,OAAO,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,SAAS,UAAU,CAAC,GAAG,EAAE,CAAC;AAAA,MAC9E,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACA,QAAM,eAAe,QAAQ,MAAM,sDAAsD;AACzF,MAAI,cAAc;AAChB,QAAI,2BAA2B,aAAa,CAAC,CAAC,GAAG;AAC/C,aAAO;AAAA,IACT;AACA,WAAO,CAAC;AAAA,MACN,UAAU,aAAa,CAAC;AAAA,MACxB,MAAM;AAAA,MACN,SAAS,CAAC,OAAO,SAAS,aAAa,CAAC,GAAG,EAAE,CAAC;AAAA,MAC9C,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACA,QAAM,eAAe,QAAQ,MAAM,mEAAmE;AACtG,MAAI,cAAc;AAChB,WAAO,CAAC;AAAA,MACN,UAAU,aAAa,CAAC;AAAA,MACxB,MAAM;AAAA,MACN,QAAQ,aAAa,CAAC;AAAA,MACtB,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,SAAiG;AAC5H,QAAM,QAAQ,QAAQ,MAAM,0DAA0D;AACtF,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,WAAW,MAAM,CAAC;AAAA,IAClB,UAAU,MAAM,CAAC;AAAA,IACjB,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,EAC5B;AACF;AAEA,SAAS,iBAAiB,SAA0F;AAClH,QAAM,QAAQ,QAAQ,MAAM,8CAA8C;AAC1E,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,UAAU,MAAM,CAAC;AAAA,IACjB,eAAe,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,EACpC;AACF;AAEA,SAAS,sBAAsB,SAA6E;AAC1G,QAAM,QAAQ,QAAQ,MAAM,0EAA0E;AACtG,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,UAAU,MAAM,CAAC;AAAA,IACjB,OAAO,MAAM,CAAC;AAAA,IACd,OAAO,YAAY,MAAM,CAAC,CAAC;AAAA,EAC7B;AACF;AAEA,SAAS,wBAAwB,OAAyF;AACxH,SAAO;AAAA,IACL,aAAa;AAAA,MACX,CAAC,MAAM,QAAQ,GAAG;AAAA,IACpB;AAAA,IACA,UAAU;AAAA,MACR;AAAA,QACE,MAAM,MAAM;AAAA,QACZ,MAAM;AAAA,QACN,iBACE,MAAM,UAAU,UAAU,MAAM,UAAU,SACtC,aACA,MAAM,UAAU,UAAU,MAAM,UAAU,UACxC,aACA;AAAA,QACR,UAAU,GAAG,MAAM,QAAQ;AAAA,QAC3B,gBAAgB,MAAM;AAAA,QACtB,SAAS,CAAC,EAAE,KAAK,MAAM,OAAO,OAAO,MAAM,OAAO,WAAW,KAAK,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,gBACP,MACA,OACS;AACT,SAAO,KAAK,UAAU,QAAQ,CAAC,CAAC,MAAM,KAAK,UAAU,SAAS,CAAC,CAAC;AAClE;AAEA,SAAS,2BACP,MACA,OACyC;AACzC,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,aAAa;AAAA,MACX,GAAI,KAAK,eAAe,CAAC;AAAA,MACzB,GAAI,MAAM,eAAe,CAAC;AAAA,IAC5B;AAAA,IACA,UAAU;AAAA,MACR,GAAI,KAAK,YAAY,CAAC;AAAA,MACtB,GAAI,MAAM,YAAY,CAAC;AAAA,IACzB;AAAA,EACF;AACF;AAEA,SAAS,8BAA8B,OAAuB,UAAiC;AAC7F,MAAI,SAAS,UAAU,QAAQ;AAC7B,WAAO;AAAA,EACT;AACA,QAAM,WAAW,MAAM,GAAG,EAAE;AAC5B,MAAI,CAAC,YAAY,SAAS,UAAU,QAAQ;AAC1C,WAAO;AAAA,EACT;AACA,MAAI,SAAS,SAAS,SAAS,QAAQ,SAAS,aAAa,SAAS,UAAU;AAC9E,WAAO;AAAA,EACT;AACA,MAAI,CAAC,gBAAgB,SAAS,WAAW,SAAS,SAAS,GAAG;AAC5D,WAAO;AAAA,EACT;AAEA,WAAS,YAAY,EAAE,GAAI,SAAS,aAAa,CAAC,GAAI,GAAI,SAAS,aAAa,CAAC,EAAG;AACpF,MAAI,SAAS,UAAU,QAAQ;AAC7B,aAAS,WAAW,CAAC,GAAI,SAAS,YAAY,CAAC,GAAI,GAAG,SAAS,QAAQ;AAAA,EACzE;AACA,WAAS,gBAAgB,2BAA2B,SAAS,eAAe,SAAS,aAAa;AAClG,SAAO;AACT;AAEA,SAAS,0BACP,WACqC;AACrC,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AACA,QAAM,6BAA6B,CAAC,SAClC,sBAAsB,KAAK,IAAI;AACjC,QAAM,UAAU,OAAO,QAAQ,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM;AAClE,QAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC/C,aAAO;AAAA,IACT;AACA,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,aAAO;AAAA,IACT;AACA,QAAI,MAAM,QAAQ,MAAM,CAAC,CAAC,GAAG;AAC3B,aAAO;AAAA,IACT;AACA,WAAO,CAAC,2BAA2B,IAAI;AAAA,EACzC,CAAC;AACD,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AACA,SAAO,OAAO,YAAY,OAAO;AACnC;AAEA,SAAS,oBACP,OACA,MACA,iBACM;AACN,QAAM,WAAyB,gBAAgB,SAAS,IACpD,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,eAAe,EAAE,IAC1C;AACJ,kBAAgB,SAAS;AACzB,MAAI,CAAC,8BAA8B,OAAO,QAAQ,GAAG;AACnD,UAAM,KAAK,QAAQ;AAAA,EACrB;AACF;AAEA,SAAS,kCACP,OACA,MACA,iBACA,kBACA,OACS;AACT,QAAM,YAAY,MAAM,GAAG,EAAE;AAC7B,MAAI,CAAC,aAAa,UAAU,UAAU,QAAQ;AAC5C,WAAO;AAAA,EACT;AACA,MAAI,UAAU,SAAS,QAAQ,UAAU,aAAa,iBAAiB;AACrE,WAAO;AAAA,EACT;AACA,MAAI,CAAC,gBAAgB,UAAU,WAAW,gBAAgB,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,YAAU,YAAY,EAAE,GAAI,UAAU,aAAa,CAAC,GAAI,GAAI,MAAM,aAAa,CAAC,EAAG;AACnF,MAAI,MAAM,UAAU,QAAQ;AAC1B,cAAU,WAAW,CAAC,GAAI,UAAU,YAAY,CAAC,GAAI,GAAG,MAAM,QAAQ;AAAA,EACxE;AACA,YAAU,gBAAgB,2BAA2B,UAAU,eAAe,MAAM,aAAa;AACjG,SAAO;AACT;AAEA,SAAS,0CACP,OACA,MACA,iBACA,kBACA,UACS;AACT,SAAO,kCAAkC,OAAO,MAAM,iBAAiB,kBAAkB;AAAA,IACvF,WAAW;AAAA,IACX;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AACH;AAEA,SAAS,iBAAiB,QAAkB,YAAqC;AAC/E,QAAM,QAAwB,CAAC;AAC/B,QAAM,YAAqC,CAAC;AAC5C,QAAM,cAAsD,CAAC;AAC7D,QAAM,QAAmD,CAAC;AAC1D,QAAM,kBAA6C,CAAC;AACpD,MAAI,kBAAkB;AACtB,QAAM,YAAY,eAAe,UAAU;AAC3C,QAAM,mBAAmB,8BAA8B,UAAU;AAEjE,aAAW,YAAY,QAAQ;AAC7B,QAAI,aAAa,WAAW,aAAa,QAAS;AAClD,UAAM,WAAW,oBAAoB,QAAQ;AAC7C,UAAM,OAAO,WAAW,IAAI,SAAS,IAAI,KAAK,SAAS;AACvD,UAAM,UAAU,SAAS;AACzB,UAAM,oBAAoB,kBAAkB,IAAI,IAAI,MAAM;AAE1D,QAAI,QAAQ,WAAW,OAAO,GAAG;AAC/B,YAAM,QAAQ,QAAQ,MAAM,4BAA4B;AACxD,YAAM,eAAe,QAAQ,CAAC,KAAK;AACnC,YAAM,eAAe,QAAQ,CAAC,KAAK;AACnC,aAAO,OAAO,WAAW,mBAAmB,YAAY,CAAC;AACzD,wBAAkB,gBAAgB;AAClC,YAAM,KAAK,EAAE,UAAU,iBAAiB,KAAK,CAAC;AAC9C,0BAAoB,OAAO;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW,EAAE,GAAG,UAAU;AAAA,QAC1B,WAAW,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE;AAAA,MAC5F,GAAG,eAAe;AAClB;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,SAAS,GAAG;AACjC,YAAM,QAAQ,QAAQ,MAAM,kBAAkB;AAC9C,YAAM,eAAe,QAAQ,CAAC,KAAK;AACnC,YAAM,kBAAkB,iBAAiB,aACrC,EAAE,GAAG,UAAU,IACd,0BAA0B,SAAS,KAAK,CAAC;AAC9C,0BAAoB,OAAO;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,QACP,UAAU,gBAAgB;AAAA,QAC1B,WAAW;AAAA,QACX,WAAW,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE;AAAA,MAC5F,GAAG,eAAe;AAClB,YAAM,IAAI;AACV,wBAAkB,MAAM,MAAM,SAAS,CAAC,GAAG,YAAY;AACvD;AAAA,IACF;AAEA,QAAI,mBAAmB;AACrB;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,0BAAoB,OAAO;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW,EAAE,GAAG,UAAU;AAAA,QAC1B,GAAI,MAAM,SAAS,IACf,EAAE,WAAW,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE,EAAE,IAC9F,CAAC;AAAA,MACP,GAAG,eAAe;AAClB;AAAA,IACF;AAEA,UAAM,iBAAiB,oBAAoB,OAAO;AAClD,QAAI,gBAAgB;AAClB,gBAAU,eAAe,QAAQ,IAAI,eAAe;AACpD,kBAAY,eAAe,QAAQ,IAAI,eAAe;AACtD,0BAAoB,OAAO;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW,EAAE,GAAG,UAAU;AAAA,QAC1B,WAAW,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE;AAAA,QAC1F,eAAe;AAAA,UACb,aAAa,EAAE,GAAG,YAAY;AAAA,QAChC;AAAA,MACF,GAAG,eAAe;AAClB;AAAA,IACF;AAEA,UAAM,cAAc,iBAAiB,OAAO;AAC5C,QAAI,aAAa;AACf,gBAAU,YAAY,QAAQ,IAAI,EAAE,SAAS,YAAY,cAAc,YAAY,GAAG,YAAY,QAAQ,UAAU;AACpH,0BAAoB,OAAO;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW,EAAE,GAAG,UAAU;AAAA,QAC1B,WAAW,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE;AAAA,QAC1F,eAAe;AAAA,UACb,aAAa,EAAE,CAAC,YAAY,QAAQ,GAAG,SAAS;AAAA,UAChD,UAAU,CAAC,YAAY,aAAa;AAAA,QACtC;AAAA,MACF,GAAG,eAAe;AAClB;AAAA,IACF;AAEA,UAAM,cAAc,sBAAsB,OAAO;AACjD,QAAI,aAAa;AACf,gBAAU,YAAY,QAAQ,IAAI,EAAE,SAAS,GAAG,YAAY,QAAQ,UAAU;AAC9E,YAAM,mBACJ,MAAM,SAAS,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE,IAAI;AACxG,UAAI,kCAAkC,OAAO,MAAM,iBAAiB,kBAAkB;AAAA,QACpF,WAAW,EAAE,GAAG,UAAU;AAAA,QAC1B,UAAU;AAAA,QACV,eAAe,wBAAwB,WAAW;AAAA,MACpD,CAAC,GAAG;AACF;AAAA,MACF;AACA,0BAAoB,OAAO;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW,EAAE,GAAG,UAAU;AAAA,QAC1B,WAAW,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE;AAAA,QAC1F,eAAe,wBAAwB,WAAW;AAAA,MACpD,GAAG,eAAe;AAClB;AAAA,IACF;AAEA,WAAO,OAAO,WAAW,mBAAmB,OAAO,CAAC;AACpD,UAAM,WAAW,iBAAiB,OAAO;AACzC,QAAI,UAAU;AACZ,YAAM,mBACJ,MAAM,SAAS,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE,IAAI;AACxG,UAAI,0CAA0C,OAAO,MAAM,iBAAiB,kBAAkB,QAAQ,GAAG;AACvG;AAAA,MACF;AACA,sBAAgB,KAAK,GAAG,QAAQ;AAChC;AAAA,IACF;AACA,wBAAoB,OAAO;AAAA,MACzB;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,MACV,WAAW,EAAE,GAAG,UAAU;AAAA,MAC1B,GAAI,MAAM,SAAS,IACf,EAAE,WAAW,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,CAAC,EAAE,EAAE,EAAE,IAC9F,CAAC;AAAA,IACP,GAAG,eAAe;AAAA,EACpB;AAEA,MAAI,gBAAgB,SAAS,KAAK,MAAM,SAAS,GAAG;AAClD,UAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,SAAK,WAAW,CAAC,GAAI,KAAK,YAAY,CAAC,GAAI,GAAG,eAAe;AAAA,EAC/D;AAEA,SAAO;AACT;AAEO,SAAS,yBACd,QACA,QACA,kBAAkB,GAClB,oBACA,eACA,eACA,YACiB;AACjB,QAAM,QAAQ,iBAAiB,QAAQ,UAAU;AACjD,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,CAAC;AAAA,IAChB,GAAI,uBAAuB,SAAY,EAAE,mBAAmB,IAAI,CAAC;AAAA,IACjE,GAAI,kBAAkB,SAAY,EAAE,cAAc,IAAI,CAAC;AAAA,IACvD,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,IACzC,gBAAgB,MAAM,OAAO,CAAC,SAAS,KAAK,UAAU,MAAM,EAAE;AAAA,IAC9D,gBAAgB,MAAM;AAAA,EACxB;AACF;AAEO,SAAS,2BAA2B,QAAkD;AAC3F,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,8BAA8B,QAA0C;AACtF,SAAO,0BAA0B,QAAQ,MAAM;AACjD;","names":[]}
1
+ {"version":3,"sources":["../packages/harness-core/src/trace-contract.ts","../packages/harness-core/src/trace-adapters/shared.ts","../packages/harness-core/src/trace-adapters/python.ts","../packages/harness-core/src/trace-adapters/javascript.ts","../packages/harness-core/src/trace-adapters/java.ts"],"sourcesContent":["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-04-21';\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 if (normalized.length === 0) {\n return undefined;\n }\n\n const statsByVariable = new Map<\n string,\n { hasCellRead: boolean; hasCellWrite: boolean }\n >();\n for (const access of normalized) {\n const stats =\n statsByVariable.get(access.variable) ?? { hasCellRead: false, hasCellWrite: false };\n if (access.kind === 'cell-read') stats.hasCellRead = true;\n if (access.kind === 'cell-write') stats.hasCellWrite = true;\n statsByVariable.set(access.variable, stats);\n }\n\n const deduped = new Set<string>();\n const collapsed = normalized.filter((access) => {\n const stats = statsByVariable.get(access.variable);\n if (access.kind === 'indexed-read' && (stats?.hasCellRead || stats?.hasCellWrite)) {\n return false;\n }\n if (access.kind === 'indexed-write' && stats?.hasCellWrite) {\n return false;\n }\n const key = JSON.stringify([\n access.variable,\n access.kind,\n access.indices ?? null,\n access.pathDepth ?? null,\n access.method ?? null,\n ]);\n if (deduped.has(key)) {\n return false;\n }\n deduped.add(key);\n return true;\n });\n\n return collapsed.length > 0 ? collapsed : 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\nfunction collapseTraceAccessNoise(\n trace: RuntimeTraceContractStep[]\n): RuntimeTraceContractStep[] {\n const variablesWithCellAccess = new Set<string>();\n const accessStatsByVariable = new Map<\n string,\n {\n hasCellRead: boolean;\n hasCellWrite: boolean;\n hasMutatingCall: boolean;\n hasIndexedWrite: boolean;\n }\n >();\n for (const step of trace) {\n for (const access of step.accesses ?? []) {\n const stats =\n accessStatsByVariable.get(access.variable) ?? {\n hasCellRead: false,\n hasCellWrite: false,\n hasMutatingCall: false,\n hasIndexedWrite: false,\n };\n if (access.kind === 'cell-read' || access.kind === 'cell-write') {\n variablesWithCellAccess.add(access.variable);\n }\n if (access.kind === 'cell-read') stats.hasCellRead = true;\n if (access.kind === 'cell-write') stats.hasCellWrite = true;\n if (access.kind === 'mutating-call') stats.hasMutatingCall = true;\n if (access.kind === 'indexed-write') stats.hasIndexedWrite = true;\n accessStatsByVariable.set(access.variable, stats);\n }\n }\n if (variablesWithCellAccess.size === 0) {\n return trace;\n }\n\n return trace.map((step) => {\n if (!step.accesses?.length) {\n return step;\n }\n const filtered = step.accesses.filter((access) => {\n const stats = accessStatsByVariable.get(access.variable);\n if (variablesWithCellAccess.has(access.variable)) {\n return access.kind !== 'indexed-read' && access.kind !== 'indexed-write';\n }\n if (\n access.kind === 'mutating-call' &&\n stats?.hasIndexedWrite &&\n !stats.hasCellRead &&\n !stats.hasCellWrite\n ) {\n return false;\n }\n if (\n access.kind === 'indexed-read' &&\n stats?.hasMutatingCall &&\n !stats.hasIndexedWrite &&\n !stats.hasCellRead &&\n !stats.hasCellWrite\n ) {\n return false;\n }\n return true;\n });\n if (filtered.length === step.accesses.length) {\n return step;\n }\n return {\n ...step,\n ...(filtered.length > 0 ? { accesses: filtered } : {}),\n ...(filtered.length === 0 ? { accesses: undefined } : {}),\n };\n });\n}\n\nexport function normalizeRuntimeTraceContract(\n language: Language,\n result: ExecutionResult\n): RuntimeTraceContractResult {\n const rawNormalizedTrace = collapseTraceAccessNoise(\n Array.isArray(result.trace) ? result.trace.map(normalizeTraceStep) : []\n );\n const maxTraceSteps =\n typeof result.maxTraceSteps === 'number' && Number.isFinite(result.maxTraceSteps)\n ? Math.max(1, Math.floor(result.maxTraceSteps))\n : undefined;\n const traceWasClipped =\n maxTraceSteps !== undefined && rawNormalizedTrace.length > maxTraceSteps;\n const normalizedTrace =\n traceWasClipped && maxTraceSteps !== undefined\n ? rawNormalizedTrace.slice(0, maxTraceSteps)\n : rawNormalizedTrace;\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 || traceWasClipped)\n ? { traceLimitExceeded: Boolean(result.traceLimitExceeded) || traceWasClipped }\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 { ExecutionResult } from '../types';\nimport { adaptTraceExecutionResult } from './shared';\n\nexport function adaptPythonTraceExecutionResult(result: ExecutionResult): ExecutionResult {\n return adaptTraceExecutionResult('python', result);\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 ExecutionResult,\n RawTraceStep,\n RuntimeHashMapVisualization,\n RuntimeTraceAccessEvent,\n RuntimeVisualizationPayload,\n} from '../types';\nimport { normalizeRuntimeTraceContract, type RuntimeTraceContractResult } from '../trace-contract';\nimport { adaptTraceExecutionResult } from './shared';\n\nexport interface JavaTraceResult {\n output: unknown;\n events: string[];\n sourceText?: string;\n traceLimitExceeded?: boolean;\n timeoutReason?: ExecutionResult['timeoutReason'];\n}\n\nexport interface JavaTraceContractResult\n extends Omit<RuntimeTraceContractResult, 'language'> {\n language: 'java';\n}\n\nfunction parseScalar(raw: string): unknown {\n if (raw === 'null') return null;\n if (raw === 'true') return true;\n if (raw === 'false') return false;\n if (/^-?\\d+$/.test(raw)) return Number.parseInt(raw, 10);\n if (/^-?\\d+\\.\\d+$/.test(raw)) return Number.parseFloat(raw);\n if (\n (raw.startsWith('\"') && raw.endsWith('\"')) ||\n (raw.startsWith('[') && raw.endsWith(']')) ||\n (raw.startsWith('{') && raw.endsWith('}'))\n ) {\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n // Fall through to raw string return.\n }\n }\n return raw;\n}\n\nexport function normalizeJavaSerializedResult(output: unknown): unknown {\n if (typeof output !== 'string') {\n return output;\n }\n try {\n return JSON.parse(output) as unknown;\n } catch {\n return output;\n }\n}\n\nfunction parseKeyValuePairs(fragment: string): Record<string, unknown> {\n const variables: Record<string, unknown> = {};\n const matches = Array.from(fragment.matchAll(/\\b([A-Za-z_][A-Za-z0-9_.]*)=/g));\n for (let index = 0; index < matches.length; index += 1) {\n const match = matches[index];\n const rawKey = match[1];\n const valueStart = (match.index ?? 0) + match[0].length;\n const valueEnd = index + 1 < matches.length ? (matches[index + 1].index ?? fragment.length) : fragment.length;\n const rawValue = fragment.slice(valueStart, valueEnd).trim();\n if (!rawKey || rawValue === undefined) continue;\n if (rawKey === 'method') continue;\n variables[rawKey.replaceAll('.', '_')] = parseScalar(rawValue);\n }\n return variables;\n}\n\nfunction extractLineMetadata(event: string): { line: number; payload: string } {\n const match = event.match(/^line=(\\d+)(?:\\s+(.*))?$/);\n if (!match) {\n return { line: 1, payload: event };\n }\n return {\n line: Number.parseInt(match[1], 10),\n payload: match[2] ?? '',\n };\n}\n\nfunction stripInlineComments(line: string, inBlockComment: boolean): { text: string; inBlockComment: boolean } {\n let result = '';\n let index = 0;\n let inBlock = inBlockComment;\n while (index < line.length) {\n const current = line[index];\n const next = index + 1 < line.length ? line[index + 1] : '';\n\n if (inBlock) {\n if (current === '*' && next === '/') {\n inBlock = false;\n index += 2;\n continue;\n }\n index += 1;\n continue;\n }\n\n if (current === '/' && next === '*') {\n inBlock = true;\n index += 2;\n continue;\n }\n\n if (current === '/' && next === '/') {\n break;\n }\n\n result += current;\n index += 1;\n }\n\n return { text: result, inBlockComment: inBlock };\n}\n\nfunction isMethodDeclarationLine(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return false;\n if (trimmed.startsWith('@')) return false;\n if (!trimmed.includes('(') || !trimmed.includes(')')) return false;\n if (trimmed.endsWith(';')) return false;\n if (trimmed.includes('->')) return false;\n if (/^(?:if|for|while|switch|catch|do|try|else|return|throw|new)\\b/.test(trimmed)) {\n return false;\n }\n if (!/[A-Za-z_][A-Za-z0-9_]*\\s*\\([^{};]*\\)/.test(trimmed)) {\n return false;\n }\n return /(?:\\{\\s*)?$/.test(trimmed);\n}\n\nfunction buildLineRemap(sourceText: string | undefined): Map<number, number> | null {\n if (typeof sourceText !== 'string' || sourceText.length === 0) {\n return null;\n }\n\n const lines = sourceText.split(/\\r?\\n/);\n const executable = new Set<number>();\n let inBlockComment = false;\n\n for (let index = 0; index < lines.length; index += 1) {\n const { text, inBlockComment: nextInBlockComment } = stripInlineComments(lines[index] ?? '', inBlockComment);\n inBlockComment = nextInBlockComment;\n if (text.trim().length > 0) {\n executable.add(index + 1);\n }\n }\n\n if (executable.size === 0) {\n return null;\n }\n\n const nextExecutableAtOrAfter: Array<number | null> = new Array(lines.length + 2).fill(null);\n let nextExecutable: number | null = null;\n for (let line = lines.length; line >= 1; line -= 1) {\n if (executable.has(line)) {\n nextExecutable = line;\n }\n nextExecutableAtOrAfter[line] = nextExecutable;\n }\n\n const previousExecutableAtOrBefore: Array<number | null> = new Array(lines.length + 2).fill(null);\n let previousExecutable: number | null = null;\n for (let line = 1; line <= lines.length; line += 1) {\n if (executable.has(line)) {\n previousExecutable = line;\n }\n previousExecutableAtOrBefore[line] = previousExecutable;\n }\n\n const remap = new Map<number, number>();\n for (let line = 1; line <= lines.length; line += 1) {\n if (executable.has(line)) continue;\n const forward = nextExecutableAtOrAfter[line];\n const backward = previousExecutableAtOrBefore[line];\n const target = forward ?? backward;\n if (target !== null && target !== line) {\n remap.set(line, target);\n }\n }\n\n return remap;\n}\n\nfunction buildMethodDeclarationLineSet(sourceText: string | undefined): Set<number> | null {\n if (typeof sourceText !== 'string' || sourceText.length === 0) {\n return null;\n }\n\n const declarationLines = new Set<number>();\n const lines = sourceText.split(/\\r?\\n/);\n let inBlockComment = false;\n for (let index = 0; index < lines.length; index += 1) {\n const { text, inBlockComment: nextInBlockComment } = stripInlineComments(lines[index] ?? '', inBlockComment);\n inBlockComment = nextInBlockComment;\n if (isMethodDeclarationLine(text)) {\n declarationLines.add(index + 1);\n }\n }\n\n return declarationLines;\n}\n\nfunction parseAccessEvent(payload: string): RuntimeTraceAccessEvent[] | undefined {\n const isEphemeralOutputArrayName = (name: string): boolean =>\n /^(output|outputs)$/i.test(name);\n\n const cellRead = payload.match(/^access ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\]\\[(\\d+)\\]=(.+)$/);\n if (cellRead) {\n return [{\n variable: cellRead[1],\n kind: 'cell-read',\n indices: [Number.parseInt(cellRead[2], 10), Number.parseInt(cellRead[3], 10)],\n pathDepth: 2,\n }];\n }\n const indexedRead = payload.match(/^access ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\]=(.+)$/);\n if (indexedRead) {\n return [{\n variable: indexedRead[1],\n kind: 'indexed-read',\n indices: [Number.parseInt(indexedRead[2], 10)],\n pathDepth: 1,\n }];\n }\n const cellWrite = payload.match(/^write-array ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\]\\[(\\d+)\\]=(.+)$/);\n if (cellWrite) {\n return [{\n variable: cellWrite[1],\n kind: 'cell-write',\n indices: [Number.parseInt(cellWrite[2], 10), Number.parseInt(cellWrite[3], 10)],\n pathDepth: 2,\n }];\n }\n const indexedWrite = payload.match(/^write-array ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\]=(.+)$/);\n if (indexedWrite) {\n if (isEphemeralOutputArrayName(indexedWrite[1])) {\n return undefined;\n }\n return [{\n variable: indexedWrite[1],\n kind: 'indexed-write',\n indices: [Number.parseInt(indexedWrite[2], 10)],\n pathDepth: 1,\n }];\n }\n const mutatingCall = payload.match(/^mutate ([A-Za-z_][A-Za-z0-9_]*) method=([A-Za-z_][A-Za-z0-9_]*)$/);\n if (mutatingCall) {\n return [{\n variable: mutatingCall[1],\n kind: 'mutating-call',\n method: mutatingCall[2],\n pathDepth: 1,\n }];\n }\n const indexedMutatingCall = payload.match(/^mutate-indexed ([A-Za-z_][A-Za-z0-9_]*)\\[(\\d+)\\] method=([A-Za-z_][A-Za-z0-9_]*)$/);\n if (indexedMutatingCall) {\n return [{\n variable: indexedMutatingCall[1],\n kind: 'mutating-call',\n indices: [Number.parseInt(indexedMutatingCall[2], 10)],\n method: indexedMutatingCall[3],\n pathDepth: 1,\n }];\n }\n const keyedCall = payload.match(/^keyed-call ([A-Za-z_][A-Za-z0-9_]*) method=([A-Za-z_][A-Za-z0-9_]*)(?:\\s+.*)?$/);\n if (keyedCall) {\n return [{\n variable: keyedCall[1],\n kind: 'mutating-call',\n method: keyedCall[2],\n pathDepth: 1,\n }];\n }\n return undefined;\n}\n\nfunction parseStructureState(payload: string): { structure: 'linked-list' | 'tree' | 'graph-adjacency'; variable: string; value: unknown } | null {\n const match = payload.match(/^state (linked-list|tree|graph-adjacency) ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);\n if (!match) return null;\n return {\n structure: match[1] as 'linked-list' | 'tree' | 'graph-adjacency',\n variable: match[2],\n value: JSON.parse(match[3]) as unknown,\n };\n}\n\nfunction parseObjectState(payload: string): { variable: string; visualization: RuntimeHashMapVisualization } | null {\n const match = payload.match(/^object-state ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);\n if (!match) return null;\n return {\n variable: match[1],\n visualization: JSON.parse(match[2]) as RuntimeHashMapVisualization,\n };\n}\n\nfunction parseMapState(payload: string): { variable: string; visualization: RuntimeHashMapVisualization } | null {\n const match = payload.match(/^map-state ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);\n if (!match) return null;\n return {\n variable: match[1],\n visualization: JSON.parse(match[2]) as RuntimeHashMapVisualization,\n };\n}\n\nfunction parseSetState(payload: string): { variable: string; visualization: RuntimeHashMapVisualization } | null {\n const match = payload.match(/^set-state ([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);\n if (!match) return null;\n return {\n variable: match[1],\n visualization: JSON.parse(match[2]) as RuntimeHashMapVisualization,\n };\n}\n\nfunction parseObjectFieldEvent(payload: string): { variable: string; field: string; value: unknown } | null {\n const match = payload.match(/^(access|write) ([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)=(.+)$/);\n if (!match) return null;\n return {\n variable: match[2],\n field: match[3],\n value: parseScalar(match[4]),\n };\n}\n\nfunction isArrayLengthAccessEvent(payload: string): boolean {\n return /^access [A-Za-z_][A-Za-z0-9_]*\\.length=\\d+$/.test(payload);\n}\n\nfunction buildFieldVisualization(event: { variable: string; field: string; value: unknown }): RuntimeVisualizationPayload {\n return {\n objectKinds: {\n [event.variable]: 'object',\n },\n hashMaps: [\n {\n name: event.variable,\n kind: 'object',\n objectClassName:\n event.field === 'next' || event.field === 'prev'\n ? 'ListNode'\n : event.field === 'left' || event.field === 'right'\n ? 'TreeNode'\n : undefined,\n objectId: `${event.variable}-object`,\n highlightedKey: event.field,\n entries: [{ key: event.field, value: event.value, highlight: true }],\n },\n ],\n };\n}\n\nfunction callStacksEqual(\n left: RawTraceStep['callStack'] | undefined,\n right: RawTraceStep['callStack'] | undefined\n): boolean {\n return JSON.stringify(left ?? []) === JSON.stringify(right ?? []);\n}\n\nfunction mergeVisualizationPayloads(\n left: RuntimeVisualizationPayload | undefined,\n right: RuntimeVisualizationPayload | undefined\n): RuntimeVisualizationPayload | undefined {\n if (!left) return right;\n if (!right) return left;\n return {\n ...left,\n ...right,\n objectKinds: {\n ...(left.objectKinds ?? {}),\n ...(right.objectKinds ?? {}),\n },\n hashMaps: [\n ...(left.hashMaps ?? []),\n ...(right.hashMaps ?? []),\n ],\n };\n}\n\nfunction maybeMergeConsecutiveLineStep(trace: RawTraceStep[], nextStep: RawTraceStep): boolean {\n if (nextStep.event !== 'line') {\n return false;\n }\n const previous = trace.at(-1);\n if (!previous || previous.event !== 'line') {\n return false;\n }\n if (previous.line !== nextStep.line || previous.function !== nextStep.function) {\n return false;\n }\n if (!callStacksEqual(previous.callStack, nextStep.callStack)) {\n return false;\n }\n\n previous.variables = { ...(previous.variables ?? {}), ...(nextStep.variables ?? {}) };\n if (nextStep.accesses?.length) {\n previous.accesses = [...(previous.accesses ?? []), ...nextStep.accesses];\n }\n previous.visualization = mergeVisualizationPayloads(previous.visualization, nextStep.visualization);\n return true;\n}\n\nfunction filterStructuredVariables(\n variables: Record<string, unknown> | undefined\n): Record<string, unknown> | undefined {\n if (!variables) {\n return undefined;\n }\n const isEphemeralOutputArrayName = (name: string): boolean =>\n /^(output|outputs)$/i.test(name);\n const entries = Object.entries(variables).filter(([name, value]) => {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n if (!Array.isArray(value)) {\n return true;\n }\n if (Array.isArray(value[0])) {\n return true;\n }\n return !isEphemeralOutputArrayName(name);\n });\n if (entries.length === 0) {\n return undefined;\n }\n return Object.fromEntries(entries);\n}\n\nfunction appendJavaTraceStep(\n trace: RawTraceStep[],\n step: RawTraceStep,\n pendingAccesses: RuntimeTraceAccessEvent[],\n options: { allowMerge?: boolean } = {}\n): void {\n const nextStep: RawTraceStep = pendingAccesses.length > 0\n ? { ...step, accesses: [...pendingAccesses] }\n : step;\n pendingAccesses.length = 0;\n if (options.allowMerge !== false && maybeMergeConsecutiveLineStep(trace, nextStep)) {\n return;\n }\n trace.push(nextStep);\n}\n\nfunction mergeIntoPreviousMatchingLineStep(\n trace: RawTraceStep[],\n line: number,\n currentFunction: string,\n currentCallStack: RawTraceStep['callStack'],\n patch: Partial<Pick<RawTraceStep, 'variables' | 'accesses' | 'visualization'>>\n): boolean {\n const candidate = trace.at(-1);\n if (!candidate || candidate.event !== 'line') {\n return false;\n }\n if (candidate.line !== line || candidate.function !== currentFunction) {\n return false;\n }\n if (!callStacksEqual(candidate.callStack, currentCallStack)) {\n return false;\n }\n\n candidate.variables = { ...(candidate.variables ?? {}), ...(patch.variables ?? {}) };\n if (patch.accesses?.length) {\n candidate.accesses = [...(candidate.accesses ?? []), ...patch.accesses];\n }\n candidate.visualization = mergeVisualizationPayloads(candidate.visualization, patch.visualization);\n return true;\n}\n\nfunction mergeAccessesIntoPreviousMatchingLineStep(\n trace: RawTraceStep[],\n line: number,\n currentFunction: string,\n currentCallStack: RawTraceStep['callStack'],\n accesses: RuntimeTraceAccessEvent[]\n): boolean {\n return mergeIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, {\n variables: undefined,\n accesses,\n visualization: undefined,\n });\n}\n\nfunction eventsToRawTrace(events: string[], sourceText?: string): RawTraceStep[] {\n const trace: RawTraceStep[] = [];\n const variables: Record<string, unknown> = {};\n const objectKinds: Record<string, 'linked-list' | 'tree' | 'graph-adjacency'> = {};\n const stack: Array<{ function: string; line: number; args: Record<string, unknown> }> = [];\n const pendingAccesses: RuntimeTraceAccessEvent[] = [];\n let currentFunction = '<module>';\n let previousRawLine: number | null = null;\n const lineRemap = buildLineRemap(sourceText);\n const declarationLines = buildMethodDeclarationLineSet(sourceText);\n\n for (const rawEvent of events) {\n if (rawEvent === 'clear' || rawEvent === 'reset') continue;\n const metadata = extractLineMetadata(rawEvent);\n const previousEventRawLine = previousRawLine;\n previousRawLine = metadata.line;\n const line = lineRemap?.get(metadata.line) ?? metadata.line;\n const payload = metadata.payload;\n const isDeclarationLine = declarationLines?.has(line) === true;\n\n if (payload.startsWith('call ')) {\n const match = payload.match(/^call\\s+(\\S+)(?:\\s+(.*))?$/);\n const functionName = match?.[1] ?? currentFunction;\n const argsFragment = match?.[2] ?? '';\n const args = parseKeyValuePairs(argsFragment);\n Object.assign(variables, args);\n currentFunction = functionName || currentFunction;\n stack.push({ function: currentFunction, line, args });\n appendJavaTraceStep(trace, {\n line,\n event: 'call',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),\n }, pendingAccesses);\n continue;\n }\n\n if (payload.startsWith('return ')) {\n const match = payload.match(/^return\\s+(\\S+)(?:\\s+value=(.*))?$/);\n const functionName = match?.[1] ?? currentFunction;\n const returnValue = match?.[2] !== undefined ? parseScalar(match[2].trim()) : undefined;\n const returnVariables = functionName === '<module>'\n ? { ...variables }\n : (filterStructuredVariables(variables) ?? {});\n appendJavaTraceStep(trace, {\n line,\n event: 'return',\n function: functionName || currentFunction,\n variables: returnVariables,\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),\n ...(returnValue !== undefined ? { returnValue } : {}),\n }, pendingAccesses);\n stack.pop();\n currentFunction = stack[stack.length - 1]?.function ?? '<module>';\n continue;\n }\n\n if (isDeclarationLine) {\n continue;\n }\n\n if (payload.length === 0) {\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n ...(stack.length > 0\n ? { callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })) }\n : {}),\n }, pendingAccesses, { allowMerge: previousEventRawLine !== metadata.line });\n continue;\n }\n\n const structureState = parseStructureState(payload);\n if (structureState) {\n variables[structureState.variable] = structureState.value;\n objectKinds[structureState.variable] = structureState.structure;\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),\n visualization: {\n objectKinds: { ...objectKinds },\n },\n }, pendingAccesses);\n continue;\n }\n\n const objectState = parseObjectState(payload);\n if (objectState) {\n variables[objectState.variable] = { __ref__: objectState.visualization.objectId ?? `${objectState.variable}-object` };\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),\n visualization: {\n objectKinds: { [objectState.variable]: 'object' },\n hashMaps: [objectState.visualization],\n },\n }, pendingAccesses);\n continue;\n }\n\n const mapState = parseMapState(payload);\n if (mapState) {\n const entries = mapState.visualization.entries.map((entry) => [entry.key, entry.value]);\n variables[mapState.variable] = { __type__: 'map', entries };\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),\n visualization: {\n objectKinds: { [mapState.variable]: 'map' },\n hashMaps: [mapState.visualization],\n },\n }, pendingAccesses);\n continue;\n }\n\n const setState = parseSetState(payload);\n if (setState) {\n const values = setState.visualization.entries.map((entry) => entry.key);\n variables[setState.variable] = { __type__: 'set', values };\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),\n visualization: {\n objectKinds: { [setState.variable]: 'set' },\n hashMaps: [setState.visualization],\n },\n }, pendingAccesses);\n continue;\n }\n\n if (isArrayLengthAccessEvent(payload)) {\n continue;\n }\n\n const accesses = parseAccessEvent(payload);\n if (accesses) {\n const currentCallStack =\n stack.length > 0 ? stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })) : undefined;\n if (mergeAccessesIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, accesses)) {\n continue;\n }\n pendingAccesses.push(...accesses);\n continue;\n }\n\n const objectField = parseObjectFieldEvent(payload);\n if (objectField) {\n variables[objectField.variable] = { __ref__: `${objectField.variable}-object` };\n const currentCallStack =\n stack.length > 0 ? stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })) : undefined;\n if (mergeIntoPreviousMatchingLineStep(trace, line, currentFunction, currentCallStack, {\n variables: { ...variables },\n accesses: undefined,\n visualization: buildFieldVisualization(objectField),\n })) {\n continue;\n }\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })),\n visualization: buildFieldVisualization(objectField),\n }, pendingAccesses);\n continue;\n }\n\n Object.assign(variables, parseKeyValuePairs(payload));\n appendJavaTraceStep(trace, {\n line,\n event: 'line',\n function: currentFunction,\n variables: { ...variables },\n ...(stack.length > 0\n ? { callStack: stack.map((frame) => ({ function: frame.function, line: frame.line, args: { ...frame.args } })) }\n : {}),\n }, pendingAccesses);\n }\n\n if (pendingAccesses.length > 0 && trace.length > 0) {\n const last = trace[trace.length - 1];\n last.accesses = [...(last.accesses ?? []), ...pendingAccesses];\n }\n\n return trace;\n}\n\nexport function buildJavaExecutionResult(\n output: unknown,\n events: string[],\n executionTimeMs = 0,\n traceLimitExceeded?: boolean,\n timeoutReason?: ExecutionResult['timeoutReason'],\n maxTraceSteps?: number,\n sourceText?: string,\n options: { outputIsSerialized?: boolean } = {}\n): ExecutionResult {\n const trace = eventsToRawTrace(events, sourceText);\n return {\n success: true,\n output: options.outputIsSerialized === false ? output : normalizeJavaSerializedResult(output),\n trace,\n executionTimeMs,\n consoleOutput: [],\n ...(traceLimitExceeded !== undefined ? { traceLimitExceeded } : {}),\n ...(maxTraceSteps !== undefined ? { maxTraceSteps } : {}),\n ...(timeoutReason ? { timeoutReason } : {}),\n lineEventCount: trace.filter((step) => step.event === 'line').length,\n traceStepCount: trace.length,\n };\n}\n\nexport function normalizeJavaTraceContract(result: JavaTraceResult): JavaTraceContractResult {\n const normalized = normalizeRuntimeTraceContract(\n 'java',\n buildJavaExecutionResult(\n result.output,\n result.events,\n 0,\n result.traceLimitExceeded,\n result.timeoutReason,\n undefined,\n result.sourceText\n )\n );\n return {\n ...normalized,\n language: 'java',\n };\n}\n\nexport function adaptJavaTraceExecutionResult(result: ExecutionResult): ExecutionResult {\n return adaptTraceExecutionResult('java', result);\n}\n"],"mappings":"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","names":[]}