niceeval 0.15.1-canary.76 → 0.16.1
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/INDEX.md +45 -40
- package/dist/adapter-execution-trace.cjs.map +1 -1
- package/dist/adapter-execution-trace.d.cts +26 -0
- package/dist/adapter-execution-trace.d.mts +26 -0
- package/dist/adapter-execution-trace.d.ts +26 -0
- package/dist/adapter-usage.cjs.map +1 -1
- package/dist/adapter-usage.d.cts +9 -0
- package/dist/adapter-usage.d.mts +9 -0
- package/dist/adapter-usage.d.ts +9 -0
- package/dist/adapter.cjs +19 -4
- package/dist/adapter.cjs.map +1 -1
- package/dist/adapter.d.cts +37 -12
- package/dist/adapter.d.mts +37 -12
- package/dist/adapter.d.ts +37 -12
- package/dist/agents/ai-sdk.cjs +3 -0
- package/dist/agents/ai-sdk.cjs.map +1 -1
- package/dist/agents/bub.cjs +3 -0
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/claude-code-native.cjs +28 -2
- package/dist/agents/claude-code-native.cjs.map +1 -1
- package/dist/agents/claude-code.cjs +3 -0
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/codex.cjs +3 -0
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/coding-cli-versions.cjs +9 -10
- package/dist/agents/coding-cli-versions.cjs.map +1 -1
- package/dist/agents/coding-cli-versions.d.cts +1 -1
- package/dist/agents/coding-cli-versions.d.mts +1 -1
- package/dist/agents/coding-cli-versions.d.ts +1 -1
- package/dist/agents/deepseek-harness.cjs +3 -0
- package/dist/agents/deepseek-harness.cjs.map +1 -1
- package/dist/agents/hermes.cjs +3 -0
- package/dist/agents/hermes.cjs.map +1 -1
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +3 -2
- package/dist/agents/index.d.mts +3 -2
- package/dist/agents/index.d.ts +3 -2
- package/dist/agents/omp.cjs +3 -0
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/openai-compat.cjs +6 -0
- package/dist/agents/openai-compat.cjs.map +1 -1
- package/dist/agents/openclaw.cjs +3 -0
- package/dist/agents/openclaw.cjs.map +1 -1
- package/dist/agents/opencode.cjs +3 -0
- package/dist/agents/opencode.cjs.map +1 -1
- package/dist/agents/sdk-streams.cjs +9 -0
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/ui-message-stream.cjs +3 -0
- package/dist/agents/ui-message-stream.cjs.map +1 -1
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +27 -5
- package/dist/assertions/api.d.mts +27 -5
- package/dist/assertions/api.d.ts +27 -5
- package/dist/assertions/collection.cjs +6 -0
- package/dist/assertions/collection.cjs.map +1 -1
- package/dist/assertions/collection.d.cts +4 -2
- package/dist/assertions/collection.d.mts +4 -2
- package/dist/assertions/collection.d.ts +4 -2
- package/dist/assertions/collection.js +12 -8
- package/dist/assertions/context-match.cjs +70 -0
- package/dist/assertions/context-match.cjs.map +1 -0
- package/dist/assertions/context-match.d.cts +107 -0
- package/dist/assertions/context-match.d.mts +107 -0
- package/dist/assertions/context-match.d.ts +107 -0
- package/dist/assertions/context-match.js +12 -0
- package/dist/assertions/context-match.js.map +1 -0
- package/dist/assertions/full-content.cjs +109 -0
- package/dist/assertions/full-content.cjs.map +1 -0
- package/dist/assertions/full-content.d.cts +6 -0
- package/dist/assertions/full-content.d.mts +6 -0
- package/dist/assertions/full-content.d.ts +6 -0
- package/dist/assertions/full-content.js +12 -0
- package/dist/assertions/full-content.js.map +1 -0
- package/dist/assertions/judge-presets.cjs +2 -34
- package/dist/assertions/judge-presets.cjs.map +1 -1
- package/dist/assertions/judge-presets.d.cts +6 -9
- package/dist/assertions/judge-presets.d.mts +6 -9
- package/dist/assertions/judge-presets.d.ts +6 -9
- package/dist/assertions/judge-presets.js +8 -8
- package/dist/assertions/judge.cjs +107 -29
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/judge.d.cts +2 -0
- package/dist/assertions/judge.d.mts +2 -0
- package/dist/assertions/judge.d.ts +2 -0
- package/dist/assertions/match.cjs +244 -5
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +43 -3
- package/dist/assertions/match.d.mts +43 -3
- package/dist/assertions/match.d.ts +43 -3
- package/dist/assertions/match.js +88 -78
- package/dist/assertions/material.cjs +520 -0
- package/dist/assertions/material.cjs.map +1 -0
- package/dist/assertions/material.d.cts +56 -0
- package/dist/assertions/material.d.mts +56 -0
- package/dist/assertions/material.d.ts +56 -0
- package/dist/assertions/material.js +20 -0
- package/dist/assertions/material.js.map +1 -0
- package/dist/assertions/record/attachment.cjs +5 -2
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/codec.cjs +2 -1
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +6 -1
- package/dist/assertions/record/model.d.mts +6 -1
- package/dist/assertions/record/model.d.ts +6 -1
- package/dist/assertions/runtime.cjs +207 -14
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/assertions/runtime.d.cts +9 -0
- package/dist/assertions/runtime.d.mts +9 -0
- package/dist/assertions/runtime.d.ts +9 -0
- package/dist/assertions/runtime.js +14 -8
- package/dist/assertions/score-match-audit.cjs +18 -8
- package/dist/assertions/score-match-audit.cjs.map +1 -1
- package/dist/assertions/score-match-gateway.cjs +83 -25
- package/dist/assertions/score-match-gateway.cjs.map +1 -1
- package/dist/assertions/score-match-gateway.d.cts +2 -0
- package/dist/assertions/score-match-gateway.d.mts +2 -0
- package/dist/assertions/score-match-gateway.d.ts +2 -0
- package/dist/assertions/value-composition.test-d.cjs +77 -0
- package/dist/assertions/value-composition.test-d.cjs.map +1 -0
- package/dist/assertions/value-composition.test-d.d.cts +1 -0
- package/dist/assertions/value-composition.test-d.d.mts +1 -0
- package/dist/assertions/value-composition.test-d.d.ts +1 -0
- package/dist/assertions/value-composition.test-d.js +4 -0
- package/dist/assertions/value-composition.test-d.js.map +1 -0
- package/dist/context/assert-first.cjs +207 -213
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +49 -23
- package/dist/context/assert-first.d.mts +49 -23
- package/dist/context/assert-first.d.ts +49 -23
- package/dist/context/session.cjs +111 -9
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +18 -0
- package/dist/context/session.d.mts +18 -0
- package/dist/context/session.d.ts +18 -0
- package/dist/define.cjs +17 -1
- package/dist/define.cjs.map +1 -1
- package/dist/eval/cli/contribution.cjs +2 -0
- package/dist/eval/cli/contribution.cjs.map +1 -1
- package/dist/eval/host/index.cjs +2 -0
- package/dist/eval/host/index.cjs.map +1 -1
- package/dist/eval/record/evaluation.cjs +3 -0
- package/dist/eval/record/evaluation.cjs.map +1 -1
- package/dist/eval/record/membership-provenance.d.cts +15 -15
- package/dist/eval/record/membership-provenance.d.mts +15 -15
- package/dist/eval/record/membership-provenance.d.ts +15 -15
- package/dist/eval/record/score.cjs +7 -0
- package/dist/eval/record/score.cjs.map +1 -1
- package/dist/eval/record/sealed-assertion.cjs +3 -0
- package/dist/eval/record/sealed-assertion.cjs.map +1 -1
- package/dist/eval/record/verdict.cjs +7 -0
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/expect/index.cjs +8 -2
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +9 -4
- package/dist/expect/index.d.mts +9 -4
- package/dist/expect/index.d.ts +9 -4
- package/dist/expect/index.js +72 -62
- package/dist/expect/index.mjs +72 -62
- package/dist/experiment/host/cli/contribution.cjs +37 -23
- package/dist/experiment/host/cli/contribution.cjs.map +1 -1
- package/dist/experiment/host/cli/contribution.d.cts +9 -1
- package/dist/experiment/host/cli/contribution.d.mts +9 -1
- package/dist/experiment/host/cli/contribution.d.ts +9 -1
- package/dist/experiment/host/current.cjs +74 -0
- package/dist/experiment/host/current.cjs.map +1 -0
- package/dist/experiment/host/current.d.cts +33 -0
- package/dist/experiment/host/current.d.mts +33 -0
- package/dist/experiment/host/current.d.ts +33 -0
- package/dist/experiment/host/current.js +10 -0
- package/dist/experiment/host/current.js.map +1 -0
- package/dist/experiment/host/index.cjs +17 -174
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/index.d.cts +8 -54
- package/dist/experiment/host/index.d.mts +8 -54
- package/dist/experiment/host/index.d.ts +8 -54
- package/dist/experiment/host/operations.cjs +33 -10
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/operations.d.cts +29 -1
- package/dist/experiment/host/operations.d.mts +29 -1
- package/dist/experiment/host/operations.d.ts +29 -1
- package/dist/experiment/host/operations.js +6 -4
- package/dist/experiment/host/requirements.cjs +3 -0
- package/dist/experiment/host/requirements.cjs.map +1 -0
- package/dist/experiment/host/requirements.d.cts +3 -0
- package/dist/experiment/host/requirements.d.mts +3 -0
- package/dist/experiment/host/requirements.d.ts +3 -0
- package/dist/experiment/host/requirements.js +4 -0
- package/dist/experiment/host/requirements.js.map +1 -0
- package/dist/experiment/host/runtime.cjs +179 -0
- package/dist/experiment/host/runtime.cjs.map +1 -0
- package/dist/experiment/host/runtime.d.cts +79 -0
- package/dist/experiment/host/runtime.d.mts +79 -0
- package/dist/experiment/host/runtime.d.ts +79 -0
- package/dist/experiment/host/runtime.js +6 -0
- package/dist/experiment/host/runtime.js.map +1 -0
- package/dist/experiment/host/types.cjs.map +1 -1
- package/dist/experiment/host/types.d.cts +17 -16
- package/dist/experiment/host/types.d.mts +17 -16
- package/dist/experiment/host/types.d.ts +17 -16
- package/dist/fresh-import.cjs +2 -1
- package/dist/fresh-import.cjs.map +1 -1
- package/dist/index.cjs +4 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -6
- package/dist/index.d.mts +12 -6
- package/dist/index.d.ts +12 -6
- package/dist/index.js +32 -30
- package/dist/index.mjs +32 -30
- package/dist/inspection/artifacts.cjs +83 -54
- package/dist/inspection/artifacts.cjs.map +1 -1
- package/dist/inspection/artifacts.d.cts +8 -0
- package/dist/inspection/artifacts.d.mts +8 -0
- package/dist/inspection/artifacts.d.ts +8 -0
- package/dist/inspection/artifacts.js +2 -0
- package/dist/inspection/assertions.cjs +4 -1
- package/dist/inspection/assertions.cjs.map +1 -1
- package/dist/inspection/cli/contribution.cjs +27 -4
- package/dist/inspection/cli/contribution.cjs.map +1 -1
- package/dist/inspection/cli/contribution.d.cts +2 -1
- package/dist/inspection/cli/contribution.d.mts +2 -1
- package/dist/inspection/cli/contribution.d.ts +2 -1
- package/dist/inspection/execution-traces.cjs +114 -8
- package/dist/inspection/execution-traces.cjs.map +1 -1
- package/dist/inspection/execution-traces.d.cts +38 -0
- package/dist/inspection/execution-traces.d.mts +38 -0
- package/dist/inspection/execution-traces.d.ts +38 -0
- package/dist/inspection/facts.cjs +12 -0
- package/dist/inspection/facts.cjs.map +1 -1
- package/dist/inspection/limits.cjs +5 -1
- package/dist/inspection/limits.cjs.map +1 -1
- package/dist/inspection/limits.d.cts +4 -0
- package/dist/inspection/limits.d.mts +4 -0
- package/dist/inspection/limits.d.ts +4 -0
- package/dist/inspection/limits.js +6 -2
- package/dist/inspection/overview.cjs +74 -33
- package/dist/inspection/overview.cjs.map +1 -1
- package/dist/inspection/overview.d.cts +19 -1
- package/dist/inspection/overview.d.mts +19 -1
- package/dist/inspection/overview.d.ts +19 -1
- package/dist/inspection/overview.js +4 -2
- package/dist/inspection/project-input.cjs +9 -0
- package/dist/inspection/project-input.cjs.map +1 -0
- package/dist/inspection/project-input.d.cts +20 -0
- package/dist/inspection/project-input.d.mts +20 -0
- package/dist/inspection/project-input.d.ts +20 -0
- package/dist/inspection/project-input.js +8 -0
- package/dist/inspection/project-input.js.map +1 -0
- package/dist/inspection/project-result.cjs +60 -0
- package/dist/inspection/project-result.cjs.map +1 -0
- package/dist/inspection/project-result.d.cts +1264 -0
- package/dist/inspection/project-result.d.mts +1264 -0
- package/dist/inspection/project-result.d.ts +1264 -0
- package/dist/inspection/project-result.js +10 -0
- package/dist/inspection/project-result.js.map +1 -0
- package/dist/inspection/project-source.cjs +109 -0
- package/dist/inspection/project-source.cjs.map +1 -0
- package/dist/inspection/project-source.d.cts +10 -0
- package/dist/inspection/project-source.d.mts +10 -0
- package/dist/inspection/project-source.d.ts +10 -0
- package/dist/inspection/project-source.js +6 -0
- package/dist/inspection/project-source.js.map +1 -0
- package/dist/inspection/project.cjs +100 -0
- package/dist/inspection/project.cjs.map +1 -0
- package/dist/inspection/project.d.cts +3 -0
- package/dist/inspection/project.d.mts +3 -0
- package/dist/inspection/project.d.ts +3 -0
- package/dist/inspection/project.js +6 -0
- package/dist/inspection/project.js.map +1 -0
- package/dist/inspection/protocol.cjs +19 -9
- package/dist/inspection/protocol.cjs.map +1 -1
- package/dist/inspection/protocol.d.cts +5506 -38189
- package/dist/inspection/protocol.d.mts +5506 -38189
- package/dist/inspection/protocol.d.ts +5506 -38189
- package/dist/inspection/public.mjs +896 -84
- package/dist/inspection/query.cjs +2 -0
- package/dist/inspection/query.cjs.map +1 -1
- package/dist/inspection/results.cjs +234 -29
- package/dist/inspection/results.cjs.map +1 -1
- package/dist/inspection/results.d.cts +870 -13
- package/dist/inspection/results.d.mts +870 -13
- package/dist/inspection/results.d.ts +870 -13
- package/dist/inspection/results.js +36 -34
- package/dist/inspection/select.cjs +126 -14
- package/dist/inspection/select.cjs.map +1 -1
- package/dist/inspection/select.d.cts +1 -1
- package/dist/inspection/select.d.mts +1 -1
- package/dist/inspection/select.d.ts +1 -1
- package/dist/inspection/source.cjs +4 -0
- package/dist/inspection/source.cjs.map +1 -1
- package/dist/inspection/sources.cjs +5 -0
- package/dist/inspection/sources.cjs.map +1 -1
- package/dist/inspection/trace.cjs +82 -84
- package/dist/inspection/trace.cjs.map +1 -1
- package/dist/inspection/trace.d.cts +7 -2
- package/dist/inspection/trace.d.mts +7 -2
- package/dist/inspection/trace.d.ts +7 -2
- package/dist/model-slots.cjs +35 -0
- package/dist/model-slots.cjs.map +1 -0
- package/dist/model-slots.d.cts +19 -0
- package/dist/model-slots.d.mts +19 -0
- package/dist/model-slots.d.ts +19 -0
- package/dist/model-slots.js +8 -0
- package/dist/model-slots.js.map +1 -0
- package/dist/o11y/adapter-call-price.cjs +4 -0
- package/dist/o11y/adapter-call-price.cjs.map +1 -1
- package/dist/o11y/adapter-call-price.d.cts +24 -0
- package/dist/o11y/adapter-call-price.d.mts +24 -0
- package/dist/o11y/adapter-call-price.d.ts +24 -0
- package/dist/o11y/adapter-call-price.js +6 -2
- package/dist/o11y/adapter-usage-projection.cjs +158 -0
- package/dist/o11y/adapter-usage-projection.cjs.map +1 -0
- package/dist/o11y/adapter-usage-projection.d.cts +141 -0
- package/dist/o11y/adapter-usage-projection.d.mts +141 -0
- package/dist/o11y/adapter-usage-projection.d.ts +141 -0
- package/dist/o11y/adapter-usage-projection.js +20 -0
- package/dist/o11y/adapter-usage-projection.js.map +1 -0
- package/dist/o11y/eval-usage.cjs +149 -0
- package/dist/o11y/eval-usage.cjs.map +1 -0
- package/dist/o11y/eval-usage.d.cts +46 -0
- package/dist/o11y/eval-usage.d.mts +46 -0
- package/dist/o11y/eval-usage.d.ts +46 -0
- package/dist/o11y/eval-usage.js +8 -0
- package/dist/o11y/eval-usage.js.map +1 -0
- package/dist/o11y/judge-call-price.cjs +62 -0
- package/dist/o11y/judge-call-price.cjs.map +1 -0
- package/dist/o11y/judge-call-price.d.cts +3 -0
- package/dist/o11y/judge-call-price.d.mts +3 -0
- package/dist/o11y/judge-call-price.d.ts +3 -0
- package/dist/o11y/judge-call-price.js +6 -0
- package/dist/o11y/judge-call-price.js.map +1 -0
- package/dist/o11y/judge-usage-projection.cjs +134 -0
- package/dist/o11y/judge-usage-projection.cjs.map +1 -0
- package/dist/o11y/judge-usage-projection.d.cts +18 -0
- package/dist/o11y/judge-usage-projection.d.mts +18 -0
- package/dist/o11y/judge-usage-projection.d.ts +18 -0
- package/dist/o11y/judge-usage-projection.js +20 -0
- package/dist/o11y/judge-usage-projection.js.map +1 -0
- package/dist/o11y/judge-usage-receipt.cjs +135 -0
- package/dist/o11y/judge-usage-receipt.cjs.map +1 -0
- package/dist/o11y/judge-usage-receipt.d.cts +5 -0
- package/dist/o11y/judge-usage-receipt.d.mts +5 -0
- package/dist/o11y/judge-usage-receipt.d.ts +5 -0
- package/dist/o11y/judge-usage-receipt.js +6 -0
- package/dist/o11y/judge-usage-receipt.js.map +1 -0
- package/dist/o11y/judge-usage.cjs +171 -0
- package/dist/o11y/judge-usage.cjs.map +1 -0
- package/dist/o11y/judge-usage.d.cts +35 -0
- package/dist/o11y/judge-usage.d.mts +35 -0
- package/dist/o11y/judge-usage.d.ts +35 -0
- package/dist/o11y/judge-usage.js +6 -0
- package/dist/o11y/judge-usage.js.map +1 -0
- package/dist/plugin/contracts.cjs +2 -0
- package/dist/plugin/contracts.cjs.map +1 -1
- package/dist/plugin/link.cjs +7 -0
- package/dist/plugin/link.cjs.map +1 -1
- package/dist/record/attachment/protocol.cjs +8 -6
- package/dist/record/attachment/protocol.cjs.map +1 -1
- package/dist/record/attachment/protocol.d.cts +10 -0
- package/dist/record/attachment/protocol.d.mts +10 -0
- package/dist/record/attachment/protocol.d.ts +10 -0
- package/dist/record/attachment/protocol.js +38 -36
- package/dist/record/codec/seal-manifest.d.cts +3 -3
- package/dist/record/codec/seal-manifest.d.mts +3 -3
- package/dist/record/codec/seal-manifest.d.ts +3 -3
- package/dist/record/family/adapter-usage/definition.d.cts +1 -0
- package/dist/record/family/adapter-usage/definition.d.mts +1 -0
- package/dist/record/family/adapter-usage/definition.d.ts +1 -0
- package/dist/record/family/adapter-usage/persistence.cjs +1 -1
- package/dist/record/family/adapter-usage/persistence.cjs.map +1 -1
- package/dist/record/family/adapter-usage/persistence.d.cts +2 -1
- package/dist/record/family/adapter-usage/persistence.d.mts +2 -1
- package/dist/record/family/adapter-usage/persistence.d.ts +2 -1
- package/dist/record/family/adapter-usage/schema.cjs +21 -2
- package/dist/record/family/adapter-usage/schema.cjs.map +1 -1
- package/dist/record/family/adapter-usage/schema.d.cts +85 -0
- package/dist/record/family/adapter-usage/schema.d.mts +85 -0
- package/dist/record/family/adapter-usage/schema.d.ts +85 -0
- package/dist/record/family/adapter-usage/schema.js +18 -12
- package/dist/record/family/catalog.cjs +31 -27
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +94 -3
- package/dist/record/family/catalog.d.mts +94 -3
- package/dist/record/family/catalog.d.ts +94 -3
- package/dist/record/family/current.cjs +45 -42
- package/dist/record/family/current.cjs.map +1 -1
- package/dist/record/family/current.d.cts +240 -1
- package/dist/record/family/current.d.mts +240 -1
- package/dist/record/family/current.d.ts +240 -1
- package/dist/record/family/execution-traces/definition.d.cts +26 -0
- package/dist/record/family/execution-traces/definition.d.mts +26 -0
- package/dist/record/family/execution-traces/definition.d.ts +26 -0
- package/dist/record/family/execution-traces/definition.js +20 -14
- package/dist/record/family/execution-traces/schema.cjs +57 -1
- package/dist/record/family/execution-traces/schema.cjs.map +1 -1
- package/dist/record/family/execution-traces/schema.d.cts +114 -0
- package/dist/record/family/execution-traces/schema.d.mts +114 -0
- package/dist/record/family/execution-traces/schema.d.ts +114 -0
- package/dist/record/family/execution-traces/schema.js +18 -12
- package/dist/record/family/judge-usage/definition.cjs +12 -0
- package/dist/record/family/judge-usage/definition.cjs.map +1 -0
- package/dist/record/family/judge-usage/definition.d.cts +91 -0
- package/dist/record/family/judge-usage/definition.d.mts +91 -0
- package/dist/record/family/judge-usage/definition.d.ts +91 -0
- package/dist/record/family/judge-usage/definition.js +6 -0
- package/dist/record/family/judge-usage/definition.js.map +1 -0
- package/dist/record/family/judge-usage/persistence.cjs +10 -0
- package/dist/record/family/judge-usage/persistence.cjs.map +1 -0
- package/dist/record/family/judge-usage/persistence.d.cts +91 -0
- package/dist/record/family/judge-usage/persistence.d.mts +91 -0
- package/dist/record/family/judge-usage/persistence.d.ts +91 -0
- package/dist/record/family/judge-usage/persistence.js +6 -0
- package/dist/record/family/judge-usage/persistence.js.map +1 -0
- package/dist/record/family/judge-usage/schema.cjs +307 -0
- package/dist/record/family/judge-usage/schema.cjs.map +1 -0
- package/dist/record/family/judge-usage/schema.d.cts +351 -0
- package/dist/record/family/judge-usage/schema.d.mts +351 -0
- package/dist/record/family/judge-usage/schema.d.ts +351 -0
- package/dist/record/family/judge-usage/schema.js +18 -0
- package/dist/record/family/judge-usage/schema.js.map +1 -0
- package/dist/record/host/sqlite-host.cjs +55 -9
- package/dist/record/host/sqlite-host.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +7 -0
- package/dist/record/host/types.d.mts +7 -0
- package/dist/record/host/types.d.ts +7 -0
- package/dist/record/model/run-context.cjs +7 -1
- package/dist/record/model/run-context.cjs.map +1 -1
- package/dist/record/model/run-context.d.cts +4 -0
- package/dist/record/model/run-context.d.mts +4 -0
- package/dist/record/model/run-context.d.ts +4 -0
- package/dist/record/model/seal-manifest.d.cts +1 -1
- package/dist/record/model/seal-manifest.d.mts +1 -1
- package/dist/record/model/seal-manifest.d.ts +1 -1
- package/dist/record/sqlite/client.cjs +18 -5
- package/dist/record/sqlite/client.cjs.map +1 -1
- package/dist/record/sqlite/client.d.cts +1 -1
- package/dist/record/sqlite/client.d.mts +1 -1
- package/dist/record/sqlite/client.d.ts +1 -1
- package/dist/record/sqlite/project-state-database.cjs +29 -8
- package/dist/record/sqlite/project-state-database.cjs.map +1 -1
- package/dist/run/host/runtime.cjs +4 -0
- package/dist/run/host/runtime.cjs.map +1 -1
- package/dist/run/storage/sqlite.cjs +20 -0
- package/dist/run/storage/sqlite.cjs.map +1 -1
- package/dist/runner/adapter-execution-trace.cjs +125 -2
- package/dist/runner/adapter-execution-trace.cjs.map +1 -1
- package/dist/runner/adapter-execution-trace.d.cts +1 -1
- package/dist/runner/adapter-execution-trace.d.mts +1 -1
- package/dist/runner/adapter-execution-trace.d.ts +1 -1
- package/dist/runner/adapter-usage.cjs +55 -7
- package/dist/runner/adapter-usage.cjs.map +1 -1
- package/dist/runner/adapter-usage.d.cts +9 -2
- package/dist/runner/adapter-usage.d.mts +9 -2
- package/dist/runner/adapter-usage.d.ts +9 -2
- package/dist/runner/adoption.cjs +9 -0
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-cancellation.cjs +12 -0
- package/dist/runner/attempt-cancellation.cjs.map +1 -0
- package/dist/runner/attempt-cancellation.d.cts +6 -0
- package/dist/runner/attempt-cancellation.d.mts +6 -0
- package/dist/runner/attempt-cancellation.d.ts +6 -0
- package/dist/runner/attempt-cancellation.js +6 -0
- package/dist/runner/attempt-cancellation.js.map +1 -0
- package/dist/runner/attempt-resources.cjs +10 -4
- package/dist/runner/attempt-resources.cjs.map +1 -1
- package/dist/runner/attempt-resources.d.cts +2 -1
- package/dist/runner/attempt-resources.d.mts +2 -1
- package/dist/runner/attempt-resources.d.ts +2 -1
- package/dist/runner/attempt.cjs +1177 -1139
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/config-identity.cjs +20 -1
- package/dist/runner/config-identity.cjs.map +1 -1
- package/dist/runner/config-identity.d.cts +5 -0
- package/dist/runner/config-identity.d.mts +5 -0
- package/dist/runner/config-identity.d.ts +5 -0
- package/dist/runner/discover.cjs +14 -0
- package/dist/runner/discover.cjs.map +1 -1
- package/dist/runner/discover.d.cts +3 -0
- package/dist/runner/discover.d.mts +3 -0
- package/dist/runner/discover.d.ts +3 -0
- package/dist/runner/feedback/human.cjs +9 -4
- package/dist/runner/feedback/human.cjs.map +1 -1
- package/dist/runner/fingerprint.cjs +1 -0
- package/dist/runner/fingerprint.cjs.map +1 -1
- package/dist/runner/judge-usage.cjs +18 -0
- package/dist/runner/judge-usage.cjs.map +1 -0
- package/dist/runner/judge-usage.d.cts +5 -0
- package/dist/runner/judge-usage.d.mts +5 -0
- package/dist/runner/judge-usage.d.ts +5 -0
- package/dist/runner/judge-usage.js +8 -0
- package/dist/runner/judge-usage.js.map +1 -0
- package/dist/runner/project-target.cjs.map +1 -1
- package/dist/runner/project-target.d.cts +2 -0
- package/dist/runner/project-target.d.mts +2 -0
- package/dist/runner/project-target.d.ts +2 -0
- package/dist/runner/record/planning.cjs +1 -0
- package/dist/runner/record/planning.cjs.map +1 -1
- package/dist/runner/record.cjs +4 -0
- package/dist/runner/record.cjs.map +1 -1
- package/dist/runner/reporters/braintrust.cjs +2 -0
- package/dist/runner/reporters/braintrust.cjs.map +1 -1
- package/dist/runner/reuse-diagnostics.cjs +9 -10
- package/dist/runner/reuse-diagnostics.cjs.map +1 -1
- package/dist/runner/reuse-diagnostics.d.cts +5 -6
- package/dist/runner/reuse-diagnostics.d.mts +5 -6
- package/dist/runner/reuse-diagnostics.d.ts +5 -6
- package/dist/runner/reuse-diagnostics.js +4 -4
- package/dist/runner/reuse-plan.cjs +100 -48
- package/dist/runner/reuse-plan.cjs.map +1 -1
- package/dist/runner/reuse-plan.d.cts +60 -3
- package/dist/runner/reuse-plan.d.mts +60 -3
- package/dist/runner/reuse-plan.d.ts +60 -3
- package/dist/runner/reuse-plan.js +14 -10
- package/dist/runner/run.cjs +8 -6
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/session.cjs +1 -1
- package/dist/runner/session.cjs.map +1 -1
- package/dist/runner/session.d.cts +1 -1
- package/dist/runner/session.d.mts +1 -1
- package/dist/runner/session.d.ts +1 -1
- package/dist/runner/source-producer.cjs +3 -1
- package/dist/runner/source-producer.cjs.map +1 -1
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +26 -5
- package/dist/runner/types.d.mts +26 -5
- package/dist/runner/types.d.ts +26 -5
- package/dist/sandbox/action.cjs +3 -0
- package/dist/sandbox/action.cjs.map +1 -1
- package/dist/sandbox/commands.cjs +3 -0
- package/dist/sandbox/commands.cjs.map +1 -1
- package/dist/sandbox/compose.cjs +6 -0
- package/dist/sandbox/compose.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.cjs +7 -0
- package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
- package/dist/sandbox/docker-profile/runtime.cjs +3 -0
- package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.cjs +7 -0
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/incus.cjs +7 -0
- package/dist/sandbox/incus.cjs.map +1 -1
- package/dist/sandbox/layer.cjs +12 -0
- package/dist/sandbox/layer.cjs.map +1 -1
- package/dist/shared/adapter-cleanup.cjs +18 -0
- package/dist/shared/adapter-cleanup.cjs.map +1 -0
- package/dist/shared/adapter-cleanup.d.cts +4 -0
- package/dist/shared/adapter-cleanup.d.mts +4 -0
- package/dist/shared/adapter-cleanup.d.ts +4 -0
- package/dist/shared/adapter-cleanup.js +10 -0
- package/dist/shared/adapter-cleanup.js.map +1 -0
- package/dist/shared/attempt-lifecycle.cjs +3 -0
- package/dist/shared/attempt-lifecycle.cjs.map +1 -0
- package/dist/shared/attempt-lifecycle.d.cts +13 -0
- package/dist/shared/attempt-lifecycle.d.mts +13 -0
- package/dist/shared/attempt-lifecycle.d.ts +13 -0
- package/dist/shared/attempt-lifecycle.js +4 -0
- package/dist/shared/attempt-lifecycle.js.map +1 -0
- package/dist/show/contribution.cjs +52 -14
- package/dist/show/contribution.cjs.map +1 -1
- package/dist/show/contribution.d.cts +23 -1
- package/dist/show/contribution.d.mts +23 -1
- package/dist/show/contribution.d.ts +23 -1
- package/dist/show/model.cjs +8 -1
- package/dist/show/model.cjs.map +1 -1
- package/dist/show/model.d.cts +10 -1
- package/dist/show/model.d.mts +10 -1
- package/dist/show/model.d.ts +10 -1
- package/dist/show/render.cjs +287 -49
- package/dist/show/render.cjs.map +1 -1
- package/dist/show/render.d.cts +3 -0
- package/dist/show/render.d.mts +3 -0
- package/dist/show/render.d.ts +3 -0
- package/dist/sources/projector.cjs +3 -0
- package/dist/sources/projector.cjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/view/app-dist/.vite/manifest.json +2 -2
- package/dist/view/app-dist/assets/index-CmVoXbwG.js +63 -0
- package/dist/view/app-dist/assets/{quality-cost-scatter-CFB3wnkN.js → quality-cost-scatter-BuLISaH4.js} +1 -1
- package/dist/view/app-dist/index.html +1 -1
- package/dist/view/cli/contribution.cjs +54 -21
- package/dist/view/cli/contribution.cjs.map +1 -1
- package/dist/view/cli/contribution.d.cts +2 -1
- package/dist/view/cli/contribution.d.mts +2 -1
- package/dist/view/cli/contribution.d.ts +2 -1
- package/dist/view/function-runtime.mjs +13231 -11647
- package/dist/view/http-protocol.cjs +3 -0
- package/dist/view/http-protocol.cjs.map +1 -1
- package/dist/view/http-protocol.d.cts +8 -0
- package/dist/view/http-protocol.d.mts +8 -0
- package/dist/view/http-protocol.d.ts +8 -0
- package/dist/view/inspection-host.cjs +17 -1
- package/dist/view/inspection-host.cjs.map +1 -1
- package/dist/view/render.cjs +1 -0
- package/dist/view/render.cjs.map +1 -1
- package/dist/view/render.d.cts +2 -1
- package/dist/view/render.d.mts +2 -1
- package/dist/view/render.d.ts +2 -1
- package/dist/view/revision.cjs.map +1 -1
- package/dist/view/revision.d.cts +12 -0
- package/dist/view/revision.d.mts +12 -0
- package/dist/view/revision.d.ts +12 -0
- package/dist/view/server.cjs +10 -9
- package/dist/view/server.cjs.map +1 -1
- package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
- package/docs-site/zh/explanation/adapter.mdx +2 -2
- package/docs-site/zh/explanation/assert.mdx +60 -24
- package/docs-site/zh/explanation/drive.mdx +1 -1
- package/docs-site/zh/explanation/evals.mdx +31 -29
- package/docs-site/zh/explanation/experiment.mdx +15 -15
- package/docs-site/zh/explanation/judge.mdx +23 -15
- package/docs-site/zh/explanation/overview.mdx +44 -21
- package/docs-site/zh/explanation/record.mdx +28 -13
- package/docs-site/zh/explanation/results-flow.mdx +37 -0
- package/docs-site/zh/explanation/runner.mdx +27 -6
- package/docs-site/zh/index.mdx +22 -115
- package/docs-site/zh/introduction.mdx +89 -61
- package/docs-site/zh/reference/cli.mdx +50 -26
- package/docs-site/zh/reference/define-agent.mdx +37 -5
- package/docs-site/zh/reference/define-eval.mdx +130 -29
- package/docs-site/zh/reference/define-experiment.mdx +251 -0
- package/docs-site/zh/reference/events.mdx +34 -30
- package/docs-site/zh/reference/expect.mdx +77 -2
- package/docs-site/zh/reference/official-adapters.mdx +2 -2
- package/docs-site/zh/troubleshooting/debug-sandbox.mdx +43 -24
- package/docs-site/zh/troubleshooting/debugging.mdx +65 -42
- package/docs-site/zh/troubleshooting/recover-after-kill.mdx +35 -28
- package/docs-site/zh/tutorials/accept-results.mdx +34 -24
- package/docs-site/zh/tutorials/agent-feedback-loop.mdx +74 -43
- package/docs-site/zh/tutorials/agent-onboarding.mdx +27 -20
- package/docs-site/zh/tutorials/authoring.mdx +138 -121
- package/docs-site/zh/tutorials/ci-integration.mdx +46 -22
- package/docs-site/zh/tutorials/compare-runs.mdx +40 -13
- package/docs-site/zh/tutorials/concurrency.mdx +66 -62
- package/docs-site/zh/tutorials/configuration.mdx +17 -17
- package/docs-site/zh/tutorials/connect-otel.mdx +48 -37
- package/docs-site/zh/tutorials/connect-your-agent.mdx +80 -173
- package/docs-site/zh/tutorials/control-run-cost.mdx +63 -12
- package/docs-site/zh/tutorials/criteria-files.mdx +28 -21
- package/docs-site/zh/tutorials/custom-application.mdx +75 -55
- package/docs-site/zh/tutorials/dataset-fanout.mdx +32 -22
- package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +38 -31
- package/docs-site/zh/tutorials/docker-in-docker.mdx +83 -89
- package/docs-site/zh/tutorials/eval-groups.mdx +70 -89
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +12 -5
- package/docs-site/zh/tutorials/experiment-services.mdx +243 -0
- package/docs-site/zh/tutorials/fixtures.mdx +42 -26
- package/docs-site/zh/tutorials/handle-execution-failures.mdx +41 -19
- package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +21 -16
- package/docs-site/zh/tutorials/niceeval-taste-application.mdx +394 -0
- package/docs-site/zh/tutorials/niceeval-taste.mdx +190 -0
- package/docs-site/zh/tutorials/nixos-managed-dind.mdx +51 -39
- package/docs-site/zh/tutorials/plugins.mdx +55 -31
- package/docs-site/zh/tutorials/prebuilt-sandbox.mdx +204 -0
- package/docs-site/zh/tutorials/quickstart.mdx +91 -47
- package/docs-site/zh/tutorials/reporters.mdx +45 -30
- package/docs-site/zh/tutorials/rerun-and-cache.mdx +39 -40
- package/docs-site/zh/tutorials/sandbox-agent.mdx +65 -40
- package/docs-site/zh/tutorials/sandbox-providers.mdx +104 -282
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +65 -97
- package/docs-site/zh/tutorials/select-and-preview.mdx +25 -20
- package/docs-site/zh/tutorials/verify-judge.mdx +49 -26
- package/docs-site/zh/tutorials/viewing-results.mdx +130 -80
- package/docs-site/zh/tutorials/write-experiment.mdx +116 -298
- package/docs-site/zh/tutorials/write-send.mdx +53 -52
- package/node_modules/undici/docs/docs/api/Agent.md +8 -8
- package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +9 -6
- package/node_modules/undici/docs/docs/api/Errors.md +25 -0
- package/node_modules/undici/docs/docs/api/Interceptors.md +4 -3
- package/node_modules/undici/docs/docs/api/Pool.md +5 -6
- package/node_modules/undici/lib/api/readable.js +1 -2
- package/node_modules/undici/lib/core/request.js +23 -2
- package/node_modules/undici/lib/core/util.js +0 -39
- package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
- package/node_modules/undici/lib/dispatcher/client-h2.js +52 -8
- package/node_modules/undici/lib/dispatcher/client.js +1 -1
- package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -2
- package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +21 -6
- package/node_modules/undici/lib/dispatcher/pool-base.js +63 -2
- package/node_modules/undici/lib/dispatcher/pool.js +90 -7
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +16 -3
- package/node_modules/undici/lib/handler/deduplication-handler.js +24 -11
- package/node_modules/undici/lib/handler/redirect-handler.js +5 -0
- package/node_modules/undici/lib/handler/retry-handler.js +72 -13
- package/node_modules/undici/lib/interceptor/cache.js +4 -1
- package/node_modules/undici/lib/interceptor/decompress.js +236 -69
- package/node_modules/undici/lib/web/cache/cache.js +17 -8
- package/node_modules/undici/lib/web/cache/cachestorage.js +11 -5
- package/node_modules/undici/lib/web/cookies/index.js +19 -7
- package/node_modules/undici/lib/web/cookies/util.js +3 -1
- package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -1
- package/node_modules/undici/lib/web/fetch/body.js +22 -15
- package/node_modules/undici/lib/web/fetch/data-url.js +6 -6
- package/node_modules/undici/lib/web/fetch/formdata.js +30 -36
- package/node_modules/undici/lib/web/fetch/headers.js +34 -31
- package/node_modules/undici/lib/web/fetch/index.js +38 -14
- package/node_modules/undici/lib/web/fetch/request.js +74 -79
- package/node_modules/undici/lib/web/fetch/response.js +43 -44
- package/node_modules/undici/lib/web/fetch/util.js +7 -7
- package/node_modules/undici/lib/web/infra/index.js +16 -1
- package/node_modules/undici/lib/web/webidl/index.js +2 -14
- package/node_modules/undici/lib/web/websocket/events.js +43 -26
- package/node_modules/undici/lib/web/websocket/receiver.js +5 -0
- package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +13 -10
- package/node_modules/undici/lib/web/websocket/websocket.js +44 -41
- package/node_modules/undici/package.json +1 -1
- package/node_modules/undici/types/diagnostics-channel.d.ts +2 -1
- package/node_modules/undici/types/interceptors.d.ts +1 -1
- package/node_modules/undici/types/webidl.d.ts +13 -7
- package/package.json +4 -4
- package/dist/view/app-dist/assets/index-DFzw1L97.js +0 -63
- package/docs-site/zh/tutorials/experiments.mdx +0 -101
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["record.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { Cause, Effect, Result, Exit, Option, Semaphore, Stream } from \"effect\";\nimport { encodeAttemptLocator, type AttemptLocator } from \"../attempt-locator.ts\";\nimport type { SealedAttemptAssertions } from \"../assertions/api.ts\";\nimport type { AssertionsProducerError } from \"../assertions/record/producer.ts\";\nimport { NiceEvalRecordAttachments } from \"../record/family/catalog.ts\";\nimport { recordHost } from \"../record/host/runtime.ts\";\nimport { discardAttemptWriteSession, writerGenerationForRunSession } from \"../record/host/sqlite-host.ts\";\nimport type { AttemptWriteSession, RecordSealReceipt, RunWriteSession, } from \"../record/host/types.ts\";\nimport type { RunId, SlotId, } from \"../record/model/identifiers.ts\";\nimport type { AssertionEntryId } from \"../assertions/identity.ts\";\nimport { recordRootPaths, type RecordRoot } from \"../record/platform/root.ts\";\nimport { attemptPublicationClosure } from \"../record/codec/core.ts\";\nimport { RecordRootInvalid } from \"../record/platform/errors.ts\";\nimport { recordSqlitePath } from \"../record/sqlite/index.ts\";\nimport type { ProjectStateDatabase } from \"../record/sqlite/project-state-database.ts\";\nimport type { RecordReaderOpenError, RecordReaderReadError, } from \"../record/reader/errors.ts\";\nimport type { RecordWriteError } from \"../record/writer/types.ts\";\nimport { bindAttemptReference, closeRunResource, currentPublicationCutoff, publishOriginAttempt, createRunWriterGeneration, type PublicationCutoff, type RunAbsenceReason, } from \"../run/storage/index.ts\";\nimport { cacheKey } from \"./fingerprint.ts\";\nimport { planProjectTargetReuse, planProjectTargetReuseWithoutSources, type ExecutionReusePlan, type ExecutionReusePlanSlot, type ProjectTargetReusePlanInvalid, type TargetRun, } from \"./reuse-plan.ts\";\nimport { readCurrentExecutionReusePlanReadbacks, readCurrentExecutionReusePlanResults, type CurrentReusedAttemptReadback, type CurrentReuseReadback, type CurrentReuseReadbackPlanInvalid, } from \"./reuse-readback.ts\";\nimport { createRunnerTurnContextsAttachment, createRunnerSourceWritePlan, type RunnerSourceProducerInvalid, } from \"./source-producer.ts\";\nimport { createAttemptArtifactsAttachment, createAttemptFileChangesAttachment, createAttemptObservabilityAttachments, createRunArtifactsAttachment, createRunnerAssertionsAttachment, createRunObservabilityAttachments, recordAttemptOutcome, } from \"./record/attachments.ts\";\nimport { adapterUsageForResult } from \"./adapter-usage.ts\";\nimport { adapterAttachmentsForResult, releaseAdapterAttachments } from \"./adapter-attachments.ts\";\nimport { adapterExecutionTracesForResult, validateExecutionTracePublication, } from \"./adapter-execution-trace.ts\";\nimport { executionTracesRecordCollection } from \"../record/family/execution-traces/definition.ts\";\nimport { planRunnerRecordRun, previewRunnerRunId, runnerRecordSlotKey, runnerRecordUtcMillis, targetForRunnerRecordRun, type PlannedRunnerRecordRun, type RunnerRecordReuseInput, type RunnerRecordTargetIdentityInvalid, type RunnerRecordTargetInputMissing, } from \"./record/planning.ts\";\nimport type { AgentRun, Attempt, DiscoveredEval, EvalResult, } from \"./types.ts\";\nimport type { AttemptCostAttachment } from \"../record/family/attempt-cost/definition.ts\";\nimport { getPricingEstimateReceipt } from \"./pricing-estimate-receipt.ts\";\nimport type { SessionTracker } from \"./session.ts\";\nexport { prepareRunnerRecordReuse, type RunnerRecordReuseInput, type RunnerRecordReusePreparationInput, type RunnerRecordReuseSlotInput, type RunnerRecordTargetIdentityInvalid, type RunnerRecordTargetInputMissing, } from \"./record/planning.ts\";\ntype GapActionState = \"pending\" | \"reserved\" | \"executed\" | \"not-dispatched\" | \"interrupted\";\ninterface ActiveRunnerRecordAttempt {\n readonly attempt: Attempt;\n readonly session: AttemptWriteSession;\n readonly public: RunnerRecordAttempt;\n sealed?: SealedAttemptAssertions;\n result?: EvalResult;\n assertionEntryIds?: readonly AssertionEntryId[];\n completed: boolean;\n}\ninterface RunnerRecordRun extends PlannedRunnerRecordRun {\n readonly session: RunWriteSession;\n readonly target: TargetRun;\n readonly attempts: Map<SlotId, ActiveRunnerRecordAttempt>;\n readonly planSlots: Map<SlotId, ExecutionReusePlanSlot>;\n readonly gapActions: Map<SlotId, GapActionState>;\n readonly writerGeneration: string;\n}\nexport interface RunnerRecordAttempt {\n readonly slotId: SlotId;\n readonly attemptId: import(\"../record/model/identifiers.ts\").AttemptId;\n readonly locator: AttemptLocator;\n}\nexport type RecordAttemptLocator = AttemptLocator;\nfunction createAttemptCostAttachment(result: EvalResult): AttemptCostAttachment {\n const receipt = getPricingEstimateReceipt(result);\n return Object.freeze({\n ...(result.usage?.costUSD === undefined ? {} : {\n observed: Object.freeze({ kind: \"observed\" as const, amountUSD: result.usage.costUSD }),\n }),\n ...(receipt === undefined ? {} : {\n estimated: Object.freeze({\n kind: \"estimated\" as const,\n amountUSD: receipt.amountUSD,\n model: receipt.model,\n priceSource: receipt.priceSource,\n charges: receipt.charges,\n }),\n }),\n });\n}\nexport interface RunnerRecordAttemptInvalid {\n readonly code: \"runner-record-attempt-invalid\";\n}\nexport interface RunnerRecordUnsealedAttempt {\n readonly code: \"runner-record-attempt-unsealed\";\n readonly slotId: SlotId;\n}\nexport interface RunnerRecordMembershipStateInvalid {\n readonly code: \"runner-record-membership-state-invalid\";\n readonly slotId: SlotId;\n}\nexport interface RunnerRecordAttemptPublicationFailed {\n readonly code: \"runner-record-attempt-publication-failed\";\n readonly locator: AttemptLocator;\n readonly cause: unknown;\n readonly message: string;\n}\n/** A seal return without its durable marker is never a publish receipt. */\nexport interface RunnerRecordPublishStateInvalid {\n readonly code: \"runner-record-publish-state-invalid\";\n readonly runId: RunId;\n}\nexport interface RunnerRecordAssertionsInvalid {\n readonly code: \"runner-record-assertions-invalid\";\n readonly issue: AssertionsProducerError;\n}\nexport interface RunnerRecordObservabilityInvalid {\n readonly code: \"runner-record-observability-invalid\";\n readonly owner: \"attempt\" | \"run\";\n readonly stage: \"capture\" | \"attachment\";\n}\nexport interface RunnerRecordSourcesInvalid {\n readonly code: \"runner-record-sources-invalid\";\n readonly issue: RunnerSourceProducerInvalid;\n}\nexport interface RunnerRecordArtifactsInvalid {\n readonly code: \"runner-record-artifacts-invalid\";\n readonly owner: \"attempt\" | \"run\";\n readonly reason: \"trace-serialization-failed\" | \"attachment-closure-invalid\";\n}\nexport type RunnerRecordWriteError = RecordWriteError | RunnerRecordAttemptInvalid | RunnerRecordUnsealedAttempt | RunnerRecordMembershipStateInvalid | RunnerRecordAttemptPublicationFailed | RunnerRecordPublishStateInvalid | RunnerRecordTargetIdentityInvalid | RunnerRecordAssertionsInvalid | RunnerRecordObservabilityInvalid | RunnerRecordSourcesInvalid | RunnerRecordArtifactsInvalid;\nexport type RunnerRecordOpenError = RecordReaderOpenError | RecordWriteError | RecordReaderReadError | ProjectTargetReusePlanInvalid | RunnerRecordTargetInputMissing | RunnerRecordTargetIdentityInvalid | RunnerRecordMembershipStateInvalid | RunnerSessionOpenFailed;\nexport interface RunnerSessionOpenFailed {\n readonly code: \"runner-session-open-failed\";\n readonly cause: unknown;\n}\nexport interface RunnerRecordCoordinator {\n readonly reusePlan: ExecutionReusePlan;\n readonly readCarriedResults: () => Effect.Effect<readonly CurrentReusedAttemptReadback[], RecordReaderReadError | CurrentReuseReadbackPlanInvalid>;\n readonly runIdsByExperiment: ReadonlyMap<string, string>;\n readonly publicationCutoff: () => Effect.Effect<PublicationCutoff, unknown, ProjectStateDatabase>;\n readonly carriedAttemptsByKey: ReadonlyMap<string, ReadonlySet<number>>;\n readonly adoptLatePublishedAttempt: (attempt: Attempt) => Effect.Effect<boolean, RecordReaderOpenError | RecordReaderReadError | ProjectTargetReusePlanInvalid | RunnerRecordWriteError, import(\"effect\").Scope.Scope | import(\"../coordination/record-leases.ts\").RecordCoordination | ProjectStateDatabase>;\n readonly reserveAttempt: (attempt: Attempt) => Effect.Effect<RunnerRecordAttempt, RunnerRecordWriteError, ProjectStateDatabase>;\n readonly noteSealedOrMarkIncomplete: (attempt: Attempt, sealed: SealedAttemptAssertions) => Effect.Effect<void, never>;\n readonly completeAttemptOrMarkIncomplete: (attempt: Attempt, result: EvalResult) => Effect.Effect<RunnerRecordAttempt | undefined, never, ProjectStateDatabase>;\n readonly markNotDispatched: (attempt: Attempt) => void;\n readonly publish: (completedAt: number, mode: \"normal\" | \"interrupted\") => Effect.Effect<readonly RecordSealReceipt[], RunnerRecordWriteError, ProjectStateDatabase>;\n}\n/** Current preview preserves the read Scope and never creates a Run row. */\nexport function withRunnerCurrentReusePreview<A, E, R>(input: {\n readonly recordRoot: RecordRoot;\n readonly startedAt: number;\n readonly evals: readonly DiscoveredEval[];\n readonly runs: readonly AgentRun[];\n readonly reuse: RunnerRecordReuseInput;\n readonly use: (preview: {\n readonly reusePlan: ExecutionReusePlan;\n readonly readReadbacks: () => Effect.Effect<readonly CurrentReuseReadback[], RecordReaderReadError | CurrentReuseReadbackPlanInvalid>;\n }) => Effect.Effect<A, E, R>;\n}): Effect.Effect<A, E | RunnerRecordOpenError, R | import(\"effect\").Scope.Scope | import(\"../coordination/record-leases.ts\").RecordCoordination | ProjectStateDatabase> {\n return Effect.scoped(Effect.gen(function* () {\n const startedAt = runnerRecordUtcMillis(input.startedAt);\n if (Result.isFailure(startedAt))\n return yield* Effect.fail(startedAt.failure);\n const planned = yield* Effect.forEach(input.runs, (run) => planRunnerRecordRun({\n run,\n evals: input.evals,\n reuse: input.reuse,\n }), { concurrency: 1 });\n const previewRuns: TargetRun[] = [];\n for (const plan of planned) {\n const runId = previewRunnerRunId(plan.run);\n if (Result.isFailure(runId))\n return yield* Effect.fail(runId.failure);\n previewRuns.push(targetForRunnerRecordRun({ planned: plan, runId: runId.success, startedAt: startedAt.success }));\n }\n const target = Object.freeze({\n invocationId: `preview-${createHash(\"sha256\").update(String(input.startedAt), \"utf8\").digest(\"hex\")}`,\n runs: Object.freeze(previewRuns),\n });\n const rootPath = recordRootPaths(input.recordRoot)?.portableRoot;\n if (rootPath === undefined)\n return yield* Effect.fail(new RecordRootInvalid({ code: \"record-root-invalid\" }));\n const recordDatabase = recordSqlitePath(rootPath);\n if (!existsSync(recordDatabase)) {\n const reusePlan = yield* planProjectTargetReuseWithoutSources({ target, policy: input.reuse.policy });\n return yield* input.use({\n reusePlan,\n readReadbacks: () => Effect.succeed(Object.freeze([])),\n });\n }\n const reader = yield* recordHost.openRead({ root: input.recordRoot });\n const reusePlan = yield* planProjectTargetReuse({ reader, target, policy: input.reuse.policy });\n return yield* input.use({\n reusePlan,\n readReadbacks: () => readCurrentExecutionReusePlanReadbacks({ reader, plan: reusePlan }),\n });\n }));\n}\nfunction attemptInvalid(): RunnerRecordAttemptInvalid {\n return Object.freeze({ code: \"runner-record-attempt-invalid\" as const });\n}\nfunction unsealedAttempt(slotId: SlotId): RunnerRecordUnsealedAttempt {\n return Object.freeze({ code: \"runner-record-attempt-unsealed\" as const, slotId });\n}\nfunction membershipStateInvalid(slotId: SlotId): RunnerRecordMembershipStateInvalid {\n return Object.freeze({ code: \"runner-record-membership-state-invalid\" as const, slotId });\n}\nfunction attemptPublicationFailed(locator: AttemptLocator, cause: unknown): RunnerRecordAttemptPublicationFailed {\n const detail = cause instanceof Error\n ? cause.message\n : typeof cause === \"object\" && cause !== null && typeof Reflect.get(cause, \"message\") === \"string\"\n ? String(Reflect.get(cause, \"message\"))\n : typeof cause === \"object\" && cause !== null && typeof Reflect.get(cause, \"code\") === \"string\"\n ? String(Reflect.get(cause, \"code\"))\n : String(cause);\n return Object.freeze({\n code: \"runner-record-attempt-publication-failed\" as const,\n locator,\n cause,\n message: `Attempt publication failed for ${locator}: ${detail}`,\n });\n}\nfunction publishStateInvalid(runId: RunId): RunnerRecordPublishStateInvalid {\n return Object.freeze({ code: \"runner-record-publish-state-invalid\" as const, runId });\n}\n/**\n * Opens one new per-Experiment Run session, selects only sealed historical\n * Runs, and writes carry references before dispatch. No global Record writer\n * lock or superseded draft/attachment contract participates in this boundary.\n */\nexport function openRunnerRecordCoordinator(input: {\n readonly recordRoot: RecordRoot;\n readonly startedAt: number;\n readonly evals: readonly DiscoveredEval[];\n readonly runs: readonly AgentRun[];\n readonly reuse: RunnerRecordReuseInput;\n readonly session?: SessionTracker;\n}): Effect.Effect<RunnerRecordCoordinator, RunnerRecordOpenError, import(\"effect\").Scope.Scope | import(\"../record/platform/services.ts\").RecordEntropy | import(\"../coordination/record-leases.ts\").RecordCoordination | ProjectStateDatabase> {\n return Effect.gen(function* () {\n const rootPath = recordRootPaths(input.recordRoot)?.portableRoot;\n if (rootPath === undefined)\n return yield* Effect.fail(new RecordRootInvalid({ code: \"record-root-invalid\" }));\n const seenExperiments = new Set<string>();\n for (const run of input.runs) {\n if (seenExperiments.has(run.experimentId)) {\n return yield* Effect.fail({\n code: \"runner-record-target-identity-invalid\" as const,\n kind: \"invocation\" as const,\n value: `duplicate experimentId ${JSON.stringify(run.experimentId)}`,\n });\n }\n seenExperiments.add(run.experimentId);\n }\n const startedAt = runnerRecordUtcMillis(input.startedAt);\n if (Result.isFailure(startedAt))\n return yield* Effect.fail(startedAt.failure);\n const planned = yield* Effect.forEach(input.runs, (run) => planRunnerRecordRun({\n run,\n evals: input.evals,\n reuse: input.reuse,\n }), { concurrency: 1 });\n const invocationId = input.session?.sessionId ?? createHash(\"sha256\")\n .update(`${input.startedAt}\\u0000${planned.map((entry) => entry.run.experimentId).join(\"\\u0000\")}`, \"utf8\")\n .digest(\"hex\");\n const openedRuns = yield* Effect.forEach(planned, (plan) => recordHost.createRun({\n root: input.recordRoot,\n experimentId: plan.experimentId,\n context: plan.context,\n startedAt: startedAt.success,\n expectedSlots: plan.expectedSlots,\n writerGeneration: createRunWriterGeneration(`${invocationId}:${plan.experimentId}`),\n }).pipe(Effect.map((session) => {\n const writerGeneration = writerGenerationForRunSession(session);\n if (writerGeneration === undefined)\n throw new Error(\"Run writer generation is unavailable\");\n return Object.freeze({ plan, session, writerGeneration });\n })), { concurrency: 1 });\n if (input.session !== undefined) {\n const startedAtIso = new Date(input.startedAt).toISOString();\n yield* input.session.start({\n runIds: new Map(openedRuns.map(({ plan, session }) => [plan.experimentId, String(session.runId)])),\n agentRuns: input.runs,\n startedAt: startedAtIso,\n invocationRuns: openedRuns.map(({ plan, session, writerGeneration }) => ({\n runId: String(session.runId),\n experimentId: plan.experimentId,\n writerGeneration,\n startedAt: startedAtIso,\n expectedSlots: plan.expectedSlots.map((slot) => ({\n slotId: String(slot.slotId), evalId: String(slot.evalId), attemptOrdinal: slot.attemptOrdinal,\n executionIdentityDigest: String(slot.executionIdentityDigest),\n })),\n })),\n }).pipe(Effect.mapError((cause): RunnerSessionOpenFailed => ({ code: \"runner-session-open-failed\", cause })));\n }\n const reader = yield* recordHost.openRead({ root: input.recordRoot });\n const byRun = new Map<AgentRun, RunnerRecordRun>();\n const byRecordRunId = new Map<RunId, RunnerRecordRun>();\n const runIdsByExperiment = new Map<string, string>();\n const targetRuns: TargetRun[] = [];\n for (const { plan, session, writerGeneration } of openedRuns) {\n const target = targetForRunnerRecordRun({\n planned: plan,\n runId: session.runId,\n startedAt: startedAt.success,\n });\n const recordRun: RunnerRecordRun = {\n ...plan,\n session,\n target,\n attempts: new Map(),\n planSlots: new Map(),\n gapActions: new Map(),\n writerGeneration,\n };\n byRun.set(plan.run, recordRun);\n byRecordRunId.set(session.runId, recordRun);\n runIdsByExperiment.set(plan.run.experimentId, session.runId);\n targetRuns.push(target);\n }\n const target = Object.freeze({\n invocationId,\n runs: Object.freeze(targetRuns),\n });\n const reusePlan = yield* planProjectTargetReuse({ reader, target, policy: input.reuse.policy });\n const carriedAttemptsByKey = new Map<string, Set<number>>();\n for (const slot of reusePlan.slots) {\n const recordRun = byRecordRunId.get(slot.runId);\n if (recordRun === undefined)\n return yield* Effect.fail(membershipStateInvalid(slot.slotId));\n recordRun.planSlots.set(slot.slotId, slot);\n if (slot.state === \"reuse\") {\n yield* recordRun.session.referenceAttempt({\n slotId: slot.slotId,\n action: \"carried\",\n attempt: slot.source.attempt,\n });\n yield* bindAttemptReference(rootPath, {\n runId: String(recordRun.session.runId),\n writerGeneration: recordRun.writerGeneration,\n slotId: String(slot.slotId),\n action: \"carried\",\n publicationIdentity: slot.source.attempt.publicationIdentity,\n deadlineEpochMs: Date.now() + 30000,\n }).pipe(Effect.mapError((cause): RunnerSessionOpenFailed => ({ code: \"runner-session-open-failed\", cause })));\n const entry = recordRun.slots.get(runnerRecordSlotKey(slot.evalId, slot.attempt));\n if (entry === undefined)\n return yield* Effect.fail(membershipStateInvalid(slot.slotId));\n const key = cacheKey(recordRun.run, entry.evalDef.id);\n const carried = carriedAttemptsByKey.get(key) ?? new Set<number>();\n carried.add(entry.attempt);\n carriedAttemptsByKey.set(key, carried);\n }\n else {\n recordRun.gapActions.set(slot.slotId, \"pending\");\n }\n }\n if (input.session !== undefined) {\n yield* input.session.applyCarriedAttempts(input.runs, carriedAttemptsByKey).pipe(Effect.mapError((cause): RunnerSessionOpenFailed => ({ code: \"runner-session-open-failed\", cause })));\n }\n let invocationWriteFailure: RunnerRecordWriteError | undefined;\n const writeFailuresByRun = new Map<RunnerRecordRun, RunnerRecordWriteError>();\n const noteFailure = (error: RunnerRecordWriteError, recordRun?: RunnerRecordRun): void => {\n if (recordRun === undefined) {\n if (invocationWriteFailure === undefined)\n invocationWriteFailure = error;\n return;\n }\n if (!writeFailuresByRun.has(recordRun))\n writeFailuresByRun.set(recordRun, error);\n };\n const lock = yield* Semaphore.make(1);\n const runForAttempt = (attempt: Attempt): RunnerRecordRun | undefined => byRun.get(attempt.run);\n const targetForAttempt = (attempt: Attempt): {\n readonly recordRun: RunnerRecordRun;\n readonly slotId: SlotId;\n readonly plan: ExecutionReusePlanSlot;\n } | undefined => {\n const recordRun = runForAttempt(attempt);\n if (recordRun === undefined)\n return undefined;\n const entry = recordRun.slots.get(runnerRecordSlotKey(attempt.evalDef.id, attempt.attempt));\n if (entry === undefined)\n return undefined;\n const plan = recordRun.planSlots.get(entry.slot.slotId);\n return plan === undefined ? undefined : { recordRun, slotId: entry.slot.slotId, plan };\n };\n const adoptLatePublishedAttempt = (attempt: Attempt) => lock.withPermits(1)(Effect.gen(function* () {\n const current = targetForAttempt(attempt);\n if (current === undefined\n || current.plan.state !== \"gap\"\n || current.recordRun.gapActions.get(current.slotId) !== \"pending\")\n return false;\n const freshReader = yield* recordHost.openRead({ root: input.recordRoot });\n const refreshed = yield* planProjectTargetReuse({\n reader: freshReader,\n target,\n policy: input.reuse.policy,\n });\n const replacement = refreshed.slots.find((slot) => slot.runId === current.recordRun.target.runId && slot.slotId === current.slotId);\n if (replacement?.state !== \"reuse\")\n return false;\n yield* current.recordRun.session.referenceAttempt({\n slotId: current.slotId,\n action: \"carried\",\n attempt: replacement.source.attempt,\n });\n yield* bindAttemptReference(rootPath, {\n runId: String(current.recordRun.session.runId),\n writerGeneration: current.recordRun.writerGeneration,\n slotId: String(current.slotId),\n action: \"carried\",\n publicationIdentity: replacement.source.attempt.publicationIdentity,\n deadlineEpochMs: Date.now() + 30000,\n }).pipe(Effect.mapError(() => publishStateInvalid(current.recordRun.session.runId)));\n current.recordRun.planSlots.set(current.slotId, replacement);\n current.recordRun.gapActions.delete(current.slotId);\n return true;\n }));\n const reserveAttempt = (attempt: Attempt): Effect.Effect<RunnerRecordAttempt, RunnerRecordWriteError, ProjectStateDatabase> => {\n const targetSlot = targetForAttempt(attempt);\n return lock.withPermits(1)(Effect.gen(function* () {\n if (targetSlot === undefined\n || targetSlot.plan.state !== \"gap\"\n || targetSlot.recordRun.gapActions.get(targetSlot.slotId) !== \"pending\") {\n return yield* Effect.fail(attemptInvalid());\n }\n const session = yield* targetSlot.recordRun.session.createAttempt({ slotId: targetSlot.slotId });\n const publicAttempt = Object.freeze({\n slotId: targetSlot.slotId,\n attemptId: session.attemptId,\n locator: encodeAttemptLocator(session.attemptId),\n });\n targetSlot.recordRun.attempts.set(targetSlot.slotId, {\n attempt,\n session,\n public: publicAttempt,\n completed: false,\n });\n targetSlot.recordRun.gapActions.set(targetSlot.slotId, \"reserved\");\n return publicAttempt;\n })).pipe(Effect.tapError((error) => Effect.sync(() => noteFailure(error, targetSlot?.recordRun ?? runForAttempt(attempt)))));\n };\n const noteSealedOrMarkIncomplete = (attempt: Attempt, sealed: SealedAttemptAssertions): Effect.Effect<void, never> => Effect.sync(() => {\n const targetSlot = targetForAttempt(attempt);\n const active = targetSlot === undefined\n ? undefined\n : targetSlot.recordRun.attempts.get(targetSlot.slotId);\n if (targetSlot === undefined\n || targetSlot.plan.state !== \"gap\"\n || targetSlot.recordRun.gapActions.get(targetSlot.slotId) !== \"reserved\"\n || active === undefined\n || active.attempt !== attempt\n || active.sealed !== undefined) {\n noteFailure(attemptInvalid(), targetSlot?.recordRun ?? runForAttempt(attempt));\n return;\n }\n active.sealed = sealed;\n });\n const completeAttempt = (attempt: Attempt, result: EvalResult): Effect.Effect<RunnerRecordAttempt, RunnerRecordWriteError, ProjectStateDatabase> => Effect.suspend<RunnerRecordAttempt, RunnerRecordWriteError, ProjectStateDatabase>(() => {\n const targetSlot = targetForAttempt(attempt);\n const active = targetSlot === undefined\n ? undefined\n : targetSlot.recordRun.attempts.get(targetSlot.slotId);\n if (targetSlot === undefined\n || targetSlot.plan.state !== \"gap\"\n || targetSlot.recordRun.gapActions.get(targetSlot.slotId) !== \"reserved\"\n || active === undefined\n || active.attempt !== attempt\n || active.completed) {\n return Effect.fail(attemptInvalid());\n }\n const assertions = active.sealed === undefined\n ? undefined\n : createRunnerAssertionsAttachment(active.sealed);\n if (assertions !== undefined && Result.isFailure(assertions))\n return Effect.fail(assertions.failure);\n if (active.sealed === undefined || assertions === undefined || Result.isFailure(assertions)) {\n return Effect.fail(membershipStateInvalid(targetSlot.slotId));\n }\n return Effect.gen(function* () {\n const sourcePlan = createRunnerSourceWritePlan([Object.freeze({\n slotId: targetSlot.slotId,\n result,\n assertionEntryIds: assertions.success.entryIds,\n })]);\n if (Result.isFailure(sourcePlan)) {\n return yield* Effect.fail(Object.freeze({\n code: \"runner-record-sources-invalid\" as const,\n issue: sourcePlan.failure,\n }));\n }\n const closedAssertions = createRunnerAssertionsAttachment(active.sealed!, {\n entryIds: assertions.success.entryIds,\n sourceSites: sourcePlan.success.sourceSitesBySlot.get(targetSlot.slotId),\n });\n if (Result.isFailure(closedAssertions))\n return yield* Effect.fail(closedAssertions.failure);\n yield* active.session.records.write(NiceEvalRecordAttachments.assertions, closedAssertions.success.attachment);\n yield* active.session.records.write(NiceEvalRecordAttachments.attemptCost, createAttemptCostAttachment(result));\n const sourceReceipts = yield* createAttemptObservabilityAttachments({ result, sealed: active.sealed! });\n if (sourceReceipts.agentTurns !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.agentTurns, sourceReceipts.agentTurns);\n }\n if (sourceReceipts.sandboxCommands !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.sandboxCommands, sourceReceipts.sandboxCommands);\n }\n yield* active.session.records.write(NiceEvalRecordAttachments.runnerActivities.attempt, sourceReceipts.runnerActivities);\n yield* active.session.records.write(NiceEvalRecordAttachments.runnerDiagnostics.attempt, sourceReceipts.runnerDiagnostics);\n const turnContexts = createRunnerTurnContextsAttachment({ result, sourcePlan: sourcePlan.success });\n if (Result.isFailure(turnContexts)) {\n return yield* Effect.fail(Object.freeze({\n code: \"runner-record-sources-invalid\" as const,\n issue: turnContexts.failure,\n }));\n }\n if (turnContexts.success !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.turnContexts, turnContexts.success);\n }\n const fileChanges = createAttemptFileChangesAttachment(result);\n if (fileChanges !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.fileChanges, fileChanges);\n }\n const attachmentSnapshot = adapterAttachmentsForResult(result);\n const artifacts = createAttemptArtifactsAttachment(result, attachmentSnapshot);\n const adapterUsage = adapterUsageForResult(result);\n const executionTraces = adapterExecutionTracesForResult(result);\n if (adapterUsage !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.adapterUsage, adapterUsage);\n }\n if (artifacts !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.artifacts.attempt, artifacts);\n }\n if (executionTraces !== undefined && executionTraces.traces.length > 0) {\n validateExecutionTracePublication(executionTraces, attachmentSnapshot?.artifacts ?? []);\n yield* active.session.records.appendAll(executionTracesRecordCollection, Stream.fromIterable(executionTraces.traces.flatMap((trace) => trace.records)));\n yield* active.session.records.close(executionTracesRecordCollection, executionTraces.failure === undefined\n ? { state: \"complete\" }\n : {\n state: \"partial\",\n limitations: [{ code: \"capture-failed\", stage: \"adapter\" }],\n });\n }\n yield* active.session.complete(recordAttemptOutcome(result));\n const closureBytes = new TextEncoder().encode(JSON.stringify(attemptPublicationClosure(Object.freeze({\n runId: String(targetSlot.recordRun.session.runId),\n experimentId: targetSlot.recordRun.experimentId,\n context: targetSlot.recordRun.context,\n startedAt: targetSlot.recordRun.target.startedAt,\n completedAt: Date.now(),\n expectedSlots: targetSlot.recordRun.expectedSlots,\n }))));\n yield* publishOriginAttempt(rootPath, {\n runId: String(targetSlot.recordRun.session.runId),\n writerGeneration: targetSlot.recordRun.writerGeneration,\n slotId: String(targetSlot.slotId),\n attemptId: String(active.public.attemptId),\n attemptLocator: String(active.public.locator),\n closureBytes,\n closureDigest: createHash(\"sha256\").update(closureBytes).digest(\"hex\"),\n deadlineEpochMs: Date.now() + 30000,\n }).pipe(Effect.mapError((cause) => attemptPublicationFailed(active.public.locator, cause)));\n active.result = result;\n active.assertionEntryIds = assertions.success.entryIds;\n active.completed = true;\n targetSlot.recordRun.gapActions.set(targetSlot.slotId, \"executed\");\n return active.public;\n });\n });\n const attachRunFacts = (recordRun: RunnerRecordRun, mode: \"normal\" | \"interrupted\"): Effect.Effect<void, RunnerRecordWriteError> => Effect.gen(function* () {\n const writeRecord = (effect: Effect.Effect<void, RecordWriteError, never>): Effect.Effect<void, RecordWriteError, never> => effect;\n const origins = [] as {\n readonly slotId: SlotId;\n readonly active: ActiveRunnerRecordAttempt;\n readonly result: EvalResult;\n readonly sealed: SealedAttemptAssertions;\n readonly assertionEntryIds: readonly AssertionEntryId[];\n }[];\n for (const [slotId, state] of recordRun.gapActions) {\n if (state !== \"executed\")\n continue;\n const active = recordRun.attempts.get(slotId);\n if (active === undefined)\n return yield* Effect.fail(membershipStateInvalid(slotId));\n const result = active.result;\n const sealed = active?.sealed;\n const assertionEntryIds = active?.assertionEntryIds;\n if (result === undefined || sealed === undefined || assertionEntryIds === undefined)\n continue;\n origins.push(Object.freeze({ slotId, active, result, sealed, assertionEntryIds }));\n }\n const sources = createRunnerSourceWritePlan(origins.map(({ slotId, result, assertionEntryIds }) => Object.freeze({\n slotId,\n result,\n assertionEntryIds,\n })));\n if (Result.isFailure(sources)) {\n return yield* Effect.fail(Object.freeze({\n code: \"runner-record-sources-invalid\" as const,\n issue: sources.failure,\n }));\n }\n yield* writeRecord(recordRun.session.records.write(NiceEvalRecordAttachments.sources, sources.success.sources));\n const sourceReceipts = yield* createRunObservabilityAttachments(recordRun.run);\n if (sourceReceipts.runnerActivities !== undefined) {\n yield* writeRecord(recordRun.session.records.write(NiceEvalRecordAttachments.runnerActivities.run, sourceReceipts.runnerActivities));\n }\n if (sourceReceipts.runnerDiagnostics !== undefined) {\n yield* writeRecord(recordRun.session.records.write(NiceEvalRecordAttachments.runnerDiagnostics.run, sourceReceipts.runnerDiagnostics));\n }\n yield* writeRecord(recordRun.session.records.write(NiceEvalRecordAttachments.artifacts.run, createRunArtifactsAttachment()));\n });\n const pendingGap = (recordRun: RunnerRecordRun): SlotId | undefined => {\n for (const [slotId, state] of recordRun.gapActions) {\n if (state === \"pending\")\n return slotId;\n }\n return undefined;\n };\n return Object.freeze({\n reusePlan,\n readCarriedResults: () => readCurrentExecutionReusePlanResults({ reader, plan: reusePlan }),\n runIdsByExperiment: new Map(runIdsByExperiment),\n publicationCutoff: () => currentPublicationCutoff(rootPath),\n carriedAttemptsByKey: new Map([...carriedAttemptsByKey].map(([key, attempts]) => [key, new Set(attempts)] as const)),\n adoptLatePublishedAttempt,\n reserveAttempt,\n noteSealedOrMarkIncomplete,\n completeAttemptOrMarkIncomplete: (attempt: Attempt, result: EvalResult) => completeAttempt(attempt, result).pipe(Effect.catch((error) => Effect.sync(() => {\n const target = targetForAttempt(attempt);\n const active = target === undefined ? undefined : target.recordRun.attempts.get(target.slotId);\n noteFailure(error.code === \"runner-record-assertions-invalid\" ||\n error.code === \"runner-record-attempt-publication-failed\" ||\n active === undefined\n ? error\n : attemptPublicationFailed(active.public.locator, error), target?.recordRun ?? runForAttempt(attempt));\n return undefined;\n })), Effect.ensuring(Effect.promise(() => releaseAdapterAttachments(result)))),\n markNotDispatched: (attempt: Attempt) => {\n const targetSlot = targetForAttempt(attempt);\n if (targetSlot !== undefined\n && targetSlot.plan.state === \"gap\"\n && targetSlot.recordRun.gapActions.get(targetSlot.slotId) === \"pending\") {\n targetSlot.recordRun.gapActions.set(targetSlot.slotId, \"not-dispatched\");\n }\n },\n publish: (completedAt: number, mode: \"normal\" | \"interrupted\") => Effect.gen(function* () {\n const recordRuns = [...byRun.values()];\n if (invocationWriteFailure !== undefined)\n return yield* Effect.fail(invocationWriteFailure);\n if (mode === \"normal\") {\n // A normal finish remains invocation-strict: a failure which can be\n // attributed to one Run still fails the call rather than allowing a\n // partial receipt to disguise it as ordinary completion.\n for (const recordRun of recordRuns) {\n const failure = writeFailuresByRun.get(recordRun);\n if (failure !== undefined)\n return yield* Effect.fail(failure);\n }\n }\n const completion = runnerRecordUtcMillis(completedAt);\n if (Result.isFailure(completion))\n return yield* Effect.fail(completion.failure);\n // A controlled interruption closes every reserved Attempt as\n // `interrupted` and every never-started gap as an interrupted terminal\n // Member. Only a Run-local writer failure remains non-publishable.\n // Abrupt process loss still has no opportunity to create `complete`.\n const incompleteRuns = mode === \"interrupted\"\n ? new Set(recordRuns.filter((recordRun) => writeFailuresByRun.has(recordRun)))\n : new Set<RunnerRecordRun>();\n if (mode === \"normal\") {\n // Normal completion is deliberately invocation-strict. A pending\n // gap means the scheduler failed to account for a Slot; a reserved\n // or otherwise unsettled Attempt is likewise not publishable.\n for (const recordRun of recordRuns) {\n const unsettledSlot = [...recordRun.gapActions.keys()].find((slotId) => {\n const active = recordRun.attempts.get(slotId);\n return recordRun.gapActions.get(slotId) === \"reserved\"\n || (active !== undefined && !active.completed);\n });\n if (unsettledSlot !== undefined)\n return yield* Effect.fail(unsealedAttempt(unsettledSlot));\n const unaccountedSlot = pendingGap(recordRun);\n if (unaccountedSlot !== undefined)\n return yield* Effect.fail(unsealedAttempt(unaccountedSlot));\n }\n }\n else {\n for (const recordRun of recordRuns) {\n if (incompleteRuns.has(recordRun))\n continue;\n for (const [slotId, state] of recordRun.gapActions) {\n if (state === \"pending\")\n recordRun.gapActions.set(slotId, \"interrupted\");\n if (state === \"reserved\") {\n const active = recordRun.attempts.get(slotId);\n if (active === undefined)\n return yield* Effect.fail(membershipStateInvalid(slotId));\n yield* discardAttemptWriteSession(active.session);\n recordRun.attempts.delete(slotId);\n recordRun.gapActions.set(slotId, \"interrupted\");\n }\n }\n }\n }\n const publishableRuns = recordRuns.filter((recordRun) => !incompleteRuns.has(recordRun));\n const publishOne = (recordRun: RunnerRecordRun): Effect.Effect<RecordSealReceipt, RunnerRecordWriteError, ProjectStateDatabase> => Effect.gen(function* () {\n yield* attachRunFacts(recordRun, mode);\n for (const [slotId, state] of recordRun.gapActions) {\n if (state === \"not-dispatched\" || state === \"interrupted\") {\n const absenceReason: RunAbsenceReason = mode === \"interrupted\"\n ? \"interrupted-before-publication\"\n : state === \"not-dispatched\"\n ? \"early-exit-satisfied\"\n : \"dispatch-failed\";\n yield* recordRun.session.recordTerminalMember({ slotId, action: state, absenceReason });\n }\n }\n const sealed = yield* recordRun.session.seal({ completedAt: completion.success });\n const absences = [...recordRun.gapActions].flatMap(([slotId, state]) => {\n if (state === \"executed\" && recordRun.attempts.get(slotId)?.completed === true)\n return [];\n const reason: RunAbsenceReason = mode === \"interrupted\"\n ? \"interrupted-before-publication\"\n : state === \"not-dispatched\"\n ? \"early-exit-satisfied\"\n : \"dispatch-failed\";\n return [{ slotId: String(slotId), reason }];\n });\n yield* closeRunResource(rootPath, {\n runId: String(recordRun.session.runId),\n writerGeneration: recordRun.writerGeneration,\n state: mode === \"interrupted\" ? \"interrupted\" : \"completed\",\n completedAt: new Date(completedAt).toISOString(),\n absences,\n deadlineEpochMs: Date.now() + 30000,\n }).pipe(Effect.mapError(() => publishStateInvalid(recordRun.session.runId)));\n return sealed;\n });\n if (mode === \"normal\") {\n // Normal completion remains typed and strict: the first Run failure\n // is an invocation failure, never a partial success receipt.\n return yield* Effect.forEach(publishableRuns, publishOne, { concurrency: 1 });\n }\n // SIGINT is different: each clean sibling receives its own complete\n // attempt. We deliberately observe an Exit per Run so one Attachment\n // or seal error cannot short-circuit subsequent safe siblings.\n const receipts: RecordSealReceipt[] = [];\n for (const recordRun of publishableRuns) {\n const exit = yield* Effect.exit(publishOne(recordRun));\n if (Exit.isSuccess(exit)) {\n receipts.push(exit.value);\n }\n else {\n const failure = Cause.findErrorOption(exit.cause);\n if (Option.isSome(failure)) {\n noteFailure(failure.value, recordRun);\n }\n else {\n noteFailure(publishStateInvalid(recordRun.session.runId), recordRun);\n }\n }\n }\n return Object.freeze(receipts);\n }),\n });\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["record.ts"],"names":[],"mappings":"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","sourcesContent":["import { judgeUsageForResult } from \"./judge-usage.ts\";\nimport { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { Cause, Effect, Result, Exit, Option, Semaphore, Stream } from \"effect\";\nimport { encodeAttemptLocator, type AttemptLocator } from \"../attempt-locator.ts\";\nimport type { SealedAttemptAssertions } from \"../assertions/api.ts\";\nimport type { AssertionsProducerError } from \"../assertions/record/producer.ts\";\nimport { NiceEvalRecordAttachments } from \"../record/family/catalog.ts\";\nimport { recordHost } from \"../record/host/runtime.ts\";\nimport { discardAttemptWriteSession, writerGenerationForRunSession } from \"../record/host/sqlite-host.ts\";\nimport type { AttemptWriteSession, RecordSealReceipt, RunWriteSession, } from \"../record/host/types.ts\";\nimport type { RunId, SlotId, } from \"../record/model/identifiers.ts\";\nimport type { AssertionEntryId } from \"../assertions/identity.ts\";\nimport { recordRootPaths, type RecordRoot } from \"../record/platform/root.ts\";\nimport { attemptPublicationClosure } from \"../record/codec/core.ts\";\nimport { RecordRootInvalid } from \"../record/platform/errors.ts\";\nimport { recordSqlitePath } from \"../record/sqlite/index.ts\";\nimport type { ProjectStateDatabase } from \"../record/sqlite/project-state-database.ts\";\nimport type { RecordReaderOpenError, RecordReaderReadError, } from \"../record/reader/errors.ts\";\nimport type { RecordWriteError } from \"../record/writer/types.ts\";\nimport { bindAttemptReference, closeRunResource, currentPublicationCutoff, publishOriginAttempt, createRunWriterGeneration, type PublicationCutoff, type RunAbsenceReason, } from \"../run/storage/index.ts\";\nimport { cacheKey } from \"./fingerprint.ts\";\nimport { planProjectTargetReuse, planProjectTargetReuseWithoutSources, type ExecutionReusePlan, type ExecutionReusePlanSlot, type ProjectTargetReusePlanInvalid, type TargetRun, } from \"./reuse-plan.ts\";\nimport { readCurrentExecutionReusePlanReadbacks, readCurrentExecutionReusePlanResults, type CurrentReusedAttemptReadback, type CurrentReuseReadback, type CurrentReuseReadbackPlanInvalid, } from \"./reuse-readback.ts\";\nimport { createRunnerTurnContextsAttachment, createRunnerSourceWritePlan, type RunnerSourceProducerInvalid, } from \"./source-producer.ts\";\nimport { createAttemptArtifactsAttachment, createAttemptFileChangesAttachment, createAttemptObservabilityAttachments, createRunArtifactsAttachment, createRunnerAssertionsAttachment, createRunObservabilityAttachments, recordAttemptOutcome, } from \"./record/attachments.ts\";\nimport { adapterUsageForResult } from \"./adapter-usage.ts\";\nimport { adapterAttachmentsForResult, releaseAdapterAttachments } from \"./adapter-attachments.ts\";\nimport { adapterExecutionTracesForResult, validateExecutionTracePublication, } from \"./adapter-execution-trace.ts\";\nimport { executionTracesRecordCollection } from \"../record/family/execution-traces/definition.ts\";\nimport { planRunnerRecordRun, previewRunnerRunId, runnerRecordSlotKey, runnerRecordUtcMillis, targetForRunnerRecordRun, type PlannedRunnerRecordRun, type RunnerRecordReuseInput, type RunnerRecordTargetIdentityInvalid, type RunnerRecordTargetInputMissing, } from \"./record/planning.ts\";\nimport type { AgentRun, Attempt, DiscoveredEval, EvalResult, } from \"./types.ts\";\nimport type { AttemptCostAttachment } from \"../record/family/attempt-cost/definition.ts\";\nimport { getPricingEstimateReceipt } from \"./pricing-estimate-receipt.ts\";\nimport type { SessionTracker } from \"./session.ts\";\nexport { prepareRunnerRecordReuse, type RunnerRecordReuseInput, type RunnerRecordReusePreparationInput, type RunnerRecordReuseSlotInput, type RunnerRecordTargetIdentityInvalid, type RunnerRecordTargetInputMissing, } from \"./record/planning.ts\";\ntype GapActionState = \"pending\" | \"reserved\" | \"executed\" | \"not-dispatched\" | \"interrupted\";\ninterface ActiveRunnerRecordAttempt {\n readonly attempt: Attempt;\n readonly session: AttemptWriteSession;\n readonly public: RunnerRecordAttempt;\n sealed?: SealedAttemptAssertions;\n result?: EvalResult;\n assertionEntryIds?: readonly AssertionEntryId[];\n completed: boolean;\n}\ninterface RunnerRecordRun extends PlannedRunnerRecordRun {\n readonly session: RunWriteSession;\n readonly target: TargetRun;\n readonly attempts: Map<SlotId, ActiveRunnerRecordAttempt>;\n readonly planSlots: Map<SlotId, ExecutionReusePlanSlot>;\n readonly gapActions: Map<SlotId, GapActionState>;\n readonly writerGeneration: string;\n}\nexport interface RunnerRecordAttempt {\n readonly slotId: SlotId;\n readonly attemptId: import(\"../record/model/identifiers.ts\").AttemptId;\n readonly locator: AttemptLocator;\n}\nexport type RecordAttemptLocator = AttemptLocator;\nfunction createAttemptCostAttachment(result: EvalResult): AttemptCostAttachment {\n const receipt = getPricingEstimateReceipt(result);\n return Object.freeze({\n ...(result.usage?.costUSD === undefined ? {} : {\n observed: Object.freeze({ kind: \"observed\" as const, amountUSD: result.usage.costUSD }),\n }),\n ...(receipt === undefined ? {} : {\n estimated: Object.freeze({\n kind: \"estimated\" as const,\n amountUSD: receipt.amountUSD,\n model: receipt.model,\n priceSource: receipt.priceSource,\n charges: receipt.charges,\n }),\n }),\n });\n}\nexport interface RunnerRecordAttemptInvalid {\n readonly code: \"runner-record-attempt-invalid\";\n}\nexport interface RunnerRecordUnsealedAttempt {\n readonly code: \"runner-record-attempt-unsealed\";\n readonly slotId: SlotId;\n}\nexport interface RunnerRecordMembershipStateInvalid {\n readonly code: \"runner-record-membership-state-invalid\";\n readonly slotId: SlotId;\n}\nexport interface RunnerRecordAttemptPublicationFailed {\n readonly code: \"runner-record-attempt-publication-failed\";\n readonly locator: AttemptLocator;\n readonly cause: unknown;\n readonly message: string;\n}\n/** A seal return without its durable marker is never a publish receipt. */\nexport interface RunnerRecordPublishStateInvalid {\n readonly code: \"runner-record-publish-state-invalid\";\n readonly runId: RunId;\n}\nexport interface RunnerRecordAssertionsInvalid {\n readonly code: \"runner-record-assertions-invalid\";\n readonly issue: AssertionsProducerError;\n}\nexport interface RunnerRecordObservabilityInvalid {\n readonly code: \"runner-record-observability-invalid\";\n readonly owner: \"attempt\" | \"run\";\n readonly stage: \"capture\" | \"attachment\";\n}\nexport interface RunnerRecordSourcesInvalid {\n readonly code: \"runner-record-sources-invalid\";\n readonly issue: RunnerSourceProducerInvalid;\n}\nexport interface RunnerRecordArtifactsInvalid {\n readonly code: \"runner-record-artifacts-invalid\";\n readonly owner: \"attempt\" | \"run\";\n readonly reason: \"trace-serialization-failed\" | \"attachment-closure-invalid\";\n}\nexport type RunnerRecordWriteError = RecordWriteError | RunnerRecordAttemptInvalid | RunnerRecordUnsealedAttempt | RunnerRecordMembershipStateInvalid | RunnerRecordAttemptPublicationFailed | RunnerRecordPublishStateInvalid | RunnerRecordTargetIdentityInvalid | RunnerRecordAssertionsInvalid | RunnerRecordObservabilityInvalid | RunnerRecordSourcesInvalid | RunnerRecordArtifactsInvalid;\nexport type RunnerRecordOpenError = RecordReaderOpenError | RecordWriteError | RecordReaderReadError | ProjectTargetReusePlanInvalid | RunnerRecordTargetInputMissing | RunnerRecordTargetIdentityInvalid | RunnerRecordMembershipStateInvalid | RunnerSessionOpenFailed;\nexport interface RunnerSessionOpenFailed {\n readonly code: \"runner-session-open-failed\";\n readonly cause: unknown;\n}\nexport interface RunnerRecordCoordinator {\n readonly reusePlan: ExecutionReusePlan;\n readonly readCarriedResults: () => Effect.Effect<readonly CurrentReusedAttemptReadback[], RecordReaderReadError | CurrentReuseReadbackPlanInvalid>;\n readonly runIdsByExperiment: ReadonlyMap<string, string>;\n readonly publicationCutoff: () => Effect.Effect<PublicationCutoff, unknown, ProjectStateDatabase>;\n readonly carriedAttemptsByKey: ReadonlyMap<string, ReadonlySet<number>>;\n readonly adoptLatePublishedAttempt: (attempt: Attempt) => Effect.Effect<boolean, RecordReaderOpenError | RecordReaderReadError | ProjectTargetReusePlanInvalid | RunnerRecordWriteError, import(\"effect\").Scope.Scope | import(\"../coordination/record-leases.ts\").RecordCoordination | ProjectStateDatabase>;\n readonly reserveAttempt: (attempt: Attempt) => Effect.Effect<RunnerRecordAttempt, RunnerRecordWriteError, ProjectStateDatabase>;\n readonly noteSealedOrMarkIncomplete: (attempt: Attempt, sealed: SealedAttemptAssertions) => Effect.Effect<void, never>;\n readonly completeAttemptOrMarkIncomplete: (attempt: Attempt, result: EvalResult) => Effect.Effect<RunnerRecordAttempt | undefined, never, ProjectStateDatabase>;\n readonly markNotDispatched: (attempt: Attempt) => void;\n readonly publish: (completedAt: number, mode: \"normal\" | \"interrupted\") => Effect.Effect<readonly RecordSealReceipt[], RunnerRecordWriteError, ProjectStateDatabase>;\n}\n/** Current preview preserves the read Scope and never creates a Run row. */\nexport function withRunnerCurrentReusePreview<A, E, R>(input: {\n readonly recordRoot: RecordRoot;\n readonly startedAt: number;\n readonly evals: readonly DiscoveredEval[];\n readonly runs: readonly AgentRun[];\n readonly reuse: RunnerRecordReuseInput;\n readonly use: (preview: {\n readonly reusePlan: ExecutionReusePlan;\n readonly readReadbacks: () => Effect.Effect<readonly CurrentReuseReadback[], RecordReaderReadError | CurrentReuseReadbackPlanInvalid>;\n }) => Effect.Effect<A, E, R>;\n}): Effect.Effect<A, E | RunnerRecordOpenError, R | import(\"effect\").Scope.Scope | import(\"../coordination/record-leases.ts\").RecordCoordination | ProjectStateDatabase> {\n return Effect.scoped(Effect.gen(function* () {\n const startedAt = runnerRecordUtcMillis(input.startedAt);\n if (Result.isFailure(startedAt))\n return yield* Effect.fail(startedAt.failure);\n const planned = yield* Effect.forEach(input.runs, (run) => planRunnerRecordRun({\n run,\n evals: input.evals,\n reuse: input.reuse,\n }), { concurrency: 1 });\n const previewRuns: TargetRun[] = [];\n for (const plan of planned) {\n const runId = previewRunnerRunId(plan.run);\n if (Result.isFailure(runId))\n return yield* Effect.fail(runId.failure);\n previewRuns.push(targetForRunnerRecordRun({ planned: plan, runId: runId.success, startedAt: startedAt.success }));\n }\n const target = Object.freeze({\n invocationId: `preview-${createHash(\"sha256\").update(String(input.startedAt), \"utf8\").digest(\"hex\")}`,\n runs: Object.freeze(previewRuns),\n });\n const rootPath = recordRootPaths(input.recordRoot)?.portableRoot;\n if (rootPath === undefined)\n return yield* Effect.fail(new RecordRootInvalid({ code: \"record-root-invalid\" }));\n const recordDatabase = recordSqlitePath(rootPath);\n if (!existsSync(recordDatabase)) {\n const reusePlan = yield* planProjectTargetReuseWithoutSources({ target, policy: input.reuse.policy });\n return yield* input.use({\n reusePlan,\n readReadbacks: () => Effect.succeed(Object.freeze([])),\n });\n }\n const reader = yield* recordHost.openRead({ root: input.recordRoot });\n const reusePlan = yield* planProjectTargetReuse({ reader, target, policy: input.reuse.policy });\n return yield* input.use({\n reusePlan,\n readReadbacks: () => readCurrentExecutionReusePlanReadbacks({ reader, plan: reusePlan }),\n });\n }));\n}\nfunction attemptInvalid(): RunnerRecordAttemptInvalid {\n return Object.freeze({ code: \"runner-record-attempt-invalid\" as const });\n}\nfunction unsealedAttempt(slotId: SlotId): RunnerRecordUnsealedAttempt {\n return Object.freeze({ code: \"runner-record-attempt-unsealed\" as const, slotId });\n}\nfunction membershipStateInvalid(slotId: SlotId): RunnerRecordMembershipStateInvalid {\n return Object.freeze({ code: \"runner-record-membership-state-invalid\" as const, slotId });\n}\nfunction attemptPublicationFailed(locator: AttemptLocator, cause: unknown): RunnerRecordAttemptPublicationFailed {\n const detail = cause instanceof Error\n ? cause.message\n : typeof cause === \"object\" && cause !== null && typeof Reflect.get(cause, \"message\") === \"string\"\n ? String(Reflect.get(cause, \"message\"))\n : typeof cause === \"object\" && cause !== null && typeof Reflect.get(cause, \"code\") === \"string\"\n ? String(Reflect.get(cause, \"code\"))\n : String(cause);\n return Object.freeze({\n code: \"runner-record-attempt-publication-failed\" as const,\n locator,\n cause,\n message: `Attempt publication failed for ${locator}: ${detail}`,\n });\n}\nfunction publishStateInvalid(runId: RunId): RunnerRecordPublishStateInvalid {\n return Object.freeze({ code: \"runner-record-publish-state-invalid\" as const, runId });\n}\n/**\n * Opens one new per-Experiment Run session, selects only sealed historical\n * Runs, and writes carry references before dispatch. No global Record writer\n * lock or superseded draft/attachment contract participates in this boundary.\n */\nexport function openRunnerRecordCoordinator(input: {\n readonly recordRoot: RecordRoot;\n readonly startedAt: number;\n readonly evals: readonly DiscoveredEval[];\n readonly runs: readonly AgentRun[];\n readonly reuse: RunnerRecordReuseInput;\n readonly session?: SessionTracker;\n}): Effect.Effect<RunnerRecordCoordinator, RunnerRecordOpenError, import(\"effect\").Scope.Scope | import(\"../record/platform/services.ts\").RecordEntropy | import(\"../coordination/record-leases.ts\").RecordCoordination | ProjectStateDatabase> {\n return Effect.gen(function* () {\n const rootPath = recordRootPaths(input.recordRoot)?.portableRoot;\n if (rootPath === undefined)\n return yield* Effect.fail(new RecordRootInvalid({ code: \"record-root-invalid\" }));\n const seenExperiments = new Set<string>();\n for (const run of input.runs) {\n if (seenExperiments.has(run.experimentId)) {\n return yield* Effect.fail({\n code: \"runner-record-target-identity-invalid\" as const,\n kind: \"invocation\" as const,\n value: `duplicate experimentId ${JSON.stringify(run.experimentId)}`,\n });\n }\n seenExperiments.add(run.experimentId);\n }\n const startedAt = runnerRecordUtcMillis(input.startedAt);\n if (Result.isFailure(startedAt))\n return yield* Effect.fail(startedAt.failure);\n const planned = yield* Effect.forEach(input.runs, (run) => planRunnerRecordRun({\n run,\n evals: input.evals,\n reuse: input.reuse,\n }), { concurrency: 1 });\n const invocationId = input.session?.sessionId ?? createHash(\"sha256\")\n .update(`${input.startedAt}\\u0000${planned.map((entry) => entry.run.experimentId).join(\"\\u0000\")}`, \"utf8\")\n .digest(\"hex\");\n const openedRuns = yield* Effect.forEach(planned, (plan) => recordHost.createRun({\n root: input.recordRoot,\n experimentId: plan.experimentId,\n context: plan.context,\n startedAt: startedAt.success,\n expectedSlots: plan.expectedSlots,\n writerGeneration: createRunWriterGeneration(`${invocationId}:${plan.experimentId}`),\n }).pipe(Effect.map((session) => {\n const writerGeneration = writerGenerationForRunSession(session);\n if (writerGeneration === undefined)\n throw new Error(\"Run writer generation is unavailable\");\n return Object.freeze({ plan, session, writerGeneration });\n })), { concurrency: 1 });\n if (input.session !== undefined) {\n const startedAtIso = new Date(input.startedAt).toISOString();\n yield* input.session.start({\n runIds: new Map(openedRuns.map(({ plan, session }) => [plan.experimentId, String(session.runId)])),\n agentRuns: input.runs,\n startedAt: startedAtIso,\n invocationRuns: openedRuns.map(({ plan, session, writerGeneration }) => ({\n runId: String(session.runId),\n experimentId: plan.experimentId,\n writerGeneration,\n startedAt: startedAtIso,\n expectedSlots: plan.expectedSlots.map((slot) => ({\n slotId: String(slot.slotId), evalId: String(slot.evalId), attemptOrdinal: slot.attemptOrdinal,\n executionIdentityDigest: String(slot.executionIdentityDigest),\n })),\n })),\n }).pipe(Effect.mapError((cause): RunnerSessionOpenFailed => ({ code: \"runner-session-open-failed\", cause })));\n }\n const reader = yield* recordHost.openRead({ root: input.recordRoot });\n const byRun = new Map<AgentRun, RunnerRecordRun>();\n const byRecordRunId = new Map<RunId, RunnerRecordRun>();\n const runIdsByExperiment = new Map<string, string>();\n const targetRuns: TargetRun[] = [];\n for (const { plan, session, writerGeneration } of openedRuns) {\n const target = targetForRunnerRecordRun({\n planned: plan,\n runId: session.runId,\n startedAt: startedAt.success,\n });\n const recordRun: RunnerRecordRun = {\n ...plan,\n session,\n target,\n attempts: new Map(),\n planSlots: new Map(),\n gapActions: new Map(),\n writerGeneration,\n };\n byRun.set(plan.run, recordRun);\n byRecordRunId.set(session.runId, recordRun);\n runIdsByExperiment.set(plan.run.experimentId, session.runId);\n targetRuns.push(target);\n }\n const target = Object.freeze({\n invocationId,\n runs: Object.freeze(targetRuns),\n });\n const reusePlan = yield* planProjectTargetReuse({ reader, target, policy: input.reuse.policy });\n const carriedAttemptsByKey = new Map<string, Set<number>>();\n for (const slot of reusePlan.slots) {\n const recordRun = byRecordRunId.get(slot.runId);\n if (recordRun === undefined)\n return yield* Effect.fail(membershipStateInvalid(slot.slotId));\n recordRun.planSlots.set(slot.slotId, slot);\n if (slot.state === \"reuse\") {\n yield* recordRun.session.referenceAttempt({\n slotId: slot.slotId,\n action: \"carried\",\n attempt: slot.source.attempt,\n });\n yield* bindAttemptReference(rootPath, {\n runId: String(recordRun.session.runId),\n writerGeneration: recordRun.writerGeneration,\n slotId: String(slot.slotId),\n action: \"carried\",\n publicationIdentity: slot.source.attempt.publicationIdentity,\n deadlineEpochMs: Date.now() + 30000,\n }).pipe(Effect.mapError((cause): RunnerSessionOpenFailed => ({ code: \"runner-session-open-failed\", cause })));\n const entry = recordRun.slots.get(runnerRecordSlotKey(slot.evalId, slot.attempt));\n if (entry === undefined)\n return yield* Effect.fail(membershipStateInvalid(slot.slotId));\n const key = cacheKey(recordRun.run, entry.evalDef.id);\n const carried = carriedAttemptsByKey.get(key) ?? new Set<number>();\n carried.add(entry.attempt);\n carriedAttemptsByKey.set(key, carried);\n }\n else {\n recordRun.gapActions.set(slot.slotId, \"pending\");\n }\n }\n if (input.session !== undefined) {\n yield* input.session.applyCarriedAttempts(input.runs, carriedAttemptsByKey).pipe(Effect.mapError((cause): RunnerSessionOpenFailed => ({ code: \"runner-session-open-failed\", cause })));\n }\n let invocationWriteFailure: RunnerRecordWriteError | undefined;\n const writeFailuresByRun = new Map<RunnerRecordRun, RunnerRecordWriteError>();\n const noteFailure = (error: RunnerRecordWriteError, recordRun?: RunnerRecordRun): void => {\n if (recordRun === undefined) {\n if (invocationWriteFailure === undefined)\n invocationWriteFailure = error;\n return;\n }\n if (!writeFailuresByRun.has(recordRun))\n writeFailuresByRun.set(recordRun, error);\n };\n const lock = yield* Semaphore.make(1);\n const runForAttempt = (attempt: Attempt): RunnerRecordRun | undefined => byRun.get(attempt.run);\n const targetForAttempt = (attempt: Attempt): {\n readonly recordRun: RunnerRecordRun;\n readonly slotId: SlotId;\n readonly plan: ExecutionReusePlanSlot;\n } | undefined => {\n const recordRun = runForAttempt(attempt);\n if (recordRun === undefined)\n return undefined;\n const entry = recordRun.slots.get(runnerRecordSlotKey(attempt.evalDef.id, attempt.attempt));\n if (entry === undefined)\n return undefined;\n const plan = recordRun.planSlots.get(entry.slot.slotId);\n return plan === undefined ? undefined : { recordRun, slotId: entry.slot.slotId, plan };\n };\n const adoptLatePublishedAttempt = (attempt: Attempt) => lock.withPermits(1)(Effect.gen(function* () {\n const current = targetForAttempt(attempt);\n if (current === undefined\n || current.plan.state !== \"gap\"\n || current.recordRun.gapActions.get(current.slotId) !== \"pending\")\n return false;\n const freshReader = yield* recordHost.openRead({ root: input.recordRoot });\n const refreshed = yield* planProjectTargetReuse({\n reader: freshReader,\n target,\n policy: input.reuse.policy,\n });\n const replacement = refreshed.slots.find((slot) => slot.runId === current.recordRun.target.runId && slot.slotId === current.slotId);\n if (replacement?.state !== \"reuse\")\n return false;\n yield* current.recordRun.session.referenceAttempt({\n slotId: current.slotId,\n action: \"carried\",\n attempt: replacement.source.attempt,\n });\n yield* bindAttemptReference(rootPath, {\n runId: String(current.recordRun.session.runId),\n writerGeneration: current.recordRun.writerGeneration,\n slotId: String(current.slotId),\n action: \"carried\",\n publicationIdentity: replacement.source.attempt.publicationIdentity,\n deadlineEpochMs: Date.now() + 30000,\n }).pipe(Effect.mapError(() => publishStateInvalid(current.recordRun.session.runId)));\n current.recordRun.planSlots.set(current.slotId, replacement);\n current.recordRun.gapActions.delete(current.slotId);\n return true;\n }));\n const reserveAttempt = (attempt: Attempt): Effect.Effect<RunnerRecordAttempt, RunnerRecordWriteError, ProjectStateDatabase> => {\n const targetSlot = targetForAttempt(attempt);\n return lock.withPermits(1)(Effect.gen(function* () {\n if (targetSlot === undefined\n || targetSlot.plan.state !== \"gap\"\n || targetSlot.recordRun.gapActions.get(targetSlot.slotId) !== \"pending\") {\n return yield* Effect.fail(attemptInvalid());\n }\n const session = yield* targetSlot.recordRun.session.createAttempt({ slotId: targetSlot.slotId });\n const publicAttempt = Object.freeze({\n slotId: targetSlot.slotId,\n attemptId: session.attemptId,\n locator: encodeAttemptLocator(session.attemptId),\n });\n targetSlot.recordRun.attempts.set(targetSlot.slotId, {\n attempt,\n session,\n public: publicAttempt,\n completed: false,\n });\n targetSlot.recordRun.gapActions.set(targetSlot.slotId, \"reserved\");\n return publicAttempt;\n })).pipe(Effect.tapError((error) => Effect.sync(() => noteFailure(error, targetSlot?.recordRun ?? runForAttempt(attempt)))));\n };\n const noteSealedOrMarkIncomplete = (attempt: Attempt, sealed: SealedAttemptAssertions): Effect.Effect<void, never> => Effect.sync(() => {\n const targetSlot = targetForAttempt(attempt);\n const active = targetSlot === undefined\n ? undefined\n : targetSlot.recordRun.attempts.get(targetSlot.slotId);\n if (targetSlot === undefined\n || targetSlot.plan.state !== \"gap\"\n || targetSlot.recordRun.gapActions.get(targetSlot.slotId) !== \"reserved\"\n || active === undefined\n || active.attempt !== attempt\n || active.sealed !== undefined) {\n noteFailure(attemptInvalid(), targetSlot?.recordRun ?? runForAttempt(attempt));\n return;\n }\n active.sealed = sealed;\n });\n const completeAttempt = (attempt: Attempt, result: EvalResult): Effect.Effect<RunnerRecordAttempt, RunnerRecordWriteError, ProjectStateDatabase> => Effect.suspend<RunnerRecordAttempt, RunnerRecordWriteError, ProjectStateDatabase>(() => {\n const targetSlot = targetForAttempt(attempt);\n const active = targetSlot === undefined\n ? undefined\n : targetSlot.recordRun.attempts.get(targetSlot.slotId);\n if (targetSlot === undefined\n || targetSlot.plan.state !== \"gap\"\n || targetSlot.recordRun.gapActions.get(targetSlot.slotId) !== \"reserved\"\n || active === undefined\n || active.attempt !== attempt\n || active.completed) {\n return Effect.fail(attemptInvalid());\n }\n const assertions = active.sealed === undefined\n ? undefined\n : createRunnerAssertionsAttachment(active.sealed);\n if (assertions !== undefined && Result.isFailure(assertions))\n return Effect.fail(assertions.failure);\n if (active.sealed === undefined || assertions === undefined || Result.isFailure(assertions)) {\n return Effect.fail(membershipStateInvalid(targetSlot.slotId));\n }\n return Effect.gen(function* () {\n const sourcePlan = createRunnerSourceWritePlan([Object.freeze({\n slotId: targetSlot.slotId,\n result,\n assertionEntryIds: assertions.success.entryIds,\n })]);\n if (Result.isFailure(sourcePlan)) {\n return yield* Effect.fail(Object.freeze({\n code: \"runner-record-sources-invalid\" as const,\n issue: sourcePlan.failure,\n }));\n }\n const closedAssertions = createRunnerAssertionsAttachment(active.sealed!, {\n entryIds: assertions.success.entryIds,\n sourceSites: sourcePlan.success.sourceSitesBySlot.get(targetSlot.slotId),\n });\n if (Result.isFailure(closedAssertions))\n return yield* Effect.fail(closedAssertions.failure);\n yield* active.session.records.write(NiceEvalRecordAttachments.assertions, closedAssertions.success.attachment);\n yield* active.session.records.write(NiceEvalRecordAttachments.attemptCost, createAttemptCostAttachment(result));\n const sourceReceipts = yield* createAttemptObservabilityAttachments({ result, sealed: active.sealed! });\n if (sourceReceipts.agentTurns !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.agentTurns, sourceReceipts.agentTurns);\n }\n if (sourceReceipts.sandboxCommands !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.sandboxCommands, sourceReceipts.sandboxCommands);\n }\n yield* active.session.records.write(NiceEvalRecordAttachments.runnerActivities.attempt, sourceReceipts.runnerActivities);\n yield* active.session.records.write(NiceEvalRecordAttachments.runnerDiagnostics.attempt, sourceReceipts.runnerDiagnostics);\n const turnContexts = createRunnerTurnContextsAttachment({ result, sourcePlan: sourcePlan.success });\n if (Result.isFailure(turnContexts)) {\n return yield* Effect.fail(Object.freeze({\n code: \"runner-record-sources-invalid\" as const,\n issue: turnContexts.failure,\n }));\n }\n if (turnContexts.success !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.turnContexts, turnContexts.success);\n }\n const fileChanges = createAttemptFileChangesAttachment(result);\n if (fileChanges !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.fileChanges, fileChanges);\n }\n const attachmentSnapshot = adapterAttachmentsForResult(result);\n const artifacts = createAttemptArtifactsAttachment(result, attachmentSnapshot);\n const judgeUsage = judgeUsageForResult(result, closedAssertions.success.entryIds);\n if (judgeUsage !== undefined)\n yield* active.session.records.write(NiceEvalRecordAttachments.judgeUsage, judgeUsage);\n const adapterUsage = adapterUsageForResult(result);\n const executionTraces = adapterExecutionTracesForResult(result);\n if (adapterUsage !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.adapterUsage, adapterUsage);\n }\n if (artifacts !== undefined) {\n yield* active.session.records.write(NiceEvalRecordAttachments.artifacts.attempt, artifacts);\n }\n if (executionTraces !== undefined && executionTraces.traces.length > 0) {\n validateExecutionTracePublication(executionTraces, attachmentSnapshot?.artifacts ?? []);\n yield* active.session.records.appendAll(executionTracesRecordCollection, Stream.fromIterable(executionTraces.traces.flatMap((trace) => trace.records)));\n yield* active.session.records.close(executionTracesRecordCollection, executionTraces.failure === undefined\n ? { state: \"complete\" }\n : {\n state: \"partial\",\n limitations: [{ code: \"capture-failed\", stage: \"adapter\" }],\n });\n }\n yield* active.session.complete(recordAttemptOutcome(result));\n const closureBytes = new TextEncoder().encode(JSON.stringify(attemptPublicationClosure(Object.freeze({\n runId: String(targetSlot.recordRun.session.runId),\n experimentId: targetSlot.recordRun.experimentId,\n context: targetSlot.recordRun.context,\n startedAt: targetSlot.recordRun.target.startedAt,\n completedAt: Date.now(),\n expectedSlots: targetSlot.recordRun.expectedSlots,\n }))));\n yield* publishOriginAttempt(rootPath, {\n runId: String(targetSlot.recordRun.session.runId),\n writerGeneration: targetSlot.recordRun.writerGeneration,\n slotId: String(targetSlot.slotId),\n attemptId: String(active.public.attemptId),\n attemptLocator: String(active.public.locator),\n closureBytes,\n closureDigest: createHash(\"sha256\").update(closureBytes).digest(\"hex\"),\n deadlineEpochMs: Date.now() + 30000,\n }).pipe(Effect.mapError((cause) => attemptPublicationFailed(active.public.locator, cause)));\n active.result = result;\n active.assertionEntryIds = assertions.success.entryIds;\n active.completed = true;\n targetSlot.recordRun.gapActions.set(targetSlot.slotId, \"executed\");\n return active.public;\n });\n });\n const attachRunFacts = (recordRun: RunnerRecordRun, mode: \"normal\" | \"interrupted\"): Effect.Effect<void, RunnerRecordWriteError> => Effect.gen(function* () {\n const writeRecord = (effect: Effect.Effect<void, RecordWriteError, never>): Effect.Effect<void, RecordWriteError, never> => effect;\n const origins = [] as {\n readonly slotId: SlotId;\n readonly active: ActiveRunnerRecordAttempt;\n readonly result: EvalResult;\n readonly sealed: SealedAttemptAssertions;\n readonly assertionEntryIds: readonly AssertionEntryId[];\n }[];\n for (const [slotId, state] of recordRun.gapActions) {\n if (state !== \"executed\")\n continue;\n const active = recordRun.attempts.get(slotId);\n if (active === undefined)\n return yield* Effect.fail(membershipStateInvalid(slotId));\n const result = active.result;\n const sealed = active?.sealed;\n const assertionEntryIds = active?.assertionEntryIds;\n if (result === undefined || sealed === undefined || assertionEntryIds === undefined)\n continue;\n origins.push(Object.freeze({ slotId, active, result, sealed, assertionEntryIds }));\n }\n const sources = createRunnerSourceWritePlan(origins.map(({ slotId, result, assertionEntryIds }) => Object.freeze({\n slotId,\n result,\n assertionEntryIds,\n })));\n if (Result.isFailure(sources)) {\n return yield* Effect.fail(Object.freeze({\n code: \"runner-record-sources-invalid\" as const,\n issue: sources.failure,\n }));\n }\n yield* writeRecord(recordRun.session.records.write(NiceEvalRecordAttachments.sources, sources.success.sources));\n const sourceReceipts = yield* createRunObservabilityAttachments(recordRun.run);\n if (sourceReceipts.runnerActivities !== undefined) {\n yield* writeRecord(recordRun.session.records.write(NiceEvalRecordAttachments.runnerActivities.run, sourceReceipts.runnerActivities));\n }\n if (sourceReceipts.runnerDiagnostics !== undefined) {\n yield* writeRecord(recordRun.session.records.write(NiceEvalRecordAttachments.runnerDiagnostics.run, sourceReceipts.runnerDiagnostics));\n }\n yield* writeRecord(recordRun.session.records.write(NiceEvalRecordAttachments.artifacts.run, createRunArtifactsAttachment()));\n });\n const pendingGap = (recordRun: RunnerRecordRun): SlotId | undefined => {\n for (const [slotId, state] of recordRun.gapActions) {\n if (state === \"pending\")\n return slotId;\n }\n return undefined;\n };\n return Object.freeze({\n reusePlan,\n readCarriedResults: () => readCurrentExecutionReusePlanResults({ reader, plan: reusePlan }),\n runIdsByExperiment: new Map(runIdsByExperiment),\n publicationCutoff: () => currentPublicationCutoff(rootPath),\n carriedAttemptsByKey: new Map([...carriedAttemptsByKey].map(([key, attempts]) => [key, new Set(attempts)] as const)),\n adoptLatePublishedAttempt,\n reserveAttempt,\n noteSealedOrMarkIncomplete,\n completeAttemptOrMarkIncomplete: (attempt: Attempt, result: EvalResult) => completeAttempt(attempt, result).pipe(Effect.catch((error) => Effect.sync(() => {\n const target = targetForAttempt(attempt);\n const active = target === undefined ? undefined : target.recordRun.attempts.get(target.slotId);\n noteFailure(error.code === \"runner-record-assertions-invalid\" ||\n error.code === \"runner-record-attempt-publication-failed\" ||\n active === undefined\n ? error\n : attemptPublicationFailed(active.public.locator, error), target?.recordRun ?? runForAttempt(attempt));\n return undefined;\n })), Effect.ensuring(Effect.promise(() => releaseAdapterAttachments(result)))),\n markNotDispatched: (attempt: Attempt) => {\n const targetSlot = targetForAttempt(attempt);\n if (targetSlot !== undefined\n && targetSlot.plan.state === \"gap\"\n && targetSlot.recordRun.gapActions.get(targetSlot.slotId) === \"pending\") {\n targetSlot.recordRun.gapActions.set(targetSlot.slotId, \"not-dispatched\");\n }\n },\n publish: (completedAt: number, mode: \"normal\" | \"interrupted\") => Effect.gen(function* () {\n const recordRuns = [...byRun.values()];\n if (invocationWriteFailure !== undefined)\n return yield* Effect.fail(invocationWriteFailure);\n if (mode === \"normal\") {\n // A normal finish remains invocation-strict: a failure which can be\n // attributed to one Run still fails the call rather than allowing a\n // partial receipt to disguise it as ordinary completion.\n for (const recordRun of recordRuns) {\n const failure = writeFailuresByRun.get(recordRun);\n if (failure !== undefined)\n return yield* Effect.fail(failure);\n }\n }\n const completion = runnerRecordUtcMillis(completedAt);\n if (Result.isFailure(completion))\n return yield* Effect.fail(completion.failure);\n // A controlled interruption closes every reserved Attempt as\n // `interrupted` and every never-started gap as an interrupted terminal\n // Member. Only a Run-local writer failure remains non-publishable.\n // Abrupt process loss still has no opportunity to create `complete`.\n const incompleteRuns = mode === \"interrupted\"\n ? new Set(recordRuns.filter((recordRun) => writeFailuresByRun.has(recordRun)))\n : new Set<RunnerRecordRun>();\n if (mode === \"normal\") {\n // Normal completion is deliberately invocation-strict. A pending\n // gap means the scheduler failed to account for a Slot; a reserved\n // or otherwise unsettled Attempt is likewise not publishable.\n for (const recordRun of recordRuns) {\n const unsettledSlot = [...recordRun.gapActions.keys()].find((slotId) => {\n const active = recordRun.attempts.get(slotId);\n return recordRun.gapActions.get(slotId) === \"reserved\"\n || (active !== undefined && !active.completed);\n });\n if (unsettledSlot !== undefined)\n return yield* Effect.fail(unsealedAttempt(unsettledSlot));\n const unaccountedSlot = pendingGap(recordRun);\n if (unaccountedSlot !== undefined)\n return yield* Effect.fail(unsealedAttempt(unaccountedSlot));\n }\n }\n else {\n for (const recordRun of recordRuns) {\n if (incompleteRuns.has(recordRun))\n continue;\n for (const [slotId, state] of recordRun.gapActions) {\n if (state === \"pending\")\n recordRun.gapActions.set(slotId, \"interrupted\");\n if (state === \"reserved\") {\n const active = recordRun.attempts.get(slotId);\n if (active === undefined)\n return yield* Effect.fail(membershipStateInvalid(slotId));\n yield* discardAttemptWriteSession(active.session);\n recordRun.attempts.delete(slotId);\n recordRun.gapActions.set(slotId, \"interrupted\");\n }\n }\n }\n }\n const publishableRuns = recordRuns.filter((recordRun) => !incompleteRuns.has(recordRun));\n const publishOne = (recordRun: RunnerRecordRun): Effect.Effect<RecordSealReceipt, RunnerRecordWriteError, ProjectStateDatabase> => Effect.gen(function* () {\n yield* attachRunFacts(recordRun, mode);\n for (const [slotId, state] of recordRun.gapActions) {\n if (state === \"not-dispatched\" || state === \"interrupted\") {\n const absenceReason: RunAbsenceReason = mode === \"interrupted\"\n ? \"interrupted-before-publication\"\n : state === \"not-dispatched\"\n ? \"early-exit-satisfied\"\n : \"dispatch-failed\";\n yield* recordRun.session.recordTerminalMember({ slotId, action: state, absenceReason });\n }\n }\n const sealed = yield* recordRun.session.seal({ completedAt: completion.success });\n const absences = [...recordRun.gapActions].flatMap(([slotId, state]) => {\n if (state === \"executed\" && recordRun.attempts.get(slotId)?.completed === true)\n return [];\n const reason: RunAbsenceReason = mode === \"interrupted\"\n ? \"interrupted-before-publication\"\n : state === \"not-dispatched\"\n ? \"early-exit-satisfied\"\n : \"dispatch-failed\";\n return [{ slotId: String(slotId), reason }];\n });\n yield* closeRunResource(rootPath, {\n runId: String(recordRun.session.runId),\n writerGeneration: recordRun.writerGeneration,\n state: mode === \"interrupted\" ? \"interrupted\" : \"completed\",\n completedAt: new Date(completedAt).toISOString(),\n absences,\n deadlineEpochMs: Date.now() + 30000,\n }).pipe(Effect.mapError(() => publishStateInvalid(recordRun.session.runId)));\n return sealed;\n });\n if (mode === \"normal\") {\n // Normal completion remains typed and strict: the first Run failure\n // is an invocation failure, never a partial success receipt.\n return yield* Effect.forEach(publishableRuns, publishOne, { concurrency: 1 });\n }\n // SIGINT is different: each clean sibling receives its own complete\n // attempt. We deliberately observe an Exit per Run so one Attachment\n // or seal error cannot short-circuit subsequent safe siblings.\n const receipts: RecordSealReceipt[] = [];\n for (const recordRun of publishableRuns) {\n const exit = yield* Effect.exit(publishOne(recordRun));\n if (Exit.isSuccess(exit)) {\n receipts.push(exit.value);\n }\n else {\n const failure = Cause.findErrorOption(exit.cause);\n if (Option.isSome(failure)) {\n noteFailure(failure.value, recordRun);\n }\n else {\n noteFailure(publishStateInvalid(recordRun.session.runId), recordRun);\n }\n }\n }\n return Object.freeze(receipts);\n }),\n });\n });\n}\n"]}
|
|
@@ -233,6 +233,8 @@ function limitationMetadata(limitation) {
|
|
|
233
233
|
return { kind: limitation.kind, omittedBytes: limitation.omittedBytes };
|
|
234
234
|
case "provider-limited":
|
|
235
235
|
return { kind: limitation.kind };
|
|
236
|
+
case "capacity-limited":
|
|
237
|
+
return { ...limitation };
|
|
236
238
|
}
|
|
237
239
|
}
|
|
238
240
|
function scoreContributionMetadata(contribution) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braintrust.js","sourceRoot":"","sources":["braintrust.ts"],"names":[],"mappings":"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","sourcesContent":["// Braintrust 报告器:把一次 niceeval 运行作为一个 Braintrust experiment 上报,\n// 每个 attempt 一行(scores = 断言,metrics = 时长/token/成本),跨提交比较与团队共享。\n// `braintrust` 是可选依赖:动态 import,装了才用得上,没装在 onInvocationStart 报错\n// (reporter 错误按框架约定只记 diagnostic,不会让运行崩)。\nimport type { EvalResult, JsonValue, Reporter } from \"../../types.ts\";\nimport type { AssertionCoverage, AssertionEntryRead, AssertionLimitation, AssertionsProjection, ScoreContribution, } from \"../../assertions/record/model.ts\";\nimport type { ScoreProjection } from \"../../eval/record/score.ts\";\n/** Closed assessment rows; this reporter does not reopen Record. */\ntype AttemptSlotProjectedEntry<Value> = {\n readonly state: \"excluded\" | \"not-recorded\" | \"core-invalid\";\n} | {\n readonly state: \"attachment-result\";\n readonly attachment: {\n readonly state: \"available\";\n readonly value: Value;\n } | {\n readonly state: \"unavailable\" | \"unsupported\" | \"invalid\";\n } | {\n readonly state: \"migration-required\";\n readonly from: string;\n readonly to: string;\n readonly command?: string;\n };\n};\nimport type { Verdict } from \"../../shared/types.ts\";\nimport { reportActivity } from \"../feedback/sink.ts\";\nexport interface BraintrustConfig {\n /** Braintrust 项目名;省略时用 \"niceeval\"。 */\n project?: string;\n /** Braintrust 项目 id;与 project 给一个即可。 */\n projectId?: string;\n /** 实验名;省略时由 Braintrust 自动命名。 */\n experiment?: string;\n /** 作为对比基线(diff base)的既有实验名。 */\n baseExperiment?: string;\n /** 作为对比基线(diff base)的既有实验 id。 */\n baseExperimentId?: string;\n /** true = 更新同名既有实验,而不是新建一个。 */\n update?: boolean;\n /** 实验级附加 metadata;与 niceeval 自动写入的字段合并,同名以这里为准。 */\n metadata?: globalThis.Record<string, JsonValue>;\n /** API key;省略时 SDK 读 BRAINTRUST_API_KEY 环境变量。 */\n apiKey?: string;\n}\n/**\n * Braintrust SDK 的最小类型面。本地声明是为了不把 `braintrust` 变成编译期依赖;\n * 动态 import 后按这个形状断言。\n */\ninterface BraintrustSdk {\n // SDK 里 init 同步返回(登录与建实验都是惰性的);统一 await,同步/异步都兼容。\n init(options: {\n project?: string;\n projectId?: string;\n experiment?: string;\n baseExperiment?: string;\n baseExperimentId?: string;\n update?: boolean;\n apiKey?: string;\n metadata?: globalThis.Record<string, JsonValue>;\n setCurrent?: boolean;\n }): BraintrustExperiment | Promise<BraintrustExperiment>;\n flush(): Promise<void>;\n}\ninterface BraintrustExperiment {\n log(event: BraintrustLogEvent): void;\n summarize(): Promise<{\n experimentUrl?: string;\n }>;\n}\nexport interface BraintrustLogEvent {\n id?: string;\n input?: string;\n output?: string;\n error?: EvalResult[\"error\"];\n scores?: globalThis.Record<string, number>;\n metadata?: globalThis.Record<string, JsonValue>;\n metrics?: globalThis.Record<string, number>;\n}\n/**\n * A post-Record Projection calculation supplies this optional assessment. The\n * live Reporter callback currently has no RecordProjection input, so its\n * absence is represented explicitly rather than as a made-up Attachment read.\n */\nexport type BraintrustAssessment = {\n readonly state: \"projected\";\n /** Exact Report-style public projections, including every data state. */\n readonly assertions: AttemptSlotProjectedEntry<AssertionsProjection<unknown>>;\n readonly verdict: AttemptSlotProjectedEntry<Verdict>;\n readonly score?: AttemptSlotProjectedEntry<ScoreProjection>;\n} | {\n readonly state: \"not-projected\";\n readonly reason: \"reporter-contract-does-not-provide-record-projections\";\n};\nconst NOT_PROJECTED_ASSESSMENT: BraintrustAssessment = Object.freeze({\n state: \"not-projected\" as const,\n reason: \"reporter-contract-does-not-provide-record-projections\" as const,\n});\n/**\n * 创建 Braintrust 报告器。挂在 `defineConfig({ reporters })` 上观测整次运行,\n * 或挂在单个 eval 的 `reporters` 上只观测它(同一实例被多个 eval 引用时共享一个实验)。\n */\nexport function Braintrust(config: BraintrustConfig = {}): Reporter {\n let sdk: BraintrustSdk | undefined;\n let experiment: BraintrustExperiment | undefined;\n return {\n async onInvocationStart(evals) {\n sdk = await loadBraintrustSdk();\n experiment = await sdk.init({\n project: config.projectId ? undefined : (config.project ?? \"niceeval\"),\n projectId: config.projectId,\n experiment: config.experiment,\n baseExperiment: config.baseExperiment,\n baseExperimentId: config.baseExperimentId,\n update: config.update,\n apiKey: config.apiKey,\n // 不再写顶层单一 adapter:一次 Invocation 可能横跨多个 (adapter, model, flags) 配置,\n // 启动时还没有任何结果,写一个必然只代表其中一份配置的值就是撒谎(见\n // docs/runner.md「Reporter 与运行器事件」)。每行自己的 adapter 身份仍在\n // toBraintrustEvent() 的 metadata.adapter 里,逐 attempt 精确;跨行的集合可以\n // 从 Braintrust 自己按 metadata.adapter 分组得到,不需要实验级再存一份。\n metadata: {\n evals: evals.map((e) => e.id),\n ...config.metadata,\n },\n // 不设为全局 current experiment,避免污染用户代码里的 braintrust 全局态。\n setCurrent: false,\n });\n },\n onEvalComplete(result) {\n experiment?.log(toBraintrustEvent(result, NOT_PROJECTED_ASSESSMENT));\n },\n async onInvocationComplete() {\n if (!experiment)\n return;\n try {\n await sdk?.flush();\n const summary = await experiment.summarize();\n if (summary.experimentUrl) {\n reportActivity(`Braintrust experiment: ${summary.experimentUrl}`);\n }\n }\n finally {\n experiment = undefined;\n sdk = undefined;\n }\n },\n };\n}\n/**\n * EvalResult identity/transport data plus an optional post-Record assessment\n * become one Braintrust row. Assertions, Verdict, and Score only enter through\n * that assessment's public Attachment projections; this function never reads\n * a historical result graph.\n */\nexport function toBraintrustEvent(result: EvalResult, assessment: BraintrustAssessment = NOT_PROJECTED_ASSESSMENT): BraintrustLogEvent {\n const projectedVerdict = assessment.state === \"projected\"\n ? availableProjectionValue(assessment.verdict)\n : undefined;\n const verdict = projectedVerdict ?? result.verdict;\n const metrics: globalThis.Record<string, number> = {};\n if (result.startedAt) {\n const start = Date.parse(result.startedAt) / 1000;\n if (Number.isFinite(start)) {\n metrics.start = start;\n metrics.end = start + result.durationMs / 1000;\n }\n }\n if (result.usage) {\n const { inputTokens, outputTokens, cacheReadTokens, cacheCreationTokens, reasoningTokens, requests } = result.usage;\n if (inputTokens !== undefined)\n metrics.prompt_tokens = inputTokens;\n if (outputTokens !== undefined)\n metrics.completion_tokens = outputTokens;\n if (inputTokens !== undefined && outputTokens !== undefined)\n metrics.tokens = inputTokens + outputTokens;\n if (cacheReadTokens !== undefined)\n metrics.cache_read_tokens = cacheReadTokens;\n if (cacheCreationTokens !== undefined)\n metrics.cache_creation_tokens = cacheCreationTokens;\n if (reasoningTokens !== undefined)\n metrics.reasoning_tokens = reasoningTokens;\n if (requests !== undefined)\n metrics.requests = requests;\n }\n // estimated_cost_usd 恒为价目表估算(EvalResult.estimatedCostUSD,见 estimateCost);\n // observed 成本单独留在 result.usage.costUSD,不混入本指标。\n if (result.estimatedCostUSD !== undefined)\n metrics.estimated_cost_usd = result.estimatedCostUSD;\n const metadata: globalThis.Record<string, JsonValue> = {\n eval: result.id,\n adapter: result.adapter,\n attempt: result.attempt,\n verdict,\n status: verdict,\n evaluationAlgorithm: result.evaluationAlgorithm,\n evaluationKind: result.evaluationKind,\n assessmentProjection: assessment.state,\n };\n const scores: globalThis.Record<string, number> = {};\n if (assessment.state === \"projected\") {\n metadata.assertions = projectionMetadata(assessment.assertions, (assertions) => ({ entries: assertionMetadata(assertions.entries) }));\n metadata.verdictProjection = projectionMetadata(assessment.verdict, (value) => ({ value }));\n if (assessment.score !== undefined) {\n metadata.score = projectionMetadata(assessment.score, scoreMetadata);\n const score = availableProjectionValue(assessment.score);\n if (score?.state === \"complete\")\n scores[\"niceeval:score\"] = score.earned;\n }\n }\n else {\n metadata.assessmentProjectionReason = assessment.reason;\n }\n if (result.model !== undefined)\n metadata.model = result.model;\n if (result.experimentId !== undefined)\n metadata.experiment = result.experimentId;\n if (result.experiment?.flags && Object.keys(result.experiment.flags).length > 0) {\n metadata.flags = result.experiment.flags;\n }\n if (result.skipReason !== undefined)\n metadata.skipReason = result.skipReason;\n // 一次运行内 (experiment, eval, adapter, model, attempt) 唯一;Braintrust 按 id 合并重复行。\n const id = [\n result.experimentId ?? \"\",\n result.id,\n JSON.stringify(result.adapter),\n result.model ?? \"\",\n `a${result.attempt}`,\n ].join(\"|\");\n return {\n id,\n input: result.description ?? result.id,\n output: lastAssistantText(result.events),\n error: result.error,\n metadata,\n metrics,\n ...(Object.keys(scores).length > 0 ? { scores } : {}),\n };\n}\nfunction availableProjectionValue<Value>(entry: AttemptSlotProjectedEntry<Value>): Value | undefined {\n return entry.state === \"attachment-result\" && entry.attachment.state === \"available\"\n ? entry.attachment.value\n : undefined;\n}\nfunction projectionMetadata<Value>(entry: AttemptSlotProjectedEntry<Value>, available: (value: Value) => globalThis.Record<string, JsonValue>): JsonValue {\n if (entry.state !== \"attachment-result\") {\n return { state: entry.state };\n }\n switch (entry.attachment.state) {\n case \"available\":\n return { state: \"available\", ...available(entry.attachment.value) };\n case \"unavailable\":\n return { state: \"unavailable\" };\n case \"migration-required\":\n return {\n state: \"migration-required\",\n from: entry.attachment.from,\n to: entry.attachment.to,\n ...(entry.attachment.command === undefined ? {} : { command: entry.attachment.command }),\n };\n case \"unsupported\":\n case \"invalid\":\n return { state: entry.attachment.state };\n }\n}\nfunction assertionMetadata(entries: readonly AssertionEntryRead<unknown>[]): JsonValue {\n const metadata: JsonValue[] = [];\n for (const entry of entries) {\n const display = entry.entry.display;\n const decision = entry.entry.decision;\n const item: globalThis.Record<string, JsonValue> = {\n entryId: entry.entry.entryId,\n groupPath: [...display.groupPath],\n outcome: entry.state === \"available\" ? decision.result : entry.state,\n coverage: coverageMetadata(entry.entry.materials.coverage),\n limitations: entry.entry.materials.limitations.map(limitationMetadata),\n scoreContribution: scoreContributionMetadata(entry.entry.contribution),\n };\n if (display.label !== undefined)\n item.label = display.label;\n if (display.key !== undefined)\n item.key = display.key;\n const reason = assertionReason(entry);\n if (reason !== undefined)\n item.reason = reason;\n metadata.push(item);\n }\n return metadata;\n}\nfunction assertionReason(entry: AssertionEntryRead<unknown>): string | undefined {\n if (entry.state !== \"available\")\n return entry.reason;\n switch (entry.entry.decision.result) {\n case \"matched\":\n return undefined;\n case \"mismatched\":\n case \"unavailable\":\n case \"errored\":\n case \"not-applicable\":\n return entry.entry.decision.reason ?? undefined;\n }\n}\nfunction coverageMetadata(coverage: AssertionCoverage): globalThis.Record<string, JsonValue> {\n const metadata: globalThis.Record<string, JsonValue> = { state: coverage.state };\n if (coverage.state !== \"complete\")\n metadata.reason = coverage.reason;\n return metadata;\n}\nfunction limitationMetadata(limitation: AssertionLimitation): globalThis.Record<string, JsonValue> {\n switch (limitation.kind) {\n case \"redacted\":\n return { kind: limitation.kind, fieldCount: limitation.fieldCount };\n case \"sampled\":\n return {\n kind: limitation.kind,\n captured: limitation.captured,\n ...(limitation.knownTotal === undefined ? {} : { knownTotal: limitation.knownTotal }),\n };\n case \"truncated\":\n return { kind: limitation.kind, omittedBytes: limitation.omittedBytes };\n case \"provider-limited\":\n return { kind: limitation.kind };\n }\n}\nfunction scoreContributionMetadata(contribution: ScoreContribution): globalThis.Record<string, JsonValue> {\n switch (contribution.state) {\n case \"not-scored\":\n return { state: contribution.state };\n case \"earned\":\n return {\n state: contribution.state,\n points: contribution.points,\n earned: contribution.earned,\n };\n case \"unavailable\":\n return {\n state: contribution.state,\n points: contribution.points,\n reason: contribution.reason,\n };\n }\n}\nfunction scoreMetadata(score: ScoreProjection): globalThis.Record<string, JsonValue> {\n switch (score.state) {\n case \"complete\":\n return { state: score.state, earned: score.earned, comparable: score.comparable };\n case \"partial\":\n return {\n state: score.state,\n earned: score.earned,\n reasons: [...score.reasons],\n comparable: score.comparable,\n };\n case \"unavailable\":\n return {\n state: score.state,\n reasons: [...score.reasons],\n comparable: score.comparable,\n };\n }\n}\n/** agent 的最终回复文本(事件流里最后一条 assistant message);没有就不填。 */\nfunction lastAssistantText(events: EvalResult[\"events\"]): string | undefined {\n if (!events)\n return undefined;\n for (let i = events.length - 1; i >= 0; i--) {\n const e = events[i];\n if (e.type === \"message\" && e.role === \"assistant\")\n return e.text;\n }\n return undefined;\n}\n/** 动态 import 说明:specifier 放变量里,`braintrust` 不进编译期依赖,没装也能 typecheck。 */\nconst BRAINTRUST_PACKAGE = \"braintrust\";\nasync function loadBraintrustSdk(): Promise<BraintrustSdk> {\n try {\n return (await __niceevalDynamicImport(BRAINTRUST_PACKAGE)) as unknown as BraintrustSdk;\n }\n catch {\n throw new Error(\"The 'braintrust' package is required for the Braintrust reporter but was not found. Install it with: npm install braintrust (and set BRAINTRUST_API_KEY).\");\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"braintrust.js","sourceRoot":"","sources":["braintrust.ts"],"names":[],"mappings":"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","sourcesContent":["// Braintrust 报告器:把一次 niceeval 运行作为一个 Braintrust experiment 上报,\n// 每个 attempt 一行(scores = 断言,metrics = 时长/token/成本),跨提交比较与团队共享。\n// `braintrust` 是可选依赖:动态 import,装了才用得上,没装在 onInvocationStart 报错\n// (reporter 错误按框架约定只记 diagnostic,不会让运行崩)。\nimport type { EvalResult, JsonValue, Reporter } from \"../../types.ts\";\nimport type { AssertionCoverage, AssertionEntryRead, AssertionLimitation, AssertionsProjection, ScoreContribution, } from \"../../assertions/record/model.ts\";\nimport type { ScoreProjection } from \"../../eval/record/score.ts\";\n/** Closed assessment rows; this reporter does not reopen Record. */\ntype AttemptSlotProjectedEntry<Value> = {\n readonly state: \"excluded\" | \"not-recorded\" | \"core-invalid\";\n} | {\n readonly state: \"attachment-result\";\n readonly attachment: {\n readonly state: \"available\";\n readonly value: Value;\n } | {\n readonly state: \"unavailable\" | \"unsupported\" | \"invalid\";\n } | {\n readonly state: \"migration-required\";\n readonly from: string;\n readonly to: string;\n readonly command?: string;\n };\n};\nimport type { Verdict } from \"../../shared/types.ts\";\nimport { reportActivity } from \"../feedback/sink.ts\";\nexport interface BraintrustConfig {\n /** Braintrust 项目名;省略时用 \"niceeval\"。 */\n project?: string;\n /** Braintrust 项目 id;与 project 给一个即可。 */\n projectId?: string;\n /** 实验名;省略时由 Braintrust 自动命名。 */\n experiment?: string;\n /** 作为对比基线(diff base)的既有实验名。 */\n baseExperiment?: string;\n /** 作为对比基线(diff base)的既有实验 id。 */\n baseExperimentId?: string;\n /** true = 更新同名既有实验,而不是新建一个。 */\n update?: boolean;\n /** 实验级附加 metadata;与 niceeval 自动写入的字段合并,同名以这里为准。 */\n metadata?: globalThis.Record<string, JsonValue>;\n /** API key;省略时 SDK 读 BRAINTRUST_API_KEY 环境变量。 */\n apiKey?: string;\n}\n/**\n * Braintrust SDK 的最小类型面。本地声明是为了不把 `braintrust` 变成编译期依赖;\n * 动态 import 后按这个形状断言。\n */\ninterface BraintrustSdk {\n // SDK 里 init 同步返回(登录与建实验都是惰性的);统一 await,同步/异步都兼容。\n init(options: {\n project?: string;\n projectId?: string;\n experiment?: string;\n baseExperiment?: string;\n baseExperimentId?: string;\n update?: boolean;\n apiKey?: string;\n metadata?: globalThis.Record<string, JsonValue>;\n setCurrent?: boolean;\n }): BraintrustExperiment | Promise<BraintrustExperiment>;\n flush(): Promise<void>;\n}\ninterface BraintrustExperiment {\n log(event: BraintrustLogEvent): void;\n summarize(): Promise<{\n experimentUrl?: string;\n }>;\n}\nexport interface BraintrustLogEvent {\n id?: string;\n input?: string;\n output?: string;\n error?: EvalResult[\"error\"];\n scores?: globalThis.Record<string, number>;\n metadata?: globalThis.Record<string, JsonValue>;\n metrics?: globalThis.Record<string, number>;\n}\n/**\n * A post-Record Projection calculation supplies this optional assessment. The\n * live Reporter callback currently has no RecordProjection input, so its\n * absence is represented explicitly rather than as a made-up Attachment read.\n */\nexport type BraintrustAssessment = {\n readonly state: \"projected\";\n /** Exact Report-style public projections, including every data state. */\n readonly assertions: AttemptSlotProjectedEntry<AssertionsProjection<unknown>>;\n readonly verdict: AttemptSlotProjectedEntry<Verdict>;\n readonly score?: AttemptSlotProjectedEntry<ScoreProjection>;\n} | {\n readonly state: \"not-projected\";\n readonly reason: \"reporter-contract-does-not-provide-record-projections\";\n};\nconst NOT_PROJECTED_ASSESSMENT: BraintrustAssessment = Object.freeze({\n state: \"not-projected\" as const,\n reason: \"reporter-contract-does-not-provide-record-projections\" as const,\n});\n/**\n * 创建 Braintrust 报告器。挂在 `defineConfig({ reporters })` 上观测整次运行,\n * 或挂在单个 eval 的 `reporters` 上只观测它(同一实例被多个 eval 引用时共享一个实验)。\n */\nexport function Braintrust(config: BraintrustConfig = {}): Reporter {\n let sdk: BraintrustSdk | undefined;\n let experiment: BraintrustExperiment | undefined;\n return {\n async onInvocationStart(evals) {\n sdk = await loadBraintrustSdk();\n experiment = await sdk.init({\n project: config.projectId ? undefined : (config.project ?? \"niceeval\"),\n projectId: config.projectId,\n experiment: config.experiment,\n baseExperiment: config.baseExperiment,\n baseExperimentId: config.baseExperimentId,\n update: config.update,\n apiKey: config.apiKey,\n // 不再写顶层单一 adapter:一次 Invocation 可能横跨多个 (adapter, model, flags) 配置,\n // 启动时还没有任何结果,写一个必然只代表其中一份配置的值就是撒谎(见\n // docs/runner.md「Reporter 与运行器事件」)。每行自己的 adapter 身份仍在\n // toBraintrustEvent() 的 metadata.adapter 里,逐 attempt 精确;跨行的集合可以\n // 从 Braintrust 自己按 metadata.adapter 分组得到,不需要实验级再存一份。\n metadata: {\n evals: evals.map((e) => e.id),\n ...config.metadata,\n },\n // 不设为全局 current experiment,避免污染用户代码里的 braintrust 全局态。\n setCurrent: false,\n });\n },\n onEvalComplete(result) {\n experiment?.log(toBraintrustEvent(result, NOT_PROJECTED_ASSESSMENT));\n },\n async onInvocationComplete() {\n if (!experiment)\n return;\n try {\n await sdk?.flush();\n const summary = await experiment.summarize();\n if (summary.experimentUrl) {\n reportActivity(`Braintrust experiment: ${summary.experimentUrl}`);\n }\n }\n finally {\n experiment = undefined;\n sdk = undefined;\n }\n },\n };\n}\n/**\n * EvalResult identity/transport data plus an optional post-Record assessment\n * become one Braintrust row. Assertions, Verdict, and Score only enter through\n * that assessment's public Attachment projections; this function never reads\n * a historical result graph.\n */\nexport function toBraintrustEvent(result: EvalResult, assessment: BraintrustAssessment = NOT_PROJECTED_ASSESSMENT): BraintrustLogEvent {\n const projectedVerdict = assessment.state === \"projected\"\n ? availableProjectionValue(assessment.verdict)\n : undefined;\n const verdict = projectedVerdict ?? result.verdict;\n const metrics: globalThis.Record<string, number> = {};\n if (result.startedAt) {\n const start = Date.parse(result.startedAt) / 1000;\n if (Number.isFinite(start)) {\n metrics.start = start;\n metrics.end = start + result.durationMs / 1000;\n }\n }\n if (result.usage) {\n const { inputTokens, outputTokens, cacheReadTokens, cacheCreationTokens, reasoningTokens, requests } = result.usage;\n if (inputTokens !== undefined)\n metrics.prompt_tokens = inputTokens;\n if (outputTokens !== undefined)\n metrics.completion_tokens = outputTokens;\n if (inputTokens !== undefined && outputTokens !== undefined)\n metrics.tokens = inputTokens + outputTokens;\n if (cacheReadTokens !== undefined)\n metrics.cache_read_tokens = cacheReadTokens;\n if (cacheCreationTokens !== undefined)\n metrics.cache_creation_tokens = cacheCreationTokens;\n if (reasoningTokens !== undefined)\n metrics.reasoning_tokens = reasoningTokens;\n if (requests !== undefined)\n metrics.requests = requests;\n }\n // estimated_cost_usd 恒为价目表估算(EvalResult.estimatedCostUSD,见 estimateCost);\n // observed 成本单独留在 result.usage.costUSD,不混入本指标。\n if (result.estimatedCostUSD !== undefined)\n metrics.estimated_cost_usd = result.estimatedCostUSD;\n const metadata: globalThis.Record<string, JsonValue> = {\n eval: result.id,\n adapter: result.adapter,\n attempt: result.attempt,\n verdict,\n status: verdict,\n evaluationAlgorithm: result.evaluationAlgorithm,\n evaluationKind: result.evaluationKind,\n assessmentProjection: assessment.state,\n };\n const scores: globalThis.Record<string, number> = {};\n if (assessment.state === \"projected\") {\n metadata.assertions = projectionMetadata(assessment.assertions, (assertions) => ({ entries: assertionMetadata(assertions.entries) }));\n metadata.verdictProjection = projectionMetadata(assessment.verdict, (value) => ({ value }));\n if (assessment.score !== undefined) {\n metadata.score = projectionMetadata(assessment.score, scoreMetadata);\n const score = availableProjectionValue(assessment.score);\n if (score?.state === \"complete\")\n scores[\"niceeval:score\"] = score.earned;\n }\n }\n else {\n metadata.assessmentProjectionReason = assessment.reason;\n }\n if (result.model !== undefined)\n metadata.model = result.model;\n if (result.experimentId !== undefined)\n metadata.experiment = result.experimentId;\n if (result.experiment?.flags && Object.keys(result.experiment.flags).length > 0) {\n metadata.flags = result.experiment.flags;\n }\n if (result.skipReason !== undefined)\n metadata.skipReason = result.skipReason;\n // 一次运行内 (experiment, eval, adapter, model, attempt) 唯一;Braintrust 按 id 合并重复行。\n const id = [\n result.experimentId ?? \"\",\n result.id,\n JSON.stringify(result.adapter),\n result.model ?? \"\",\n `a${result.attempt}`,\n ].join(\"|\");\n return {\n id,\n input: result.description ?? result.id,\n output: lastAssistantText(result.events),\n error: result.error,\n metadata,\n metrics,\n ...(Object.keys(scores).length > 0 ? { scores } : {}),\n };\n}\nfunction availableProjectionValue<Value>(entry: AttemptSlotProjectedEntry<Value>): Value | undefined {\n return entry.state === \"attachment-result\" && entry.attachment.state === \"available\"\n ? entry.attachment.value\n : undefined;\n}\nfunction projectionMetadata<Value>(entry: AttemptSlotProjectedEntry<Value>, available: (value: Value) => globalThis.Record<string, JsonValue>): JsonValue {\n if (entry.state !== \"attachment-result\") {\n return { state: entry.state };\n }\n switch (entry.attachment.state) {\n case \"available\":\n return { state: \"available\", ...available(entry.attachment.value) };\n case \"unavailable\":\n return { state: \"unavailable\" };\n case \"migration-required\":\n return {\n state: \"migration-required\",\n from: entry.attachment.from,\n to: entry.attachment.to,\n ...(entry.attachment.command === undefined ? {} : { command: entry.attachment.command }),\n };\n case \"unsupported\":\n case \"invalid\":\n return { state: entry.attachment.state };\n }\n}\nfunction assertionMetadata(entries: readonly AssertionEntryRead<unknown>[]): JsonValue {\n const metadata: JsonValue[] = [];\n for (const entry of entries) {\n const display = entry.entry.display;\n const decision = entry.entry.decision;\n const item: globalThis.Record<string, JsonValue> = {\n entryId: entry.entry.entryId,\n groupPath: [...display.groupPath],\n outcome: entry.state === \"available\" ? decision.result : entry.state,\n coverage: coverageMetadata(entry.entry.materials.coverage),\n limitations: entry.entry.materials.limitations.map(limitationMetadata),\n scoreContribution: scoreContributionMetadata(entry.entry.contribution),\n };\n if (display.label !== undefined)\n item.label = display.label;\n if (display.key !== undefined)\n item.key = display.key;\n const reason = assertionReason(entry);\n if (reason !== undefined)\n item.reason = reason;\n metadata.push(item);\n }\n return metadata;\n}\nfunction assertionReason(entry: AssertionEntryRead<unknown>): string | undefined {\n if (entry.state !== \"available\")\n return entry.reason;\n switch (entry.entry.decision.result) {\n case \"matched\":\n return undefined;\n case \"mismatched\":\n case \"unavailable\":\n case \"errored\":\n case \"not-applicable\":\n return entry.entry.decision.reason ?? undefined;\n }\n}\nfunction coverageMetadata(coverage: AssertionCoverage): globalThis.Record<string, JsonValue> {\n const metadata: globalThis.Record<string, JsonValue> = { state: coverage.state };\n if (coverage.state !== \"complete\")\n metadata.reason = coverage.reason;\n return metadata;\n}\nfunction limitationMetadata(limitation: AssertionLimitation): globalThis.Record<string, JsonValue> {\n switch (limitation.kind) {\n case \"redacted\":\n return { kind: limitation.kind, fieldCount: limitation.fieldCount };\n case \"sampled\":\n return {\n kind: limitation.kind,\n captured: limitation.captured,\n ...(limitation.knownTotal === undefined ? {} : { knownTotal: limitation.knownTotal }),\n };\n case \"truncated\":\n return { kind: limitation.kind, omittedBytes: limitation.omittedBytes };\n case \"provider-limited\":\n return { kind: limitation.kind };\n case \"capacity-limited\":\n return { ...limitation };\n }\n}\nfunction scoreContributionMetadata(contribution: ScoreContribution): globalThis.Record<string, JsonValue> {\n switch (contribution.state) {\n case \"not-scored\":\n return { state: contribution.state };\n case \"earned\":\n return {\n state: contribution.state,\n points: contribution.points,\n earned: contribution.earned,\n };\n case \"unavailable\":\n return {\n state: contribution.state,\n points: contribution.points,\n reason: contribution.reason,\n };\n }\n}\nfunction scoreMetadata(score: ScoreProjection): globalThis.Record<string, JsonValue> {\n switch (score.state) {\n case \"complete\":\n return { state: score.state, earned: score.earned, comparable: score.comparable };\n case \"partial\":\n return {\n state: score.state,\n earned: score.earned,\n reasons: [...score.reasons],\n comparable: score.comparable,\n };\n case \"unavailable\":\n return {\n state: score.state,\n reasons: [...score.reasons],\n comparable: score.comparable,\n };\n }\n}\n/** agent 的最终回复文本(事件流里最后一条 assistant message);没有就不填。 */\nfunction lastAssistantText(events: EvalResult[\"events\"]): string | undefined {\n if (!events)\n return undefined;\n for (let i = events.length - 1; i >= 0; i--) {\n const e = events[i];\n if (e.type === \"message\" && e.role === \"assistant\")\n return e.text;\n }\n return undefined;\n}\n/** 动态 import 说明:specifier 放变量里,`braintrust` 不进编译期依赖,没装也能 typecheck。 */\nconst BRAINTRUST_PACKAGE = \"braintrust\";\nasync function loadBraintrustSdk(): Promise<BraintrustSdk> {\n try {\n return (await __niceevalDynamicImport(BRAINTRUST_PACKAGE)) as unknown as BraintrustSdk;\n }\n catch {\n throw new Error(\"The 'braintrust' package is required for the Braintrust reporter but was not found. Install it with: npm install braintrust (and set BRAINTRUST_API_KEY).\");\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
3
|
+
exports.detectReuseFailureClusters = detectReuseFailureClusters;
|
|
4
|
+
exports.reuseFailureClusterMessage = reuseFailureClusterMessage;
|
|
5
5
|
/** 同一阶段上至少这么多条后承接失败才算「集中」;低于它是零散失败,不发诊断(不误报)。 */
|
|
6
6
|
const CLUSTER_MIN = 2;
|
|
7
7
|
function failing(result) {
|
|
@@ -12,11 +12,10 @@ function phaseOf(result) {
|
|
|
12
12
|
return (result.error?.origin.scope === "attempt" ? result.error.origin.phase : undefined) ?? "eval.run";
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* 按实例 ×
|
|
16
|
-
*
|
|
17
|
-
* 无关,报出来就是误报。
|
|
15
|
+
* 按实例 × 承接序号聚合复用后的失败。只看声明了复用且带完整调度事实的结果;
|
|
16
|
+
* 首承接缺失或本身失败时没有成功基准,不报告后续失败聚集。
|
|
18
17
|
*/
|
|
19
|
-
function
|
|
18
|
+
function detectReuseFailureClusters(results) {
|
|
20
19
|
const byInstance = new Map();
|
|
21
20
|
for (const result of results) {
|
|
22
21
|
const sandbox = result.sandbox;
|
|
@@ -33,7 +32,7 @@ function detectReuseContamination(results) {
|
|
|
33
32
|
const notices = [];
|
|
34
33
|
for (const group of byInstance.values()) {
|
|
35
34
|
const first = group.attempts.find((r) => r.sandbox.reuseOrdinal === 1);
|
|
36
|
-
//
|
|
35
|
+
// 首承接缺失或失败时,没有成功基准可供比较。
|
|
37
36
|
if (!first || failing(first))
|
|
38
37
|
continue;
|
|
39
38
|
const laterFailures = group.attempts.filter((r) => r.sandbox.reuseOrdinal >= 2 && failing(r));
|
|
@@ -61,11 +60,11 @@ function detectReuseContamination(results) {
|
|
|
61
60
|
return notices;
|
|
62
61
|
}
|
|
63
62
|
/** 诊断正文:点名实例、序号区间与阶段,并说清它只是线索。 */
|
|
64
|
-
function
|
|
63
|
+
function reuseFailureClusterMessage(notice) {
|
|
65
64
|
const where = notice.experimentId !== undefined ? ` in experiment "${notice.experimentId}"` : "";
|
|
66
65
|
return (` · [sandbox] reused sandbox #${notice.reuseSandbox}${where} handled its first attempt cleanly, but ` +
|
|
67
66
|
`${notice.count} later attempts (handoff ${notice.fromOrdinal}-${notice.toOrdinal}) all stopped in ${notice.phase}. ` +
|
|
68
|
-
"
|
|
69
|
-
"
|
|
67
|
+
"This failure pattern does not establish a cause. Intentional persistent memory and checkpoints are supported; " +
|
|
68
|
+
"check expected state, unexpected leftovers, and repeatable setup against the experiment's design. No verdict is changed.");
|
|
70
69
|
}
|
|
71
70
|
//# sourceMappingURL=reuse-diagnostics.cjs.map
|