@tracecode/harness 0.6.2 → 0.6.6
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/CHANGELOG.md +23 -0
- package/dist/browser.cjs +121 -28
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.js +121 -28
- package/dist/browser.js.map +1 -1
- package/dist/cli.cjs +4 -0
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/core.cjs +121 -27
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +5 -2
- package/dist/core.d.ts +5 -2
- package/dist/core.js +120 -27
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +124 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +123 -28
- package/dist/index.js.map +1 -1
- package/dist/python.cjs +1 -0
- package/dist/python.cjs.map +1 -1
- package/dist/python.js +1 -0
- package/dist/python.js.map +1 -1
- package/package.json +5 -3
- package/workers/java/java-source-augmentations.cjs +242 -0
- package/workers/java/java-worker.js +856 -34
- package/workers/java/src/spike/user/TraceHooks.java +619 -0
- package/workers/python/runtime-core.js +78 -16
- package/workers/vendor/java-browser-spike-helper.jar +0 -0
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 (
|
|
653
|
-
|
|
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
|
-
|
|
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":"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","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":[]}
|