@tangle-network/agent-eval 0.126.7 → 0.127.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/README.md +2 -2
- package/dist/analyst/index.d.ts +51 -39
- package/dist/analyst/index.js +4 -4
- package/dist/belief-state/index.d.ts +34 -36
- package/dist/belief-state/index.js +2 -2
- package/dist/benchmarks/index.d.ts +30 -12
- package/dist/benchmarks/index.js +12 -10
- package/dist/builder-eval/index.js +1 -1
- package/dist/campaign/index.d.ts +432 -146
- package/dist/campaign/index.js +11 -9
- package/dist/{chunk-ARU2PZFM.js → chunk-424XHVKV.js} +43 -23
- package/dist/chunk-424XHVKV.js.map +1 -0
- package/dist/{chunk-NUKSVU3W.js → chunk-5DTSBUL2.js} +2 -2
- package/dist/{chunk-BTACVO2W.js → chunk-65QETEKG.js} +542 -258
- package/dist/chunk-65QETEKG.js.map +1 -0
- package/dist/{chunk-CGG5SLH3.js → chunk-ARCFIY7U.js} +2 -2
- package/dist/{chunk-P22LJ3Y2.js → chunk-CLELFRQG.js} +6 -4
- package/dist/chunk-CLELFRQG.js.map +1 -0
- package/dist/{chunk-LUNF2SEL.js → chunk-DJKY2TSY.js} +3 -3
- package/dist/chunk-DPUHNQLN.js +232 -0
- package/dist/chunk-DPUHNQLN.js.map +1 -0
- package/dist/{chunk-IPYXE555.js → chunk-EJGRPCO3.js} +36 -13
- package/dist/chunk-EJGRPCO3.js.map +1 -0
- package/dist/{chunk-K6IAZZ6L.js → chunk-FA3MFYNA.js} +132 -110
- package/dist/chunk-FA3MFYNA.js.map +1 -0
- package/dist/chunk-IG35YDN3.js +614 -0
- package/dist/chunk-IG35YDN3.js.map +1 -0
- package/dist/{chunk-DPZAEKA6.js → chunk-IMGJZBFG.js} +84 -56
- package/dist/chunk-IMGJZBFG.js.map +1 -0
- package/dist/{chunk-H5UD2323.js → chunk-IN455XKS.js} +53 -1
- package/dist/chunk-IN455XKS.js.map +1 -0
- package/dist/{chunk-PJQFMIOX.js → chunk-MHELPNRP.js} +31 -1
- package/dist/chunk-MHELPNRP.js.map +1 -0
- package/dist/{chunk-IILEIWGW.js → chunk-NL33OXEP.js} +41 -36
- package/dist/chunk-NL33OXEP.js.map +1 -0
- package/dist/{chunk-474LBSOX.js → chunk-OD5NQ2CS.js} +41 -16
- package/dist/chunk-OD5NQ2CS.js.map +1 -0
- package/dist/{chunk-QOTFXW5L.js → chunk-P5W7RQKK.js} +2 -2
- package/dist/{chunk-IR3KBHOY.js → chunk-P6FYH6K4.js} +39 -3
- package/dist/chunk-P6FYH6K4.js.map +1 -0
- package/dist/{chunk-J5SQWP6Y.js → chunk-PBE2LOSS.js} +18 -2
- package/dist/chunk-PBE2LOSS.js.map +1 -0
- package/dist/{chunk-E3IADPLG.js → chunk-PRB53E3J.js} +50 -224
- package/dist/chunk-PRB53E3J.js.map +1 -0
- package/dist/{chunk-X4UCIOTZ.js → chunk-S5YLIBFX.js} +2 -2
- package/dist/{chunk-7VYEGHWF.js → chunk-SZLVEKMJ.js} +41 -20
- package/dist/chunk-SZLVEKMJ.js.map +1 -0
- package/dist/{chunk-LKKT3IVV.js → chunk-TSN7JT6D.js} +6 -4
- package/dist/{chunk-LKKT3IVV.js.map → chunk-TSN7JT6D.js.map} +1 -1
- package/dist/{chunk-M7AH34KV.js → chunk-UTA2TGC4.js} +32 -16
- package/dist/chunk-UTA2TGC4.js.map +1 -0
- package/dist/{chunk-MAX3TN3C.js → chunk-UWZZKKU7.js} +7 -19
- package/dist/chunk-UWZZKKU7.js.map +1 -0
- package/dist/{chunk-ZVCHKKOP.js → chunk-WED5KLZQ.js} +39 -15
- package/dist/chunk-WED5KLZQ.js.map +1 -0
- package/dist/{chunk-OCFJACJU.js → chunk-X6VOPMLD.js} +74 -14
- package/dist/chunk-X6VOPMLD.js.map +1 -0
- package/dist/{chunk-MOXWMGPC.js → chunk-Y5CYOL42.js} +159 -70
- package/dist/chunk-Y5CYOL42.js.map +1 -0
- package/dist/{chunk-FO7HEH76.js → chunk-YJBNWCAA.js} +2 -2
- package/dist/chunk-ZPUEEM5U.js +179 -0
- package/dist/chunk-ZPUEEM5U.js.map +1 -0
- package/dist/{chunk-KE2VWPZX.js → chunk-ZUUWPZCV.js} +3 -3
- package/dist/cli.js +4 -4
- package/dist/contract/index.d.ts +421 -124
- package/dist/contract/index.js +242 -115
- package/dist/contract/index.js.map +1 -1
- package/dist/control.d.ts +34 -32
- package/dist/control.js +2 -2
- package/dist/hosted/index.d.ts +142 -41
- package/dist/hosted/index.js +23 -1
- package/dist/index.d.ts +364 -255
- package/dist/index.js +315 -226
- package/dist/index.js.map +1 -1
- package/dist/meta-eval/index.d.ts +32 -32
- package/dist/meta-eval/index.js +2 -2
- package/dist/multishot/index.d.ts +1 -0
- package/dist/openapi.json +1 -1
- package/dist/pipelines/index.js +2 -2
- package/dist/reporting.d.ts +97 -74
- package/dist/reporting.js +5 -4
- package/dist/rl.d.ts +177 -131
- package/dist/rl.js +232 -126
- package/dist/rl.js.map +1 -1
- package/dist/rollout/index.d.ts +53 -63
- package/dist/rollout/index.js +7 -5
- package/dist/{run-campaign-FFRM3RH5.js → run-campaign-3A2EBYBE.js} +4 -3
- package/dist/supervisor-run/index.d.ts +7 -15
- package/dist/supervisor-run/index.js +2 -2
- package/dist/traces.d.ts +66 -41
- package/dist/traces.js +9 -5
- package/dist/wire/index.d.ts +1 -0
- package/dist/wire/index.js +2 -2
- package/docs/concepts.md +18 -1
- package/docs/hosted-ingest-spec.md +37 -40
- package/docs/insight-report.md +57 -7
- package/docs/research-report-methodology.md +20 -21
- package/docs/rollout.md +13 -8
- package/package.json +4 -3
- package/dist/chunk-474LBSOX.js.map +0 -1
- package/dist/chunk-7VYEGHWF.js.map +0 -1
- package/dist/chunk-ARU2PZFM.js.map +0 -1
- package/dist/chunk-BTACVO2W.js.map +0 -1
- package/dist/chunk-DPZAEKA6.js.map +0 -1
- package/dist/chunk-E3IADPLG.js.map +0 -1
- package/dist/chunk-H5UD2323.js.map +0 -1
- package/dist/chunk-IILEIWGW.js.map +0 -1
- package/dist/chunk-IPYXE555.js.map +0 -1
- package/dist/chunk-IR3KBHOY.js.map +0 -1
- package/dist/chunk-J5SQWP6Y.js.map +0 -1
- package/dist/chunk-K6IAZZ6L.js.map +0 -1
- package/dist/chunk-M7AH34KV.js.map +0 -1
- package/dist/chunk-MAX3TN3C.js.map +0 -1
- package/dist/chunk-MOXWMGPC.js.map +0 -1
- package/dist/chunk-OCFJACJU.js.map +0 -1
- package/dist/chunk-P22LJ3Y2.js.map +0 -1
- package/dist/chunk-PJQFMIOX.js.map +0 -1
- package/dist/chunk-ZVCHKKOP.js.map +0 -1
- package/dist/chunk-ZZUXHH3R.js +0 -99
- package/dist/chunk-ZZUXHH3R.js.map +0 -1
- /package/dist/{chunk-NUKSVU3W.js.map → chunk-5DTSBUL2.js.map} +0 -0
- /package/dist/{chunk-CGG5SLH3.js.map → chunk-ARCFIY7U.js.map} +0 -0
- /package/dist/{chunk-LUNF2SEL.js.map → chunk-DJKY2TSY.js.map} +0 -0
- /package/dist/{chunk-QOTFXW5L.js.map → chunk-P5W7RQKK.js.map} +0 -0
- /package/dist/{chunk-X4UCIOTZ.js.map → chunk-S5YLIBFX.js.map} +0 -0
- /package/dist/{chunk-FO7HEH76.js.map → chunk-YJBNWCAA.js.map} +0 -0
- /package/dist/{chunk-KE2VWPZX.js.map → chunk-ZUUWPZCV.js.map} +0 -0
- /package/dist/{run-campaign-FFRM3RH5.js.map → run-campaign-3A2EBYBE.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
pearsonR,
|
|
3
3
|
spearmanR
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MHELPNRP.js";
|
|
5
5
|
|
|
6
6
|
// src/meta-eval/rubric-predictive-validity.ts
|
|
7
7
|
async function rubricPredictiveValidity(input) {
|
|
@@ -133,4 +133,4 @@ function makeRng(seed) {
|
|
|
133
133
|
export {
|
|
134
134
|
rubricPredictiveValidity
|
|
135
135
|
};
|
|
136
|
-
//# sourceMappingURL=chunk-
|
|
136
|
+
//# sourceMappingURL=chunk-S5YLIBFX.js.map
|
|
@@ -660,7 +660,6 @@ function fromCodeAgentSession(source, options) {
|
|
|
660
660
|
sourcePath: options.sourcePath,
|
|
661
661
|
entries: 0,
|
|
662
662
|
malformedLines: options.malformedLines ?? 0,
|
|
663
|
-
inferredScore: true,
|
|
664
663
|
hasExplicitTerminalSignal: false,
|
|
665
664
|
hasFinalOutput: false,
|
|
666
665
|
hasQualityLabel: false,
|
|
@@ -692,7 +691,8 @@ function fromCodeAgentSession(source, options) {
|
|
|
692
691
|
...metrics.cacheWriteTokens > 0 ? { cacheWrite: metrics.cacheWriteTokens } : {}
|
|
693
692
|
};
|
|
694
693
|
const { costUsd, costProvenance } = resolveSessionCost(options.costProvenance, metrics, model);
|
|
695
|
-
const
|
|
694
|
+
const qualityScore = finiteScore(options.score);
|
|
695
|
+
const invalidQualityScore = options.score !== void 0 && qualityScore === void 0;
|
|
696
696
|
const promptHash = options.promptHash ?? hashString(`prompt:${source}:${firstUserText(entries) ?? ""}`);
|
|
697
697
|
const configHash = options.configHash ?? hashJson({
|
|
698
698
|
source,
|
|
@@ -706,9 +706,13 @@ function fromCodeAgentSession(source, options) {
|
|
|
706
706
|
model,
|
|
707
707
|
explicitTerminal,
|
|
708
708
|
malformedLines: options.malformedLines ?? 0,
|
|
709
|
-
|
|
709
|
+
hasQualityLabel: qualityScore !== void 0,
|
|
710
|
+
invalidQualityScore,
|
|
710
711
|
costKind: costProvenance.kind
|
|
711
712
|
});
|
|
713
|
+
const terminalOutcome = terminalOutcomeFromSession(observation.terminal);
|
|
714
|
+
const processExitCode = options.execution?.exitCode;
|
|
715
|
+
const splitTag = options.splitTag ?? "holdout";
|
|
712
716
|
const run = {
|
|
713
717
|
runId: `${source}:${sessionId}`,
|
|
714
718
|
experimentId: options.experimentId ?? `${source}-local-sessions`,
|
|
@@ -722,8 +726,12 @@ function fromCodeAgentSession(source, options) {
|
|
|
722
726
|
costUsd,
|
|
723
727
|
costProvenance,
|
|
724
728
|
tokenUsage,
|
|
729
|
+
terminalOutcome,
|
|
730
|
+
...terminalOutcome === "failed" ? {
|
|
731
|
+
terminalFailureReason: processExitCode !== void 0 && processExitCode !== 0 ? `process exited with code ${processExitCode}` : metrics.turnsAborted > 0 ? "turn aborted" : "session reported terminal failure"
|
|
732
|
+
} : {},
|
|
725
733
|
outcome: {
|
|
726
|
-
holdoutScore:
|
|
734
|
+
...qualityScore === void 0 ? {} : splitTag === "holdout" ? { holdoutScore: qualityScore } : { searchScore: qualityScore },
|
|
727
735
|
raw: {
|
|
728
736
|
entries: metrics.entries,
|
|
729
737
|
user_messages: metrics.userMessages,
|
|
@@ -732,6 +740,10 @@ function fromCodeAgentSession(source, options) {
|
|
|
732
740
|
tool_calls: metrics.toolCalls,
|
|
733
741
|
tool_outputs: metrics.toolOutputs,
|
|
734
742
|
tool_errors: metrics.toolErrors,
|
|
743
|
+
execution_error_count: metrics.toolErrors,
|
|
744
|
+
process_error_count: terminalOutcome === "failed" ? 1 : 0,
|
|
745
|
+
unclassified_error_count: metrics.unclassifiedErrors,
|
|
746
|
+
...processExitCode !== void 0 ? { process_exit_code: processExitCode } : {},
|
|
735
747
|
patch_attempts: metrics.patchAttempts,
|
|
736
748
|
patch_successes: metrics.patchSuccesses,
|
|
737
749
|
patch_failures: metrics.patchFailures,
|
|
@@ -761,20 +773,18 @@ function fromCodeAgentSession(source, options) {
|
|
|
761
773
|
cache_write_tokens: metrics.cacheWriteTokens,
|
|
762
774
|
observed_cost_usd: metrics.observedCostUsd,
|
|
763
775
|
observed_cost_captured: metrics.observedCostCaptured ? 1 : 0,
|
|
764
|
-
estimated_cost_usd: costProvenance.kind === "estimated" ?
|
|
765
|
-
process_score:
|
|
766
|
-
inferred_score: options.score === void 0 ? 1 : 0,
|
|
776
|
+
estimated_cost_usd: costProvenance.kind === "estimated" ? costProvenance.usd : 0,
|
|
777
|
+
process_score: metrics.processScore,
|
|
767
778
|
explicit_terminal_signal: explicitTerminal ? 1 : 0,
|
|
768
|
-
quality_label_present:
|
|
779
|
+
quality_label_present: qualityScore !== void 0 ? 1 : 0,
|
|
769
780
|
cost_observed: costProvenance.kind === "observed" ? 1 : 0,
|
|
770
781
|
cost_estimated: costProvenance.kind === "estimated" ? 1 : 0,
|
|
771
782
|
cost_uncaptured: costProvenance.kind === "uncaptured" ? 1 : 0,
|
|
772
783
|
cost_unknown: costProvenance.kind === "uncaptured" ? 1 : 0
|
|
773
784
|
}
|
|
774
785
|
},
|
|
775
|
-
splitTag
|
|
776
|
-
|
|
777
|
-
...metrics.toolErrors > 0 || metrics.turnsAborted > 0 ? { failureMode: metrics.turnsAborted > 0 ? "turn_aborted" : "tool_error" } : {}
|
|
786
|
+
splitTag,
|
|
787
|
+
scenarioId: options.scenarioId ?? sessionId
|
|
778
788
|
};
|
|
779
789
|
return {
|
|
780
790
|
runs: [run],
|
|
@@ -785,10 +795,9 @@ function fromCodeAgentSession(source, options) {
|
|
|
785
795
|
sourcePath: options.sourcePath,
|
|
786
796
|
entries: entries.length,
|
|
787
797
|
malformedLines: options.malformedLines ?? 0,
|
|
788
|
-
inferredScore: options.score === void 0,
|
|
789
798
|
hasExplicitTerminalSignal: explicitTerminal,
|
|
790
799
|
hasFinalOutput: observation.finalText !== null,
|
|
791
|
-
hasQualityLabel:
|
|
800
|
+
hasQualityLabel: qualityScore !== void 0,
|
|
792
801
|
hasTokenUsage: metrics.inputTokens > 0 || metrics.outputTokens > 0 || metrics.reasoningTokens > 0 || metrics.cachedTokens > 0 || metrics.cacheWriteTokens > 0,
|
|
793
802
|
hasCost: costProvenance.kind !== "uncaptured",
|
|
794
803
|
costKind: costProvenance.kind,
|
|
@@ -799,6 +808,12 @@ function fromCodeAgentSession(source, options) {
|
|
|
799
808
|
observations: [{ ...observation, sessionId }]
|
|
800
809
|
};
|
|
801
810
|
}
|
|
811
|
+
function terminalOutcomeFromSession(terminal) {
|
|
812
|
+
if (!terminal.explicit) return "unknown";
|
|
813
|
+
if (terminal.status === "completed") return "succeeded";
|
|
814
|
+
if (terminal.status === "failed") return "failed";
|
|
815
|
+
return "unknown";
|
|
816
|
+
}
|
|
802
817
|
function metricsFor(source, entries) {
|
|
803
818
|
switch (source) {
|
|
804
819
|
case "codex":
|
|
@@ -833,7 +848,7 @@ function codexMetrics(entries) {
|
|
|
833
848
|
addCodexExecUsage(metrics, record2(entry.usage));
|
|
834
849
|
}
|
|
835
850
|
if (entryType === "turn.failed") metrics.turnsAborted += 1;
|
|
836
|
-
if (entryType === "error") metrics.
|
|
851
|
+
if (entryType === "error") metrics.unclassifiedErrors += 1;
|
|
837
852
|
const item = record2(entry.item);
|
|
838
853
|
if (item && (entryType === "item.started" || entryType === "item.completed")) {
|
|
839
854
|
addCodexExecItem(metrics, startedToolIds, entryType, item);
|
|
@@ -885,7 +900,7 @@ function codexMetrics(entries) {
|
|
|
885
900
|
if (payloadType === "token_count")
|
|
886
901
|
setCodexCumulativeUsage(metrics, record2(record2(payload.info)?.total_token_usage));
|
|
887
902
|
const result = record2(payload.result);
|
|
888
|
-
if (result && "Err" in result) metrics.
|
|
903
|
+
if (result && "Err" in result) metrics.unclassifiedErrors += 1;
|
|
889
904
|
}
|
|
890
905
|
}
|
|
891
906
|
if (metrics.wallMs === 0 && startedAt !== void 0 && completedAt !== void 0) {
|
|
@@ -918,7 +933,8 @@ function addCodexExecItem(metrics, startedToolIds, eventType, item) {
|
|
|
918
933
|
metrics.toolErrors += 1;
|
|
919
934
|
}
|
|
920
935
|
}
|
|
921
|
-
if (itemType === "error"
|
|
936
|
+
if (itemType === "error") metrics.unclassifiedErrors += 1;
|
|
937
|
+
else if (codexExecToolFailed(itemType, item)) metrics.toolErrors += 1;
|
|
922
938
|
}
|
|
923
939
|
function codexExecToolFailed(itemType, item) {
|
|
924
940
|
const status = stringField2(item, "status");
|
|
@@ -1148,6 +1164,7 @@ function emptyMetrics(entries) {
|
|
|
1148
1164
|
toolCalls: 0,
|
|
1149
1165
|
toolOutputs: 0,
|
|
1150
1166
|
toolErrors: 0,
|
|
1167
|
+
unclassifiedErrors: 0,
|
|
1151
1168
|
patchAttempts: 0,
|
|
1152
1169
|
patchSuccesses: 0,
|
|
1153
1170
|
patchFailures: 0,
|
|
@@ -1236,7 +1253,7 @@ function resolveSessionCost(explicit, metrics, model) {
|
|
|
1236
1253
|
if (explicit) {
|
|
1237
1254
|
if (explicit.kind === "uncaptured") {
|
|
1238
1255
|
if (explicit.usd !== null) throw new Error("uncaptured cost must have usd: null");
|
|
1239
|
-
return { costUsd:
|
|
1256
|
+
return { costUsd: null, costProvenance: explicit };
|
|
1240
1257
|
}
|
|
1241
1258
|
if (!Number.isFinite(explicit.usd) || explicit.usd < 0) {
|
|
1242
1259
|
throw new Error(`${explicit.kind} cost must be a finite, non-negative USD amount`);
|
|
@@ -1252,11 +1269,12 @@ function resolveSessionCost(explicit, metrics, model) {
|
|
|
1252
1269
|
const costUsd = estimateCost(metrics.inputTokens, metrics.outputTokens, model);
|
|
1253
1270
|
return { costUsd, costProvenance: { kind: "estimated", usd: costUsd } };
|
|
1254
1271
|
}
|
|
1255
|
-
return { costUsd:
|
|
1272
|
+
return { costUsd: null, costProvenance: { kind: "uncaptured", usd: null } };
|
|
1256
1273
|
}
|
|
1257
1274
|
function diagnosticsFor(metrics, options) {
|
|
1258
1275
|
const warnings = [];
|
|
1259
|
-
if (
|
|
1276
|
+
if (options.invalidQualityScore) warnings.push("non-finite task quality score omitted");
|
|
1277
|
+
else if (!options.hasQualityLabel) warnings.push("task quality score not supplied");
|
|
1260
1278
|
if (!options.explicitTerminal) warnings.push("no explicit terminal success/failure signal");
|
|
1261
1279
|
if (metrics.inputTokens === 0 && metrics.outputTokens === 0 && metrics.reasoningTokens === 0 && metrics.cachedTokens === 0 && metrics.cacheWriteTokens === 0) {
|
|
1262
1280
|
warnings.push("missing token usage");
|
|
@@ -1387,6 +1405,9 @@ function clamp01(value) {
|
|
|
1387
1405
|
if (!Number.isFinite(value)) return 0;
|
|
1388
1406
|
return Math.max(0, Math.min(1, value));
|
|
1389
1407
|
}
|
|
1408
|
+
function finiteScore(value) {
|
|
1409
|
+
return value !== void 0 && Number.isFinite(value) ? clamp01(value) : void 0;
|
|
1410
|
+
}
|
|
1390
1411
|
function isRecord2(value) {
|
|
1391
1412
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1392
1413
|
}
|
|
@@ -1422,4 +1443,4 @@ export {
|
|
|
1422
1443
|
fromPiSession,
|
|
1423
1444
|
fromPigraphSession
|
|
1424
1445
|
};
|
|
1425
|
-
//# sourceMappingURL=chunk-
|
|
1446
|
+
//# sourceMappingURL=chunk-SZLVEKMJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contract/intake/code-agent-observation.ts","../src/contract/intake/code-agent-session.ts"],"sourcesContent":["export type CodeAgentSessionSource = 'codex' | 'claude-code' | 'opencode' | 'kimi-code' | 'pi'\n\nexport type CodeAgentSessionTerminalStatus = 'completed' | 'failed' | 'unknown'\n\nexport type CodeAgentSessionActionKind = 'tool' | 'patch' | 'terminal' | 'graph-completion'\n\nexport type CodeAgentSessionActionSurface =\n | 'tool'\n | 'mcp'\n | 'subagent'\n | 'skill'\n | 'hook'\n | 'web'\n | 'code'\n\nexport type CodeAgentSessionActionStatus = 'started' | 'completed' | 'failed' | 'unknown'\n\nexport interface CodeAgentSessionExecutionReceipt {\n exitCode: number\n startedAtMs?: number\n completedAtMs?: number\n}\n\nexport interface CodeAgentSessionAction {\n id: string\n stepIndex: number\n kind: CodeAgentSessionActionKind\n surface: CodeAgentSessionActionSurface\n name: string\n status: CodeAgentSessionActionStatus\n timestampMs?: number\n costUsd?: number\n metadata: Record<string, unknown>\n}\n\nexport interface CodeAgentSessionObservation {\n source: CodeAgentSessionSource\n sessionId: string\n finalText: string | null\n terminal: {\n status: CodeAgentSessionTerminalStatus\n explicit: boolean\n }\n actions: CodeAgentSessionAction[]\n}\n\nexport interface ObserveCodeAgentSessionOptions {\n source: CodeAgentSessionSource\n entries: unknown[]\n sourcePath?: string\n execution?: CodeAgentSessionExecutionReceipt\n}\n\ninterface SessionProjection {\n finalText: string | null\n terminal: CodeAgentSessionTerminalStatus\n explicitTerminal: boolean\n actions: CodeAgentSessionAction[]\n}\n\n/**\n * Project one provider session into the exact user-visible answer and a\n * provider-neutral action stream. Raw prompts, tool inputs, and tool outputs\n * stay out of this projection; callers retain the source JSONL as evidence.\n */\nexport function observeCodeAgentSession(\n options: ObserveCodeAgentSessionOptions,\n): CodeAgentSessionObservation {\n const entries = options.entries.filter(isRecord)\n const projection = projectionFor(options.source, entries)\n const terminal = terminalWithExecution(projection, options.execution)\n return {\n source: options.source,\n sessionId:\n sessionIdFromEntries(options.source, entries) ??\n fallbackSessionId(options.source, options.sourcePath),\n finalText: projection.finalText,\n terminal,\n actions: projection.actions,\n }\n}\n\nfunction projectionFor(\n source: CodeAgentSessionSource,\n entries: Record<string, unknown>[],\n): SessionProjection {\n switch (source) {\n case 'codex':\n return codexProjection(entries)\n case 'claude-code':\n return claudeProjection(entries)\n case 'opencode':\n return openCodeProjection(entries)\n case 'kimi-code':\n return kimiProjection(entries)\n case 'pi':\n return piProjection(entries)\n }\n}\n\nfunction codexProjection(entries: Record<string, unknown>[]): SessionProjection {\n const actions: CodeAgentSessionAction[] = []\n const calls = new Map<string, CodeAgentSessionAction>()\n let finalText: string | null = null\n let terminal: CodeAgentSessionTerminalStatus = 'unknown'\n let explicitTerminal = false\n\n for (const entry of entries) {\n const entryType = stringField(entry, 'type')\n const payload = record(entry.payload) ?? {}\n const payloadType = stringField(payload, 'type')\n const timestampMs = timestamp(entry.timestamp)\n const item = record(entry.item)\n\n if (entryType === 'item.started' && item) {\n const itemType = stringField(item, 'type')\n if (isCodexActionItem(itemType)) {\n const id = stringField(item, 'id') ?? `item-${actions.length}`\n const action = actionFor({\n id,\n stepIndex: actions.length,\n kind: itemType === 'file_change' ? 'patch' : 'tool',\n surface: codexItemSurface(itemType, item),\n name: codexItemName(itemType, item),\n status: 'started',\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, itemType }),\n })\n calls.set(id, action)\n actions.push(action)\n }\n }\n\n if (entryType === 'item.completed' && item) {\n const itemType = stringField(item, 'type')\n if (itemType === 'agent_message' || itemType === 'message') {\n finalText = nonEmpty(stringField(item, 'text')) ?? finalText\n }\n if (isCodexActionItem(itemType)) {\n const id = stringField(item, 'id') ?? `item-${actions.length}`\n const status = codexItemStatus(itemType, item)\n const existing = calls.get(id)\n if (existing) {\n existing.status = status\n } else {\n const action = actionFor({\n id,\n stepIndex: actions.length,\n kind: itemType === 'file_change' ? 'patch' : 'tool',\n surface: codexItemSurface(itemType, item),\n name: codexItemName(itemType, item),\n status,\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, itemType }),\n })\n calls.set(id, action)\n actions.push(action)\n }\n }\n }\n\n if (entryType === 'response_item') {\n if (payloadType === 'message' || payloadType === 'agent_message') {\n finalText = textFromMessagePayload(payload) ?? finalText\n }\n if (payloadType === 'function_call' || payloadType === 'custom_tool_call') {\n const id =\n stringField(payload, 'call_id') ?? stringField(payload, 'id') ?? `call-${actions.length}`\n const name = stringField(payload, 'name') ?? payloadType\n const action = actionFor({\n id,\n stepIndex: actions.length,\n kind: 'tool',\n surface: surfaceForTool(name),\n name,\n status: 'started',\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, payloadType }),\n })\n calls.set(id, action)\n actions.push(action)\n }\n if (payloadType === 'function_call_output' || payloadType === 'custom_tool_call_output') {\n const id = stringField(payload, 'call_id') ?? stringField(payload, 'id')\n const existing = id ? calls.get(id) : undefined\n if (existing) existing.status = looksLikeError(payload.output) ? 'failed' : 'completed'\n }\n }\n\n if (entryType === 'event_msg') {\n if (payloadType === 'agent_message') {\n finalText =\n nonEmpty(stringField(payload, 'message')) ??\n nonEmpty(stringField(payload, 'text')) ??\n finalText\n }\n if (payloadType === 'patch_apply_end') {\n const patchStatus =\n typeof payload.success === 'boolean'\n ? payload.success\n ? 'completed'\n : 'failed'\n : 'unknown'\n actions.push(\n actionFor({\n id: stringField(payload, 'call_id') ?? `patch-${actions.length}`,\n stepIndex: actions.length,\n kind: 'patch',\n surface: 'code',\n name: 'patch',\n status: patchStatus,\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, payloadType }),\n }),\n )\n }\n if (payloadType === 'sub_agent_activity') {\n const name = stringField(payload, 'kind') ?? 'subagent'\n actions.push(\n actionFor({\n id: stringField(payload, 'event_id') ?? `subagent-${actions.length}`,\n stepIndex: actions.length,\n kind: 'tool',\n surface: 'subagent',\n name,\n status: statusFrom(payload),\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, payloadType }),\n }),\n )\n }\n if (payloadType === 'task_complete' || payloadType === 'turn_aborted') {\n const completed = payloadType === 'task_complete'\n terminal = completed ? 'completed' : 'failed'\n explicitTerminal = true\n actions.push(terminalAction(actions.length, payloadType, completed, timestampMs))\n }\n }\n\n if (entryType === 'turn.completed' || entryType === 'exec_done') {\n const completed = entry.success !== false\n terminal = completed ? 'completed' : 'failed'\n explicitTerminal = true\n finalText = nonEmpty(stringField(entry, 'message')) ?? finalText\n actions.push(terminalAction(actions.length, entryType, completed, timestampMs))\n }\n if (entryType === 'turn.failed' || entryType === 'error') {\n terminal = 'failed'\n explicitTerminal = true\n actions.push(terminalAction(actions.length, entryType, false, timestampMs))\n }\n }\n\n return { finalText, terminal, explicitTerminal, actions }\n}\n\nfunction claudeProjection(entries: Record<string, unknown>[]): SessionProjection {\n const actions: CodeAgentSessionAction[] = []\n const calls = new Map<string, CodeAgentSessionAction>()\n let finalText: string | null = null\n let resultText: string | null = null\n let terminal: CodeAgentSessionTerminalStatus = 'unknown'\n let explicitTerminal = false\n\n for (const entry of entries) {\n const entryType = stringField(entry, 'type')\n const timestampMs = timestamp(entry.timestamp)\n const message = record(entry.message)\n const content = Array.isArray(message?.content) ? message.content : []\n\n if (entryType === 'assistant') {\n const text = textBlocks(content)\n if (text !== null) finalText = text\n for (const value of content) {\n const part = record(value)\n if (!part) continue\n const partType = stringField(part, 'type')\n if (partType === 'tool_use') {\n const id = stringField(part, 'id') ?? `tool-${actions.length}`\n const name = stringField(part, 'name') ?? 'tool'\n const action = actionFor({\n id,\n stepIndex: actions.length,\n kind: 'tool',\n surface: surfaceForTool(name),\n name,\n status: 'started',\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, partType }),\n })\n calls.set(id, action)\n actions.push(action)\n }\n }\n completeClaudeTools(content, calls)\n const stopReason = stringField(message ?? {}, 'stop_reason')\n if (stopReason === 'end_turn') {\n terminal = 'completed'\n explicitTerminal = true\n actions.push(terminalAction(actions.length, stopReason, true, timestampMs))\n }\n }\n\n if (entryType === 'user') {\n completeClaudeTools(content, calls)\n }\n if (entryType === 'tool_use') {\n const id = stringField(entry, 'id') ?? `tool-${actions.length}`\n const name = stringField(entry, 'name') ?? 'tool'\n const action = actionFor({\n id,\n stepIndex: actions.length,\n kind: 'tool',\n surface: surfaceForTool(name),\n name,\n status: 'started',\n timestampMs,\n metadata: { sourceEventType: entryType },\n })\n calls.set(id, action)\n actions.push(action)\n }\n if (entryType === 'tool_result') {\n const id = stringField(entry, 'tool_use_id')\n const action = id ? calls.get(id) : undefined\n if (action) action.status = entry.is_error === true ? 'failed' : 'completed'\n }\n\n if (entryType === 'system') {\n const subtype = stringField(entry, 'subtype')\n const hookName = stringField(entry, 'hook_name') ?? stringField(entry, 'hookName')\n if (subtype?.toLowerCase().includes('hook') || hookName) {\n actions.push(\n actionFor({\n id: stringField(entry, 'uuid') ?? `hook-${actions.length}`,\n stepIndex: actions.length,\n kind: 'tool',\n surface: 'hook',\n name: hookName ?? subtype ?? 'hook',\n status: statusFrom(entry),\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, subtype }),\n }),\n )\n }\n }\n\n if (entryType === 'pr-link') {\n actions.push(terminalAction(actions.length, entryType, true, timestampMs))\n }\n\n if (entryType === 'result') {\n resultText = nonEmpty(stringField(entry, 'result')) ?? resultText\n const subtype = stringField(entry, 'subtype')\n const completed = entry.is_error !== true && !subtype?.toLowerCase().includes('error')\n terminal = completed ? 'completed' : 'failed'\n explicitTerminal = true\n actions.push(terminalAction(actions.length, subtype ?? entryType, completed, timestampMs))\n }\n if (entryType === 'error') {\n terminal = 'failed'\n explicitTerminal = true\n actions.push(terminalAction(actions.length, entryType, false, timestampMs))\n }\n }\n\n return {\n finalText: resultText ?? finalText,\n terminal,\n explicitTerminal,\n actions,\n }\n}\n\nfunction openCodeProjection(entries: Record<string, unknown>[]): SessionProjection {\n const actions: CodeAgentSessionAction[] = []\n const assistantMessageIds = new Set(\n entries\n .filter((entry) => stringField(entry, 'role') === 'assistant')\n .map((entry) => stringField(entry, 'id'))\n .filter((id): id is string => id !== undefined),\n )\n let finalText: string | null = null\n let terminal: CodeAgentSessionTerminalStatus = 'unknown'\n let explicitTerminal = false\n\n for (const entry of entries) {\n const entryType = stringField(entry, 'type')\n const part = record(entry.part) ?? entry\n const partType = stringField(part, 'type')\n const timestampMs = timestamp(entry.timestamp) ?? timestamp(record(entry.time)?.created)\n\n if (entryType === 'text' && record(entry.part)) {\n finalText = nonEmpty(stringField(part, 'text')) ?? finalText\n } else if (\n partType === 'text' &&\n (assistantMessageIds.size === 0 ||\n assistantMessageIds.has(stringField(part, 'messageID') ?? ''))\n ) {\n finalText = nonEmpty(stringField(part, 'text')) ?? finalText\n }\n\n if (entryType === 'tool_use' || partType === 'tool') {\n const state = record(part.state) ?? {}\n const name = stringField(part, 'tool') ?? 'tool'\n actions.push(\n actionFor({\n id: stringField(part, 'callID') ?? stringField(part, 'id') ?? `tool-${actions.length}`,\n stepIndex: actions.length,\n kind: 'tool',\n surface: surfaceForTool(name),\n name,\n status: statusFrom(state),\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, partType }),\n }),\n )\n }\n if (partType === 'patch') {\n actions.push(\n actionFor({\n id: stringField(part, 'id') ?? `patch-${actions.length}`,\n stepIndex: actions.length,\n kind: 'patch',\n surface: 'code',\n name: 'patch',\n status: 'completed',\n timestampMs,\n metadata: compactMetadata({ sourceEventType: entryType, partType }),\n }),\n )\n }\n\n if (stringField(entry, 'role') === 'assistant') {\n const finish = stringField(entry, 'finish')\n if (finish === 'stop' || finish === 'error') {\n const completed = finish === 'stop'\n terminal = completed ? 'completed' : 'failed'\n explicitTerminal = true\n actions.push(terminalAction(actions.length, finish, completed, timestampMs))\n }\n }\n if (entryType === 'error') {\n terminal = 'failed'\n explicitTerminal = true\n actions.push(terminalAction(actions.length, entryType, false, timestampMs))\n }\n }\n\n return { finalText, terminal, explicitTerminal, actions }\n}\n\nfunction kimiProjection(entries: Record<string, unknown>[]): SessionProjection {\n const actions: CodeAgentSessionAction[] = []\n const calls = new Map<string, CodeAgentSessionAction>()\n let finalText: string | null = null\n let terminal: CodeAgentSessionTerminalStatus = 'unknown'\n let explicitTerminal = false\n\n for (const entry of entries) {\n const timestampMs = timestamp(entry.timestamp)\n const message = record(entry.message)\n const messageType = stringField(message ?? {}, 'type')\n const payload = record(message?.payload) ?? {}\n if (messageType === 'ContentPart' && stringField(payload, 'type') === 'text') {\n finalText =\n nonEmpty(stringField(payload, 'text')) ??\n nonEmpty(stringField(payload, 'content')) ??\n finalText\n }\n if (messageType === 'ToolCall') {\n const fn = record(payload.function) ?? {}\n const id = stringField(payload, 'id') ?? `tool-${actions.length}`\n const name = stringField(fn, 'name') ?? 'tool'\n const action = actionFor({\n id,\n stepIndex: actions.length,\n kind: 'tool',\n surface: surfaceForTool(name),\n name,\n status: 'started',\n timestampMs,\n metadata: { sourceEventType: messageType },\n })\n calls.set(id, action)\n actions.push(action)\n }\n if (messageType === 'ToolResult') {\n const id = stringField(payload, 'tool_call_id')\n const action = id ? calls.get(id) : undefined\n if (action)\n action.status = record(payload.return_value)?.is_error === true ? 'failed' : 'completed'\n }\n if (messageType === 'TurnEnd' || messageType === 'StepInterrupted') {\n const completed = messageType === 'TurnEnd'\n terminal = completed ? 'completed' : 'failed'\n explicitTerminal = true\n actions.push(terminalAction(actions.length, messageType, completed, timestampMs))\n }\n }\n\n return { finalText, terminal, explicitTerminal, actions }\n}\n\nfunction piProjection(entries: Record<string, unknown>[]): SessionProjection {\n const actions: CodeAgentSessionAction[] = []\n let terminal: CodeAgentSessionTerminalStatus = 'unknown'\n let explicitTerminal = false\n for (const entry of entries) {\n const nodes = Array.isArray(entry.nodes) ? entry.nodes : []\n for (const value of nodes) {\n const node = record(value)\n const ir = record(node?.ir) ?? node\n const kind = stringField(ir ?? {}, 'kind')\n if (kind === 'ToolInvocation') {\n actions.push(\n actionFor({\n id:\n stringField(ir ?? {}, 'id') ??\n stringField(node ?? {}, 'id') ??\n `tool-${actions.length}`,\n stepIndex: actions.length,\n kind: 'tool',\n surface: 'tool',\n name: stringField(ir ?? {}, 'name') ?? 'graph-tool',\n status: 'started',\n timestampMs: timestamp(ir?.createdAt),\n metadata: { sourceEventType: 'graph-node', graphKind: kind },\n }),\n )\n }\n if (kind === 'ToolResult') {\n const prior = [...actions].reverse().find((action) => action.kind === 'tool')\n if (prior) prior.status = 'completed'\n }\n if (kind === 'CompletionDecision') {\n terminal = 'completed'\n explicitTerminal = true\n actions.push(\n actionFor({\n id:\n stringField(ir ?? {}, 'id') ??\n stringField(node ?? {}, 'id') ??\n `completion-${actions.length}`,\n stepIndex: actions.length,\n kind: 'graph-completion',\n surface: 'tool',\n name: 'complete',\n status: 'completed',\n timestampMs: timestamp(ir?.createdAt),\n metadata: { sourceEventType: 'graph-node', graphKind: kind },\n }),\n )\n }\n }\n }\n return { finalText: null, terminal, explicitTerminal, actions }\n}\n\nfunction completeClaudeTools(content: unknown[], calls: Map<string, CodeAgentSessionAction>): void {\n for (const value of content) {\n const part = record(value)\n if (!part || stringField(part, 'type') !== 'tool_result') continue\n const id = stringField(part, 'tool_use_id')\n const action = id ? calls.get(id) : undefined\n if (action) action.status = part.is_error === true ? 'failed' : 'completed'\n }\n}\n\nfunction isCodexActionItem(itemType: string | undefined): boolean {\n return (\n itemType === 'command_execution' ||\n itemType === 'mcp_tool_call' ||\n itemType === 'collab_tool_call' ||\n itemType === 'web_search' ||\n itemType === 'file_change'\n )\n}\n\nfunction codexItemSurface(\n itemType: string | undefined,\n item: Record<string, unknown>,\n): CodeAgentSessionActionSurface {\n if (itemType === 'mcp_tool_call') return 'mcp'\n if (itemType === 'collab_tool_call') return 'subagent'\n if (itemType === 'web_search') return 'web'\n if (itemType === 'file_change') return 'code'\n return surfaceForTool(stringField(item, 'name') ?? itemType ?? 'tool')\n}\n\nfunction codexItemName(itemType: string | undefined, item: Record<string, unknown>): string {\n if (itemType === 'mcp_tool_call') {\n const server = stringField(item, 'server')\n const tool = stringField(item, 'tool')\n return [server, tool].filter(Boolean).join('/') || 'mcp'\n }\n if (itemType === 'collab_tool_call') return stringField(item, 'tool') ?? 'subagent'\n if (itemType === 'web_search') return 'web_search'\n if (itemType === 'file_change') return 'file_change'\n return stringField(item, 'name') ?? itemType ?? 'tool'\n}\n\nfunction codexItemStatus(\n itemType: string | undefined,\n item: Record<string, unknown>,\n): CodeAgentSessionActionStatus {\n const status = statusFrom(item)\n if (status === 'failed') return status\n if (itemType === 'command_execution') {\n const exitCode = numberField(item, 'exit_code')\n if (exitCode !== undefined) return exitCode === 0 ? 'completed' : 'failed'\n }\n if (itemType === 'mcp_tool_call' && record(item.error)) return 'failed'\n return status === 'unknown' || status === 'started' ? 'completed' : status\n}\n\nfunction textFromMessagePayload(payload: Record<string, unknown>): string | null {\n const direct = nonEmpty(stringField(payload, 'text'))\n if (direct) return direct\n const content = payload.content\n if (typeof content === 'string') return nonEmpty(content)\n if (Array.isArray(content)) return textBlocks(content)\n return null\n}\n\nfunction textBlocks(values: unknown[]): string | null {\n const text = values\n .map((value) => record(value))\n .filter((value): value is Record<string, unknown> => value !== null)\n .filter((value) => stringField(value, 'type') === 'text')\n .map((value) => stringField(value, 'text'))\n .filter((value): value is string => value !== undefined)\n .join('\\n')\n return nonEmpty(text)\n}\n\nfunction terminalWithExecution(\n projection: SessionProjection,\n execution: CodeAgentSessionExecutionReceipt | undefined,\n): CodeAgentSessionObservation['terminal'] {\n if (!execution) {\n return { status: projection.terminal, explicit: projection.explicitTerminal }\n }\n assertExecutionReceipt(execution)\n return {\n status: execution.exitCode !== 0 || projection.terminal === 'failed' ? 'failed' : 'completed',\n explicit: true,\n }\n}\n\nfunction assertExecutionReceipt(receipt: CodeAgentSessionExecutionReceipt): void {\n if (!Number.isSafeInteger(receipt.exitCode)) {\n throw new Error('code-agent execution exitCode must be a safe integer')\n }\n for (const [name, value] of [\n ['startedAtMs', receipt.startedAtMs],\n ['completedAtMs', receipt.completedAtMs],\n ] as const) {\n if (value !== undefined && (!Number.isFinite(value) || value < 0)) {\n throw new Error(`code-agent execution ${name} must be a non-negative finite number`)\n }\n }\n if (\n receipt.startedAtMs !== undefined &&\n receipt.completedAtMs !== undefined &&\n receipt.completedAtMs < receipt.startedAtMs\n ) {\n throw new Error('code-agent execution completedAtMs precedes startedAtMs')\n }\n}\n\nfunction terminalAction(\n stepIndex: number,\n name: string,\n completed: boolean,\n timestampMs: number | undefined,\n): CodeAgentSessionAction {\n return actionFor({\n id: `terminal-${stepIndex}`,\n stepIndex,\n kind: 'terminal',\n surface: 'tool',\n name,\n status: completed ? 'completed' : 'failed',\n timestampMs,\n metadata: { sourceEventType: name },\n })\n}\n\nfunction actionFor(input: CodeAgentSessionAction): CodeAgentSessionAction {\n return input\n}\n\nfunction surfaceForTool(name: string): CodeAgentSessionActionSurface {\n const normalized = name.toLowerCase()\n if (normalized.startsWith('mcp__') || normalized.includes('mcp_tool')) return 'mcp'\n if (\n normalized === 'task' ||\n normalized === 'agent' ||\n normalized.includes('subagent') ||\n normalized.includes('spawn_agent') ||\n normalized.includes('collab') ||\n normalized.startsWith('multi_agent')\n ) {\n return 'subagent'\n }\n if (normalized === 'skill' || normalized.includes('skill')) return 'skill'\n if (normalized.includes('hook')) return 'hook'\n if (\n normalized.includes('web_search') ||\n normalized.includes('webfetch') ||\n normalized === 'web'\n ) {\n return 'web'\n }\n if (\n normalized === 'edit' ||\n normalized === 'write' ||\n normalized.includes('patch') ||\n normalized.includes('file_change')\n ) {\n return 'code'\n }\n return 'tool'\n}\n\nfunction statusFrom(value: Record<string, unknown>): CodeAgentSessionActionStatus {\n const status = (stringField(value, 'status') ?? '').toLowerCase()\n if (status === 'completed' || status === 'success' || status === 'succeeded') return 'completed'\n if (status === 'error' || status === 'failed' || status === 'declined') return 'failed'\n if (status === 'running' || status === 'started' || status === 'in_progress') return 'started'\n return 'unknown'\n}\n\nfunction compactMetadata(input: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(input).filter((entry) => entry[1] !== undefined))\n}\n\nfunction sessionIdFromEntries(\n source: CodeAgentSessionSource,\n entries: Record<string, unknown>[],\n): string | undefined {\n for (const entry of entries) {\n if (source === 'codex') {\n const threadId = stringField(entry, 'thread_id')\n if (threadId) return threadId\n const payload = record(entry.payload)\n const id = payload ? stringField(payload, 'id') : undefined\n if (id) return id\n }\n const message = record(entry.message)\n const payload = record(message?.payload)\n const sessionId =\n stringField(entry, 'sessionID') ??\n stringField(entry, 'sessionId') ??\n stringField(entry, 'session_id') ??\n stringField(payload ?? {}, 'session_id')\n if (sessionId) return sessionId\n }\n return undefined\n}\n\nfunction fallbackSessionId(source: CodeAgentSessionSource, sourcePath: string | undefined): string {\n return `${source}:${sourcePath ?? 'unknown-session'}`\n}\n\nfunction looksLikeError(value: unknown): boolean {\n if (isRecord(value)) {\n if (value.success === false || value.is_error === true) return true\n const exitCode = numberField(value, 'exit_code')\n if (exitCode !== undefined && exitCode !== 0) return true\n }\n const text = typeof value === 'string' ? value : JSON.stringify(value ?? '')\n return /\\b(?:error|failed|failure)\\b|exit(?:_| )code[\"\\s:]+[1-9]/i.test(text)\n}\n\nfunction nonEmpty(value: string | undefined): string | null {\n return value !== undefined && value.length > 0 ? value : null\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return isRecord(value) ? value : null\n}\n\nfunction stringField(value: Record<string, unknown>, key: string): string | undefined {\n const field = value[key]\n return typeof field === 'string' && field.length > 0 ? field : undefined\n}\n\nfunction numberField(value: Record<string, unknown>, key: string): number | undefined {\n const field = value[key]\n return typeof field === 'number' && Number.isFinite(field) ? field : undefined\n}\n\nfunction timestamp(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value > 1_000_000_000_000 ? value : value * 1_000\n }\n if (typeof value === 'string' && value.length > 0) {\n const parsed = Date.parse(value)\n return Number.isFinite(parsed) ? parsed : undefined\n }\n return undefined\n}\n","import { createHash } from 'node:crypto'\nimport { estimateCost, isModelPriced } from '../../metrics'\nimport type {\n RunCostProvenance,\n RunRecord,\n RunSplitTag,\n RunTerminalOutcome,\n RunTokenUsage,\n} from '../../run-record'\nimport { extractUsage } from '../../trace/extract-usage'\nimport {\n type CodeAgentSessionExecutionReceipt,\n type CodeAgentSessionObservation,\n type CodeAgentSessionSource,\n observeCodeAgentSession,\n} from './code-agent-observation'\n\nexport type {\n CodeAgentSessionAction,\n CodeAgentSessionActionKind,\n CodeAgentSessionActionStatus,\n CodeAgentSessionActionSurface,\n CodeAgentSessionExecutionReceipt,\n CodeAgentSessionObservation,\n CodeAgentSessionSource,\n CodeAgentSessionTerminalStatus,\n ObserveCodeAgentSessionOptions,\n} from './code-agent-observation'\nexport { observeCodeAgentSession } from './code-agent-observation'\n\nexport interface ParsedCodeAgentJsonl {\n entries: unknown[]\n malformedLines: number\n}\n\nexport interface CodeAgentSessionMetrics {\n entries: number\n userMessages: number\n assistantMessages: number\n reasoningItems: number\n toolCalls: number\n toolOutputs: number\n toolErrors: number\n unclassifiedErrors: number\n patchAttempts: number\n patchSuccesses: number\n patchFailures: number\n turnsStarted: number\n turnsCompleted: number\n turnsAborted: number\n contextCompactions: number\n mcpCalls: number\n subagentCalls: number\n skillCalls: number\n hookCalls: number\n webCalls: number\n codeActions: number\n prLinks: number\n fileSnapshots: number\n graphNodes: number\n graphEdges: number\n actionCandidates: number\n verificationReports: number\n completionDecisions: number\n reliabilityRows: number\n reliabilityLift: number\n inputTokens: number\n outputTokens: number\n reasoningTokens: number\n cachedTokens: number\n cacheWriteTokens: number\n observedCostUsd: number\n observedCostCaptured?: boolean\n wallMs: number\n processScore: number\n}\n\nexport interface CodeAgentSessionDiagnostic {\n source: CodeAgentSessionSource\n sessionId: string\n sourcePath?: string\n entries: number\n malformedLines: number\n hasExplicitTerminalSignal: boolean\n hasFinalOutput: boolean\n hasQualityLabel: boolean\n hasTokenUsage: boolean\n hasCost: boolean\n costKind?: RunCostProvenance['kind']\n warnings: string[]\n}\n\nexport interface CodeAgentSessionIntakeResult {\n runs: RunRecord[]\n diagnostics: CodeAgentSessionDiagnostic[]\n metrics: CodeAgentSessionMetrics[]\n observations: CodeAgentSessionObservation[]\n}\n\nexport interface CodeAgentSessionIntakeOptions {\n entries: unknown[]\n malformedLines?: number\n sourcePath?: string\n experimentId?: string\n candidateId?: string\n seed?: number\n splitTag?: RunSplitTag\n scenarioId?: string\n model?: string\n promptHash?: string\n configHash?: string\n commitSha?: string\n score?: number\n /** Explicit cost receipt. When omitted, source-reported cost wins, then a\n * token-priced estimate, then uncaptured. */\n costProvenance?: RunCostProvenance\n /** Exact executor-owned process result. This is required when a provider's\n * JSON stream has no terminal event, as with `opencode run --format json`. */\n execution?: CodeAgentSessionExecutionReceipt\n}\n\nexport function parseCodeAgentJsonl(jsonl: string): ParsedCodeAgentJsonl {\n const entries: unknown[] = []\n let malformedLines = 0\n for (const line of jsonl.split('\\n')) {\n const trimmed = line.trim()\n if (!trimmed) continue\n try {\n entries.push(JSON.parse(trimmed))\n } catch {\n malformedLines += 1\n }\n }\n return { entries, malformedLines }\n}\n\nexport function fromCodexSession(\n options: CodeAgentSessionIntakeOptions,\n): CodeAgentSessionIntakeResult {\n return fromCodeAgentSession('codex', options)\n}\n\nexport function fromClaudeCodeSession(\n options: CodeAgentSessionIntakeOptions,\n): CodeAgentSessionIntakeResult {\n return fromCodeAgentSession('claude-code', options)\n}\n\nexport function fromOpenCodeSession(\n options: CodeAgentSessionIntakeOptions,\n): CodeAgentSessionIntakeResult {\n return fromCodeAgentSession('opencode', options)\n}\n\nexport function fromKimiCodeSession(\n options: CodeAgentSessionIntakeOptions,\n): CodeAgentSessionIntakeResult {\n return fromCodeAgentSession('kimi-code', options)\n}\n\nexport function fromPiSession(\n options: CodeAgentSessionIntakeOptions,\n): CodeAgentSessionIntakeResult {\n return fromCodeAgentSession('pi', options)\n}\n\nexport const fromPigraphSession = fromPiSession\n\nfunction fromCodeAgentSession(\n source: CodeAgentSessionSource,\n options: CodeAgentSessionIntakeOptions,\n): CodeAgentSessionIntakeResult {\n const entries = options.entries.filter(isRecord)\n if (entries.length === 0) {\n return {\n runs: [],\n diagnostics: [\n {\n source,\n sessionId: fallbackSessionId(source, options.sourcePath),\n sourcePath: options.sourcePath,\n entries: 0,\n malformedLines: options.malformedLines ?? 0,\n hasExplicitTerminalSignal: false,\n hasFinalOutput: false,\n hasQualityLabel: false,\n hasTokenUsage: false,\n hasCost: false,\n costKind: 'uncaptured',\n warnings: ['no parseable session entries'],\n },\n ],\n metrics: [],\n observations: [],\n }\n }\n\n const metrics = metricsFor(source, entries)\n const sessionId =\n sessionIdFromEntries(source, entries) ?? fallbackSessionId(source, options.sourcePath)\n const observation = observeCodeAgentSession({\n source,\n entries,\n sourcePath: options.sourcePath,\n execution: options.execution,\n })\n applyObservedSurfaceMetrics(metrics, observation)\n const model = withSnapshot(options.model ?? modelFromEntries(source, entries) ?? source)\n const tokenUsage: RunTokenUsage = {\n input: metrics.inputTokens,\n output: metrics.outputTokens,\n ...(metrics.reasoningTokens > 0 ? { reasoning: metrics.reasoningTokens } : {}),\n ...(metrics.cachedTokens > 0 ? { cached: metrics.cachedTokens } : {}),\n ...(metrics.cacheWriteTokens > 0 ? { cacheWrite: metrics.cacheWriteTokens } : {}),\n }\n const { costUsd, costProvenance } = resolveSessionCost(options.costProvenance, metrics, model)\n const qualityScore = finiteScore(options.score)\n const invalidQualityScore = options.score !== undefined && qualityScore === undefined\n const promptHash =\n options.promptHash ?? hashString(`prompt:${source}:${firstUserText(entries) ?? ''}`)\n const configHash =\n options.configHash ??\n hashJson({\n source,\n model,\n sourcePath: options.sourcePath,\n cwd: cwdFromEntries(entries),\n entryCount: entries.length,\n })\n const explicitTerminal = observation.terminal.explicit\n const warnings = diagnosticsFor(metrics, {\n model,\n explicitTerminal,\n malformedLines: options.malformedLines ?? 0,\n hasQualityLabel: qualityScore !== undefined,\n invalidQualityScore,\n costKind: costProvenance.kind,\n })\n\n const terminalOutcome = terminalOutcomeFromSession(observation.terminal)\n const processExitCode = options.execution?.exitCode\n const splitTag = options.splitTag ?? 'holdout'\n const run: RunRecord = {\n runId: `${source}:${sessionId}`,\n experimentId: options.experimentId ?? `${source}-local-sessions`,\n candidateId: options.candidateId ?? model,\n seed: options.seed ?? stableSeed(sessionId),\n model,\n promptHash,\n configHash,\n commitSha: options.commitSha ?? 'local-session',\n wallMs: metrics.wallMs,\n costUsd,\n costProvenance,\n tokenUsage,\n terminalOutcome,\n ...(terminalOutcome === 'failed'\n ? {\n terminalFailureReason:\n processExitCode !== undefined && processExitCode !== 0\n ? `process exited with code ${processExitCode}`\n : metrics.turnsAborted > 0\n ? 'turn aborted'\n : 'session reported terminal failure',\n }\n : {}),\n outcome: {\n ...(qualityScore === undefined\n ? {}\n : splitTag === 'holdout'\n ? { holdoutScore: qualityScore }\n : { searchScore: qualityScore }),\n raw: {\n entries: metrics.entries,\n user_messages: metrics.userMessages,\n assistant_messages: metrics.assistantMessages,\n reasoning_items: metrics.reasoningItems,\n tool_calls: metrics.toolCalls,\n tool_outputs: metrics.toolOutputs,\n tool_errors: metrics.toolErrors,\n execution_error_count: metrics.toolErrors,\n process_error_count: terminalOutcome === 'failed' ? 1 : 0,\n unclassified_error_count: metrics.unclassifiedErrors,\n ...(processExitCode !== undefined ? { process_exit_code: processExitCode } : {}),\n patch_attempts: metrics.patchAttempts,\n patch_successes: metrics.patchSuccesses,\n patch_failures: metrics.patchFailures,\n turns_started: metrics.turnsStarted,\n turns_completed: metrics.turnsCompleted,\n turns_aborted: metrics.turnsAborted,\n context_compactions: metrics.contextCompactions,\n mcp_calls: metrics.mcpCalls,\n subagent_calls: metrics.subagentCalls,\n skill_calls: metrics.skillCalls,\n hook_calls: metrics.hookCalls,\n web_calls: metrics.webCalls,\n code_actions: metrics.codeActions,\n pr_links: metrics.prLinks,\n file_snapshots: metrics.fileSnapshots,\n graph_nodes: metrics.graphNodes,\n graph_edges: metrics.graphEdges,\n action_candidates: metrics.actionCandidates,\n verification_reports: metrics.verificationReports,\n completion_decisions: metrics.completionDecisions,\n reliability_rows: metrics.reliabilityRows,\n reliability_lift: metrics.reliabilityLift,\n input_tokens: metrics.inputTokens,\n output_tokens: metrics.outputTokens,\n reasoning_tokens: metrics.reasoningTokens,\n cached_tokens: metrics.cachedTokens,\n cache_write_tokens: metrics.cacheWriteTokens,\n observed_cost_usd: metrics.observedCostUsd,\n observed_cost_captured: metrics.observedCostCaptured ? 1 : 0,\n estimated_cost_usd: costProvenance.kind === 'estimated' ? costProvenance.usd : 0,\n process_score: metrics.processScore,\n explicit_terminal_signal: explicitTerminal ? 1 : 0,\n quality_label_present: qualityScore !== undefined ? 1 : 0,\n cost_observed: costProvenance.kind === 'observed' ? 1 : 0,\n cost_estimated: costProvenance.kind === 'estimated' ? 1 : 0,\n cost_uncaptured: costProvenance.kind === 'uncaptured' ? 1 : 0,\n cost_unknown: costProvenance.kind === 'uncaptured' ? 1 : 0,\n },\n },\n splitTag,\n scenarioId: options.scenarioId ?? sessionId,\n }\n\n return {\n runs: [run],\n diagnostics: [\n {\n source,\n sessionId,\n sourcePath: options.sourcePath,\n entries: entries.length,\n malformedLines: options.malformedLines ?? 0,\n hasExplicitTerminalSignal: explicitTerminal,\n hasFinalOutput: observation.finalText !== null,\n hasQualityLabel: qualityScore !== undefined,\n hasTokenUsage:\n metrics.inputTokens > 0 ||\n metrics.outputTokens > 0 ||\n metrics.reasoningTokens > 0 ||\n metrics.cachedTokens > 0 ||\n metrics.cacheWriteTokens > 0,\n hasCost: costProvenance.kind !== 'uncaptured',\n costKind: costProvenance.kind,\n warnings,\n },\n ],\n metrics: [metrics],\n observations: [{ ...observation, sessionId }],\n }\n}\n\nfunction terminalOutcomeFromSession(\n terminal: CodeAgentSessionObservation['terminal'],\n): RunTerminalOutcome {\n if (!terminal.explicit) return 'unknown'\n if (terminal.status === 'completed') return 'succeeded'\n if (terminal.status === 'failed') return 'failed'\n return 'unknown'\n}\n\nfunction metricsFor(\n source: CodeAgentSessionSource,\n entries: Record<string, unknown>[],\n): CodeAgentSessionMetrics {\n switch (source) {\n case 'codex':\n return codexMetrics(entries)\n case 'claude-code':\n return claudeCodeMetrics(entries)\n case 'opencode':\n return openCodeMetrics(entries)\n case 'kimi-code':\n return kimiCodeMetrics(entries)\n case 'pi':\n return piMetrics(entries)\n }\n}\n\nfunction codexMetrics(entries: Record<string, unknown>[]): CodeAgentSessionMetrics {\n const metrics = emptyMetrics(entries.length)\n const startedToolIds = new Set<string>()\n let startedAt: number | undefined\n let completedAt: number | undefined\n\n for (const entry of entries) {\n const payload = record(entry.payload) ?? {}\n const entryType = stringField(entry, 'type')\n const payloadType = stringField(payload, 'type')\n const timestamp = timestampMs(entry.timestamp)\n if (timestamp !== undefined) {\n startedAt = startedAt === undefined ? timestamp : Math.min(startedAt, timestamp)\n completedAt = completedAt === undefined ? timestamp : Math.max(completedAt, timestamp)\n }\n\n if (entryType === 'turn.started') metrics.turnsStarted += 1\n if (entryType === 'turn.completed') {\n metrics.turnsCompleted += 1\n addCodexExecUsage(metrics, record(entry.usage))\n }\n if (entryType === 'turn.failed') metrics.turnsAborted += 1\n if (entryType === 'error') metrics.unclassifiedErrors += 1\n\n const item = record(entry.item)\n if (item && (entryType === 'item.started' || entryType === 'item.completed')) {\n addCodexExecItem(metrics, startedToolIds, entryType, item)\n }\n\n if (entryType === 'response_item') {\n if (payloadType === 'function_call' || payloadType === 'custom_tool_call')\n metrics.toolCalls += 1\n if (payloadType === 'function_call_output' || payloadType === 'custom_tool_call_output')\n metrics.toolOutputs += 1\n if (payloadType === 'reasoning') metrics.reasoningItems += 1\n if (payloadType === 'message' && stringField(payload, 'role') === 'assistant')\n metrics.assistantMessages += 1\n }\n\n if (entryType === 'event_msg') {\n if (payloadType === 'user_message') metrics.userMessages += 1\n if (payloadType === 'agent_message') metrics.assistantMessages += 1\n if (payloadType === 'task_started') {\n metrics.turnsStarted += 1\n const started = timestampMs(payload.started_at)\n if (started !== undefined) {\n startedAt = startedAt === undefined ? started : Math.min(startedAt, started)\n }\n }\n if (payloadType === 'task_complete') {\n metrics.turnsCompleted += 1\n const completed = timestampMs(payload.completed_at)\n if (completed !== undefined) {\n completedAt = completedAt === undefined ? completed : Math.max(completedAt, completed)\n }\n const duration = numberField(payload, 'duration_ms')\n if (duration !== undefined) metrics.wallMs = Math.max(metrics.wallMs, duration)\n }\n if (payloadType === 'turn_aborted') {\n metrics.turnsAborted += 1\n const completed = timestampMs(payload.completed_at)\n if (completed !== undefined) {\n completedAt = completedAt === undefined ? completed : Math.max(completedAt, completed)\n }\n }\n if (payloadType === 'context_compacted') metrics.contextCompactions += 1\n if (payloadType === 'patch_apply_end') {\n metrics.patchAttempts += 1\n if (payload.success === true) metrics.patchSuccesses += 1\n else {\n metrics.patchFailures += 1\n metrics.toolErrors += 1\n }\n }\n if (payloadType === 'token_count')\n setCodexCumulativeUsage(metrics, record(record(payload.info)?.total_token_usage))\n const result = record(payload.result)\n if (result && 'Err' in result) metrics.unclassifiedErrors += 1\n }\n }\n\n if (metrics.wallMs === 0 && startedAt !== undefined && completedAt !== undefined) {\n metrics.wallMs = Math.max(0, completedAt - startedAt)\n }\n metrics.processScore = codexProcessScore(metrics)\n return metrics\n}\n\nfunction addCodexExecItem(\n metrics: CodeAgentSessionMetrics,\n startedToolIds: Set<string>,\n eventType: 'item.started' | 'item.completed',\n item: Record<string, unknown>,\n): void {\n const itemType = stringField(item, 'type')\n const itemId = stringField(item, 'id')\n const isTool =\n itemType === 'command_execution' ||\n itemType === 'mcp_tool_call' ||\n itemType === 'collab_tool_call' ||\n itemType === 'web_search'\n\n if (eventType === 'item.started' && isTool) {\n metrics.toolCalls += 1\n if (itemId) startedToolIds.add(itemId)\n }\n if (eventType === 'item.completed' && isTool) {\n if (!itemId || !startedToolIds.has(itemId)) metrics.toolCalls += 1\n metrics.toolOutputs += 1\n }\n if (eventType !== 'item.completed') return\n\n if (itemType === 'agent_message' || itemType === 'message') metrics.assistantMessages += 1\n if (itemType === 'reasoning') metrics.reasoningItems += 1\n if (itemType === 'file_change') {\n metrics.patchAttempts += 1\n const status = stringField(item, 'status')\n if (status === 'completed') metrics.patchSuccesses += 1\n if (status === 'failed') {\n metrics.patchFailures += 1\n metrics.toolErrors += 1\n }\n }\n if (itemType === 'error') metrics.unclassifiedErrors += 1\n else if (codexExecToolFailed(itemType, item)) metrics.toolErrors += 1\n}\n\nfunction codexExecToolFailed(itemType: string | undefined, item: Record<string, unknown>): boolean {\n const status = stringField(item, 'status')\n if (itemType === 'command_execution') {\n const exitCode = numberField(item, 'exit_code')\n return (\n status === 'failed' || status === 'declined' || (exitCode !== undefined && exitCode !== 0)\n )\n }\n if (itemType === 'mcp_tool_call') return status === 'failed' || record(item.error) !== null\n return itemType === 'collab_tool_call' && status === 'failed'\n}\n\nfunction addCodexExecUsage(\n metrics: CodeAgentSessionMetrics,\n usage: Record<string, unknown> | null,\n): void {\n const parsed = readUsage(usage)\n metrics.inputTokens += parsed.input\n metrics.outputTokens += parsed.output\n metrics.reasoningTokens += parsed.reasoning\n metrics.cachedTokens += parsed.cached\n metrics.cacheWriteTokens += parsed.cacheWrite\n}\n\nfunction setCodexCumulativeUsage(\n metrics: CodeAgentSessionMetrics,\n usage: Record<string, unknown> | null,\n): void {\n const parsed = readUsage(usage)\n metrics.inputTokens = Math.max(metrics.inputTokens, parsed.input)\n metrics.outputTokens = Math.max(metrics.outputTokens, parsed.output)\n metrics.reasoningTokens = Math.max(metrics.reasoningTokens, parsed.reasoning)\n metrics.cachedTokens = Math.max(metrics.cachedTokens, parsed.cached)\n metrics.cacheWriteTokens = Math.max(metrics.cacheWriteTokens, parsed.cacheWrite)\n}\n\nfunction claudeCodeMetrics(entries: Record<string, unknown>[]): CodeAgentSessionMetrics {\n const metrics = emptyMetrics(entries.length)\n let startedAt: number | undefined\n let completedAt: number | undefined\n\n for (const entry of entries) {\n const type = stringField(entry, 'type')\n const timestamp = timestampMs(entry.timestamp)\n if (timestamp !== undefined) {\n startedAt = startedAt === undefined ? timestamp : Math.min(startedAt, timestamp)\n completedAt = completedAt === undefined ? timestamp : Math.max(completedAt, timestamp)\n }\n\n if (type === 'user') metrics.userMessages += 1\n if (type === 'assistant') metrics.assistantMessages += 1\n if (type === 'pr-link') metrics.prLinks += 1\n if (type === 'file-history-snapshot') metrics.fileSnapshots += 1\n\n const message = record(entry.message)\n if (message) addUsage(metrics, record(message.usage))\n const content = Array.isArray(message?.content) ? message.content : []\n for (const item of content) {\n const part = record(item)\n if (!part) continue\n const partType = stringField(part, 'type')\n if (partType === 'thinking') metrics.reasoningItems += 1\n if (partType === 'tool_use') metrics.toolCalls += 1\n if (partType === 'tool_result') {\n metrics.toolOutputs += 1\n if (part.is_error === true) metrics.toolErrors += 1\n }\n }\n }\n\n if (startedAt !== undefined && completedAt !== undefined)\n metrics.wallMs = Math.max(0, completedAt - startedAt)\n metrics.processScore = claudeProcessScore(metrics)\n return metrics\n}\n\nfunction openCodeMetrics(entries: Record<string, unknown>[]): CodeAgentSessionMetrics {\n const metrics = emptyMetrics(entries.length)\n const messageUsage = emptyTokenTotals()\n const partUsage = emptyTokenTotals()\n let messageCost = 0\n let partCost = 0\n let messageCostCaptured = false\n let partCostCaptured = false\n let startedAt: number | undefined\n let completedAt: number | undefined\n\n for (const entry of entries) {\n const time = record(entry.time)\n const created = timestampMs(time?.created)\n const completed = timestampMs(time?.completed)\n if (created !== undefined)\n startedAt = startedAt === undefined ? created : Math.min(startedAt, created)\n if (completed !== undefined)\n completedAt = completedAt === undefined ? completed : Math.max(completedAt, completed)\n\n const role = stringField(entry, 'role')\n if (role === 'user') metrics.userMessages += 1\n if (role === 'assistant') {\n metrics.assistantMessages += 1\n const finish = stringField(entry, 'finish')\n if (finish === 'stop') metrics.turnsCompleted += 1\n if (finish === 'error') metrics.turnsAborted += 1\n }\n\n const type = stringField(entry, 'type')\n if (type === 'reasoning') metrics.reasoningItems += 1\n if (type === 'tool') {\n metrics.toolCalls += 1\n const status = stringField(record(entry.state) ?? {}, 'status')\n if (status === 'completed') metrics.toolOutputs += 1\n if (status === 'error') {\n metrics.toolOutputs += 1\n metrics.toolErrors += 1\n }\n }\n if (type === 'patch') {\n metrics.patchAttempts += 1\n metrics.patchSuccesses += 1\n }\n\n const cost = numberField(entry, 'cost')\n if (record(entry.tokens) && role) {\n addUsageTo(messageUsage, record(entry.tokens))\n if (cost !== undefined) {\n messageCost += cost\n messageCostCaptured = true\n }\n } else if (record(entry.tokens)) {\n addUsageTo(partUsage, record(entry.tokens))\n if (cost !== undefined) {\n partCost += cost\n partCostCaptured = true\n }\n }\n }\n\n const usage = hasTokenTotals(messageUsage) ? messageUsage : partUsage\n metrics.inputTokens = usage.input\n metrics.outputTokens = usage.output\n metrics.reasoningTokens = usage.reasoning\n metrics.cachedTokens = usage.cached\n metrics.cacheWriteTokens = usage.cacheWrite\n metrics.observedCostUsd = messageCostCaptured ? messageCost : partCost\n metrics.observedCostCaptured = messageCostCaptured || partCostCaptured\n if (metrics.wallMs === 0 && startedAt !== undefined && completedAt !== undefined)\n metrics.wallMs = Math.max(0, completedAt - startedAt)\n metrics.processScore = terminalProcessScore(metrics)\n return metrics\n}\n\nfunction kimiCodeMetrics(entries: Record<string, unknown>[]): CodeAgentSessionMetrics {\n const metrics = emptyMetrics(entries.length)\n let startedAt: number | undefined\n let completedAt: number | undefined\n\n for (const entry of entries) {\n const timestamp = timestampMs(entry.timestamp)\n if (timestamp !== undefined) {\n startedAt = startedAt === undefined ? timestamp : Math.min(startedAt, timestamp)\n completedAt = completedAt === undefined ? timestamp : Math.max(completedAt, timestamp)\n }\n\n const role = stringField(entry, 'role')\n if (role === 'user') metrics.userMessages += 1\n if (role === 'assistant') metrics.assistantMessages += 1\n if (role === '_usage') addUsage(metrics, entry)\n\n const message = record(entry.message)\n const messageType = message ? stringField(message, 'type') : undefined\n const payload = record(message?.payload) ?? {}\n if (messageType === 'TurnBegin') {\n metrics.userMessages += 1\n metrics.turnsStarted += 1\n }\n if (messageType === 'TurnEnd') metrics.turnsCompleted += 1\n if (messageType === 'StepInterrupted') metrics.turnsAborted += 1\n if (messageType === 'StepBegin') metrics.reasoningItems += 1\n if (messageType === 'ContentPart') {\n const payloadType = stringField(payload, 'type')\n if (payloadType === 'think') metrics.reasoningItems += 1\n if (payloadType === 'text') metrics.assistantMessages += 1\n }\n if (messageType === 'ToolCall') metrics.toolCalls += 1\n if (messageType === 'ToolResult') {\n metrics.toolOutputs += 1\n if (record(payload.return_value)?.is_error === true) metrics.toolErrors += 1\n }\n if (messageType === 'StatusUpdate') addUsage(metrics, record(payload.token_usage))\n if (messageType === 'Notification') {\n const notification = record(payload.payload)\n const exitCode = numberField(notification ?? {}, 'exit_code')\n if (notification?.timed_out === true || (exitCode !== undefined && exitCode !== 0)) {\n metrics.toolErrors += 1\n }\n }\n }\n\n if (startedAt !== undefined && completedAt !== undefined)\n metrics.wallMs = Math.max(0, completedAt - startedAt)\n metrics.processScore = terminalProcessScore(metrics)\n return metrics\n}\n\nfunction piMetrics(entries: Record<string, unknown>[]): CodeAgentSessionMetrics {\n const metrics = emptyMetrics(entries.length)\n let bestReliabilityScore: number | undefined\n\n for (const entry of entries) {\n const nodes = Array.isArray(entry.nodes) ? entry.nodes : []\n const edges = Array.isArray(entry.edges) ? entry.edges : []\n metrics.graphNodes += nodes.length\n metrics.graphEdges += edges.length\n\n for (const node of nodes) {\n const obj = record(node)\n const ir = record(obj?.ir) ?? obj\n const kind = stringField(ir ?? {}, 'kind')\n if (kind === 'ActionCandidate') metrics.actionCandidates += 1\n if (kind === 'ToolInvocation') metrics.toolCalls += 1\n if (kind === 'ToolResult') metrics.toolOutputs += 1\n if (kind === 'VerificationReport') metrics.verificationReports += 1\n if (kind === 'CompletionDecision') {\n metrics.completionDecisions += 1\n metrics.turnsCompleted += 1\n }\n }\n\n const averageReliability = numberField(entry, 'averageNodeReliability')\n if (averageReliability !== undefined)\n bestReliabilityScore = maxOptional(bestReliabilityScore, averageReliability)\n const pessimisticPath = numberField(entry, 'pessimisticPathEstimate')\n if (pessimisticPath !== undefined)\n bestReliabilityScore = maxOptional(bestReliabilityScore, pessimisticPath)\n\n const rows = Array.isArray(entry.rows) ? entry.rows : []\n metrics.reliabilityRows += rows.length\n for (const row of rows) {\n const obj = record(row)\n if (!obj) continue\n const lift = numberField(obj, 'lift')\n if (lift !== undefined) metrics.reliabilityLift = Math.max(metrics.reliabilityLift, lift)\n const validated = numberField(obj, 'validatedSuccessEstimate')\n if (validated !== undefined)\n bestReliabilityScore = maxOptional(bestReliabilityScore, validated)\n }\n }\n\n metrics.processScore =\n bestReliabilityScore !== undefined\n ? clamp01(bestReliabilityScore)\n : metrics.completionDecisions > 0\n ? 1\n : 0\n return metrics\n}\n\nfunction emptyMetrics(entries: number): CodeAgentSessionMetrics {\n return {\n entries,\n userMessages: 0,\n assistantMessages: 0,\n reasoningItems: 0,\n toolCalls: 0,\n toolOutputs: 0,\n toolErrors: 0,\n unclassifiedErrors: 0,\n patchAttempts: 0,\n patchSuccesses: 0,\n patchFailures: 0,\n turnsStarted: 0,\n turnsCompleted: 0,\n turnsAborted: 0,\n contextCompactions: 0,\n mcpCalls: 0,\n subagentCalls: 0,\n skillCalls: 0,\n hookCalls: 0,\n webCalls: 0,\n codeActions: 0,\n prLinks: 0,\n fileSnapshots: 0,\n graphNodes: 0,\n graphEdges: 0,\n actionCandidates: 0,\n verificationReports: 0,\n completionDecisions: 0,\n reliabilityRows: 0,\n reliabilityLift: 0,\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n cachedTokens: 0,\n cacheWriteTokens: 0,\n observedCostUsd: 0,\n observedCostCaptured: false,\n wallMs: 0,\n processScore: 0,\n }\n}\n\nfunction codexProcessScore(metrics: CodeAgentSessionMetrics): number {\n const terminalTurns = metrics.turnsCompleted + metrics.turnsAborted\n const base =\n terminalTurns > 0\n ? metrics.turnsCompleted / terminalTurns\n : metrics.assistantMessages > 0\n ? 0.5\n : 0\n return penalizeErrors(base, metrics)\n}\n\nfunction claudeProcessScore(metrics: CodeAgentSessionMetrics): number {\n const base = metrics.prLinks > 0 ? 1 : metrics.assistantMessages > 0 ? 0.75 : 0\n return penalizeErrors(base, metrics)\n}\n\nfunction terminalProcessScore(metrics: CodeAgentSessionMetrics): number {\n const terminalTurns = metrics.turnsCompleted + metrics.turnsAborted\n const base =\n terminalTurns > 0\n ? metrics.turnsCompleted / terminalTurns\n : metrics.assistantMessages > 0\n ? 0.75\n : metrics.toolCalls > 0\n ? 0.5\n : 0\n return penalizeErrors(base, metrics)\n}\n\nfunction penalizeErrors(base: number, metrics: CodeAgentSessionMetrics): number {\n const operations = Math.max(1, metrics.toolCalls + metrics.patchAttempts)\n const errorRate = Math.min(1, (metrics.toolErrors + metrics.patchFailures) / operations)\n return clamp01(base * (1 - 0.5 * errorRate))\n}\n\ntype TokenTotals = Required<RunTokenUsage>\n\nfunction emptyTokenTotals(): TokenTotals {\n return { input: 0, output: 0, reasoning: 0, cached: 0, cacheWrite: 0 }\n}\n\nfunction hasTokenTotals(usage: TokenTotals): boolean {\n return (\n usage.input > 0 ||\n usage.output > 0 ||\n usage.reasoning > 0 ||\n usage.cached > 0 ||\n usage.cacheWrite > 0\n )\n}\n\nfunction addUsage(\n metrics: CodeAgentSessionMetrics,\n usage: Record<string, unknown> | null | undefined,\n): void {\n const parsed = readUsage(usage)\n metrics.inputTokens += parsed.input\n metrics.outputTokens += parsed.output\n metrics.reasoningTokens += parsed.reasoning\n metrics.cachedTokens += parsed.cached\n metrics.cacheWriteTokens += parsed.cacheWrite\n}\n\nfunction addUsageTo(totals: TokenTotals, usage: Record<string, unknown> | null | undefined): void {\n const parsed = readUsage(usage)\n totals.input += parsed.input\n totals.output += parsed.output\n totals.reasoning += parsed.reasoning\n totals.cached += parsed.cached\n totals.cacheWrite += parsed.cacheWrite\n}\n\nfunction readUsage(usage: Record<string, unknown> | null | undefined): TokenTotals {\n const parsed = extractUsage(usage)\n return {\n input: parsed?.input ?? 0,\n output: parsed?.output ?? 0,\n reasoning: parsed?.reasoning ?? 0,\n cached: parsed?.cached ?? 0,\n cacheWrite: parsed?.cacheWrite ?? 0,\n }\n}\n\nfunction resolveSessionCost(\n explicit: RunCostProvenance | undefined,\n metrics: CodeAgentSessionMetrics,\n model: string,\n): { costUsd: number | null; costProvenance: RunCostProvenance } {\n if (explicit) {\n if (explicit.kind === 'uncaptured') {\n if (explicit.usd !== null) throw new Error('uncaptured cost must have usd: null')\n return { costUsd: null, costProvenance: explicit }\n }\n if (!Number.isFinite(explicit.usd) || explicit.usd < 0) {\n throw new Error(`${explicit.kind} cost must be a finite, non-negative USD amount`)\n }\n return { costUsd: explicit.usd, costProvenance: explicit }\n }\n\n if (metrics.observedCostCaptured) {\n const costProvenance = { kind: 'observed', usd: metrics.observedCostUsd } as const\n return { costUsd: metrics.observedCostUsd, costProvenance }\n }\n\n const hasUsage = metrics.inputTokens > 0 || metrics.outputTokens > 0\n if (hasUsage && isModelPriced(model)) {\n const costUsd = estimateCost(metrics.inputTokens, metrics.outputTokens, model)\n return { costUsd, costProvenance: { kind: 'estimated', usd: costUsd } }\n }\n\n return { costUsd: null, costProvenance: { kind: 'uncaptured', usd: null } }\n}\n\nfunction diagnosticsFor(\n metrics: CodeAgentSessionMetrics,\n options: {\n model: string\n explicitTerminal: boolean\n malformedLines: number\n hasQualityLabel: boolean\n invalidQualityScore: boolean\n costKind: RunCostProvenance['kind']\n },\n): string[] {\n const warnings: string[] = []\n if (options.invalidQualityScore) warnings.push('non-finite task quality score omitted')\n else if (!options.hasQualityLabel) warnings.push('task quality score not supplied')\n if (!options.explicitTerminal) warnings.push('no explicit terminal success/failure signal')\n if (\n metrics.inputTokens === 0 &&\n metrics.outputTokens === 0 &&\n metrics.reasoningTokens === 0 &&\n metrics.cachedTokens === 0 &&\n metrics.cacheWriteTokens === 0\n ) {\n warnings.push('missing token usage')\n }\n if (options.costKind === 'estimated')\n warnings.push('USD cost estimated from token usage and model pricing')\n if (options.costKind === 'uncaptured') warnings.push('USD cost uncaptured')\n if (options.costKind === 'uncaptured' && !isModelPriced(options.model))\n warnings.push('model pricing unknown')\n if (options.malformedLines > 0)\n warnings.push(`${options.malformedLines} malformed JSONL lines skipped`)\n return warnings\n}\n\nfunction applyObservedSurfaceMetrics(\n metrics: CodeAgentSessionMetrics,\n observation: CodeAgentSessionObservation,\n): void {\n const actions = observation.actions.filter(\n (action) => action.kind === 'tool' || action.kind === 'patch',\n )\n metrics.mcpCalls = actions.filter((action) => action.surface === 'mcp').length\n metrics.subagentCalls = actions.filter((action) => action.surface === 'subagent').length\n metrics.skillCalls = actions.filter((action) => action.surface === 'skill').length\n metrics.hookCalls = actions.filter((action) => action.surface === 'hook').length\n metrics.webCalls = actions.filter((action) => action.surface === 'web').length\n metrics.codeActions = actions.filter((action) => action.surface === 'code').length\n}\n\nfunction sessionIdFromEntries(\n source: CodeAgentSessionSource,\n entries: Record<string, unknown>[],\n): string | undefined {\n for (const entry of entries) {\n if (source === 'codex') {\n const threadId = stringField(entry, 'thread_id')\n if (threadId) return threadId\n const payload = record(entry.payload)\n const id = payload ? stringField(payload, 'id') : undefined\n if (id) return id\n }\n const message = record(entry.message)\n const payload = record(message?.payload)\n const sessionId =\n stringField(entry, 'sessionID') ??\n stringField(entry, 'sessionId') ??\n stringField(entry, 'session_id') ??\n stringField(payload ?? {}, 'session_id')\n if (sessionId) return sessionId\n }\n return undefined\n}\n\nfunction modelFromEntries(\n source: CodeAgentSessionSource,\n entries: Record<string, unknown>[],\n): string | undefined {\n let providerModel: string | undefined\n for (const entry of entries) {\n if (source === 'codex') {\n const payload = record(entry.payload)\n const model = payload ? stringField(payload, 'model') : undefined\n if (model) return model\n providerModel =\n providerModel ?? (payload ? stringField(payload, 'model_provider') : undefined)\n }\n const openCodeModel = stringField(entry, 'modelID')\n if (openCodeModel) {\n const provider = stringField(entry, 'providerID')\n return provider ? `${provider}/${openCodeModel}` : openCodeModel\n }\n const modelObject = record(entry.model)\n const nestedModel = stringField(modelObject ?? {}, 'modelID')\n if (nestedModel) {\n const provider = stringField(modelObject ?? {}, 'providerID')\n return provider ? `${provider}/${nestedModel}` : nestedModel\n }\n const message = record(entry.message)\n const model = message ? stringField(message, 'model') : undefined\n if (model) return model\n }\n return providerModel\n}\n\nfunction cwdFromEntries(entries: Record<string, unknown>[]): string | undefined {\n for (const entry of entries) {\n const path = record(entry.path)\n const cwd =\n stringField(entry, 'cwd') ??\n stringField(path ?? {}, 'cwd') ??\n stringField(path ?? {}, 'root') ??\n (record(entry.payload) ? stringField(record(entry.payload)!, 'cwd') : undefined)\n if (cwd) return cwd\n }\n return undefined\n}\n\nfunction firstUserText(entries: Record<string, unknown>[]): string | undefined {\n for (const entry of entries) {\n const payload = record(entry.payload)\n const payloadType = payload ? stringField(payload, 'type') : undefined\n if (payloadType === 'user_message') return stringField(payload!, 'message')\n\n if (stringField(entry, 'role') === 'user') {\n const content = entry.content\n if (typeof content === 'string') return content\n }\n\n const wirePayload = record(record(entry.message)?.payload)\n const userInput = wirePayload ? stringField(wirePayload, 'user_input') : undefined\n if (userInput) return userInput\n\n const message = record(entry.message)\n if (message && stringField(message, 'role') === 'user') {\n const content = message.content\n if (typeof content === 'string') return content\n if (Array.isArray(content)) {\n const text = content\n .map((part) => {\n const obj = record(part)\n return obj ? stringField(obj, 'text') : undefined\n })\n .filter((part): part is string => part !== undefined)\n .join('\\n')\n if (text) return text\n }\n }\n }\n return undefined\n}\n\nfunction fallbackSessionId(source: CodeAgentSessionSource, sourcePath: string | undefined): string {\n return hashString(`${source}:${sourcePath ?? 'unknown-session'}`).slice(\n 'sha256:'.length,\n 'sha256:'.length + 20,\n )\n}\n\nfunction withSnapshot(model: string): string {\n const trimmed = model.trim() || 'unknown'\n if (trimmed.includes('@') || /-\\d{8}$/.test(trimmed) || /-\\d{4}-\\d{2}-\\d{2}$/.test(trimmed)) {\n return trimmed\n }\n return `${trimmed}@observed-local`\n}\n\nfunction hashJson(value: unknown): string {\n return hashString(JSON.stringify(value))\n}\n\nfunction hashString(value: string): string {\n return `sha256:${createHash('sha256').update(value).digest('hex')}`\n}\n\nfunction stableSeed(value: string): number {\n return createHash('sha256').update(value).digest().readUInt32BE(0)\n}\n\nfunction maxOptional(current: number | undefined, next: number): number {\n return current === undefined ? next : Math.max(current, next)\n}\n\nfunction clamp01(value: number): number {\n if (!Number.isFinite(value)) return 0\n return Math.max(0, Math.min(1, value))\n}\n\nfunction finiteScore(value: number | undefined): number | undefined {\n return value !== undefined && Number.isFinite(value) ? clamp01(value) : undefined\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return isRecord(value) ? value : null\n}\n\nfunction stringField(obj: Record<string, unknown>, key: string): string | undefined {\n const value = obj[key]\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction numberField(obj: Record<string, unknown>, key: string): number | undefined {\n const value = obj[key]\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction timestampMs(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value > 1_000_000_000_000 ? value : value * 1000\n }\n if (typeof value === 'string' && value.length > 0) {\n const parsed = Date.parse(value)\n return Number.isFinite(parsed) ? parsed : undefined\n }\n return undefined\n}\n"],"mappings":"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","names":["timestampMs","payload","isRecord","fallbackSessionId","sessionIdFromEntries","record","stringField","timestamp","numberField","payload","model"]}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
ROLLOUT_SCHEMA,
|
|
10
10
|
isRolloutLine
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-UWZZKKU7.js";
|
|
12
12
|
|
|
13
13
|
// src/supervisor-run/types.ts
|
|
14
14
|
function unavailable(reason) {
|
|
@@ -1504,7 +1504,8 @@ function supervisorRunRolloutLines(src, opts = {}) {
|
|
|
1504
1504
|
},
|
|
1505
1505
|
is_completed: state?.status === "completed",
|
|
1506
1506
|
is_truncated: false,
|
|
1507
|
-
error: null
|
|
1507
|
+
error: null,
|
|
1508
|
+
realness_gated: false
|
|
1508
1509
|
},
|
|
1509
1510
|
cost: {
|
|
1510
1511
|
...EMPTY_COST,
|
|
@@ -1572,7 +1573,8 @@ function supervisorRunRolloutLines(src, opts = {}) {
|
|
|
1572
1573
|
},
|
|
1573
1574
|
is_completed: close?.kind === "settled",
|
|
1574
1575
|
is_truncated: close?.kind === "cancelled",
|
|
1575
|
-
error: close?.kind === "cancelled" ? close.verdict ?? "cancelled" : null
|
|
1576
|
+
error: close?.kind === "cancelled" ? close.verdict ?? "cancelled" : null,
|
|
1577
|
+
realness_gated: false
|
|
1576
1578
|
},
|
|
1577
1579
|
// `close.spend` is only a measurement when the close event carried one;
|
|
1578
1580
|
// a store that never priced this worker must leave null, not 0.
|
|
@@ -1641,4 +1643,4 @@ export {
|
|
|
1641
1643
|
findSupervisorRunDirs,
|
|
1642
1644
|
supervisorRunRolloutLines
|
|
1643
1645
|
};
|
|
1644
|
-
//# sourceMappingURL=chunk-
|
|
1646
|
+
//# sourceMappingURL=chunk-TSN7JT6D.js.map
|