niceeval 0.13.2 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/bub.cjs +4 -4
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +2 -2
- package/dist/agents/bub.d.mts +2 -2
- package/dist/agents/bub.d.ts +2 -2
- package/dist/agents/claude-code-native.cjs +213 -0
- package/dist/agents/claude-code-native.cjs.map +1 -0
- package/dist/agents/claude-code-native.d.cts +5 -0
- package/dist/agents/claude-code-native.d.mts +5 -0
- package/dist/agents/claude-code-native.d.ts +5 -0
- package/dist/agents/claude-code-native.js +6 -0
- package/dist/agents/claude-code-native.js.map +1 -0
- package/dist/agents/claude-code.cjs +26 -80
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/codex-app-server.cjs +314 -0
- package/dist/agents/codex-app-server.cjs.map +1 -0
- package/dist/agents/codex-app-server.d.cts +9 -0
- package/dist/agents/codex-app-server.d.mts +9 -0
- package/dist/agents/codex-app-server.d.ts +9 -0
- package/dist/agents/codex-app-server.js +6 -0
- package/dist/agents/codex-app-server.js.map +1 -0
- package/dist/agents/codex.cjs +19 -68
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +3 -3
- package/dist/agents/codex.d.mts +3 -3
- package/dist/agents/codex.d.ts +3 -3
- package/dist/agents/index.cjs +3 -1
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +1 -0
- package/dist/agents/index.d.mts +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.js +84 -82
- package/dist/agents/index.mjs +84 -82
- package/dist/agents/managed-jsonl.cjs +207 -0
- package/dist/agents/managed-jsonl.cjs.map +1 -0
- package/dist/agents/managed-jsonl.d.cts +39 -0
- package/dist/agents/managed-jsonl.d.mts +39 -0
- package/dist/agents/managed-jsonl.d.ts +39 -0
- package/dist/agents/managed-jsonl.js +6 -0
- package/dist/agents/managed-jsonl.js.map +1 -0
- package/dist/agents/managed-process.cjs +31 -0
- package/dist/agents/managed-process.cjs.map +1 -0
- package/dist/agents/managed-process.d.cts +3 -0
- package/dist/agents/managed-process.d.mts +3 -0
- package/dist/agents/managed-process.d.ts +3 -0
- package/dist/agents/managed-process.js +6 -0
- package/dist/agents/managed-process.js.map +1 -0
- package/dist/agents/omp.cjs +18 -1
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/sdk-streams.cjs +11 -4
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +8 -0
- package/dist/agents/types.d.mts +8 -0
- package/dist/agents/types.d.ts +8 -0
- package/dist/analysis/bindings.cjs +74 -19
- package/dist/analysis/bindings.cjs.map +1 -1
- package/dist/analysis/bindings.d.cts +534 -156
- package/dist/analysis/bindings.d.mts +534 -156
- package/dist/analysis/bindings.d.ts +534 -156
- package/dist/analysis/domain-view.cjs.map +1 -1
- package/dist/analysis/domain-view.d.cts +137 -8
- package/dist/analysis/domain-view.d.mts +137 -8
- package/dist/analysis/domain-view.d.ts +137 -8
- package/dist/analysis/index.cjs.map +1 -1
- package/dist/analysis/index.d.cts +1 -1
- package/dist/analysis/index.d.mts +1 -1
- package/dist/analysis/index.d.ts +1 -1
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +62 -0
- package/dist/assertions/api.d.mts +62 -0
- package/dist/assertions/api.d.ts +62 -0
- package/dist/assertions/judge.cjs +56 -5
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +66 -42
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +13 -0
- package/dist/assertions/match.d.mts +13 -0
- package/dist/assertions/match.d.ts +13 -0
- package/dist/assertions/record/attachment.cjs +104 -33
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/attachment.d.cts +294 -57
- package/dist/assertions/record/attachment.d.mts +294 -57
- package/dist/assertions/record/attachment.d.ts +294 -57
- package/dist/assertions/record/codec.cjs +91 -17
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/codec.d.cts +280 -52
- package/dist/assertions/record/codec.d.mts +280 -52
- package/dist/assertions/record/codec.d.ts +280 -52
- package/dist/assertions/record/index.js +2 -0
- package/dist/assertions/record/model.cjs +16 -0
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +120 -13
- package/dist/assertions/record/model.d.mts +120 -13
- package/dist/assertions/record/model.d.ts +120 -13
- package/dist/assertions/record/model.js +2 -0
- package/dist/assertions/record/producer.cjs +70 -50
- package/dist/assertions/record/producer.cjs.map +1 -1
- package/dist/assertions/record/producer.d.cts +8 -7
- package/dist/assertions/record/producer.d.mts +8 -7
- package/dist/assertions/record/producer.d.ts +8 -7
- package/dist/assertions/runtime.cjs +49 -7
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/application.cjs +40 -0
- package/dist/cli/application.cjs.map +1 -0
- package/dist/cli/application.d.cts +129 -0
- package/dist/cli/application.d.mts +129 -0
- package/dist/cli/application.d.ts +129 -0
- package/dist/cli/application.js +24 -0
- package/dist/cli/application.js.map +1 -0
- package/dist/cli/bootstrap.cjs +10 -4
- package/dist/cli/bootstrap.cjs.map +1 -1
- package/dist/cli/node-application.cjs +123 -0
- package/dist/cli/node-application.cjs.map +1 -0
- package/dist/cli/node-application.d.cts +14 -0
- package/dist/cli/node-application.d.mts +14 -0
- package/dist/cli/node-application.d.ts +14 -0
- package/dist/cli/node-application.js +26 -0
- package/dist/cli/node-application.js.map +1 -0
- package/dist/cli/program.cjs +2807 -0
- package/dist/cli/program.cjs.map +1 -0
- package/dist/cli/program.d.cts +352 -0
- package/dist/cli/program.d.mts +352 -0
- package/dist/cli/program.d.ts +352 -0
- package/dist/cli/program.js +36 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/project-configuration.cjs +134 -0
- package/dist/cli/project-configuration.cjs.map +1 -0
- package/dist/cli/project-configuration.d.cts +64 -0
- package/dist/cli/project-configuration.d.mts +64 -0
- package/dist/cli/project-configuration.d.ts +64 -0
- package/dist/cli/project-configuration.js +22 -0
- package/dist/cli/project-configuration.js.map +1 -0
- package/dist/cli/record.cjs +20 -4
- package/dist/cli/record.cjs.map +1 -1
- package/dist/cli/record.d.cts +3 -3
- package/dist/cli/record.d.mts +3 -3
- package/dist/cli/record.d.ts +3 -3
- package/dist/cli.cjs +19 -3130
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +2 -148
- package/dist/cli.d.mts +2 -148
- package/dist/cli.d.ts +2 -148
- package/dist/cli.js +22 -30
- package/dist/context/assert-first.cjs +21 -15
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +1 -0
- package/dist/context/assert-first.d.mts +1 -0
- package/dist/context/assert-first.d.ts +1 -0
- package/dist/context/attempt-resources.cjs +13 -0
- package/dist/context/attempt-resources.cjs.map +1 -0
- package/dist/context/attempt-resources.d.cts +3 -0
- package/dist/context/attempt-resources.d.mts +3 -0
- package/dist/context/attempt-resources.d.ts +3 -0
- package/dist/context/attempt-resources.js +8 -0
- package/dist/context/attempt-resources.js.map +1 -0
- package/dist/context/session.cjs +4 -3
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +1 -0
- package/dist/context/session.d.mts +1 -0
- package/dist/context/session.d.ts +1 -0
- package/dist/eval/record/verdict.cjs +3 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -6
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/index.d.cts +1 -0
- package/dist/experiment/host/index.d.mts +1 -0
- package/dist/experiment/host/index.d.ts +1 -0
- package/dist/load-config.cjs +13 -4
- package/dist/load-config.cjs.map +1 -1
- package/dist/load-config.d.cts +4 -3
- package/dist/load-config.d.mts +4 -3
- package/dist/load-config.d.ts +4 -3
- package/dist/load-config.js +4 -2
- package/dist/o11y/parsers/codex.cjs +29 -7
- package/dist/o11y/parsers/codex.cjs.map +1 -1
- package/dist/record/codec/core.d.cts +0 -2
- package/dist/record/codec/core.d.mts +0 -2
- package/dist/record/codec/core.d.ts +0 -2
- package/dist/record/codec/identifiers.cjs +2 -3
- package/dist/record/codec/identifiers.cjs.map +1 -1
- package/dist/record/codec/identifiers.d.cts +1 -2
- package/dist/record/codec/identifiers.d.mts +1 -2
- package/dist/record/codec/identifiers.d.ts +1 -2
- package/dist/record/codec/identifiers.js +10 -12
- package/dist/record/codec/index.js +42 -44
- package/dist/record/definition/attachment.cjs +1 -0
- package/dist/record/definition/attachment.cjs.map +1 -1
- package/dist/record/definition/attachment.d.cts +14 -0
- package/dist/record/definition/attachment.d.mts +14 -0
- package/dist/record/definition/attachment.d.ts +14 -0
- package/dist/record/family/assertions-v1.cjs +104 -0
- package/dist/record/family/assertions-v1.cjs.map +1 -0
- package/dist/record/family/assertions-v1.d.cts +2 -0
- package/dist/record/family/assertions-v1.d.mts +2 -0
- package/dist/record/family/assertions-v1.d.ts +2 -0
- package/dist/record/family/assertions-v1.js +6 -0
- package/dist/record/family/assertions-v1.js.map +1 -0
- package/dist/record/family/assertions.cjs +16 -5
- package/dist/record/family/assertions.cjs.map +1 -1
- package/dist/record/family/assertions.d.cts +510 -56
- package/dist/record/family/assertions.d.mts +510 -56
- package/dist/record/family/assertions.d.ts +510 -56
- package/dist/record/family/assertions.js +14 -10
- package/dist/record/family/catalog.cjs +17 -1
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +1292 -104
- package/dist/record/family/catalog.d.mts +1292 -104
- package/dist/record/family/catalog.d.ts +1292 -104
- package/dist/record/family/catalog.js +22 -20
- package/dist/record/family/index.js +144 -138
- package/dist/record/family/observability-v1.cjs +5 -0
- package/dist/record/family/observability-v1.cjs.map +1 -1
- package/dist/record/family/observability.cjs +1 -1
- package/dist/record/family/observability.cjs.map +1 -1
- package/dist/record/host/runtime.cjs +323 -173
- package/dist/record/host/runtime.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +9 -7
- package/dist/record/host/types.d.mts +9 -7
- package/dist/record/host/types.d.ts +9 -7
- package/dist/record/model/core.cjs.map +1 -1
- package/dist/record/model/core.d.cts +1 -2
- package/dist/record/model/core.d.mts +1 -2
- package/dist/record/model/core.d.ts +1 -2
- package/dist/record/model/definition.cjs +1 -2
- package/dist/record/model/definition.cjs.map +1 -1
- package/dist/record/model/definition.d.cts +1 -7
- package/dist/record/model/definition.d.mts +1 -7
- package/dist/record/model/definition.d.ts +1 -7
- package/dist/record/model/identifiers.cjs +2 -3
- package/dist/record/model/identifiers.cjs.map +1 -1
- package/dist/record/model/identifiers.d.cts +1 -3
- package/dist/record/model/identifiers.d.mts +1 -3
- package/dist/record/model/identifiers.d.ts +1 -3
- package/dist/record/model/identifiers.js +36 -38
- package/dist/record/model/index.js +60 -62
- package/dist/record/platform/node.cjs +17 -7
- package/dist/record/platform/node.cjs.map +1 -1
- package/dist/record/platform/services.cjs.map +1 -1
- package/dist/record/platform/services.d.cts +8 -3
- package/dist/record/platform/services.d.mts +8 -3
- package/dist/record/platform/services.d.ts +8 -3
- package/dist/record/reader/format.cjs +16 -65
- package/dist/record/reader/format.cjs.map +1 -1
- package/dist/record/reader/format.d.cts +5 -9
- package/dist/record/reader/format.d.mts +5 -9
- package/dist/record/reader/format.d.ts +5 -9
- package/dist/record/reader/index.js +10 -8
- package/dist/record/reader/runtime.cjs +63 -32
- package/dist/record/reader/runtime.cjs.map +1 -1
- package/dist/record/reader/runtime.d.cts +40 -4
- package/dist/record/reader/runtime.d.mts +40 -4
- package/dist/record/reader/runtime.d.ts +40 -4
- package/dist/record/reader/runtime.js +6 -4
- package/dist/report/assets/enhance.js +5 -5
- package/dist/report/assets/styles.css +190 -24
- package/dist/report/built-in/result-components.cjs +8 -5
- package/dist/report/built-in/result-components.cjs.map +1 -1
- package/dist/report/built-in/standard.cjs +3 -0
- package/dist/report/built-in/standard.cjs.map +1 -1
- package/dist/report/built-in/standard.d.cts +2 -0
- package/dist/report/built-in/standard.d.mts +2 -0
- package/dist/report/built-in/standard.d.ts +2 -0
- package/dist/report/client-dist/app.js +53 -0
- package/dist/report/components/attempt-detail/compute.cjs +108 -231
- package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
- package/dist/report/components/attempt-detail/compute.d.cts +11 -45
- package/dist/report/components/attempt-detail/compute.d.mts +11 -45
- package/dist/report/components/attempt-detail/compute.d.ts +11 -45
- package/dist/report/components/attempt-detail/compute.js +2 -4
- package/dist/report/components/attempt-detail/content.cjs +4 -4
- package/dist/report/components/attempt-detail/content.cjs.map +1 -1
- package/dist/report/components/attempt-detail/validate.cjs +47 -4
- package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.cjs +9 -15
- package/dist/report/components/entity-lists/compute.cjs.map +1 -1
- package/dist/report/components/entity-lists/content.cjs +53 -40
- package/dist/report/components/entity-lists/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.cjs +1 -3
- package/dist/report/components/entity-lists/index.cjs.map +1 -1
- package/dist/report/components/experiment-detail/compute.cjs +4 -6
- package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
- package/dist/report/components/summaries/index.cjs +5 -1
- package/dist/report/components/summaries/index.cjs.map +1 -1
- package/dist/report/definition/cell.cjs +14 -7
- package/dist/report/definition/cell.cjs.map +1 -1
- package/dist/report/definition/cell.d.cts +4 -0
- package/dist/report/definition/cell.d.mts +4 -0
- package/dist/report/definition/cell.d.ts +4 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
- package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.js +6 -0
- package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
- package/dist/report/definition/primitives/conversation.cjs +7 -0
- package/dist/report/definition/primitives/conversation.cjs.map +1 -1
- package/dist/report/definition/primitives/conversation.d.cts +2 -0
- package/dist/report/definition/primitives/conversation.d.mts +2 -0
- package/dist/report/definition/primitives/conversation.d.ts +2 -0
- package/dist/report/definition/primitives/turn-trace.cjs +53 -3
- package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
- package/dist/report/definition/primitives.cjs +14 -1
- package/dist/report/definition/primitives.cjs.map +1 -1
- package/dist/report/definition/report.cjs +16 -8
- package/dist/report/definition/report.cjs.map +1 -1
- package/dist/report/definition/report.d.cts +6 -0
- package/dist/report/definition/report.d.mts +6 -0
- package/dist/report/definition/report.d.ts +6 -0
- package/dist/report/definition/table-text.cjs +12 -3
- package/dist/report/definition/table-text.cjs.map +1 -1
- package/dist/report/definition/table-text.d.cts +6 -1
- package/dist/report/definition/table-text.d.mts +6 -1
- package/dist/report/definition/table-text.d.ts +6 -1
- package/dist/report/execution/model.cjs +6 -14
- package/dist/report/execution/model.cjs.map +1 -1
- package/dist/report/execution/model.d.cts +5 -10
- package/dist/report/execution/model.d.mts +5 -10
- package/dist/report/execution/model.d.ts +5 -10
- package/dist/report/execution/model.js +6 -6
- package/dist/report/execution/paths.cjs +0 -11
- package/dist/report/execution/paths.cjs.map +1 -1
- package/dist/report/execution/paths.d.cts +0 -1
- package/dist/report/execution/paths.d.mts +0 -1
- package/dist/report/execution/paths.d.ts +0 -1
- package/dist/report/execution/paths.js +6 -8
- package/dist/report/host/execute.cjs +13 -22
- package/dist/report/host/execute.cjs.map +1 -1
- package/dist/report/host/execute.d.cts +1 -4
- package/dist/report/host/execute.d.mts +1 -4
- package/dist/report/host/execute.d.ts +1 -4
- package/dist/report/host/from-record.cjs +3 -0
- package/dist/report/host/from-record.cjs.map +1 -1
- package/dist/report/host/from-record.d.cts +4 -1
- package/dist/report/host/from-record.d.mts +4 -1
- package/dist/report/host/from-record.d.ts +4 -1
- package/dist/report/host/site-assets.cjs +1 -2
- package/dist/report/host/site-assets.cjs.map +1 -1
- package/dist/report/host/site-assets.d.cts +0 -1
- package/dist/report/host/site-assets.d.mts +0 -1
- package/dist/report/host/site-assets.d.ts +0 -1
- package/dist/report/host/site-assets.js +2 -4
- package/dist/report/host/static.cjs +71 -346
- package/dist/report/host/static.cjs.map +1 -1
- package/dist/report/host/static.d.cts +1 -3
- package/dist/report/host/static.d.mts +1 -3
- package/dist/report/host/static.d.ts +1 -3
- package/dist/report/host/static.js +2 -2
- package/dist/report/host/view-session.cjs.map +1 -1
- package/dist/report/host/view-session.d.cts +1 -1
- package/dist/report/host/view-session.d.mts +1 -1
- package/dist/report/host/view-session.d.ts +1 -1
- package/dist/report/model/locale.cjs +1 -1
- package/dist/report/model/locale.cjs.map +1 -1
- package/dist/report/model/locale.d.cts +1 -1
- package/dist/report/model/locale.d.mts +1 -1
- package/dist/report/model/locale.d.ts +1 -1
- package/dist/report/model/pricing.cjs +2 -2
- package/dist/report/model/pricing.cjs.map +1 -1
- package/dist/report/react/enhance.js +5 -5
- package/dist/report/react/styles.css +190 -24
- package/dist/runner/adoption.cjs +4 -7
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-resources.cjs +60 -0
- package/dist/runner/attempt-resources.cjs.map +1 -0
- package/dist/runner/attempt-resources.d.cts +13 -0
- package/dist/runner/attempt-resources.d.mts +13 -0
- package/dist/runner/attempt-resources.d.ts +13 -0
- package/dist/runner/attempt-resources.js +6 -0
- package/dist/runner/attempt-resources.js.map +1 -0
- package/dist/runner/attempt.cjs +37 -3
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/feedback/failure.cjs +77 -2
- package/dist/runner/feedback/failure.cjs.map +1 -1
- package/dist/runner/feedback/failure.d.cts +2 -1
- package/dist/runner/feedback/failure.d.mts +2 -1
- package/dist/runner/feedback/failure.d.ts +2 -1
- package/dist/runner/project-current.cjs +2 -13
- package/dist/runner/project-current.cjs.map +1 -1
- package/dist/runner/project-current.d.cts +4 -2
- package/dist/runner/project-current.d.mts +4 -2
- package/dist/runner/project-current.d.ts +4 -2
- package/dist/runner/reporters/braintrust.cjs +7 -7
- package/dist/runner/reporters/braintrust.cjs.map +1 -1
- package/dist/runner/reuse-readback.cjs +3 -4
- package/dist/runner/reuse-readback.cjs.map +1 -1
- package/dist/runner/run.cjs +5 -2
- package/dist/runner/run.cjs.map +1 -1
- package/dist/sandbox/backend.cjs +32 -2
- package/dist/sandbox/backend.cjs.map +1 -1
- package/dist/sandbox/backend.d.cts +12 -1
- package/dist/sandbox/backend.d.mts +12 -1
- package/dist/sandbox/backend.d.ts +12 -1
- package/dist/sandbox/backend.js +28 -22
- package/dist/sandbox/docker.cjs +140 -0
- package/dist/sandbox/docker.cjs.map +1 -1
- package/dist/sandbox/docker.d.cts +3 -1
- package/dist/sandbox/docker.d.mts +3 -1
- package/dist/sandbox/docker.d.ts +3 -1
- package/dist/sandbox/e2b.cjs +42 -0
- package/dist/sandbox/e2b.cjs.map +1 -1
- package/dist/sandbox/e2b.d.cts +2 -0
- package/dist/sandbox/e2b.d.mts +2 -0
- package/dist/sandbox/e2b.d.ts +2 -0
- package/dist/sandbox/local.cjs +64 -0
- package/dist/sandbox/local.cjs.map +1 -1
- package/dist/sandbox/local.d.cts +3 -1
- package/dist/sandbox/local.d.mts +3 -1
- package/dist/sandbox/local.d.ts +3 -1
- package/dist/sandbox/managed-process.cjs +49 -0
- package/dist/sandbox/managed-process.cjs.map +1 -0
- package/dist/sandbox/managed-process.d.cts +11 -0
- package/dist/sandbox/managed-process.d.mts +11 -0
- package/dist/sandbox/managed-process.d.ts +11 -0
- package/dist/sandbox/managed-process.js +6 -0
- package/dist/sandbox/managed-process.js.map +1 -0
- package/dist/sandbox/types.cjs.map +1 -1
- package/dist/sandbox/types.d.cts +24 -0
- package/dist/sandbox/types.d.mts +24 -0
- package/dist/sandbox/types.d.ts +24 -0
- package/dist/sandbox/vercel.cjs +1 -0
- package/dist/sandbox/vercel.cjs.map +1 -1
- package/dist/sandbox/vercel.d.cts +1 -0
- package/dist/sandbox/vercel.d.mts +1 -0
- package/dist/sandbox/vercel.d.ts +1 -0
- package/dist/view/server.cjs +2 -37
- package/dist/view/server.cjs.map +1 -1
- package/dist/view/server.d.cts +0 -3
- package/dist/view/server.d.mts +0 -3
- package/dist/view/server.d.ts +0 -3
- package/docs-site/zh/reference/builtin-agents.mdx +7 -7
- package/docs-site/zh/reference/official-adapters.mdx +4 -4
- package/docs-site/zh/reference/report-components.mdx +2 -2
- package/docs-site/zh/tutorials/configuration.mdx +2 -2
- package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
- package/docs-site/zh/tutorials/publish-report.mdx +4 -4
- package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
- package/docs-site/zh/tutorials/theming.mdx +2 -2
- package/package.json +4 -6
- package/dist/record/migration/index.cjs +0 -5
- package/dist/record/migration/index.cjs.map +0 -1
- package/dist/record/migration/index.d.cts +0 -11
- package/dist/record/migration/index.d.mts +0 -11
- package/dist/record/migration/index.d.ts +0 -11
- package/dist/record/migration/index.js +0 -6
- package/dist/record/migration/index.js.map +0 -1
- package/dist/report/host/site-runtime.cjs +0 -92
- package/dist/report/host/site-runtime.cjs.map +0 -1
- package/dist/report/host/site-runtime.d.cts +0 -9
- package/dist/report/host/site-runtime.d.mts +0 -9
- package/dist/report/host/site-runtime.d.ts +0 -9
- package/dist/report/host/site-runtime.js +0 -10
- package/dist/report/host/site-runtime.js.map +0 -1
- package/dist/view/client-dist/app.css +0 -2
- package/dist/view/client-dist/app.js +0 -49
- package/dist/view/data.cjs +0 -3
- package/dist/view/data.cjs.map +0 -1
- package/dist/view/data.d.cts +0 -9
- package/dist/view/data.d.mts +0 -9
- package/dist/view/data.d.ts +0 -9
- package/dist/view/data.js +0 -4
- package/dist/view/data.js.map +0 -1
- package/dist/view/index.cjs +0 -24
- package/dist/view/index.cjs.map +0 -1
- package/dist/view/index.d.cts +0 -9
- package/dist/view/index.d.mts +0 -9
- package/dist/view/index.d.ts +0 -9
- package/dist/view/index.js +0 -28
- package/dist/view/index.js.map +0 -1
- package/dist/view/report-view-cache.cjs +0 -200
- package/dist/view/report-view-cache.cjs.map +0 -1
- package/dist/view/report-view-cache.d.cts +0 -67
- package/dist/view/report-view-cache.d.mts +0 -67
- package/dist/view/report-view-cache.d.ts +0 -67
- package/dist/view/report-view-cache.js +0 -8
- package/dist/view/report-view-cache.js.map +0 -1
- package/dist/view/shared/types.cjs +0 -3
- package/dist/view/shared/types.cjs.map +0 -1
- package/dist/view/shared/types.d.cts +0 -51
- package/dist/view/shared/types.d.mts +0 -51
- package/dist/view/shared/types.d.ts +0 -51
- package/dist/view/shared/types.js +0 -4
- package/dist/view/shared/types.js.map +0 -1
- package/dist/view/site.cjs +0 -32
- package/dist/view/site.cjs.map +0 -1
- package/dist/view/site.d.cts +0 -24
- package/dist/view/site.d.mts +0 -24
- package/dist/view/site.d.ts +0 -24
- package/dist/view/site.js +0 -8
- package/dist/view/site.js.map +0 -1
- package/dist/view/styles.css +0 -170
- package/dist/view/template.html +0 -17
|
@@ -11,13 +11,15 @@ const types_ts_1 = require("../types.cjs");
|
|
|
11
11
|
* Fresh results and current Record readbacks use separate projections so the
|
|
12
12
|
* latter never has to impersonate an EvalResult at the feedback boundary.
|
|
13
13
|
*/
|
|
14
|
-
function failureDetailFromResult(result) {
|
|
14
|
+
function failureDetailFromResult(result, sealed) {
|
|
15
15
|
const locator = result.locator;
|
|
16
16
|
if (!locator || (result.verdict !== "failed" && result.verdict !== "errored")) {
|
|
17
17
|
return undefined;
|
|
18
18
|
}
|
|
19
19
|
const terminal = failureSummaryTerminal(result);
|
|
20
|
-
const fact = terminal === undefined
|
|
20
|
+
const fact = terminal === undefined
|
|
21
|
+
? undefined
|
|
22
|
+
: primaryFactSummary(result, terminal) ?? primaryAssertionSummary(result, sealed, terminal);
|
|
21
23
|
// An errored terminal can only fall back to the runner error after every
|
|
22
24
|
// evaluator-originated Fact cause has been considered.
|
|
23
25
|
const fallbackError = terminal === "errored" && fact === undefined ? result.error : undefined;
|
|
@@ -54,6 +56,79 @@ function failureDetailFromResult(result) {
|
|
|
54
56
|
...(origin !== undefined ? { origin } : {}),
|
|
55
57
|
};
|
|
56
58
|
}
|
|
59
|
+
function record(value) {
|
|
60
|
+
return typeof value === "object" && value !== null
|
|
61
|
+
? value
|
|
62
|
+
: undefined;
|
|
63
|
+
}
|
|
64
|
+
function criterionTitle(criterion) {
|
|
65
|
+
switch (criterion.kind) {
|
|
66
|
+
case "scope-status":
|
|
67
|
+
return criterion.assertion === "succeeded"
|
|
68
|
+
? `${criterion.scope} succeeded`
|
|
69
|
+
: `${criterion.scope} had no failed actions`;
|
|
70
|
+
case "value-match":
|
|
71
|
+
return "value matched";
|
|
72
|
+
case "occurrence":
|
|
73
|
+
return `${criterion.scope} ${criterion.occurrence} ${criterion.assertion}`;
|
|
74
|
+
case "judge-measurement":
|
|
75
|
+
return criterion.recipe;
|
|
76
|
+
case "sandbox-result":
|
|
77
|
+
return criterion.operation.replaceAll("-", " ");
|
|
78
|
+
case "direct-score":
|
|
79
|
+
return "direct score";
|
|
80
|
+
case "third-party":
|
|
81
|
+
return criterion.name;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function diagnosticFields(diagnostic) {
|
|
85
|
+
const value = record(diagnostic);
|
|
86
|
+
if (value === undefined)
|
|
87
|
+
return {};
|
|
88
|
+
const string = (key) => typeof value[key] === "string" ? value[key] : undefined;
|
|
89
|
+
return {
|
|
90
|
+
...(string("message") === undefined ? {} : { matcher: string("message") }),
|
|
91
|
+
...(string("expected") === undefined ? {} : { expected: string("expected") }),
|
|
92
|
+
...(string("received") === undefined ? {} : { received: string("received") }),
|
|
93
|
+
...(string("reason") === undefined ? {} : { reason: string("reason") }),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function assertionCandidate(entry, result) {
|
|
97
|
+
const diagnostic = diagnosticFields(entry.result.diagnostic);
|
|
98
|
+
const subject = entry.subject.kind === "snapshot" ? record(entry.subject.value) : undefined;
|
|
99
|
+
const errorReason = [...(result.events ?? [])].reverse().find((event) => event.type === "error")?.message;
|
|
100
|
+
const scopeStatus = entry.criterion.kind === "scope-status"
|
|
101
|
+
? {
|
|
102
|
+
expected: entry.criterion.assertion === "succeeded" ? "completed" : undefined,
|
|
103
|
+
received: typeof subject?.status === "string" ? subject.status : undefined,
|
|
104
|
+
}
|
|
105
|
+
: {};
|
|
106
|
+
return {
|
|
107
|
+
title: entry.display.label ?? entry.display.key ?? criterionTitle(entry.criterion),
|
|
108
|
+
...diagnostic,
|
|
109
|
+
...scopeStatus,
|
|
110
|
+
...(errorReason === undefined ? {} : { reason: errorReason }),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function primaryAssertionSummary(result, sealed, terminal) {
|
|
114
|
+
if (sealed === undefined)
|
|
115
|
+
return undefined;
|
|
116
|
+
const failures = sealed.entries.filter((entry) => terminal === "failed"
|
|
117
|
+
? entry.result.gate === "failed"
|
|
118
|
+
: entry.result.state === "errored" || entry.result.gate === "unavailable");
|
|
119
|
+
const primary = failures[0];
|
|
120
|
+
if (primary === undefined)
|
|
121
|
+
return undefined;
|
|
122
|
+
const candidate = assertionCandidate(primary, result);
|
|
123
|
+
return {
|
|
124
|
+
title: (0, display_ts_1.summaryText)(candidate.title),
|
|
125
|
+
...(candidate.matcher === undefined ? {} : { matcher: (0, display_ts_1.summaryText)(candidate.matcher) }),
|
|
126
|
+
...(candidate.expected === undefined ? {} : { expected: (0, display_ts_1.summaryText)(candidate.expected) }),
|
|
127
|
+
...(candidate.received === undefined ? {} : { received: (0, display_ts_1.summaryText)(candidate.received) }),
|
|
128
|
+
...(candidate.reason === undefined ? {} : { reason: (0, display_ts_1.summaryText)(candidate.reason) }),
|
|
129
|
+
additionalFailures: failures.length - 1,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
57
132
|
/**
|
|
58
133
|
* A current Record reuse remains a readback ADT all the way to display. The
|
|
59
134
|
* durable source identity is exact; display derives the current short alias.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure.js","sourceRoot":"","sources":["failure.ts"],"names":[],"mappings":"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","sourcesContent":["import { compactAssertionSummary, summaryText } from \"../../assertions/display.ts\";\nimport { encodeAttemptLocator } from \"../../attempt-locator.ts\";\nimport type { EvaluationFactResult, EvalResult, PrimaryFactSummary, ScoreFactUseResult, VerdictFactUseResult, } from \"../../types.ts\";\nimport { firstLine } from \"../../util.ts\";\nimport { attemptTerminalOf } from \"../../shared/verdict.ts\";\nimport { runWho, type AgentRun, type FailureDetail } from \"../types.ts\";\nimport type { CurrentReusedAttemptReadback } from \"../reuse-readback.ts\";\n/**\n * Fresh results and current Record readbacks use separate projections so the\n * latter never has to impersonate an EvalResult at the feedback boundary.\n */\nexport function failureDetailFromResult(result: EvalResult): FailureDetail | undefined {\n const locator = result.locator;\n if (!locator || (result.verdict !== \"failed\" && result.verdict !== \"errored\")) {\n return undefined;\n }\n const terminal = failureSummaryTerminal(result);\n const fact = terminal === undefined ? undefined : primaryFactSummary(result, terminal);\n // An errored terminal can only fall back to the runner error after every\n // evaluator-originated Fact cause has been considered.\n const fallbackError = terminal === \"errored\" && fact === undefined ? result.error : undefined;\n // 执行错误只给一层可行动摘要(docs/feature/experiments/cli.md「运行反馈」):message 取首行\n // ——多行 message 的后续行(如 diagnose 的 output tail)归 `show @locator` 展开,不进\n // scrollback;再过 summaryText 剥控制字节并按摘要上限收口,adapter 组装的文本里混进\n // ANSI 着色时不泄漏进终端事实行。\n // 超时的那条 reason 后面直接接归属:哪层时限、上限多少、值从哪来。一行里说清「谁把它掐的」,\n // 不让人先去 `show --timing` 才知道自己撞的是哪条线(见 docs/feature/sandbox/architecture.md\n // 「时限归属」)。\n const timeout = fallbackError?.timeout;\n const attribution = timeout\n ? ` (${timeout.trigger} · limit ${timeout.limitMs}ms · from ${timeout.source})`\n : \"\";\n const reason = fallbackError !== undefined\n ? `${summaryText(firstLine(fallbackError.message))}${attribution}`\n : fact !== undefined\n ? compactAssertionSummary(fact)\n : summaryText(result.verdict);\n const origin = fallbackError?.origin;\n const phase = origin?.scope === \"attempt\" ? origin.phase : undefined;\n // 只在真正的结构化执行错误(没有主 Fact 摘要)上携带 `code`。Fact unavailable/errored\n // 已经有更具体的结构化摘要,不需要也没有这个字段。\n const code = result.verdict === \"errored\" && fact === undefined ? fallbackError?.code : undefined;\n return {\n locator,\n identity: { experimentId: result.experimentId, evalId: result.id, attempt: result.attempt },\n who: runWho({ agentName: result.agent, model: result.model, experimentId: result.experimentId }),\n verdict: result.verdict,\n reason,\n ...(fact !== undefined ? { fact } : {}),\n ...(phase !== undefined ? { phase } : {}),\n ...(code !== undefined ? { code } : {}),\n ...(origin !== undefined ? { origin } : {}),\n };\n}\n/**\n * A current Record reuse remains a readback ADT all the way to display. The\n * durable source identity is exact; display derives the current short alias.\n */\nexport function failureDetailFromCurrentReusedAttempt(readback: CurrentReusedAttemptReadback, run: Pick<AgentRun, \"agent\" | \"model\" | \"experimentId\">): FailureDetail | undefined {\n if (readback.verdict !== \"failed\")\n return undefined;\n const diagnostic = readback.executionErrors.state === \"available\"\n ? readback.executionErrors.value[0]\n : undefined;\n return {\n locator: encodeAttemptLocator(readback.source.attemptId),\n identity: {\n experimentId: readback.target.experimentId,\n evalId: readback.target.evalId,\n attempt: readback.target.attempt,\n },\n who: runWho({\n agentName: run.agent.name,\n model: run.model,\n experimentId: run.experimentId,\n }),\n verdict: \"failed\",\n reason: diagnostic === undefined\n ? summaryText(readback.verdict)\n : summaryText(firstLine(diagnostic.summary)),\n };\n}\n/**\n * 反馈行只投影已经落定的 Fact/use。\n * 只选择真正参与当前失败终态的 use;同一 Fact 同时用于 verdict 与 score 时只显示一次。\n * 反馈只投影 Fact/use 的因果关系,不重建另一套判定等级。\n */\ntype FailureSummaryTerminal = \"failed\" | \"errored\";\nfunction failureSummaryTerminal(result: EvalResult): FailureSummaryTerminal | undefined {\n const terminal = attemptTerminalOf(result);\n return terminal === \"failed\" || terminal === \"errored\"\n ? terminal\n : undefined;\n}\nfunction primaryFactSummary(result: EvalResult, terminal: FailureSummaryTerminal): PrimaryFactSummary | undefined {\n const facts = new Map<string, EvaluationFactResult>(result.factResults.map((fact) => [fact.factId, fact]));\n const candidates = new Map<string, FactFailureCandidate>();\n for (const use of result.factUses) {\n const candidate = useCandidate(use, facts, terminal);\n if (candidate === undefined)\n continue;\n const identity = candidate.factId === undefined ? `use:${candidate.sourceOrder}` : `fact:${candidate.factId}`;\n const existing = candidates.get(identity);\n if (existing === undefined || candidate.sourceOrder < existing.sourceOrder)\n candidates.set(identity, candidate);\n }\n // A dependency Fact can be the evaluator root cause even when no use points\n // to it directly. Uses keep their labels when present; these rows fill only\n // the otherwise invisible roots.\n if (terminal === \"errored\") {\n for (const fact of result.factResults) {\n const candidate = factCandidate(fact, result.factUses, terminal);\n if (candidate !== undefined && !candidates.has(`fact:${fact.factId}`)) {\n candidates.set(`fact:${fact.factId}`, candidate);\n }\n }\n }\n const ordered = [...candidates.values()].sort((left, right) => left.sourceOrder - right.sourceOrder);\n const primary = ordered[0];\n if (primary === undefined)\n return undefined;\n return {\n title: summaryText(primary.title),\n ...(primary.matcher === undefined ? {} : { matcher: summaryText(primary.matcher) }),\n ...(primary.expected === undefined ? {} : { expected: summaryText(primary.expected) }),\n ...(primary.received === undefined ? {} : { received: summaryText(primary.received) }),\n ...(primary.reason === undefined ? {} : { reason: summaryText(primary.reason) }),\n additionalFailures: ordered.length - 1,\n };\n}\ninterface FactFailureCandidate {\n readonly sourceOrder: number;\n readonly factId?: string;\n readonly title: string;\n readonly matcher?: string;\n readonly expected?: string;\n readonly received?: string;\n readonly reason?: string;\n}\nfunction useCandidate(use: VerdictFactUseResult | ScoreFactUseResult, facts: ReadonlyMap<string, EvaluationFactResult>, terminal: FailureSummaryTerminal): FactFailureCandidate | undefined {\n const isFailure = terminal === \"failed\"\n ? use.useKind === \"verdict\" && use.outcome === \"failed\"\n : use.outcome === \"errored\" || use.outcome === \"unavailable\";\n if (!isFailure)\n return undefined;\n const factId = use.useKind === \"verdict\"\n ? use.target.factId\n : use.input.kind === \"fact\"\n ? use.input.factId\n : undefined;\n if (factId === undefined)\n return undefined;\n const fact = facts.get(factId);\n const label = use.label;\n const title = label ?? use.key ?? fact?.name ?? factId;\n const matcher = fact?.name === undefined || fact.name === title ? undefined : fact.name;\n const reason = use.outcome === \"unavailable\"\n ? use.reason\n : use.outcome === \"errored\"\n ? use.error.message\n : undefined;\n return {\n sourceOrder: use.sourceOrder,\n factId,\n title,\n ...(matcher === undefined ? {} : { matcher }),\n ...(fact?.expected === undefined ? {} : { expected: fact.expected }),\n ...(fact?.received === undefined ? {} : { received: fact.received }),\n ...(reason === undefined ? {} : { reason }),\n };\n}\nfunction factCandidate(fact: EvaluationFactResult, uses: readonly (VerdictFactUseResult | ScoreFactUseResult)[], terminal: Extract<FailureSummaryTerminal, \"errored\">): FactFailureCandidate | undefined {\n if (terminal === \"errored\" && fact.outcome === \"errored\") {\n return {\n sourceOrder: fact.sourceOrder,\n factId: fact.factId,\n title: fact.name,\n reason: fact.error.message,\n };\n }\n if (fact.outcome !== \"unavailable\")\n return undefined;\n const consumers = uses.filter((use) => use.useKind === \"verdict\"\n ? use.target.factId === fact.factId\n : use.input.kind === \"fact\" && use.input.factId === fact.factId);\n if (consumers.length > 0 && consumers.every((use) => use.outcome !== \"unavailable\"))\n return undefined;\n return {\n sourceOrder: fact.sourceOrder,\n factId: fact.factId,\n title: fact.name,\n reason: fact.reason,\n };\n}\nfunction compactFactSummary(summary: PrimaryFactSummary): string {\n const parts = [summary.title];\n if (summary.matcher !== undefined)\n parts.push(summary.matcher);\n if (summary.reason !== undefined)\n parts.push(`reason ${summary.reason}`);\n if (summary.additionalFailures > 0)\n parts.push(`+${summary.additionalFailures} more`);\n return parts.join(\" · \");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"failure.js","sourceRoot":"","sources":["failure.ts"],"names":[],"mappings":"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","sourcesContent":["import { compactAssertionSummary, summaryText } from \"../../assertions/display.ts\";\nimport type { AssertionCriterion, AssertionSnapshotObject, SealedAssertionEntry, SealedAttemptAssertions, } from \"../../assertions/api.ts\";\nimport { encodeAttemptLocator } from \"../../attempt-locator.ts\";\nimport type { EvaluationFactResult, EvalResult, PrimaryFactSummary, ScoreFactUseResult, VerdictFactUseResult, } from \"../../types.ts\";\nimport { firstLine } from \"../../util.ts\";\nimport { attemptTerminalOf } from \"../../shared/verdict.ts\";\nimport { runWho, type AgentRun, type FailureDetail } from \"../types.ts\";\nimport type { CurrentReusedAttemptReadback } from \"../reuse-readback.ts\";\n/**\n * Fresh results and current Record readbacks use separate projections so the\n * latter never has to impersonate an EvalResult at the feedback boundary.\n */\nexport function failureDetailFromResult(result: EvalResult, sealed?: SealedAttemptAssertions): FailureDetail | undefined {\n const locator = result.locator;\n if (!locator || (result.verdict !== \"failed\" && result.verdict !== \"errored\")) {\n return undefined;\n }\n const terminal = failureSummaryTerminal(result);\n const fact = terminal === undefined\n ? undefined\n : primaryFactSummary(result, terminal) ?? primaryAssertionSummary(result, sealed, terminal);\n // An errored terminal can only fall back to the runner error after every\n // evaluator-originated Fact cause has been considered.\n const fallbackError = terminal === \"errored\" && fact === undefined ? result.error : undefined;\n // 执行错误只给一层可行动摘要(docs/feature/experiments/cli.md「运行反馈」):message 取首行\n // ——多行 message 的后续行(如 diagnose 的 output tail)归 `show @locator` 展开,不进\n // scrollback;再过 summaryText 剥控制字节并按摘要上限收口,adapter 组装的文本里混进\n // ANSI 着色时不泄漏进终端事实行。\n // 超时的那条 reason 后面直接接归属:哪层时限、上限多少、值从哪来。一行里说清「谁把它掐的」,\n // 不让人先去 `show --timing` 才知道自己撞的是哪条线(见 docs/feature/sandbox/architecture.md\n // 「时限归属」)。\n const timeout = fallbackError?.timeout;\n const attribution = timeout\n ? ` (${timeout.trigger} · limit ${timeout.limitMs}ms · from ${timeout.source})`\n : \"\";\n const reason = fallbackError !== undefined\n ? `${summaryText(firstLine(fallbackError.message))}${attribution}`\n : fact !== undefined\n ? compactAssertionSummary(fact)\n : summaryText(result.verdict);\n const origin = fallbackError?.origin;\n const phase = origin?.scope === \"attempt\" ? origin.phase : undefined;\n // 只在真正的结构化执行错误(没有主 Fact 摘要)上携带 `code`。Fact unavailable/errored\n // 已经有更具体的结构化摘要,不需要也没有这个字段。\n const code = result.verdict === \"errored\" && fact === undefined ? fallbackError?.code : undefined;\n return {\n locator,\n identity: { experimentId: result.experimentId, evalId: result.id, attempt: result.attempt },\n who: runWho({ agentName: result.agent, model: result.model, experimentId: result.experimentId }),\n verdict: result.verdict,\n reason,\n ...(fact !== undefined ? { fact } : {}),\n ...(phase !== undefined ? { phase } : {}),\n ...(code !== undefined ? { code } : {}),\n ...(origin !== undefined ? { origin } : {}),\n };\n}\nfunction record(value: unknown): Readonly<Record<string, unknown>> | undefined {\n return typeof value === \"object\" && value !== null\n ? value as Readonly<Record<string, unknown>>\n : undefined;\n}\nfunction criterionTitle(criterion: AssertionCriterion): string {\n switch (criterion.kind) {\n case \"scope-status\":\n return criterion.assertion === \"succeeded\"\n ? `${criterion.scope} succeeded`\n : `${criterion.scope} had no failed actions`;\n case \"value-match\":\n return \"value matched\";\n case \"occurrence\":\n return `${criterion.scope} ${criterion.occurrence} ${criterion.assertion}`;\n case \"judge-measurement\":\n return criterion.recipe;\n case \"sandbox-result\":\n return criterion.operation.replaceAll(\"-\", \" \");\n case \"direct-score\":\n return \"direct score\";\n case \"third-party\":\n return criterion.name;\n }\n}\nfunction diagnosticFields(diagnostic: AssertionSnapshotObject | undefined): {\n readonly matcher?: string;\n readonly expected?: string;\n readonly received?: string;\n readonly reason?: string;\n} {\n const value = record(diagnostic);\n if (value === undefined)\n return {};\n const string = (key: string): string | undefined => typeof value[key] === \"string\" ? value[key] : undefined;\n return {\n ...(string(\"message\") === undefined ? {} : { matcher: string(\"message\") }),\n ...(string(\"expected\") === undefined ? {} : { expected: string(\"expected\") }),\n ...(string(\"received\") === undefined ? {} : { received: string(\"received\") }),\n ...(string(\"reason\") === undefined ? {} : { reason: string(\"reason\") }),\n };\n}\nfunction assertionCandidate(entry: SealedAssertionEntry, result: EvalResult): Omit<PrimaryFactSummary, \"additionalFailures\"> {\n const diagnostic = diagnosticFields(entry.result.diagnostic);\n const subject = entry.subject.kind === \"snapshot\" ? record(entry.subject.value) : undefined;\n const errorReason = [...(result.events ?? [])].reverse().find((event) => event.type === \"error\")?.message;\n const scopeStatus = entry.criterion.kind === \"scope-status\"\n ? {\n expected: entry.criterion.assertion === \"succeeded\" ? \"completed\" : undefined,\n received: typeof subject?.status === \"string\" ? subject.status : undefined,\n }\n : {};\n return {\n title: entry.display.label ?? entry.display.key ?? criterionTitle(entry.criterion),\n ...diagnostic,\n ...scopeStatus,\n ...(errorReason === undefined ? {} : { reason: errorReason }),\n };\n}\nfunction primaryAssertionSummary(result: EvalResult, sealed: SealedAttemptAssertions | undefined, terminal: FailureSummaryTerminal): PrimaryFactSummary | undefined {\n if (sealed === undefined)\n return undefined;\n const failures = sealed.entries.filter((entry) => terminal === \"failed\"\n ? entry.result.gate === \"failed\"\n : entry.result.state === \"errored\" || entry.result.gate === \"unavailable\");\n const primary = failures[0];\n if (primary === undefined)\n return undefined;\n const candidate = assertionCandidate(primary, result);\n return {\n title: summaryText(candidate.title),\n ...(candidate.matcher === undefined ? {} : { matcher: summaryText(candidate.matcher) }),\n ...(candidate.expected === undefined ? {} : { expected: summaryText(candidate.expected) }),\n ...(candidate.received === undefined ? {} : { received: summaryText(candidate.received) }),\n ...(candidate.reason === undefined ? {} : { reason: summaryText(candidate.reason) }),\n additionalFailures: failures.length - 1,\n };\n}\n/**\n * A current Record reuse remains a readback ADT all the way to display. The\n * durable source identity is exact; display derives the current short alias.\n */\nexport function failureDetailFromCurrentReusedAttempt(readback: CurrentReusedAttemptReadback, run: Pick<AgentRun, \"agent\" | \"model\" | \"experimentId\">): FailureDetail | undefined {\n if (readback.verdict !== \"failed\")\n return undefined;\n const diagnostic = readback.executionErrors.state === \"available\"\n ? readback.executionErrors.value[0]\n : undefined;\n return {\n locator: encodeAttemptLocator(readback.source.attemptId),\n identity: {\n experimentId: readback.target.experimentId,\n evalId: readback.target.evalId,\n attempt: readback.target.attempt,\n },\n who: runWho({\n agentName: run.agent.name,\n model: run.model,\n experimentId: run.experimentId,\n }),\n verdict: \"failed\",\n reason: diagnostic === undefined\n ? summaryText(readback.verdict)\n : summaryText(firstLine(diagnostic.summary)),\n };\n}\n/**\n * 反馈行只投影已经落定的 Fact/use。\n * 只选择真正参与当前失败终态的 use;同一 Fact 同时用于 verdict 与 score 时只显示一次。\n * 反馈只投影 Fact/use 的因果关系,不重建另一套判定等级。\n */\ntype FailureSummaryTerminal = \"failed\" | \"errored\";\nfunction failureSummaryTerminal(result: EvalResult): FailureSummaryTerminal | undefined {\n const terminal = attemptTerminalOf(result);\n return terminal === \"failed\" || terminal === \"errored\"\n ? terminal\n : undefined;\n}\nfunction primaryFactSummary(result: EvalResult, terminal: FailureSummaryTerminal): PrimaryFactSummary | undefined {\n const facts = new Map<string, EvaluationFactResult>(result.factResults.map((fact) => [fact.factId, fact]));\n const candidates = new Map<string, FactFailureCandidate>();\n for (const use of result.factUses) {\n const candidate = useCandidate(use, facts, terminal);\n if (candidate === undefined)\n continue;\n const identity = candidate.factId === undefined ? `use:${candidate.sourceOrder}` : `fact:${candidate.factId}`;\n const existing = candidates.get(identity);\n if (existing === undefined || candidate.sourceOrder < existing.sourceOrder)\n candidates.set(identity, candidate);\n }\n // A dependency Fact can be the evaluator root cause even when no use points\n // to it directly. Uses keep their labels when present; these rows fill only\n // the otherwise invisible roots.\n if (terminal === \"errored\") {\n for (const fact of result.factResults) {\n const candidate = factCandidate(fact, result.factUses, terminal);\n if (candidate !== undefined && !candidates.has(`fact:${fact.factId}`)) {\n candidates.set(`fact:${fact.factId}`, candidate);\n }\n }\n }\n const ordered = [...candidates.values()].sort((left, right) => left.sourceOrder - right.sourceOrder);\n const primary = ordered[0];\n if (primary === undefined)\n return undefined;\n return {\n title: summaryText(primary.title),\n ...(primary.matcher === undefined ? {} : { matcher: summaryText(primary.matcher) }),\n ...(primary.expected === undefined ? {} : { expected: summaryText(primary.expected) }),\n ...(primary.received === undefined ? {} : { received: summaryText(primary.received) }),\n ...(primary.reason === undefined ? {} : { reason: summaryText(primary.reason) }),\n additionalFailures: ordered.length - 1,\n };\n}\ninterface FactFailureCandidate {\n readonly sourceOrder: number;\n readonly factId?: string;\n readonly title: string;\n readonly matcher?: string;\n readonly expected?: string;\n readonly received?: string;\n readonly reason?: string;\n}\nfunction useCandidate(use: VerdictFactUseResult | ScoreFactUseResult, facts: ReadonlyMap<string, EvaluationFactResult>, terminal: FailureSummaryTerminal): FactFailureCandidate | undefined {\n const isFailure = terminal === \"failed\"\n ? use.useKind === \"verdict\" && use.outcome === \"failed\"\n : use.outcome === \"errored\" || use.outcome === \"unavailable\";\n if (!isFailure)\n return undefined;\n const factId = use.useKind === \"verdict\"\n ? use.target.factId\n : use.input.kind === \"fact\"\n ? use.input.factId\n : undefined;\n if (factId === undefined)\n return undefined;\n const fact = facts.get(factId);\n const label = use.label;\n const title = label ?? use.key ?? fact?.name ?? factId;\n const matcher = fact?.name === undefined || fact.name === title ? undefined : fact.name;\n const reason = use.outcome === \"unavailable\"\n ? use.reason\n : use.outcome === \"errored\"\n ? use.error.message\n : undefined;\n return {\n sourceOrder: use.sourceOrder,\n factId,\n title,\n ...(matcher === undefined ? {} : { matcher }),\n ...(fact?.expected === undefined ? {} : { expected: fact.expected }),\n ...(fact?.received === undefined ? {} : { received: fact.received }),\n ...(reason === undefined ? {} : { reason }),\n };\n}\nfunction factCandidate(fact: EvaluationFactResult, uses: readonly (VerdictFactUseResult | ScoreFactUseResult)[], terminal: Extract<FailureSummaryTerminal, \"errored\">): FactFailureCandidate | undefined {\n if (terminal === \"errored\" && fact.outcome === \"errored\") {\n return {\n sourceOrder: fact.sourceOrder,\n factId: fact.factId,\n title: fact.name,\n reason: fact.error.message,\n };\n }\n if (fact.outcome !== \"unavailable\")\n return undefined;\n const consumers = uses.filter((use) => use.useKind === \"verdict\"\n ? use.target.factId === fact.factId\n : use.input.kind === \"fact\" && use.input.factId === fact.factId);\n if (consumers.length > 0 && consumers.every((use) => use.outcome !== \"unavailable\"))\n return undefined;\n return {\n sourceOrder: fact.sourceOrder,\n factId: fact.factId,\n title: fact.name,\n reason: fact.reason,\n };\n}\nfunction compactFactSummary(summary: PrimaryFactSummary): string {\n const parts = [summary.title];\n if (summary.matcher !== undefined)\n parts.push(summary.matcher);\n if (summary.reason !== undefined)\n parts.push(`reason ${summary.reason}`);\n if (summary.additionalFailures > 0)\n parts.push(`+${summary.additionalFailures} more`);\n return parts.join(\" · \");\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SealedAttemptAssertions } from "../../assertions/api.cjs";
|
|
1
2
|
import type { EvalResult } from "../../types.cjs";
|
|
2
3
|
import { type AgentRun, type FailureDetail } from "../types.cjs";
|
|
3
4
|
import type { CurrentReusedAttemptReadback } from "../reuse-readback.cjs";
|
|
@@ -5,7 +6,7 @@ import type { CurrentReusedAttemptReadback } from "../reuse-readback.cjs";
|
|
|
5
6
|
* Fresh results and current Record readbacks use separate projections so the
|
|
6
7
|
* latter never has to impersonate an EvalResult at the feedback boundary.
|
|
7
8
|
*/
|
|
8
|
-
export declare function failureDetailFromResult(result: EvalResult): FailureDetail | undefined;
|
|
9
|
+
export declare function failureDetailFromResult(result: EvalResult, sealed?: SealedAttemptAssertions): FailureDetail | undefined;
|
|
9
10
|
/**
|
|
10
11
|
* A current Record reuse remains a readback ADT all the way to display. The
|
|
11
12
|
* durable source identity is exact; display derives the current short alias.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SealedAttemptAssertions } from "../../assertions/api.mjs";
|
|
1
2
|
import type { EvalResult } from "../../types.mjs";
|
|
2
3
|
import { type AgentRun, type FailureDetail } from "../types.mjs";
|
|
3
4
|
import type { CurrentReusedAttemptReadback } from "../reuse-readback.mjs";
|
|
@@ -5,7 +6,7 @@ import type { CurrentReusedAttemptReadback } from "../reuse-readback.mjs";
|
|
|
5
6
|
* Fresh results and current Record readbacks use separate projections so the
|
|
6
7
|
* latter never has to impersonate an EvalResult at the feedback boundary.
|
|
7
8
|
*/
|
|
8
|
-
export declare function failureDetailFromResult(result: EvalResult): FailureDetail | undefined;
|
|
9
|
+
export declare function failureDetailFromResult(result: EvalResult, sealed?: SealedAttemptAssertions): FailureDetail | undefined;
|
|
9
10
|
/**
|
|
10
11
|
* A current Record reuse remains a readback ADT all the way to display. The
|
|
11
12
|
* durable source identity is exact; display derives the current short alias.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SealedAttemptAssertions } from "../../assertions/api.js";
|
|
1
2
|
import type { EvalResult } from "../../types.js";
|
|
2
3
|
import { type AgentRun, type FailureDetail } from "../types.js";
|
|
3
4
|
import type { CurrentReusedAttemptReadback } from "../reuse-readback.js";
|
|
@@ -5,7 +6,7 @@ import type { CurrentReusedAttemptReadback } from "../reuse-readback.js";
|
|
|
5
6
|
* Fresh results and current Record readbacks use separate projections so the
|
|
6
7
|
* latter never has to impersonate an EvalResult at the feedback boundary.
|
|
7
8
|
*/
|
|
8
|
-
export declare function failureDetailFromResult(result: EvalResult): FailureDetail | undefined;
|
|
9
|
+
export declare function failureDetailFromResult(result: EvalResult, sealed?: SealedAttemptAssertions): FailureDetail | undefined;
|
|
9
10
|
/**
|
|
10
11
|
* A current Record reuse remains a readback ADT all the way to display. The
|
|
11
12
|
* durable source identity is exact; display derives the current short alias.
|
|
@@ -6,35 +6,24 @@ exports.loadProjectCurrent = loadProjectCurrent;
|
|
|
6
6
|
// Record、carry、rerun 与历史结果都不进入这里;show/view/out 共用这一条入口。
|
|
7
7
|
const effect_1 = require("effect");
|
|
8
8
|
const identifiers_ts_1 = require("../record/codec/identifiers.cjs");
|
|
9
|
-
const load_config_ts_1 = require("../load-config.cjs");
|
|
10
9
|
const discover_ts_1 = require("./discover.cjs");
|
|
11
10
|
const eval_selection_ts_1 = require("./eval-selection.cjs");
|
|
12
11
|
const execution_identity_ts_1 = require("./execution-identity.cjs");
|
|
13
12
|
const fingerprint_ts_1 = require("./fingerprint.cjs");
|
|
14
13
|
const timeout_ts_1 = require("./timeout.cjs");
|
|
15
14
|
const aggregate_ts_1 = require("../shared/aggregate.cjs");
|
|
16
|
-
/** Project-current config loading is the only Promise boundary in this module. */
|
|
17
15
|
class ProjectCurrentLoadError extends effect_1.Data.TaggedError("ProjectCurrentLoadError") {
|
|
18
16
|
}
|
|
19
17
|
exports.ProjectCurrentLoadError = ProjectCurrentLoadError;
|
|
20
|
-
function loadProjectConfig(cwd, options) {
|
|
21
|
-
return effect_1.Effect.tryPromise({
|
|
22
|
-
try: () => (0, load_config_ts_1.loadConfigFile)(cwd, options),
|
|
23
|
-
catch: (cause) => new ProjectCurrentLoadError({
|
|
24
|
-
stage: "config",
|
|
25
|
-
message: cause instanceof Error ? cause.message : String(cause),
|
|
26
|
-
}),
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
18
|
/**
|
|
30
19
|
* Discovers and plans the current project without closing the Effect runtime.
|
|
31
20
|
* CLI and view are the Promise-facing application hosts for this operation.
|
|
32
21
|
*/
|
|
33
|
-
function loadProjectCurrent(cwd, options
|
|
22
|
+
function loadProjectCurrent(cwd, options) {
|
|
34
23
|
const discoveryOptions = { freshImport: options.freshImport };
|
|
35
24
|
return effect_1.Effect.gen(function* () {
|
|
36
25
|
// namespaced fresh import 是进程级 loader 边界,按顺序装载,避免三棵图并发注册互相卡住。
|
|
37
|
-
const config =
|
|
26
|
+
const config = options.config;
|
|
38
27
|
const evals = yield* (0, discover_ts_1.discoverEvals)(cwd, discoveryOptions);
|
|
39
28
|
const experiments = yield* (0, discover_ts_1.discoverExperiments)(cwd, discoveryOptions);
|
|
40
29
|
const selectors = options.experiments === undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-current.js","sourceRoot":"","sources":["project-current.ts"],"names":[],"mappings":"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","sourcesContent":["// 项目 current 的宿主编排:发现定义 → 应用 selector → 无派发 identity planning。\n// Record、carry、rerun 与历史结果都不进入这里;show/view/out 共用这一条入口。\nimport { Data, Effect, Either, Schema } from \"effect\";\nimport type { AnalysisCurrentSlotIdentity } from \"../analysis/contracts.ts\";\nimport { EvalIdSchema, ExecutionIdentityDigestSchema, ExperimentIdSchema, } from \"../record/codec/identifiers.ts\";\nimport { loadConfigFile } from \"../load-config.ts\";\nimport { discoverEvals, discoverExperiments, type DiscoveryError } from \"./discover.ts\";\nimport { resolveExperimentEvals } from \"./eval-selection.ts\";\nimport { slotExecutionIdentityDigestHex } from \"./execution-identity.ts\";\nimport { planProjectTarget, type FingerprintPlanningFailure, type ProjectTargetPlan, } from \"./fingerprint.ts\";\nimport type { ProjectCurrentTarget } from \"./project-target.ts\";\nimport type { SandboxRunPlanningError } from \"./sandbox-selection.ts\";\nimport { resolveAttemptTimeout, resolveRunTimeout } from \"./timeout.ts\";\nimport type { AgentRun, Config } from \"./types.ts\";\nimport { matchExperimentSelector } from \"../shared/aggregate.ts\";\nexport interface LoadProjectCurrentOptions {\n experiments?: string | readonly string[];\n evals?: readonly string[];\n freshImport?: boolean;\n}\nexport interface LoadedProjectCurrent {\n target: ProjectCurrentTarget;\n watchInputs: readonly string[];\n currentSlots: readonly AnalysisCurrentSlotIdentity[];\n}\n/** Project-current config loading is the only Promise boundary in this module. */\nexport class ProjectCurrentLoadError extends Data.TaggedError(\"ProjectCurrentLoadError\")<{\n readonly stage: \"config\" | \"selection\";\n readonly message: string;\n}> {\n}\nfunction loadProjectConfig(cwd: string, options: {\n freshImport?: boolean;\n}): Effect.Effect<Config, ProjectCurrentLoadError> {\n return Effect.tryPromise({\n try: () => loadConfigFile(cwd, options),\n catch: (cause) => new ProjectCurrentLoadError({\n stage: \"config\",\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n });\n}\n/**\n * Discovers and plans the current project without closing the Effect runtime.\n * CLI and view are the Promise-facing application hosts for this operation.\n */\nexport function loadProjectCurrent(cwd: string, options: LoadProjectCurrentOptions = {}): Effect.Effect<LoadedProjectCurrent, ProjectCurrentLoadError | DiscoveryError | SandboxRunPlanningError | FingerprintPlanningFailure> {\n const discoveryOptions = { freshImport: options.freshImport };\n return Effect.gen(function* () {\n // namespaced fresh import 是进程级 loader 边界,按顺序装载,避免三棵图并发注册互相卡住。\n const config = yield* loadProjectConfig(cwd, discoveryOptions);\n const evals = yield* discoverEvals(cwd, discoveryOptions);\n const experiments = yield* discoverExperiments(cwd, discoveryOptions);\n const selectors = options.experiments === undefined\n ? []\n : Array.isArray(options.experiments) ? options.experiments : [options.experiments];\n const availableExperimentIds = experiments.map((entry) => entry.id);\n const availableIds = new Set(availableExperimentIds);\n const selectedIds = new Set<string>();\n for (const selector of selectors) {\n const matches = matchExperimentSelector(availableExperimentIds, selector);\n if (matches.length === 0) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: `Unknown current project Experiment ${JSON.stringify(selector)}.`,\n }));\n }\n for (const match of matches)\n selectedIds.add(match);\n }\n if (selectors.length === 0) {\n for (const id of availableIds)\n selectedIds.add(id);\n }\n if (selectedIds.size === 0) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: \"The current project has no Experiments to show.\",\n }));\n }\n const runs = yield* Effect.sync((): AgentRun[] => {\n const selectedRuns: AgentRun[] = [];\n for (const experiment of experiments) {\n if (!selectedIds.has(experiment.id))\n continue;\n const { selectedEvalIds } = resolveExperimentEvals({\n experimentId: experiment.id,\n selector: experiment.evals,\n cliPatterns: [...(options.evals ?? [])],\n evals,\n });\n selectedRuns.push({\n agent: experiment.agent,\n model: experiment.model,\n reasoningEffort: experiment.reasoningEffort,\n flags: experiment.flags ?? {},\n plugins: experiment.plugins,\n attempts: experiment.attempts ?? 1,\n earlyExit: experiment.earlyExit ?? false,\n sandbox: experiment.sandbox,\n sandboxReuse: experiment.sandboxReuse,\n ...(experiment.sharedState === undefined ? {} : { sharedState: experiment.sharedState }),\n judge: experiment.judge,\n ...resolveRunTimeout(undefined, experiment.timeoutMs),\n budget: experiment.budget,\n selectedEvalIds,\n experimentId: experiment.id,\n experimentBaseDir: experiment.baseDir,\n experimentSourcePath: experiment.sourcePath,\n description: experiment.description,\n labels: experiment.labels,\n maxConcurrency: experiment.maxConcurrency,\n setup: experiment.setup,\n teardown: experiment.teardown,\n classifyFailure: experiment.classifyFailure,\n });\n }\n return selectedRuns;\n });\n if (runs.length === 0) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: \"The current project target contains no runnable Experiments.\",\n }));\n }\n const plan: ProjectTargetPlan = yield* planProjectTarget(evals, runs, config.timeoutMs, { configJudge: config.judge });\n if (plan.target.experiments.length === 0) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: \"The current project target contains no Eval results to show.\",\n }));\n }\n const currentSlots = yield* currentSlotIdentities(runs, plan, config);\n return {\n target: plan.target,\n currentSlots,\n watchInputs: Object.freeze([\n ...new Set([`${cwd}/niceeval.config.ts`, ...plan.watchInputs]),\n ].sort()),\n };\n });\n}\nfunction currentSlotIdentities(runs: readonly AgentRun[], plan: ProjectTargetPlan, config: Config): Effect.Effect<readonly AnalysisCurrentSlotIdentity[], ProjectCurrentLoadError> {\n return Effect.gen(function* () {\n const slots: AnalysisCurrentSlotIdentity[] = [];\n const seen = new Set<string>();\n for (const run of runs) {\n for (const pair of plan.preparedPairsByKey.values()) {\n if (pair.run.experimentId !== run.experimentId)\n continue;\n const fingerprint = plan.plannedFingerprints.get(pair.key);\n const configHash = plan.plannedConfigHashes.get(pair.key);\n if (fingerprint === undefined || configHash === undefined) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: `Current identity planning omitted Eval ${JSON.stringify(pair.evalDef.id)}.`,\n }));\n }\n const timeout = resolveAttemptTimeout(run, pair.evalDef, config);\n const experimentId = Schema.decodeUnknownEither(ExperimentIdSchema)(run.experimentId);\n const evalId = Schema.decodeUnknownEither(EvalIdSchema)(pair.evalDef.id);\n if (Either.isLeft(experimentId) || Either.isLeft(evalId)) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: `Current target produced an invalid Experiment or Eval identity.`,\n }));\n }\n for (let attempt = 0; attempt < run.attempts; attempt += 1) {\n const digestValue = slotExecutionIdentityDigestHex({\n experimentId: run.experimentId,\n evalId: pair.evalDef.id,\n attempt,\n input: { domain: \"niceeval.input/fingerprint-v1\", value: fingerprint },\n config: { domain: \"niceeval.config/identity-v1\", value: configHash },\n timeout: timeout === undefined\n ? null\n : { domain: \"niceeval.execution-duration/v1\", milliseconds: timeout.timeoutMs },\n });\n const digest = Schema.decodeUnknownEither(ExecutionIdentityDigestSchema)(digestValue);\n if (Either.isLeft(digest)) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: `Current target produced an invalid execution identity digest.`,\n }));\n }\n const key = `${experimentId.right}\\0${evalId.right}\\0${String(attempt)}\\0${digest.right}`;\n if (seen.has(key))\n continue;\n seen.add(key);\n slots.push(Object.freeze({\n experimentId: experimentId.right,\n evalId: evalId.right,\n attemptOrdinal: attempt,\n executionIdentityDigest: digest.right,\n }));\n }\n }\n }\n return Object.freeze(slots);\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"project-current.js","sourceRoot":"","sources":["project-current.ts"],"names":[],"mappings":"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","sourcesContent":["// 项目 current 的宿主编排:发现定义 → 应用 selector → 无派发 identity planning。\n// Record、carry、rerun 与历史结果都不进入这里;show/view/out 共用这一条入口。\nimport { Data, Effect, Either, Schema } from \"effect\";\nimport type { AnalysisCurrentSlotIdentity } from \"../analysis/contracts.ts\";\nimport { EvalIdSchema, ExecutionIdentityDigestSchema, ExperimentIdSchema, } from \"../record/codec/identifiers.ts\";\nimport { discoverEvals, discoverExperiments, type DiscoveryError } from \"./discover.ts\";\nimport { resolveExperimentEvals } from \"./eval-selection.ts\";\nimport { slotExecutionIdentityDigestHex } from \"./execution-identity.ts\";\nimport { planProjectTarget, type FingerprintPlanningFailure, type ProjectTargetPlan, } from \"./fingerprint.ts\";\nimport type { ProjectCurrentTarget } from \"./project-target.ts\";\nimport type { SandboxRunPlanningError } from \"./sandbox-selection.ts\";\nimport { resolveAttemptTimeout, resolveRunTimeout } from \"./timeout.ts\";\nimport type { AgentRun, Config } from \"./types.ts\";\nimport { matchExperimentSelector } from \"../shared/aggregate.ts\";\nexport interface LoadProjectCurrentOptions {\n /** Project-observing application hosts resolve this before entering Runner. */\n config: Config;\n experiments?: string | readonly string[];\n evals?: readonly string[];\n freshImport?: boolean;\n}\nexport interface LoadedProjectCurrent {\n target: ProjectCurrentTarget;\n watchInputs: readonly string[];\n currentSlots: readonly AnalysisCurrentSlotIdentity[];\n}\nexport class ProjectCurrentLoadError extends Data.TaggedError(\"ProjectCurrentLoadError\")<{\n readonly stage: \"config\" | \"selection\";\n readonly message: string;\n}> {\n}\n/**\n * Discovers and plans the current project without closing the Effect runtime.\n * CLI and view are the Promise-facing application hosts for this operation.\n */\nexport function loadProjectCurrent(cwd: string, options: LoadProjectCurrentOptions): Effect.Effect<LoadedProjectCurrent, ProjectCurrentLoadError | DiscoveryError | SandboxRunPlanningError | FingerprintPlanningFailure> {\n const discoveryOptions = { freshImport: options.freshImport };\n return Effect.gen(function* () {\n // namespaced fresh import 是进程级 loader 边界,按顺序装载,避免三棵图并发注册互相卡住。\n const config = options.config;\n const evals = yield* discoverEvals(cwd, discoveryOptions);\n const experiments = yield* discoverExperiments(cwd, discoveryOptions);\n const selectors = options.experiments === undefined\n ? []\n : Array.isArray(options.experiments) ? options.experiments : [options.experiments];\n const availableExperimentIds = experiments.map((entry) => entry.id);\n const availableIds = new Set(availableExperimentIds);\n const selectedIds = new Set<string>();\n for (const selector of selectors) {\n const matches = matchExperimentSelector(availableExperimentIds, selector);\n if (matches.length === 0) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: `Unknown current project Experiment ${JSON.stringify(selector)}.`,\n }));\n }\n for (const match of matches)\n selectedIds.add(match);\n }\n if (selectors.length === 0) {\n for (const id of availableIds)\n selectedIds.add(id);\n }\n if (selectedIds.size === 0) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: \"The current project has no Experiments to show.\",\n }));\n }\n const runs = yield* Effect.sync((): AgentRun[] => {\n const selectedRuns: AgentRun[] = [];\n for (const experiment of experiments) {\n if (!selectedIds.has(experiment.id))\n continue;\n const { selectedEvalIds } = resolveExperimentEvals({\n experimentId: experiment.id,\n selector: experiment.evals,\n cliPatterns: [...(options.evals ?? [])],\n evals,\n });\n selectedRuns.push({\n agent: experiment.agent,\n model: experiment.model,\n reasoningEffort: experiment.reasoningEffort,\n flags: experiment.flags ?? {},\n plugins: experiment.plugins,\n attempts: experiment.attempts ?? 1,\n earlyExit: experiment.earlyExit ?? false,\n sandbox: experiment.sandbox,\n sandboxReuse: experiment.sandboxReuse,\n ...(experiment.sharedState === undefined ? {} : { sharedState: experiment.sharedState }),\n judge: experiment.judge,\n ...resolveRunTimeout(undefined, experiment.timeoutMs),\n budget: experiment.budget,\n selectedEvalIds,\n experimentId: experiment.id,\n experimentBaseDir: experiment.baseDir,\n experimentSourcePath: experiment.sourcePath,\n description: experiment.description,\n labels: experiment.labels,\n maxConcurrency: experiment.maxConcurrency,\n setup: experiment.setup,\n teardown: experiment.teardown,\n classifyFailure: experiment.classifyFailure,\n });\n }\n return selectedRuns;\n });\n if (runs.length === 0) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: \"The current project target contains no runnable Experiments.\",\n }));\n }\n const plan: ProjectTargetPlan = yield* planProjectTarget(evals, runs, config.timeoutMs, { configJudge: config.judge });\n if (plan.target.experiments.length === 0) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: \"The current project target contains no Eval results to show.\",\n }));\n }\n const currentSlots = yield* currentSlotIdentities(runs, plan, config);\n return {\n target: plan.target,\n currentSlots,\n watchInputs: Object.freeze([\n ...new Set([`${cwd}/niceeval.config.ts`, ...plan.watchInputs]),\n ].sort()),\n };\n });\n}\nfunction currentSlotIdentities(runs: readonly AgentRun[], plan: ProjectTargetPlan, config: Config): Effect.Effect<readonly AnalysisCurrentSlotIdentity[], ProjectCurrentLoadError> {\n return Effect.gen(function* () {\n const slots: AnalysisCurrentSlotIdentity[] = [];\n const seen = new Set<string>();\n for (const run of runs) {\n for (const pair of plan.preparedPairsByKey.values()) {\n if (pair.run.experimentId !== run.experimentId)\n continue;\n const fingerprint = plan.plannedFingerprints.get(pair.key);\n const configHash = plan.plannedConfigHashes.get(pair.key);\n if (fingerprint === undefined || configHash === undefined) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: `Current identity planning omitted Eval ${JSON.stringify(pair.evalDef.id)}.`,\n }));\n }\n const timeout = resolveAttemptTimeout(run, pair.evalDef, config);\n const experimentId = Schema.decodeUnknownEither(ExperimentIdSchema)(run.experimentId);\n const evalId = Schema.decodeUnknownEither(EvalIdSchema)(pair.evalDef.id);\n if (Either.isLeft(experimentId) || Either.isLeft(evalId)) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: `Current target produced an invalid Experiment or Eval identity.`,\n }));\n }\n for (let attempt = 0; attempt < run.attempts; attempt += 1) {\n const digestValue = slotExecutionIdentityDigestHex({\n experimentId: run.experimentId,\n evalId: pair.evalDef.id,\n attempt,\n input: { domain: \"niceeval.input/fingerprint-v1\", value: fingerprint },\n config: { domain: \"niceeval.config/identity-v1\", value: configHash },\n timeout: timeout === undefined\n ? null\n : { domain: \"niceeval.execution-duration/v1\", milliseconds: timeout.timeoutMs },\n });\n const digest = Schema.decodeUnknownEither(ExecutionIdentityDigestSchema)(digestValue);\n if (Either.isLeft(digest)) {\n return yield* Effect.fail(new ProjectCurrentLoadError({\n stage: \"selection\",\n message: `Current target produced an invalid execution identity digest.`,\n }));\n }\n const key = `${experimentId.right}\\0${evalId.right}\\0${String(attempt)}\\0${digest.right}`;\n if (seen.has(key))\n continue;\n seen.add(key);\n slots.push(Object.freeze({\n experimentId: experimentId.right,\n evalId: evalId.right,\n attemptOrdinal: attempt,\n executionIdentityDigest: digest.right,\n }));\n }\n }\n }\n return Object.freeze(slots);\n });\n}\n"]}
|
|
@@ -4,7 +4,10 @@ import { type DiscoveryError } from "./discover.cjs";
|
|
|
4
4
|
import { type FingerprintPlanningFailure } from "./fingerprint.cjs";
|
|
5
5
|
import type { ProjectCurrentTarget } from "./project-target.cjs";
|
|
6
6
|
import type { SandboxRunPlanningError } from "./sandbox-selection.cjs";
|
|
7
|
+
import type { Config } from "./types.cjs";
|
|
7
8
|
export interface LoadProjectCurrentOptions {
|
|
9
|
+
/** Project-observing application hosts resolve this before entering Runner. */
|
|
10
|
+
config: Config;
|
|
8
11
|
experiments?: string | readonly string[];
|
|
9
12
|
evals?: readonly string[];
|
|
10
13
|
freshImport?: boolean;
|
|
@@ -17,7 +20,6 @@ export interface LoadedProjectCurrent {
|
|
|
17
20
|
declare const ProjectCurrentLoadError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
18
21
|
readonly _tag: "ProjectCurrentLoadError";
|
|
19
22
|
} & Readonly<A>;
|
|
20
|
-
/** Project-current config loading is the only Promise boundary in this module. */
|
|
21
23
|
export declare class ProjectCurrentLoadError extends ProjectCurrentLoadError_base<{
|
|
22
24
|
readonly stage: "config" | "selection";
|
|
23
25
|
readonly message: string;
|
|
@@ -27,5 +29,5 @@ export declare class ProjectCurrentLoadError extends ProjectCurrentLoadError_bas
|
|
|
27
29
|
* Discovers and plans the current project without closing the Effect runtime.
|
|
28
30
|
* CLI and view are the Promise-facing application hosts for this operation.
|
|
29
31
|
*/
|
|
30
|
-
export declare function loadProjectCurrent(cwd: string, options
|
|
32
|
+
export declare function loadProjectCurrent(cwd: string, options: LoadProjectCurrentOptions): Effect.Effect<LoadedProjectCurrent, ProjectCurrentLoadError | DiscoveryError | SandboxRunPlanningError | FingerprintPlanningFailure>;
|
|
31
33
|
export {};
|
|
@@ -4,7 +4,10 @@ import { type DiscoveryError } from "./discover.mjs";
|
|
|
4
4
|
import { type FingerprintPlanningFailure } from "./fingerprint.mjs";
|
|
5
5
|
import type { ProjectCurrentTarget } from "./project-target.mjs";
|
|
6
6
|
import type { SandboxRunPlanningError } from "./sandbox-selection.mjs";
|
|
7
|
+
import type { Config } from "./types.mjs";
|
|
7
8
|
export interface LoadProjectCurrentOptions {
|
|
9
|
+
/** Project-observing application hosts resolve this before entering Runner. */
|
|
10
|
+
config: Config;
|
|
8
11
|
experiments?: string | readonly string[];
|
|
9
12
|
evals?: readonly string[];
|
|
10
13
|
freshImport?: boolean;
|
|
@@ -17,7 +20,6 @@ export interface LoadedProjectCurrent {
|
|
|
17
20
|
declare const ProjectCurrentLoadError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
18
21
|
readonly _tag: "ProjectCurrentLoadError";
|
|
19
22
|
} & Readonly<A>;
|
|
20
|
-
/** Project-current config loading is the only Promise boundary in this module. */
|
|
21
23
|
export declare class ProjectCurrentLoadError extends ProjectCurrentLoadError_base<{
|
|
22
24
|
readonly stage: "config" | "selection";
|
|
23
25
|
readonly message: string;
|
|
@@ -27,5 +29,5 @@ export declare class ProjectCurrentLoadError extends ProjectCurrentLoadError_bas
|
|
|
27
29
|
* Discovers and plans the current project without closing the Effect runtime.
|
|
28
30
|
* CLI and view are the Promise-facing application hosts for this operation.
|
|
29
31
|
*/
|
|
30
|
-
export declare function loadProjectCurrent(cwd: string, options
|
|
32
|
+
export declare function loadProjectCurrent(cwd: string, options: LoadProjectCurrentOptions): Effect.Effect<LoadedProjectCurrent, ProjectCurrentLoadError | DiscoveryError | SandboxRunPlanningError | FingerprintPlanningFailure>;
|
|
31
33
|
export {};
|
|
@@ -4,7 +4,10 @@ import { type DiscoveryError } from "./discover.js";
|
|
|
4
4
|
import { type FingerprintPlanningFailure } from "./fingerprint.js";
|
|
5
5
|
import type { ProjectCurrentTarget } from "./project-target.js";
|
|
6
6
|
import type { SandboxRunPlanningError } from "./sandbox-selection.js";
|
|
7
|
+
import type { Config } from "./types.js";
|
|
7
8
|
export interface LoadProjectCurrentOptions {
|
|
9
|
+
/** Project-observing application hosts resolve this before entering Runner. */
|
|
10
|
+
config: Config;
|
|
8
11
|
experiments?: string | readonly string[];
|
|
9
12
|
evals?: readonly string[];
|
|
10
13
|
freshImport?: boolean;
|
|
@@ -17,7 +20,6 @@ export interface LoadedProjectCurrent {
|
|
|
17
20
|
declare const ProjectCurrentLoadError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
18
21
|
readonly _tag: "ProjectCurrentLoadError";
|
|
19
22
|
} & Readonly<A>;
|
|
20
|
-
/** Project-current config loading is the only Promise boundary in this module. */
|
|
21
23
|
export declare class ProjectCurrentLoadError extends ProjectCurrentLoadError_base<{
|
|
22
24
|
readonly stage: "config" | "selection";
|
|
23
25
|
readonly message: string;
|
|
@@ -27,5 +29,5 @@ export declare class ProjectCurrentLoadError extends ProjectCurrentLoadError_bas
|
|
|
27
29
|
* Discovers and plans the current project without closing the Effect runtime.
|
|
28
30
|
* CLI and view are the Promise-facing application hosts for this operation.
|
|
29
31
|
*/
|
|
30
|
-
export declare function loadProjectCurrent(cwd: string, options
|
|
32
|
+
export declare function loadProjectCurrent(cwd: string, options: LoadProjectCurrentOptions): Effect.Effect<LoadedProjectCurrent, ProjectCurrentLoadError | DiscoveryError | SandboxRunPlanningError | FingerprintPlanningFailure>;
|
|
31
33
|
export {};
|
|
@@ -174,14 +174,14 @@ function assertionMetadata(entries) {
|
|
|
174
174
|
const metadata = [];
|
|
175
175
|
for (const entry of entries) {
|
|
176
176
|
const display = entry.entry.display;
|
|
177
|
-
const
|
|
177
|
+
const decision = entry.entry.decision;
|
|
178
178
|
const item = {
|
|
179
179
|
entryId: entry.entry.entryId,
|
|
180
180
|
groupPath: [...display.groupPath],
|
|
181
|
-
outcome: entry.state === "available" ? result
|
|
182
|
-
coverage: coverageMetadata(entry.entry.coverage),
|
|
183
|
-
limitations: entry.entry.limitations.map(limitationMetadata),
|
|
184
|
-
scoreContribution: scoreContributionMetadata(
|
|
181
|
+
outcome: entry.state === "available" ? decision.result : entry.state,
|
|
182
|
+
coverage: coverageMetadata(entry.entry.materials.coverage),
|
|
183
|
+
limitations: entry.entry.materials.limitations.map(limitationMetadata),
|
|
184
|
+
scoreContribution: scoreContributionMetadata(entry.entry.contribution),
|
|
185
185
|
};
|
|
186
186
|
if (display.label !== undefined)
|
|
187
187
|
item.label = display.label;
|
|
@@ -197,14 +197,14 @@ function assertionMetadata(entries) {
|
|
|
197
197
|
function assertionReason(entry) {
|
|
198
198
|
if (entry.state !== "available")
|
|
199
199
|
return entry.reason;
|
|
200
|
-
switch (entry.entry.result
|
|
200
|
+
switch (entry.entry.decision.result) {
|
|
201
201
|
case "matched":
|
|
202
202
|
return undefined;
|
|
203
203
|
case "mismatched":
|
|
204
204
|
case "unavailable":
|
|
205
205
|
case "errored":
|
|
206
206
|
case "not-applicable":
|
|
207
|
-
return entry.entry.
|
|
207
|
+
return entry.entry.decision.reason ?? undefined;
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
210
|
function coverageMetadata(coverage) {
|