niceeval 0.13.1 → 0.13.2
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 +25 -2
- package/README.md +9 -10
- package/README.zh.md +9 -10
- package/dist/agents/ai-sdk.cjs.map +1 -1
- package/dist/agents/ai-sdk.d.cts +1 -1
- package/dist/agents/ai-sdk.d.mts +1 -1
- package/dist/agents/ai-sdk.d.ts +1 -1
- package/dist/agents/bub-install-spec.cjs +19 -5
- package/dist/agents/bub-install-spec.cjs.map +1 -1
- package/dist/agents/bub-install-spec.d.cts +9 -2
- package/dist/agents/bub-install-spec.d.mts +9 -2
- package/dist/agents/bub-install-spec.d.ts +9 -2
- package/dist/agents/bub-install-spec.js +14 -12
- package/dist/agents/bub.cjs +10 -6
- 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.cjs.map +1 -1
- package/dist/agents/claude-code.d.cts +2 -2
- package/dist/agents/claude-code.d.mts +2 -2
- package/dist/agents/claude-code.d.ts +2 -2
- package/dist/agents/codex.cjs +4 -4
- 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/coding-cli-versions.cjs +10 -1
- package/dist/agents/coding-cli-versions.cjs.map +1 -1
- package/dist/agents/coding-cli-versions.d.cts +8 -3
- package/dist/agents/coding-cli-versions.d.mts +8 -3
- package/dist/agents/coding-cli-versions.d.ts +8 -3
- package/dist/agents/coding-cli-versions.js +18 -12
- package/dist/agents/deepseek-harness.cjs +151 -0
- package/dist/agents/deepseek-harness.cjs.map +1 -0
- package/dist/agents/deepseek-harness.d.cts +14 -0
- package/dist/agents/deepseek-harness.d.mts +14 -0
- package/dist/agents/deepseek-harness.d.ts +14 -0
- package/dist/agents/deepseek-harness.js +7 -0
- package/dist/agents/deepseek-harness.js.map +1 -0
- package/dist/agents/exact-npm-plugins.cjs +28 -0
- package/dist/agents/exact-npm-plugins.cjs.map +1 -0
- package/dist/agents/exact-npm-plugins.d.cts +10 -0
- package/dist/agents/exact-npm-plugins.d.mts +10 -0
- package/dist/agents/exact-npm-plugins.d.ts +10 -0
- package/dist/agents/exact-npm-plugins.js +8 -0
- package/dist/agents/exact-npm-plugins.js.map +1 -0
- package/dist/agents/index.cjs +5 -1
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +4 -0
- package/dist/agents/index.d.mts +4 -0
- package/dist/agents/index.d.ts +4 -0
- package/dist/agents/index.js +54 -50
- package/dist/agents/index.mjs +54 -50
- package/dist/agents/omp.cjs +170 -0
- package/dist/agents/omp.cjs.map +1 -0
- package/dist/agents/omp.d.cts +14 -0
- package/dist/agents/omp.d.mts +14 -0
- package/dist/agents/omp.d.ts +14 -0
- package/dist/agents/omp.js +7 -0
- package/dist/agents/omp.js.map +1 -0
- package/dist/agents/openclaw.cjs +51 -2
- package/dist/agents/openclaw.cjs.map +1 -1
- package/dist/agents/openclaw.d.cts +2 -0
- package/dist/agents/openclaw.d.mts +2 -0
- package/dist/agents/openclaw.d.ts +2 -0
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +4 -4
- package/dist/agents/types.d.mts +4 -4
- package/dist/agents/types.d.ts +4 -4
- package/dist/agents/ui-message-stream.cjs +24 -7
- package/dist/agents/ui-message-stream.cjs.map +1 -1
- package/dist/analysis/api.cjs +28 -2
- package/dist/analysis/api.cjs.map +1 -1
- package/dist/analysis/api.d.cts +22 -1
- package/dist/analysis/api.d.mts +22 -1
- package/dist/analysis/api.d.ts +22 -1
- package/dist/analysis/api.js +8 -6
- package/dist/analysis/bindings.cjs +11 -18
- package/dist/analysis/bindings.cjs.map +1 -1
- package/dist/analysis/bindings.d.cts +177 -49
- package/dist/analysis/bindings.d.mts +177 -49
- package/dist/analysis/bindings.d.ts +177 -49
- package/dist/analysis/contracts.cjs +1 -0
- package/dist/analysis/contracts.cjs.map +1 -1
- package/dist/analysis/contracts.d.cts +43 -3
- package/dist/analysis/contracts.d.mts +43 -3
- package/dist/analysis/contracts.d.ts +43 -3
- package/dist/analysis/cost-projection.cjs +2 -1
- package/dist/analysis/cost-projection.cjs.map +1 -1
- package/dist/analysis/cost-projection.d.cts +1 -1
- package/dist/analysis/cost-projection.d.mts +1 -1
- package/dist/analysis/cost-projection.d.ts +1 -1
- package/dist/analysis/cost.cjs +13 -3
- package/dist/analysis/cost.cjs.map +1 -1
- package/dist/analysis/cost.d.cts +10 -3
- package/dist/analysis/cost.d.mts +10 -3
- package/dist/analysis/cost.d.ts +10 -3
- package/dist/analysis/experiment-groups.cjs +96 -0
- package/dist/analysis/experiment-groups.cjs.map +1 -0
- package/dist/analysis/experiment-groups.d.cts +9 -0
- package/dist/analysis/experiment-groups.d.mts +9 -0
- package/dist/analysis/experiment-groups.d.ts +9 -0
- package/dist/analysis/experiment-groups.js +10 -0
- package/dist/analysis/experiment-groups.js.map +1 -0
- package/dist/analysis/index.cjs +4 -1
- package/dist/analysis/index.cjs.map +1 -1
- package/dist/analysis/index.d.cts +4 -2
- package/dist/analysis/index.d.mts +4 -2
- package/dist/analysis/index.d.ts +4 -2
- package/dist/analysis/index.js +40 -36
- package/dist/analysis/index.mjs +40 -36
- package/dist/assertions/limits.cjs +4 -0
- package/dist/assertions/limits.cjs.map +1 -1
- package/dist/assertions/limits.d.cts +4 -0
- package/dist/assertions/limits.d.mts +4 -0
- package/dist/assertions/limits.d.ts +4 -0
- package/dist/assertions/match.cjs +63 -25
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +7 -0
- package/dist/assertions/match.d.mts +7 -0
- package/dist/assertions/match.d.ts +7 -0
- package/dist/assertions/record/attachment.cjs +32 -4
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/diff.cjs +10 -4
- package/dist/assertions/record/diff.cjs.map +1 -1
- package/dist/assertions/record/producer.cjs +101 -4
- package/dist/assertions/record/producer.cjs.map +1 -1
- package/dist/assertions/record/producer.d.cts +4 -1
- package/dist/assertions/record/producer.d.mts +4 -1
- package/dist/assertions/record/producer.d.ts +4 -1
- package/dist/assertions/runtime.cjs +45 -5
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/record.cjs +113 -8
- package/dist/cli/record.cjs.map +1 -1
- package/dist/cli/record.d.cts +20 -1
- package/dist/cli/record.d.mts +20 -1
- package/dist/cli/record.d.ts +20 -1
- package/dist/cli/record.js +4 -2
- package/dist/cli.cjs +386 -31
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +10 -2
- package/dist/cli.d.mts +10 -2
- package/dist/cli.d.ts +10 -2
- package/dist/context/send-retry.cjs +4 -4
- package/dist/context/send-retry.cjs.map +1 -1
- package/dist/coordination/host/runtime.cjs +8 -30
- package/dist/coordination/host/runtime.cjs.map +1 -1
- package/dist/coordination/host/runtime.d.cts +3 -3
- package/dist/coordination/host/runtime.d.mts +3 -3
- package/dist/coordination/host/runtime.d.ts +3 -3
- package/dist/coordination/host/types.cjs.map +1 -1
- package/dist/coordination/host/types.d.cts +0 -5
- package/dist/coordination/host/types.d.mts +0 -5
- package/dist/coordination/host/types.d.ts +0 -5
- package/dist/coordination/platform/node.cjs +90 -9
- package/dist/coordination/platform/node.cjs.map +1 -1
- package/dist/define.cjs +25 -1
- package/dist/define.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -0
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/i18n/en.cjs +26 -8
- package/dist/i18n/en.cjs.map +1 -1
- package/dist/i18n/en.d.cts +19 -6
- package/dist/i18n/en.d.mts +19 -6
- package/dist/i18n/en.d.ts +19 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/o11y/parsers/hermes.cjs +1 -1
- package/dist/o11y/parsers/hermes.cjs.map +1 -1
- package/dist/o11y/prices.json +1 -1
- package/dist/o11y/record/families.cjs +12 -3
- package/dist/o11y/record/families.cjs.map +1 -1
- package/dist/o11y/record/families.d.cts +8 -8
- package/dist/o11y/record/families.d.mts +8 -8
- package/dist/o11y/record/families.d.ts +8 -8
- package/dist/o11y/record/family-projectors.d.cts +66 -18
- package/dist/o11y/record/family-projectors.d.mts +66 -18
- package/dist/o11y/record/family-projectors.d.ts +66 -18
- package/dist/o11y/record/family-writers.d.cts +11 -3
- package/dist/o11y/record/family-writers.d.mts +11 -3
- package/dist/o11y/record/family-writers.d.ts +11 -3
- package/dist/o11y/record/runner-producer.cjs +14 -4
- package/dist/o11y/record/runner-producer.cjs.map +1 -1
- package/dist/record/codec/core.d.cts +2 -2
- package/dist/record/codec/core.d.mts +2 -2
- package/dist/record/codec/core.d.ts +2 -2
- package/dist/record/family/catalog.d.cts +44 -12
- package/dist/record/family/catalog.d.mts +44 -12
- package/dist/record/family/catalog.d.ts +44 -12
- package/dist/record/family/index.js +128 -124
- package/dist/record/family/observability-v1.cjs +35 -0
- package/dist/record/family/observability-v1.cjs.map +1 -0
- package/dist/record/family/observability-v1.d.cts +3 -0
- package/dist/record/family/observability-v1.d.mts +3 -0
- package/dist/record/family/observability-v1.d.ts +3 -0
- package/dist/record/family/observability-v1.js +6 -0
- package/dist/record/family/observability-v1.js.map +1 -0
- package/dist/record/family/observability.cjs +58 -9
- package/dist/record/family/observability.cjs.map +1 -1
- package/dist/record/family/observability.d.cts +1014 -15
- package/dist/record/family/observability.d.mts +1014 -15
- package/dist/record/family/observability.d.ts +1014 -15
- package/dist/record/family/observability.js +22 -18
- package/dist/record/host/runtime.cjs +600 -31
- 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 +33 -9
- package/dist/record/host/types.d.mts +33 -9
- package/dist/record/host/types.d.ts +33 -9
- package/dist/record/maintenance/runtime.cjs +1 -2
- package/dist/record/maintenance/runtime.cjs.map +1 -1
- package/dist/record/model/core.cjs.map +1 -1
- package/dist/record/model/core.d.cts +1 -1
- package/dist/record/model/core.d.mts +1 -1
- package/dist/record/model/core.d.ts +1 -1
- package/dist/record/model/definition.d.cts +6 -6
- package/dist/record/model/definition.d.mts +6 -6
- package/dist/record/model/definition.d.ts +6 -6
- package/dist/record/model/identifiers.cjs +1 -1
- package/dist/record/model/identifiers.cjs.map +1 -1
- package/dist/record/model/identifiers.d.cts +1 -1
- package/dist/record/model/identifiers.d.mts +1 -1
- package/dist/record/model/identifiers.d.ts +1 -1
- package/dist/record/platform/node.cjs +159 -23
- 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 +15 -2
- package/dist/record/platform/services.d.mts +15 -2
- package/dist/record/platform/services.d.ts +15 -2
- package/dist/record/reader/errors.cjs +37 -1
- package/dist/record/reader/errors.cjs.map +1 -1
- package/dist/record/reader/errors.d.cts +49 -1
- package/dist/record/reader/errors.d.mts +49 -1
- package/dist/record/reader/errors.d.ts +49 -1
- package/dist/record/reader/errors.js +22 -12
- package/dist/record/reader/format.cjs +76 -17
- package/dist/record/reader/format.cjs.map +1 -1
- package/dist/record/reader/format.d.cts +11 -4
- package/dist/record/reader/format.d.mts +11 -4
- package/dist/record/reader/format.d.ts +11 -4
- package/dist/record/reader/format.js +2 -0
- package/dist/record/reader/index.js +32 -18
- package/dist/record/reader/runtime.cjs +64 -0
- package/dist/record/reader/runtime.cjs.map +1 -1
- package/dist/record/reader/runtime.d.cts +15 -0
- package/dist/record/reader/runtime.d.mts +15 -0
- package/dist/record/reader/runtime.d.ts +15 -0
- package/dist/record/reader/runtime.js +2 -0
- package/dist/report/assets/styles.css +53 -29
- package/dist/report/built-in/analysis-values.cjs +21 -13
- package/dist/report/built-in/analysis-values.cjs.map +1 -1
- package/dist/report/built-in/analysis-values.d.cts +11 -22
- package/dist/report/built-in/analysis-values.d.mts +11 -22
- package/dist/report/built-in/analysis-values.d.ts +11 -22
- package/dist/report/built-in/analysis-values.js +4 -6
- package/dist/report/built-in/index.cjs +1 -3
- package/dist/report/built-in/index.cjs.map +1 -1
- package/dist/report/built-in/index.d.cts +1 -1
- package/dist/report/built-in/index.d.mts +1 -1
- package/dist/report/built-in/index.d.ts +1 -1
- package/dist/report/built-in/index.js +4 -8
- package/dist/report/built-in/index.mjs +4 -8
- package/dist/report/built-in/machine.cjs +0 -2
- package/dist/report/built-in/machine.cjs.map +1 -1
- package/dist/report/built-in/machine.d.cts +0 -2
- package/dist/report/built-in/machine.d.mts +0 -2
- package/dist/report/built-in/machine.d.ts +0 -2
- package/dist/report/built-in/result-components.cjs +49 -51
- package/dist/report/built-in/result-components.cjs.map +1 -1
- package/dist/report/built-in/result-components.d.cts +16 -17
- package/dist/report/built-in/result-components.d.mts +16 -17
- package/dist/report/built-in/result-components.d.ts +16 -17
- package/dist/report/built-in/result-components.js +0 -4
- package/dist/report/built-in/run-membership-overview.cjs +126 -17
- package/dist/report/built-in/run-membership-overview.cjs.map +1 -1
- package/dist/report/built-in/run-membership-overview.d.cts +14 -0
- package/dist/report/built-in/run-membership-overview.d.mts +14 -0
- package/dist/report/built-in/run-membership-overview.d.ts +14 -0
- package/dist/report/built-in/run-membership-overview.js +4 -2
- package/dist/report/built-in/standard.cjs +80 -45
- package/dist/report/built-in/standard.cjs.map +1 -1
- package/dist/report/built-in/standard.d.cts +19 -41
- package/dist/report/built-in/standard.d.mts +19 -41
- package/dist/report/built-in/standard.d.ts +19 -41
- package/dist/report/built-in/standard.js +6 -6
- package/dist/report/components/attempt-detail/compute.cjs +78 -2
- package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
- package/dist/report/components/attempt-detail/compute.d.cts +1 -1
- package/dist/report/components/attempt-detail/compute.d.mts +1 -1
- package/dist/report/components/attempt-detail/compute.d.ts +1 -1
- package/dist/report/components/attempt-detail/content.cjs +1 -1
- package/dist/report/components/attempt-detail/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.cjs +42 -5
- package/dist/report/components/entity-lists/compute.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.d.cts +10 -8
- package/dist/report/components/entity-lists/compute.d.mts +10 -8
- package/dist/report/components/entity-lists/compute.d.ts +10 -8
- package/dist/report/components/entity-lists/content.cjs +31 -6
- package/dist/report/components/entity-lists/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.cjs +9 -4
- package/dist/report/components/entity-lists/index.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.d.cts +4 -7
- package/dist/report/components/entity-lists/index.d.mts +4 -7
- package/dist/report/components/entity-lists/index.d.ts +4 -7
- package/dist/report/components/summaries/compute.cjs +8 -1
- package/dist/report/components/summaries/compute.cjs.map +1 -1
- package/dist/report/components/summaries/compute.d.cts +9 -1
- package/dist/report/components/summaries/compute.d.mts +9 -1
- package/dist/report/components/summaries/compute.d.ts +9 -1
- package/dist/report/components/summaries/index.cjs +48 -4
- package/dist/report/components/summaries/index.cjs.map +1 -1
- package/dist/report/components/summaries/index.d.cts +7 -4
- package/dist/report/components/summaries/index.d.mts +7 -4
- package/dist/report/components/summaries/index.d.ts +7 -4
- package/dist/report/definition/cell.cjs +3 -0
- package/dist/report/definition/cell.cjs.map +1 -1
- package/dist/report/definition/cell.d.cts +2 -0
- package/dist/report/definition/cell.d.mts +2 -0
- package/dist/report/definition/cell.d.ts +2 -0
- package/dist/report/definition/primitives/chart.cjs +8 -5
- package/dist/report/definition/primitives/chart.cjs.map +1 -1
- package/dist/report/definition/primitives/points-dataset.cjs +1 -0
- package/dist/report/definition/primitives/points-dataset.cjs.map +1 -1
- package/dist/report/definition/primitives.cjs +15 -2
- package/dist/report/definition/primitives.cjs.map +1 -1
- package/dist/report/definition/report.cjs +27 -3
- package/dist/report/definition/report.cjs.map +1 -1
- package/dist/report/definition/report.d.cts +8 -0
- package/dist/report/definition/report.d.mts +8 -0
- package/dist/report/definition/report.d.ts +8 -0
- package/dist/report/execution/machine.cjs +30 -14
- package/dist/report/execution/machine.cjs.map +1 -1
- package/dist/report/execution/machine.d.cts +20 -10
- package/dist/report/execution/machine.d.mts +20 -10
- package/dist/report/execution/machine.d.ts +20 -10
- package/dist/report/execution/machine.js +6 -6
- package/dist/report/host/execute.cjs +25 -16
- package/dist/report/host/execute.cjs.map +1 -1
- package/dist/report/host/execute.d.cts +4 -0
- package/dist/report/host/execute.d.mts +4 -0
- package/dist/report/host/execute.d.ts +4 -0
- package/dist/report/host/from-record.cjs +22 -5
- package/dist/report/host/from-record.cjs.map +1 -1
- package/dist/report/host/machine.cjs +53 -11
- package/dist/report/host/machine.cjs.map +1 -1
- package/dist/report/host/site-runtime.cjs +9 -8
- package/dist/report/host/site-runtime.cjs.map +1 -1
- package/dist/report/host/site-runtime.d.cts +1 -1
- package/dist/report/host/site-runtime.d.mts +1 -1
- package/dist/report/host/site-runtime.d.ts +1 -1
- package/dist/report/host/static.cjs +56 -9
- package/dist/report/host/static.cjs.map +1 -1
- package/dist/report/index.cjs.map +1 -1
- package/dist/report/index.d.cts +1 -1
- package/dist/report/index.d.mts +1 -1
- package/dist/report/index.d.ts +1 -1
- package/dist/report/model/dataset.cjs +7 -2
- package/dist/report/model/dataset.cjs.map +1 -1
- package/dist/report/model/locale.cjs +2 -0
- package/dist/report/model/locale.cjs.map +1 -1
- package/dist/report/model/locale.d.cts +1 -0
- package/dist/report/model/locale.d.mts +1 -0
- package/dist/report/model/locale.d.ts +1 -0
- package/dist/report/model/metrics.cjs +3 -1
- package/dist/report/model/metrics.cjs.map +1 -1
- package/dist/report/model/pricing.cjs +16 -11
- package/dist/report/model/pricing.cjs.map +1 -1
- package/dist/report/react/styles.css +53 -29
- package/dist/runner/adoption.cjs +1 -0
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt.cjs +44 -5
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/attempt.d.cts +13 -1
- package/dist/runner/attempt.d.mts +13 -1
- package/dist/runner/attempt.d.ts +13 -1
- package/dist/runner/config-identity.cjs +10 -2
- package/dist/runner/config-identity.cjs.map +1 -1
- package/dist/runner/config-identity.d.cts +4 -2
- package/dist/runner/config-identity.d.mts +4 -2
- package/dist/runner/config-identity.d.ts +4 -2
- package/dist/runner/feedback/human.cjs +298 -59
- package/dist/runner/feedback/human.cjs.map +1 -1
- package/dist/runner/feedback/json.cjs +14 -6
- package/dist/runner/feedback/json.cjs.map +1 -1
- package/dist/runner/feedback/json.d.cts +3 -2
- package/dist/runner/feedback/json.d.mts +3 -2
- package/dist/runner/feedback/json.d.ts +3 -2
- package/dist/runner/feedback/reducer.cjs +2 -0
- package/dist/runner/feedback/reducer.cjs.map +1 -1
- package/dist/runner/judge-config.cjs +1 -1
- package/dist/runner/judge-config.cjs.map +1 -1
- package/dist/runner/ledger.cjs +124 -12
- package/dist/runner/ledger.cjs.map +1 -1
- package/dist/runner/project-current.cjs +13 -5
- package/dist/runner/project-current.cjs.map +1 -1
- package/dist/runner/run.cjs +564 -256
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/sandbox-pool.cjs +161 -30
- package/dist/runner/sandbox-pool.cjs.map +1 -1
- package/dist/runner/sandbox-pool.d.cts +34 -2
- package/dist/runner/sandbox-pool.d.mts +34 -2
- package/dist/runner/sandbox-pool.d.ts +34 -2
- package/dist/runner/shared-state-lease.cjs +803 -0
- package/dist/runner/shared-state-lease.cjs.map +1 -0
- package/dist/runner/shared-state-lease.d.cts +121 -0
- package/dist/runner/shared-state-lease.d.mts +121 -0
- package/dist/runner/shared-state-lease.d.ts +121 -0
- package/dist/runner/shared-state-lease.js +24 -0
- package/dist/runner/shared-state-lease.js.map +1 -0
- package/dist/runner/teardown-registry.cjs +97 -34
- package/dist/runner/teardown-registry.cjs.map +1 -1
- package/dist/runner/teardown-registry.d.cts +27 -1
- package/dist/runner/teardown-registry.d.mts +27 -1
- package/dist/runner/teardown-registry.d.ts +27 -1
- package/dist/runner/teardown-registry.js +20 -16
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +31 -5
- package/dist/runner/types.d.mts +31 -5
- package/dist/runner/types.d.ts +31 -5
- package/dist/sample/analysis.cjs +249 -459
- package/dist/sample/analysis.cjs.map +1 -1
- package/dist/sample/capability.cjs +138 -7
- package/dist/sample/capability.cjs.map +1 -1
- package/dist/sample/capability.d.cts +3 -1
- package/dist/sample/capability.d.mts +3 -1
- package/dist/sample/capability.d.ts +3 -1
- package/dist/sample/capability.js +8 -6
- package/dist/sandbox/docker-agent-image.cjs +5 -1
- package/dist/sandbox/docker-agent-image.cjs.map +1 -1
- package/dist/sandbox/docker-agent-image.d.cts +2 -0
- package/dist/sandbox/docker-agent-image.d.mts +2 -0
- package/dist/sandbox/docker-agent-image.d.ts +2 -0
- package/dist/sandbox/docker-agent-image.js +14 -10
- package/dist/sandbox/docker-profile/schema.cjs +283 -534
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.d.cts +10 -27
- package/dist/sandbox/docker-profile/schema.d.mts +10 -27
- package/dist/sandbox/docker-profile/schema.d.ts +10 -27
- package/dist/sandbox/e2b-agent-template.cjs +5 -2
- package/dist/sandbox/e2b-agent-template.cjs.map +1 -1
- package/dist/sandbox/index.cjs +4 -2
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +1 -1
- package/dist/sandbox/index.d.mts +1 -1
- package/dist/sandbox/index.d.ts +1 -1
- package/dist/sandbox/index.js +120 -116
- package/dist/sandbox/index.mjs +120 -116
- package/dist/sandbox/keep-registry.cjs +28 -66
- package/dist/sandbox/keep-registry.cjs.map +1 -1
- package/dist/sandbox/types.cjs.map +1 -1
- package/dist/sandbox/types.d.cts +1 -1
- package/dist/sandbox/types.d.mts +1 -1
- package/dist/sandbox/types.d.ts +1 -1
- package/dist/shared/aggregate.cjs +16 -6
- package/dist/shared/aggregate.cjs.map +1 -1
- package/dist/shared/aggregate.d.cts +12 -4
- package/dist/shared/aggregate.d.mts +12 -4
- package/dist/shared/aggregate.d.ts +12 -4
- package/dist/shared/turn-label.cjs +20 -2
- package/dist/shared/turn-label.cjs.map +1 -1
- package/dist/shared/turn-label.d.cts +2 -0
- package/dist/shared/turn-label.d.mts +2 -0
- package/dist/shared/turn-label.d.ts +2 -0
- package/dist/shared/turn-label.js +4 -2
- package/dist/vendor/remark/remark-gfm.cjs +7 -7
- package/dist/vendor/remark/remark-gfm.cjs.map +1 -1
- package/dist/vendor/remark/remark-parse.cjs +12 -12
- package/dist/vendor/remark/remark-parse.cjs.map +1 -1
- package/dist/vendor/remark/remark.cjs +13 -13
- package/dist/vendor/remark/remark.cjs.map +1 -1
- package/dist/view/server.cjs +6 -0
- package/dist/view/server.cjs.map +1 -1
- package/docs-site/images/hitl-handshake-zh.svg +3 -3
- package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
- package/docs-site/zh/examples/coding-agent-extensions.mdx +1 -1
- package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +4 -3
- package/docs-site/zh/examples/integrations/claude-sdk.mdx +3 -3
- package/docs-site/zh/examples/integrations/codex-sdk.mdx +5 -5
- package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
- package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
- package/docs-site/zh/explanation/adapter.mdx +5 -5
- package/docs-site/zh/explanation/assert.mdx +7 -7
- package/docs-site/zh/explanation/drive.mdx +4 -2
- package/docs-site/zh/explanation/evals.mdx +10 -8
- package/docs-site/zh/explanation/experiment.mdx +2 -2
- package/docs-site/zh/explanation/hitl.mdx +9 -9
- package/docs-site/zh/explanation/judge.mdx +5 -5
- package/docs-site/zh/explanation/overview.mdx +3 -3
- package/docs-site/zh/explanation/runner.mdx +1 -1
- package/docs-site/zh/index.mdx +3 -3
- package/docs-site/zh/reference/builtin-agents.mdx +13 -13
- package/docs-site/zh/reference/capabilities.mdx +1 -1
- package/docs-site/zh/reference/cli.mdx +18 -12
- package/docs-site/zh/reference/define-agent.mdx +130 -5
- package/docs-site/zh/reference/define-config.mdx +2 -2
- package/docs-site/zh/reference/define-eval.mdx +4 -4
- package/docs-site/zh/reference/events.mdx +11 -11
- package/docs-site/zh/reference/official-adapters.mdx +6 -6
- package/docs-site/zh/reference/results-data.mdx +6 -0
- package/docs-site/zh/troubleshooting/debugging.mdx +1 -1
- package/docs-site/zh/troubleshooting/recover-after-kill.mdx +37 -5
- package/docs-site/zh/tutorials/accept-results.mdx +72 -0
- package/docs-site/zh/tutorials/agent-onboarding.mdx +6 -6
- package/docs-site/zh/tutorials/authoring.mdx +9 -13
- package/docs-site/zh/tutorials/ci-integration.mdx +6 -6
- package/docs-site/zh/tutorials/compare-runs.mdx +61 -0
- package/docs-site/zh/tutorials/concurrency.mdx +13 -12
- package/docs-site/zh/tutorials/configuration.mdx +4 -6
- package/docs-site/zh/tutorials/connect-your-agent.mdx +1 -1
- package/docs-site/zh/tutorials/control-run-cost.mdx +58 -0
- package/docs-site/zh/tutorials/criteria-files.mdx +2 -2
- package/docs-site/zh/tutorials/custom-reports.mdx +2 -2
- package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +46 -0
- package/docs-site/zh/tutorials/docker-in-docker.mdx +52 -43
- package/docs-site/zh/tutorials/eval-groups.mdx +6 -6
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +3 -3
- package/docs-site/zh/tutorials/experiments.mdx +2 -3
- package/docs-site/zh/tutorials/handle-execution-failures.mdx +18 -10
- package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +16 -8
- package/docs-site/zh/tutorials/nixos-managed-dind.mdx +160 -0
- package/docs-site/zh/tutorials/plugins.mdx +14 -0
- package/docs-site/zh/tutorials/rerun-and-cache.mdx +4 -2
- package/docs-site/zh/tutorials/sandbox-agent.mdx +17 -11
- package/docs-site/zh/tutorials/sandbox-providers.mdx +17 -13
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +12 -19
- package/docs-site/zh/tutorials/select-and-preview.mdx +65 -0
- package/docs-site/zh/tutorials/verify-judge.mdx +78 -0
- package/docs-site/zh/tutorials/viewing-results.mdx +38 -1
- package/docs-site/zh/tutorials/write-experiment.mdx +7 -5
- package/docs-site/zh/tutorials/write-send.mdx +9 -8
- package/package.json +9 -5
- package/dist/report/built-in/overview.cjs +0 -44
- package/dist/report/built-in/overview.cjs.map +0 -1
- package/dist/report/built-in/overview.d.cts +0 -6
- package/dist/report/built-in/overview.d.mts +0 -6
- package/dist/report/built-in/overview.d.ts +0 -6
- package/dist/report/built-in/overview.js +0 -9
- package/dist/report/built-in/overview.js.map +0 -1
- package/dist/runner/gate-lease.cjs +0 -283
- package/dist/runner/gate-lease.cjs.map +0 -1
- package/dist/runner/gate-lease.d.cts +0 -62
- package/dist/runner/gate-lease.d.mts +0 -62
- package/dist/runner/gate-lease.d.ts +0 -62
- package/dist/runner/gate-lease.js +0 -22
- package/dist/runner/gate-lease.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute.js","sourceRoot":"","sources":["compute.ts"],"names":[],"mappings":"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","sourcesContent":["// Attempt 详情组件族的计算函数(docs/feature/reports/library.md)。\n// 输入全部是 Analysis 已关闭的 DomainView detail。每个 `attempt*Data(...)` 都是纯同步\n// 派生,只做展示与序列化所需取舍;不读文件、不 fetch、不持 Sample,不取得 Record reader、\n// path、AttemptHandle 或 Effect Scope,也不重复调用 DomainView 查询。\nimport type { AttemptLocator } from \"../../../attempt-locator.ts\";\nimport type { VerdictState } from \"../../../eval/record/verdict.ts\";\nimport type { AttemptEvidenceDomainDetail, ClosedCommandEntry, ClosedCommandsDetail, ClosedConversationDetail, ClosedConversationItem, ClosedDiagnosticsDetail, ClosedFileChangeEndpoint, ClosedFileChangesCollection, ClosedSourceFrame, ClosedTimingDetail, ClosedTimingInterval, ClosedTraceCollection, ClosedUsageDetail, ClosedUsageObservation, FileChangesDomainDetail, JsonValue, SourceNavigationDomainDetail, } from \"../../../analysis/index.ts\";\nimport type { DiffFile, DiffFileWindow } from \"../../definition/primitives/diff-lines.ts\";\n// ───────────────────────── 共享视图形状 ─────────────────────────\n/** 不可变身份元组的展示投影。 */\nexport interface AttemptIdentityView {\n readonly runId: string;\n readonly evalId: string;\n /** 零基 attempt 序号,显示时 +1。 */\n readonly attempt: number;\n}\n/**\n * 证据切面开关。由对应 DomainView 的 `available` entry 在不在判定;组合层在\n * 装配时投影,compute 只消费布尔值。\n */\nexport interface AttemptCapabilitiesView {\n readonly source: boolean;\n readonly execution: boolean;\n readonly timing: boolean;\n readonly diff: boolean;\n}\n// ───────────────────────── AttemptSummary(恒非空) ─────────────────────────\nexport interface AttemptSummaryData {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly identity: AttemptIdentityView;\n /**\n * 闭合证据里的 terminal verdict。当前闭合 DomainView 拿不到时是 \"unknown\",\n * 不伪装成 passed / skipped(「合法零值不是空值」同一条纪律)。\n */\n readonly verdict: VerdictState | \"unknown\";\n /** 闭合视图不携带 attempt 墙钟开始时间;未知时省略。 */\n readonly startedAt?: string;\n /** timing 区间记录的 attempt 时钟跨度;没有 timing 证据时为 null。 */\n readonly durationMs: number | null;\n /** 历史 observed provider-cost 的 USD 面额合计;不是 Report Profile projection。 */\n readonly observedCostUSD?: number;\n readonly capabilities: AttemptCapabilitiesView;\n /** 计分制 attempt 的本轮挣分;通过制省略。 */\n readonly totalScore?: number;\n}\n/**\n * 断言评分贡献的闭合形状:sealed result 的 `score` 只在这两种状态里出现。\n * `earned` 是本轮实际挣分,`points` 是该项可得分。\n */\nexport interface AttemptScoreView {\n readonly state: \"earned\" | \"unavailable\";\n readonly points: number;\n readonly earned?: number;\n}\n/** 闭合断言 entry 的展示投影。 */\nexport interface AttemptAssertionView {\n readonly entryId: string;\n readonly name: string;\n /** sealed gate 投影:failed / unavailable 是 gate,其余是 soft。 */\n readonly severity: \"gate\" | \"soft\";\n readonly outcome: \"passed\" | \"failed\" | \"unavailable\";\n readonly groupPath: readonly string[];\n /** 展示层预拼好的判定详情(原因 / coverage / limitations / diagnostic)。 */\n readonly detail: string;\n /** 得分点贡献;没有 score 贡献时整字段省略。 */\n readonly score?: AttemptScoreView;\n}\n// ───────────────────────── AttemptError ─────────────────────────\nexport interface AttemptErrorData {\n readonly code: string;\n readonly message: string;\n readonly phase: string;\n readonly locator: AttemptLocator;\n readonly commandEvidenceHint?: true;\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\nexport interface AttemptAssertionsData {\n /** 非 passed 与得分点(含 passed):平铺列表。 */\n readonly attention: readonly AttemptAssertionView[];\n /** 无得分点的 passed 断言按 `groupPath.join(\" > \")` 收纳。 */\n readonly passedGroups: readonly {\n readonly group: string;\n readonly items: readonly AttemptAssertionView[];\n }[];\n /** 得分点挣满计数(\"2/5 得分点挣满\"):挣满 = earned === points。 */\n readonly scorePointsEarned?: {\n readonly earned: number;\n readonly total: number;\n };\n /** 计分制本轮挣分合计;通过制省略。 */\n readonly totalScore?: number;\n /** 题型判定:看 sealed score 状态,不从显示形状推断。 */\n readonly evaluationKind: \"pass\" | \"points\";\n}\n// ───────────────────────── AttemptFixPrompt ─────────────────────────\nexport interface AttemptFixPromptData {\n readonly prompt: string;\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\n/** 当前闭合视图以 ClosedTimingInterval 树表示时间线。 */\nexport interface AttemptTimelineData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedTraceCollection;\n readonly intervals: readonly ClosedTimingInterval[];\n}\nexport interface AttemptTraceData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedTraceCollection;\n readonly intervals: readonly ClosedTimingInterval[];\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\nexport type AttemptConversationReply = {\n readonly kind: \"assistant\";\n readonly text: string;\n} | {\n readonly kind: \"user\";\n readonly text: string;\n} | {\n readonly kind: \"thinking\";\n readonly text: string;\n} | {\n readonly kind: \"error\";\n readonly text: string;\n} | {\n readonly kind: \"context\";\n readonly text: string;\n} | {\n readonly kind: \"skill\";\n readonly skill: string;\n readonly text?: string;\n} | {\n readonly kind: \"input\";\n readonly request: AttemptInputRequestView;\n} | {\n readonly kind: \"compaction\";\n readonly text: string;\n} | {\n readonly kind: \"tool\";\n readonly callId: string;\n readonly name: string;\n readonly inputSummary: string;\n readonly outputSummary?: string;\n readonly outcome?: \"completed\" | \"rejected\" | \"failed\" | \"cancelled\";\n readonly failed?: boolean;\n} | {\n readonly kind: \"subagent\";\n readonly name: string;\n readonly state: \"started\" | \"completed\" | \"failed\";\n readonly summary: string;\n readonly failed?: boolean;\n};\nexport interface AttemptInputRequestView {\n readonly state: \"requested\" | \"answered\" | \"cancelled\";\n readonly promptSummary: string;\n readonly responseSummary: string | null;\n}\nexport interface AttemptConversationRound {\n readonly turnId: string;\n readonly sequence: number;\n readonly outcome: \"completed\" | \"failed\" | \"cancelled\" | \"interrupted\";\n readonly durationMs?: number;\n readonly replies: readonly AttemptConversationReply[];\n}\nexport interface AttemptConversationData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedTraceCollection;\n readonly rounds: readonly AttemptConversationRound[];\n}\n// ───────────────────────── AttemptCommandEvidence ─────────────────────────\n/** 展示层唯一的命令分类规则;当前闭合视图只保存 outcome,没有 checked 语义。 */\nexport type AttemptCommandClassification = \"succeeded\" | \"observed\" | \"failed\";\nexport interface AttemptCommandCard {\n readonly key: string;\n /** 闭合视图没有命令 ↔ timing 节点的关联,这里用命令自身身份保持稳定键。 */\n readonly timingNodeId: string;\n readonly phase: string;\n readonly display: string;\n readonly exitCode: number;\n readonly classification: AttemptCommandClassification;\n readonly stdout?: string;\n readonly stderr?: string;\n}\nexport interface AttemptCommandEvidenceData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedTraceCollection;\n readonly commands: readonly AttemptCommandCard[];\n}\n// ───────────────────────── AttemptDiagnostics ─────────────────────────\nexport interface AttemptDiagnosticView {\n readonly code: string;\n readonly kind: \"advisory\" | \"execution-error\";\n readonly phase: string;\n readonly summary: string;\n readonly level: \"warning\" | \"error\";\n readonly causes: readonly {\n readonly code: string;\n readonly summary: string;\n }[];\n readonly redaction: {\n readonly state: \"none\";\n } | {\n readonly state: \"applied\";\n readonly replacements: number;\n };\n readonly sourceFrame: ClosedSourceFrame | null;\n}\nexport interface AttemptDiagnosticsData {\n readonly collection: ClosedTraceCollection;\n readonly groups: readonly {\n readonly phase: string;\n readonly items: readonly AttemptDiagnosticView[];\n }[];\n}\n// ───────────────────────── UsageTable ─────────────────────────\nexport interface UsageTableData {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly evalId: string;\n readonly attempt: number;\n readonly verdict: VerdictState | \"unknown\";\n /** conversation ledger 派生的轮数;没有 conversation 证据时整对省略。 */\n readonly turns?: number;\n readonly toolCalls?: number;\n /** 闭合 usage 观测原样保留(provider 与 bucket 词表开放,不压进假字段)。 */\n readonly observations?: readonly ClosedUsageObservation[];\n /** provider-cost 中的历史 observed USD 面额合计;没有可合计金额时省略。 */\n readonly observedCostUSD?: number;\n}\n// ───────────────────────── AttemptDiff ─────────────────────────\nexport interface AttemptDiffData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedFileChangesCollection;\n /** 有证据但 agent 一个文件都没有可证净改动时是空清单(不是 null)。 */\n readonly files: readonly DiffFile[];\n}\n// ───────────────────────── AttemptSource ─────────────────────────\nexport interface AttemptSourceItemView {\n readonly sourceItemId: string;\n readonly path: string;\n readonly sha256: string;\n readonly lines: readonly string[];\n /** 内容不可渲染时是明确的缺失标记,不编造行。 */\n readonly unavailable?: \"unavailable\" | \"binary\";\n}\nexport interface AttemptSourceSiteView {\n readonly entryId: string;\n readonly sourceOrder: number;\n readonly role: string;\n readonly sourceItemId: string;\n readonly sha256: string;\n readonly startLine: number;\n readonly endLine: number;\n}\nexport interface AttemptSourceData {\n readonly locator: AttemptLocator;\n /** 第一个 item 是 spine,其余是 detached。 */\n readonly items: readonly AttemptSourceItemView[];\n readonly sites: readonly AttemptSourceSiteView[];\n readonly entries: readonly AttemptAssertionView[];\n readonly navigation?: SourceNavigationDomainDetail;\n}\n// ───────────────────────── AttemptSummary ─────────────────────────\nexport function attemptSummaryData(input: {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly identity: AttemptIdentityView;\n readonly verdict: VerdictState | \"unknown\";\n readonly startedAt?: string;\n readonly durationMs: number | null;\n readonly observedCostUSD?: number;\n readonly capabilities: AttemptCapabilitiesView;\n readonly totalScore?: number;\n}): AttemptSummaryData {\n return {\n locator: input.locator,\n experimentId: input.experimentId,\n identity: input.identity,\n verdict: input.verdict,\n ...(input.startedAt === undefined ? {} : { startedAt: input.startedAt }),\n durationMs: input.durationMs,\n ...(input.observedCostUSD === undefined ? {} : { observedCostUSD: input.observedCostUSD }),\n capabilities: input.capabilities,\n ...(input.totalScore === undefined ? {} : { totalScore: input.totalScore }),\n };\n}\n// ───────────────────────── AttemptError ─────────────────────────\n/**\n * `message` 疑似只剩某条失败命令 stdout/stderr 的截断尾部:去首尾空白后,严格短于该字段\n * 且是它的后缀。严格短于(不是 `<=`)排除「message 恰好等于完整字段」的场景:那种情况\n * 没有被截掉的内容,提示「还有更多证据」是误导。\n */\nfunction looksLikeTruncatedCommandTail(message: string, commands: readonly AttemptCommandCard[]): boolean {\n const trimmed = message.trim();\n if (!trimmed)\n return false;\n return commands.filter((command) => command.classification === \"failed\").some((command) => [command.stdout, command.stderr].some((field) => {\n const full = (field ?? \"\").trim();\n return full.length > trimmed.length && full.endsWith(trimmed);\n }));\n}\n/**\n * 执行级错误投影:outcome 非 completed,或闭合 diagnostics 里有 execution-error。\n * 当前闭合视图没有旧 Record 的 AttemptError 结构,这两处是唯一的闭合事实来源。\n */\nexport function attemptErrorData(input: {\n readonly locator: AttemptLocator;\n readonly outcome: AttemptEvidenceDomainDetail[\"outcome\"];\n readonly diagnostics?: ClosedDiagnosticsDetail;\n readonly commands?: readonly AttemptCommandCard[];\n}): AttemptErrorData | null {\n const executionError = input.diagnostics?.diagnostics.find((diagnostic) => diagnostic.kind === \"execution-error\");\n const interrupted = input.outcome === \"errored\" || input.outcome === \"interrupted\";\n if (!interrupted && executionError === undefined)\n return null;\n const code = executionError?.code ?? `execution.${input.outcome}`;\n const message = executionError?.summary ?? \"Attempt execution did not complete.\";\n const phase = executionError?.phase ?? \"attempt\";\n const commands = input.commands;\n const hint = commands !== undefined && commands.length > 0 &&\n looksLikeTruncatedCommandTail(message, commands);\n return {\n code,\n message,\n phase,\n locator: input.locator,\n ...(hint ? { commandEvidenceHint: true as const } : {}),\n };\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\n/**\n * sealed 断言 entry 的结构读取形状。DomainView 边界把整条 entry 声明成 JsonValue,\n * 展示层按已知 sealed 形状做最小结构读取(与 sourceSites 的 siteViewOf 同一条纪律):\n * 读不到的字段省略、读不懂的 entry 跳过,前向兼容,不伪造事实。\n */\nexport interface SealedAssertionEntryView {\n readonly entryId: string;\n readonly display: SealedAssertionDisplayView;\n readonly result: SealedAssertionResultView;\n readonly coverage: SealedAssertionCoverageView;\n readonly limitations: readonly SealedAssertionLimitationView[];\n}\nexport interface SealedAssertionDisplayView {\n readonly label?: string;\n readonly key?: string;\n readonly groupPath: readonly string[];\n}\nexport interface SealedAssertionCoverageView {\n readonly state: \"complete\" | \"partial\" | \"unavailable\" | \"not-applicable\";\n readonly reason?: string;\n}\nexport interface SealedAssertionLimitationView {\n readonly kind: string;\n}\nexport interface SealedAssertionResultView {\n readonly state: \"matched\" | \"mismatched\" | \"unavailable\" | \"errored\";\n readonly reason?: string;\n readonly gate: \"not-gate\" | \"satisfied\" | \"failed\" | \"unavailable\";\n readonly score: SealedAssertionScoreView;\n readonly diagnostic?: JsonValue;\n}\nexport interface SealedAssertionScoreView {\n readonly state: \"not-scored\" | \"earned\" | \"unavailable\";\n readonly earned?: number;\n readonly points?: number;\n}\nfunction jsonRecordOf(value: JsonValue | undefined): Readonly<Record<string, JsonValue>> | undefined {\n if (value === undefined || typeof value !== \"object\" || value === null || Array.isArray(value))\n return undefined;\n return value as Readonly<Record<string, JsonValue>>;\n}\nfunction jsonStringOf(record: Readonly<Record<string, JsonValue>>, key: string): string | undefined {\n const value = record[key];\n return typeof value === \"string\" ? value : undefined;\n}\nfunction jsonNumberOf(record: Readonly<Record<string, JsonValue>>, key: string): number | undefined {\n const value = record[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\nfunction jsonStringArrayOf(record: Readonly<Record<string, JsonValue>>, key: string): readonly string[] | undefined {\n const value = record[key];\n if (!Array.isArray(value))\n return undefined;\n const items: string[] = [];\n for (const item of value) {\n if (typeof item !== \"string\")\n return undefined;\n items.push(item);\n }\n return items;\n}\n/** 整条 sealed assertion entry 的结构读取;读不懂(形状不符)返回 undefined,调用方跳过。 */\nexport function assertionEntryViewOf(value: JsonValue): SealedAssertionEntryView | undefined {\n const record = jsonRecordOf(value);\n if (record === undefined)\n return undefined;\n const entryId = jsonStringOf(record, \"entryId\");\n const display = jsonRecordOf(record[\"display\"]);\n const result = jsonRecordOf(record[\"result\"]);\n const coverage = jsonRecordOf(record[\"coverage\"]);\n if (entryId === undefined || display === undefined || result === undefined || coverage === undefined)\n return undefined;\n const state = jsonStringOf(result, \"state\");\n const gate = jsonStringOf(result, \"gate\");\n const score = jsonRecordOf(result[\"score\"]);\n if (state === undefined || gate === undefined || score === undefined)\n return undefined;\n if (state !== \"matched\" && state !== \"mismatched\" && state !== \"unavailable\" && state !== \"errored\")\n return undefined;\n if (gate !== \"not-gate\" && gate !== \"satisfied\" && gate !== \"failed\" && gate !== \"unavailable\")\n return undefined;\n const scoreState = jsonStringOf(score, \"state\");\n if (scoreState !== \"not-scored\" && scoreState !== \"earned\" && scoreState !== \"unavailable\")\n return undefined;\n const coverageState = jsonStringOf(coverage, \"state\");\n if (coverageState !== \"complete\" && coverageState !== \"partial\" &&\n coverageState !== \"unavailable\" && coverageState !== \"not-applicable\")\n return undefined;\n const limitations: SealedAssertionLimitationView[] = [];\n const rawLimitations = Array.isArray(record[\"limitations\"]) ? record[\"limitations\"] : [];\n for (const item of rawLimitations) {\n const kind = jsonStringOf(jsonRecordOf(item) ?? {}, \"kind\");\n if (kind !== undefined)\n limitations.push({ kind });\n }\n const earned = jsonNumberOf(score, \"earned\");\n const points = jsonNumberOf(score, \"points\");\n return {\n entryId,\n display: {\n ...(jsonStringOf(display, \"label\") === undefined ? {} : { label: jsonStringOf(display, \"label\") }),\n ...(jsonStringOf(display, \"key\") === undefined ? {} : { key: jsonStringOf(display, \"key\") }),\n groupPath: jsonStringArrayOf(display, \"groupPath\") ?? [],\n },\n result: {\n state,\n ...(jsonStringOf(result, \"reason\") === undefined ? {} : { reason: jsonStringOf(result, \"reason\") }),\n gate,\n score: {\n state: scoreState,\n ...(earned === undefined ? {} : { earned }),\n ...(points === undefined ? {} : { points }),\n },\n ...(result[\"diagnostic\"] === undefined ? {} : { diagnostic: result[\"diagnostic\"] }),\n },\n coverage: {\n state: coverageState,\n ...(jsonStringOf(coverage, \"reason\") === undefined ? {} : { reason: jsonStringOf(coverage, \"reason\") }),\n },\n limitations,\n };\n}\n/** sealed result → 展示 outcome;errored 归 failed,理由留在 detail。 */\nfunction assertionOutcomeOf(entry: SealedAssertionEntryView): AttemptAssertionView[\"outcome\"] {\n const state = entry.result.state;\n if (state === \"matched\")\n return \"passed\";\n if (state === \"mismatched\" || state === \"errored\")\n return \"failed\";\n return \"unavailable\";\n}\nfunction assertionSeverityOf(entry: SealedAssertionEntryView): AttemptAssertionView[\"severity\"] {\n return entry.result.gate === \"failed\" || entry.result.gate === \"unavailable\" ? \"gate\" : \"soft\";\n}\nfunction scoreOf(entry: SealedAssertionEntryView): AttemptScoreView | undefined {\n const score = entry.result.score;\n if (score.state === \"not-scored\")\n return undefined;\n return {\n state: score.state,\n points: score.points ?? 0,\n ...(score.state === \"earned\" ? { earned: score.earned ?? 0 } : {}),\n };\n}\n/** 展示层预拼的判定详情;字段全闭合,不再有 expected / received 等旧形状。 */\nexport function assertionDetailOf(entry: SealedAssertionEntryView): string {\n const parts: string[] = [];\n if (entry.result.state === \"mismatched\")\n parts.push(`reason: ${entry.result.reason}`);\n if (entry.result.state === \"unavailable\")\n parts.push(`reason: ${entry.result.reason}`);\n if (entry.result.state === \"errored\")\n parts.push(`reason: ${entry.result.reason}`);\n if (entry.coverage.state !== \"complete\") {\n parts.push(`coverage: ${entry.coverage.state}${entry.coverage.reason === undefined ? \"\" : ` (${entry.coverage.reason})`}`);\n }\n for (const limitation of entry.limitations) {\n parts.push(`limitations: ${limitation.kind}`);\n }\n if (entry.result.diagnostic !== undefined) {\n parts.push(`diagnostic: ${stableJson(entry.result.diagnostic)}`);\n }\n return parts.join(\" · \");\n}\nfunction assertionNameOf(entry: SealedAssertionEntryView): string {\n const display = entry.display;\n if (display.label !== undefined && display.label.length > 0)\n return display.label;\n if (display.key !== undefined && display.key.length > 0)\n return display.key;\n return entry.entryId;\n}\nexport function assertionViewOf(entry: SealedAssertionEntryView): AttemptAssertionView {\n const score = scoreOf(entry);\n return {\n entryId: entry.entryId,\n name: assertionNameOf(entry),\n severity: assertionSeverityOf(entry),\n outcome: assertionOutcomeOf(entry),\n groupPath: entry.display.groupPath,\n detail: assertionDetailOf(entry),\n ...(score === undefined ? {} : { score }),\n };\n}\n/** 按 `groupPath.join(\" > \")` 分组(无分组归到空键 \"\"),组内保持传入顺序。 */\nfunction groupByPath<T extends {\n groupPath?: readonly string[];\n}>(items: readonly T[]): {\n group: string;\n items: T[];\n}[] {\n const groups = new Map<string, T[]>();\n for (const item of items) {\n const key = item.groupPath?.join(\" > \") ?? \"\";\n const list = groups.get(key);\n if (list)\n list.push(item);\n else\n groups.set(key, [item]);\n }\n return [...groups.entries()].map(([group, items]) => ({ group, items }));\n}\n/**\n * 得分点挣满计数:分母是全部带 score 贡献的断言;挣满 = earned === points。\n * 得分点(带 score)豁免 passed 收纳:即使 passed 也进平铺列表。\n */\nfunction scorePointsEarnedOf(assertions: readonly AttemptAssertionView[]): {\n earned: number;\n total: number;\n} | undefined {\n const scorePoints = assertions.filter((assertion) => assertion.score !== undefined);\n if (scorePoints.length === 0)\n return undefined;\n const earned = scorePoints.filter((assertion) => assertion.score !== undefined && assertion.score.earned !== undefined &&\n assertion.score.earned === assertion.score.points).length;\n return { earned, total: scorePoints.length };\n}\nexport function attemptAssertionsData(detail: AttemptEvidenceDomainDetail | undefined): AttemptAssertionsData | null {\n if (detail === undefined)\n return null;\n const entries = detail.entries\n .map(assertionEntryViewOf)\n .filter((entry): entry is SealedAssertionEntryView => entry !== undefined);\n if (entries.length === 0)\n return null;\n const assertions = entries.map(assertionViewOf);\n const attentionBase = assertions.filter((assertion) => assertion.outcome !== \"passed\" || assertion.score !== undefined);\n const passed = assertions.filter((assertion) => assertion.outcome === \"passed\" && assertion.score === undefined);\n const scorePointsEarned = scorePointsEarnedOf(assertions);\n const scored = assertions.filter((assertion) => assertion.score !== undefined);\n const totalScore = scored.length === 0 ? undefined : scored.reduce((sum, assertion) => sum + (assertion.score!.state === \"earned\" && assertion.score!.earned !== undefined\n ? assertion.score!.earned\n : 0), 0);\n const evaluationKind = assertions.some((assertion) => assertion.score !== undefined)\n ? \"points\"\n : \"pass\";\n return {\n attention: attentionBase,\n passedGroups: groupByPath(passed),\n ...(scorePointsEarned ? { scorePointsEarned } : {}),\n ...(totalScore === undefined ? {} : { totalScore }),\n evaluationKind,\n };\n}\n// ───────────────────────── AttemptFixPrompt ─────────────────────────\n/**\n * 单条 attempt 版的批量修复 prompt(与 CopyFixPrompt 的多条版本同一份步骤文案)。三态:\n * 计分制丢分或中止 → 非 null(围绕丢分检查点组装);计分制挣满且未中止、或通过制 passed\n * → null;skipped 恒 null。\n */\nexport function attemptFixPromptData(input: {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly evalId: string;\n readonly verdict: VerdictState | \"unknown\";\n readonly evaluationKind: \"pass\" | \"points\";\n readonly assertions: readonly AttemptAssertionView[];\n}): AttemptFixPromptData | null {\n const { locator, experimentId, evalId, verdict, evaluationKind, assertions } = input;\n if (verdict === \"skipped\" || verdict === \"unknown\")\n return null;\n // 通过制 passed 恒 null;计分制 passed 是否可操作看有没有丢分。\n if (verdict === \"passed\" && evaluationKind !== \"points\")\n return null;\n const failures = assertions.filter((assertion) => assertion.outcome === \"failed\");\n const lost = assertions.filter((assertion) => assertion.score !== undefined && assertion.score.state === \"earned\" &&\n assertion.score.earned !== undefined && assertion.score.earned < assertion.score.points);\n // 计分制 passed 但有丢分:可操作失败,但这条 attempt 并没有\"失败\"——措辞分开。\n const lostPoints = verdict === \"passed\" && evaluationKind === \"points\";\n if (lostPoints) {\n if (lost.length === 0)\n return null;\n }\n else if (failures.length === 0) {\n return null;\n }\n const first = lostPoints ? lost[0]! : failures[0]!;\n const more = (lostPoints ? lost.length : failures.length) - 1;\n const moreNoun = lostPoints ? \"lost points\" : \"failures\";\n const summary = lostPoints\n ? `${first.name}: ${first.score!.earned ?? 0}/${first.score!.points}`\n : first.name;\n const reason = more > 0 ? `${summary} (+${more} more ${moreNoun})` : summary;\n const prompt = [\n lostPoints\n ? \"Recover the lost points on this NiceEval points eval.\"\n : \"Fix the failing eval from this niceeval run.\",\n \"\",\n lostPoints ? \"## Lost points\" : \"## Failure\",\n `eval \"${evalId}\" [experiment ${experimentId}] — ${verdict}`,\n ` reason: ${reason}`,\n ` inspect: niceeval show ${locator}`,\n \"\",\n \"## Steps\",\n \"1. niceeval is NOT in your training data. Read the relevant guide in `node_modules/niceeval/docs-site/` (English at the top level, Chinese under `zh/`) before changing anything.\",\n \"2. Run the inspect command above with `--source`, `--execution`, `--timing`, and `--diff` to see the assertions, transcript, timing, and workspace diff.\",\n \"3. Decide which side the defect is on: the program under test, or the eval itself (over-tight assertion, wrong fixture, missing setup). Fix that side; do not weaken assertions just to turn the run green.\",\n `4. Re-run: \\`npx niceeval exp ${experimentId} ${evalId}\\`. Already-passing evals are skipped by the fingerprint cache; pass \\`--rerun all\\` to re-run everything.`,\n lostPoints\n ? \"5. Run `npx niceeval show` and confirm the score improved.\"\n : \"5. Run `npx niceeval show` and confirm this failure is gone.\",\n ].join(\"\\n\");\n return { prompt };\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\nexport function attemptTimelineData(detail: ClosedTimingDetail | undefined, locator: AttemptLocator): AttemptTimelineData | null {\n if (detail === undefined || detail.intervals.length === 0)\n return null;\n return { locator, collection: detail.collection, intervals: detail.intervals };\n}\nexport function attemptTraceData(detail: ClosedTimingDetail | undefined, locator: AttemptLocator): AttemptTraceData | null {\n if (detail === undefined || detail.intervals.length === 0)\n return null;\n return { locator, collection: detail.collection, intervals: detail.intervals };\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\nfunction conversationReplyOf(item: ClosedConversationItem, callsById: ReadonlyMap<string, Extract<ClosedConversationItem, {\n kind: \"tool-call\";\n}>>): AttemptConversationReply {\n switch (item.kind) {\n case \"message\":\n return item.role === \"assistant\"\n ? { kind: \"assistant\", text: item.text }\n : { kind: \"user\", text: item.text };\n case \"tool-call\":\n return { kind: \"tool\", callId: item.callId, name: item.tool, inputSummary: item.inputSummary };\n case \"tool-result\": {\n const call = callsById.get(item.callId);\n return {\n kind: \"tool\",\n callId: item.callId,\n name: call?.tool ?? item.callId,\n inputSummary: call?.inputSummary ?? \"\",\n outputSummary: item.outputSummary,\n outcome: item.outcome,\n failed: item.outcome === \"failed\" || item.outcome === \"rejected\",\n };\n }\n case \"thinking-summary\":\n return { kind: \"thinking\", text: item.summary };\n case \"compaction\":\n return { kind: \"compaction\", text: item.summary };\n case \"context-injection\":\n return { kind: \"context\", text: item.summary };\n case \"subagent\":\n return {\n kind: \"subagent\",\n name: item.label,\n state: item.state,\n summary: item.summary,\n failed: item.state === \"failed\",\n };\n case \"input-request\":\n return {\n kind: \"input\",\n request: {\n state: item.state,\n promptSummary: item.promptSummary,\n responseSummary: item.responseSummary,\n },\n };\n case \"skill-load\":\n return { kind: \"skill\", skill: item.code, text: item.summary };\n case \"conversation-error\":\n return { kind: \"error\", text: `${item.code}: ${item.summary}` };\n }\n}\nfunction roundsOf(detail: ClosedConversationDetail, timing?: ClosedTimingDetail, navigation?: SourceNavigationDomainDetail): readonly AttemptConversationRound[] {\n const itemsByTurn = new Map<string, ClosedConversationItem[]>();\n const callsById = new Map<string, Extract<ClosedConversationItem, {\n kind: \"tool-call\";\n }>>();\n for (const item of detail.items) {\n const items = itemsByTurn.get(item.turnId) ?? [];\n items.push(item);\n itemsByTurn.set(item.turnId, items);\n if (item.kind === \"tool-call\")\n callsById.set(item.callId, item);\n }\n const intervalById = new Map((timing?.intervals ?? []).map((interval) => [interval.intervalId, interval] as const));\n const navigationByTurn = new Map((navigation?.rows ?? []).map((row) => [row.turnId, row] as const));\n return [...detail.turns].sort(compareTurns).map((turn) => {\n const navigationRow = navigationByTurn.get(turn.turnId);\n const interval = navigationRow?.timing.state === \"linked\"\n ? intervalById.get(navigationRow.timing.intervalId)\n : undefined;\n return {\n turnId: turn.turnId,\n sequence: turn.sequence,\n outcome: turn.outcome,\n ...(interval === undefined ? {} : { durationMs: interval.durationMs }),\n replies: Object.freeze([...(itemsByTurn.get(turn.turnId) ?? [])]\n .sort(compareItems)\n .map((item) => conversationReplyOf(item, callsById))),\n };\n });\n}\nfunction compareTurns(left: ClosedConversationDetail[\"turns\"][number], right: ClosedConversationDetail[\"turns\"][number]): number {\n return left.sequence - right.sequence || compareText(left.turnId, right.turnId);\n}\nfunction compareItems(left: ClosedConversationItem, right: ClosedConversationItem): number {\n return left.sequence - right.sequence || compareText(left.itemId, right.itemId);\n}\nexport function attemptConversationData(detail: ClosedConversationDetail | undefined, locator: AttemptLocator, timing?: ClosedTimingDetail, navigation?: SourceNavigationDomainDetail): AttemptConversationData | null {\n if (detail === undefined || (detail.turns.length === 0 && detail.items.length === 0))\n return null;\n return { locator, collection: detail.collection, rounds: roundsOf(detail, timing, navigation) };\n}\n// ───────────────────────── AttemptCommandEvidence ─────────────────────────\nexport function commandClassification(outcome: ClosedCommandEntry[\"result\"][\"outcome\"]): AttemptCommandClassification {\n if (outcome.kind === \"exited\")\n return outcome.exitCode === 0 ? \"succeeded\" : \"failed\";\n return \"observed\";\n}\nexport function commandExitCode(outcome: ClosedCommandEntry[\"result\"][\"outcome\"]): number {\n return outcome.kind === \"exited\" ? outcome.exitCode : -1;\n}\nexport function commandInvocationText(command: ClosedCommandEntry): string {\n const invocation = command.manifest.invocation;\n return invocation.kind === \"shell\"\n ? invocation.command\n : [invocation.executable, ...invocation.arguments].join(\" \");\n}\n/** 命令流 → 可渲染文本;blob 不可读或二进制时省略(不编造内容)。 */\nfunction commandStreamText(stream: ClosedCommandEntry[\"result\"][\"stdout\"]): string | undefined {\n if (stream.kind === \"inline\")\n return stream.text;\n if (stream.content.state === \"available\")\n return stream.content.text;\n return undefined;\n}\nexport function commandCardOf(command: ClosedCommandEntry): AttemptCommandCard {\n return {\n key: command.commandId,\n timingNodeId: command.commandId,\n phase: command.manifest.phase,\n display: commandInvocationText(command),\n exitCode: commandExitCode(command.result.outcome),\n classification: commandClassification(command.result.outcome),\n ...(commandStreamText(command.result.stdout) !== undefined\n ? { stdout: commandStreamText(command.result.stdout) }\n : {}),\n ...(commandStreamText(command.result.stderr) !== undefined\n ? { stderr: commandStreamText(command.result.stderr) }\n : {}),\n };\n}\n/** 独立命令证据投影;不依赖 Conversation 是否有事件轮次。 */\nexport function attemptCommandEvidenceData(detail: ClosedCommandsDetail | undefined, locator: AttemptLocator): AttemptCommandEvidenceData | null {\n if (detail === undefined || detail.entries.length === 0)\n return null;\n return {\n locator,\n collection: detail.collection,\n commands: detail.entries.map(commandCardOf),\n };\n}\n// ───────────────────────── AttemptDiagnostics ─────────────────────────\nexport function attemptDiagnosticsData(detail: ClosedDiagnosticsDetail | undefined): AttemptDiagnosticsData | null {\n if (detail === undefined || detail.diagnostics.length === 0)\n return null;\n const groups = new Map<string, AttemptDiagnosticView[]>();\n for (const diagnostic of detail.diagnostics) {\n const list = groups.get(diagnostic.phase);\n const view: AttemptDiagnosticView = {\n code: diagnostic.code,\n kind: diagnostic.kind,\n phase: diagnostic.phase,\n summary: diagnostic.summary,\n level: diagnostic.kind === \"execution-error\" ? \"error\" : \"warning\",\n causes: diagnostic.causes,\n redaction: diagnostic.redaction,\n sourceFrame: diagnostic.sourceFrame,\n };\n if (list)\n list.push(view);\n else\n groups.set(diagnostic.phase, [view]);\n }\n return {\n collection: detail.collection,\n groups: [...groups.entries()].map(([phase, items]) => ({ phase, items })),\n };\n}\n// ───────────────────────── UsageTable ─────────────────────────\n/** USD 面额的 observed provider-cost 合计;非 USD 不换汇,绝不是 Profile projection。 */\nexport function observedCostUSD(observations: readonly ClosedUsageObservation[]): number | undefined {\n let total: number | undefined;\n for (const observation of observations) {\n if (observation.kind !== \"provider-cost\" || observation.currency !== \"USD\")\n continue;\n const amount = Number.parseFloat(observation.amount);\n if (!Number.isFinite(amount))\n continue;\n total = total === undefined ? amount : total + amount;\n }\n return total;\n}\n/**\n * 组装口径单源:identity 字段恒有;turns/toolCalls 是 conversation ledger 派生;token /\n * 请求 / 成本事实来自闭合 usage 观测(词表开放,原样保留,不压进旧 Usage 字段)。\n * 三者全部缺失时返回 null——没有任何用量事实可摆。\n */\nexport function usageTableData(input: {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly identity: AttemptIdentityView;\n readonly verdict: VerdictState | \"unknown\";\n readonly conversation?: ClosedConversationDetail;\n readonly usage?: ClosedUsageDetail;\n}): UsageTableData | null {\n const { locator, experimentId, identity, verdict, conversation, usage } = input;\n const turns = conversation?.turns.length;\n const toolCalls = conversation?.items.filter((item) => item.kind === \"tool-call\").length;\n const observations = usage?.observations;\n if (turns === undefined && toolCalls === undefined && observations === undefined)\n return null;\n const observed = observations === undefined ? undefined : observedCostUSD(observations);\n return {\n locator,\n experimentId,\n evalId: identity.evalId,\n attempt: identity.attempt,\n verdict,\n ...(turns === undefined ? {} : { turns }),\n ...(toolCalls === undefined ? {} : { toolCalls }),\n ...(observations === undefined ? {} : { observations }),\n ...(observed === undefined ? {} : { observedCostUSD: observed }),\n };\n}\n// ───────────────────────── AttemptDiff ─────────────────────────\n/** 有界行 diff(公共前后缀修剪):对单区域编辑精确,复杂编辑给出上界近似。 */\nfunction lineDelta(before: string | undefined, after: string | undefined): {\n added: number;\n deleted: number;\n} {\n const a = before === undefined ? [] : before.split(\"\\n\");\n const b = after === undefined ? [] : after.split(\"\\n\");\n let prefix = 0;\n while (prefix < a.length && prefix < b.length && a[prefix] === b[prefix])\n prefix++;\n let suffix = 0;\n while (suffix < a.length - prefix && suffix < b.length - prefix && a[a.length - 1 - suffix] === b[b.length - 1 - suffix])\n suffix++;\n return { added: b.length - prefix - suffix, deleted: a.length - prefix - suffix };\n}\nconst MAX_HUNK_LINES = 200;\n/** 一个窗口内单文件的最小 unified hunk(公共前后缀修剪);超预算截断。 */\nfunction windowHunk(before: string | undefined, after: string | undefined): string {\n const a = before === undefined ? [] : before.replace(/\\n$/, \"\").split(\"\\n\");\n const b = after === undefined ? [] : after.replace(/\\n$/, \"\").split(\"\\n\");\n let prefix = 0;\n while (prefix < a.length && prefix < b.length && a[prefix] === b[prefix])\n prefix++;\n let suffix = 0;\n while (suffix < a.length - prefix && suffix < b.length - prefix && a[a.length - 1 - suffix] === b[b.length - 1 - suffix])\n suffix++;\n const removed = a.slice(prefix, a.length - suffix);\n const added = b.slice(prefix, b.length - suffix);\n const ctxBefore = a.slice(Math.max(0, prefix - 2), prefix);\n const start = Math.max(1, prefix - ctxBefore.length + 1);\n const lines = [`@@ -${start},${removed.length + ctxBefore.length} +${start},${added.length + ctxBefore.length} @@`];\n for (const line of ctxBefore)\n lines.push(` ${line}`);\n const shownRemoved = removed.slice(0, MAX_HUNK_LINES);\n const shownAdded = added.slice(0, MAX_HUNK_LINES);\n for (const line of shownRemoved)\n lines.push(`-${line}`);\n if (removed.length > shownRemoved.length)\n lines.push(`… (${removed.length - shownRemoved.length} more removed lines)`);\n for (const line of shownAdded)\n lines.push(`+${line}`);\n if (added.length > shownAdded.length)\n lines.push(`… (${added.length - shownAdded.length} more added lines)`);\n return lines.join(\"\\n\");\n}\nfunction endpointText(endpoint: ClosedFileChangeEndpoint): string | undefined {\n if (endpoint.state !== \"present\" || endpoint.revision.kind !== \"text\")\n return undefined;\n const content = endpoint.revision.content;\n if (content.state !== \"available\" || content.content.state !== \"available\")\n return undefined;\n return content.content.text;\n}\nfunction elidedReasonOf(endpoint: ClosedFileChangeEndpoint): \"binary\" | \"oversized-text\" | undefined {\n if (endpoint.state !== \"present\" || endpoint.revision.kind !== \"elided\")\n return undefined;\n return endpoint.revision.reason === \"binary\" ? \"binary\" : \"oversized-text\";\n}\nfunction endpointBytes(endpoint: ClosedFileChangeEndpoint): number | undefined {\n if (endpoint.state !== \"present\" || endpoint.revision.kind === \"unavailable\")\n return undefined;\n return endpoint.revision.byteLength;\n}\n/**\n * 净变化为 indeterminate 的路径不可证方向:不进 DiffFile 清单(不把不可证说成\n * modified);`collection.state === \"partial\"` 与 limitations 由组合层的 Callouts 交代。\n */\nexport function attemptDiffData(detail: FileChangesDomainDetail | undefined, locator: AttemptLocator): AttemptDiffData | null {\n if (detail === undefined)\n return null;\n const files: DiffFile[] = [];\n for (const pathEntry of detail.paths) {\n const net = pathEntry.net;\n if (net.state !== \"available\" || net.kind === \"none\")\n continue;\n const change = net.kind === \"created\" ? \"added\" : net.kind === \"deleted\" ? \"deleted\" : \"modified\";\n const touched = detail.trajectory.filter((window) => pathEntry.changes.some((ref) => ref.windowId === window.windowId));\n const windows: DiffFileWindow[] = [];\n for (const window of touched) {\n const changeIds = new Set(pathEntry.changes.filter((ref) => ref.windowId === window.windowId).map((ref) => ref.changeId));\n const changes = window.changes.filter((entry) => changeIds.has(entry.changeId));\n const patches = changes\n .map((entry) => {\n const before = entry.kind === \"created\" ? undefined : endpointText(entry.before);\n const after = entry.kind === \"deleted\" ? undefined : endpointText(entry.after);\n if (before === undefined && after === undefined)\n return undefined;\n return windowHunk(before, after);\n })\n .filter((patch): patch is string => patch !== undefined);\n windows.push({\n window: `window ${window.sequence}`,\n ...(patches.length > 0 ? { patch: patches.join(\"\\n\") } : {}),\n });\n }\n const beforeElided = elidedReasonOf(net.before);\n const afterElided = elidedReasonOf(net.after);\n const elided = beforeElided ?? afterElided;\n if (elided !== undefined) {\n files.push({\n path: pathEntry.path,\n change,\n added: 0,\n removed: 0,\n elided: {\n reason: elided,\n ...(endpointBytes(net.before) !== undefined ? { beforeBytes: endpointBytes(net.before) } : {}),\n ...(endpointBytes(net.after) !== undefined ? { afterBytes: endpointBytes(net.after) } : {}),\n },\n windows,\n });\n continue;\n }\n const before = net.kind === \"created\" ? undefined : endpointText(net.before);\n const after = net.kind === \"deleted\" ? undefined : endpointText(net.after);\n const lines = lineDelta(before, after);\n files.push({\n path: pathEntry.path,\n change,\n added: lines.added,\n removed: lines.deleted,\n windows,\n });\n }\n return { locator, collection: detail.collection, files };\n}\n// ───────────────────────── AttemptSource ─────────────────────────\n/** sourceSites 在 DomainView 边界是 JsonValue;这里做最小结构读取,读不到即跳过。 */\nfunction siteViewOf(value: JsonValue): AttemptSourceSiteView | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return undefined;\n const record = value as Readonly<Record<string, unknown>>;\n const entryId = record[\"entryId\"];\n const role = record[\"role\"];\n const sourceOrder = record[\"sourceOrder\"];\n const sourceItemId = record[\"sourceItemId\"];\n const sha256 = record[\"sha256\"];\n const start = record[\"start\"];\n const end = record[\"end\"];\n if (typeof entryId !== \"string\" ||\n typeof sourceOrder !== \"number\" ||\n !Number.isSafeInteger(sourceOrder) ||\n sourceOrder < 1 ||\n typeof role !== \"string\" ||\n typeof sourceItemId !== \"string\" ||\n typeof sha256 !== \"string\")\n return undefined;\n if (typeof start !== \"object\" || start === null || Array.isArray(start))\n return undefined;\n if (typeof end !== \"object\" || end === null || Array.isArray(end))\n return undefined;\n const startLine = (start as Readonly<Record<string, unknown>>)[\"line\"];\n const endLine = (end as Readonly<Record<string, unknown>>)[\"line\"];\n if (typeof startLine !== \"number\" || typeof endLine !== \"number\")\n return undefined;\n if (startLine < 1 || endLine < startLine)\n return undefined;\n return { entryId, sourceOrder, role, sourceItemId, sha256, startLine, endLine };\n}\nexport function attemptSourceData(input: {\n readonly locator: AttemptLocator;\n readonly items: readonly {\n readonly sourceItemId: string;\n readonly path: string;\n readonly sha256: string;\n readonly content: {\n readonly state: \"available\";\n readonly text: string;\n } | {\n readonly state: \"unavailable\" | \"binary\";\n };\n }[];\n readonly sourceSites: readonly JsonValue[];\n readonly entries: readonly AttemptAssertionView[];\n readonly navigation?: SourceNavigationDomainDetail;\n}): AttemptSourceData | null {\n const { locator, items, sourceSites, entries, navigation } = input;\n if (items.length === 0)\n return null;\n const knownEntryIds = new Set(entries.map((entry) => entry.entryId));\n const sites = sourceSites\n .map(siteViewOf)\n .filter((site): site is AttemptSourceSiteView => site !== undefined && knownEntryIds.has(site.entryId));\n const firstOrderByItem = new Map<string, number>();\n for (const site of sites) {\n const key = `${site.sourceItemId}:${site.sha256}`;\n const current = firstOrderByItem.get(key);\n if (current === undefined || site.sourceOrder < current)\n firstOrderByItem.set(key, site.sourceOrder);\n }\n for (const row of navigation?.rows ?? []) {\n if (row.source.state !== \"mapped\" || row.sourceOrder === null)\n continue;\n const key = `${row.source.sourceItemId}:${row.source.sha256}`;\n const current = firstOrderByItem.get(key);\n if (current === undefined || row.sourceOrder < current)\n firstOrderByItem.set(key, row.sourceOrder);\n }\n const referencedItems = items\n .filter((item) => firstOrderByItem.has(`${item.sourceItemId}:${item.sha256}`))\n .sort((left, right) => firstOrderByItem.get(`${left.sourceItemId}:${left.sha256}`)! -\n firstOrderByItem.get(`${right.sourceItemId}:${right.sha256}`)! ||\n compareText(left.path, right.path) ||\n compareText(left.sourceItemId, right.sourceItemId));\n if (referencedItems.length === 0)\n return null;\n return {\n locator,\n items: referencedItems.map((item) => ({\n sourceItemId: item.sourceItemId,\n path: item.path,\n sha256: item.sha256,\n lines: item.content.state === \"available\" ? item.content.text.replace(/\\n$/, \"\").split(\"\\n\") : [],\n ...(item.content.state !== \"available\" ? { unavailable: item.content.state } : {}),\n })),\n sites,\n entries,\n ...(navigation === undefined ? {} : { navigation }),\n };\n}\n// ───────────────────────── helpers ─────────────────────────\nexport function stableJson(value: JsonValue): string {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n return typeof value === \"string\" ? value : String(value);\n }\n if (typeof value === \"number\")\n return String(value);\n if (Array.isArray(value))\n return JSON.stringify(value);\n const keys = Object.keys(value).sort(compareText);\n if (keys.length === 0)\n return \"{}\";\n return `{${keys.map((key) => `${JSON.stringify(key)}:${stableJson((value as Readonly<Record<string, JsonValue>>)[key]!)}`).join(\",\")}}`;\n}\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"compute.js","sourceRoot":"","sources":["compute.ts"],"names":[],"mappings":"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","sourcesContent":["// Attempt 详情组件族的计算函数(docs/feature/reports/library.md)。\n// 输入全部是 Analysis 已关闭的 DomainView detail。每个 `attempt*Data(...)` 都是纯同步\n// 派生,只做展示与序列化所需取舍;不读文件、不 fetch、不持 Sample,不取得 Record reader、\n// path、AttemptHandle 或 Effect Scope,也不重复调用 DomainView 查询。\nimport type { AttemptLocator } from \"../../../attempt-locator.ts\";\nimport type { VerdictState } from \"../../../eval/record/verdict.ts\";\nimport type { AttemptEvidenceDomainDetail, ClosedCommandEntry, ClosedCommandsDetail, ClosedConversationDetail, ClosedConversationItem, ClosedDiagnosticsDetail, ClosedFileChangeEndpoint, ClosedFileChangesCollection, ClosedSourceFrame, ClosedTimingDetail, ClosedTimingInterval, ClosedTraceCollection, ClosedUsageDetail, ClosedUsageObservation, FileChangesDomainDetail, JsonValue, SourceNavigationDomainDetail, } from \"../../../analysis/index.ts\";\nimport type { DiffFile, DiffFileWindow } from \"../../definition/primitives/diff-lines.ts\";\n// ───────────────────────── 共享视图形状 ─────────────────────────\n/** 不可变身份元组的展示投影。 */\nexport interface AttemptIdentityView {\n readonly runId: string;\n readonly evalId: string;\n /** 零基 attempt 序号,显示时 +1。 */\n readonly attempt: number;\n}\n/**\n * 证据切面开关。由对应 DomainView 的 `available` entry 在不在判定;组合层在\n * 装配时投影,compute 只消费布尔值。\n */\nexport interface AttemptCapabilitiesView {\n readonly source: boolean;\n readonly execution: boolean;\n readonly timing: boolean;\n readonly diff: boolean;\n}\n// ───────────────────────── AttemptSummary(恒非空) ─────────────────────────\nexport interface AttemptSummaryData {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly identity: AttemptIdentityView;\n /**\n * 闭合证据里的 terminal verdict。当前闭合 DomainView 拿不到时是 \"unknown\",\n * 不伪装成 passed / skipped(「合法零值不是空值」同一条纪律)。\n */\n readonly verdict: VerdictState | \"unknown\";\n /** 闭合视图不携带 attempt 墙钟开始时间;未知时省略。 */\n readonly startedAt?: string;\n /** timing 区间记录的 attempt 时钟跨度;没有 timing 证据时为 null。 */\n readonly durationMs: number | null;\n /** 历史 observed provider-cost 的 USD 面额合计;不是 Report Profile projection。 */\n readonly observedCostUSD?: number;\n readonly capabilities: AttemptCapabilitiesView;\n /** 计分制 attempt 的本轮挣分;通过制省略。 */\n readonly totalScore?: number;\n}\n/**\n * 断言评分贡献的闭合形状:sealed result 的 `score` 只在这两种状态里出现。\n * `earned` 是本轮实际挣分,`points` 是该项可得分。\n */\nexport interface AttemptScoreView {\n readonly state: \"earned\" | \"unavailable\";\n readonly points: number;\n readonly earned?: number;\n}\n/** 闭合断言 entry 的展示投影。 */\nexport interface AttemptAssertionView {\n readonly entryId: string;\n readonly name: string;\n /** sealed gate 投影:failed / unavailable 是 gate,其余是 soft。 */\n readonly severity: \"gate\" | \"soft\";\n readonly outcome: \"passed\" | \"failed\" | \"unavailable\";\n readonly groupPath: readonly string[];\n /** 展示层预拼好的判定详情(原因 / coverage / limitations / diagnostic)。 */\n readonly detail: string;\n /** 得分点贡献;没有 score 贡献时整字段省略。 */\n readonly score?: AttemptScoreView;\n}\n// ───────────────────────── AttemptError ─────────────────────────\nexport interface AttemptErrorData {\n readonly code: string;\n readonly message: string;\n readonly phase: string;\n readonly locator: AttemptLocator;\n readonly commandEvidenceHint?: true;\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\nexport interface AttemptAssertionsData {\n /** 非 passed 与得分点(含 passed):平铺列表。 */\n readonly attention: readonly AttemptAssertionView[];\n /** 无得分点的 passed 断言按 `groupPath.join(\" > \")` 收纳。 */\n readonly passedGroups: readonly {\n readonly group: string;\n readonly items: readonly AttemptAssertionView[];\n }[];\n /** 得分点挣满计数(\"2/5 得分点挣满\"):挣满 = earned === points。 */\n readonly scorePointsEarned?: {\n readonly earned: number;\n readonly total: number;\n };\n /** 计分制本轮挣分合计;通过制省略。 */\n readonly totalScore?: number;\n /** 题型判定:看 sealed score 状态,不从显示形状推断。 */\n readonly evaluationKind: \"pass\" | \"points\";\n}\n// ───────────────────────── AttemptFixPrompt ─────────────────────────\nexport interface AttemptFixPromptData {\n readonly prompt: string;\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\n/** 当前闭合视图以 ClosedTimingInterval 树表示时间线。 */\nexport interface AttemptTimelineData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedTraceCollection;\n readonly intervals: readonly ClosedTimingInterval[];\n}\nexport interface AttemptTraceData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedTraceCollection;\n readonly intervals: readonly ClosedTimingInterval[];\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\nexport type AttemptConversationReply = {\n readonly kind: \"assistant\";\n readonly text: string;\n} | {\n readonly kind: \"user\";\n readonly text: string;\n} | {\n readonly kind: \"thinking\";\n readonly text: string;\n} | {\n readonly kind: \"error\";\n readonly text: string;\n} | {\n readonly kind: \"context\";\n readonly text: string;\n} | {\n readonly kind: \"skill\";\n readonly skill: string;\n readonly text?: string;\n} | {\n readonly kind: \"input\";\n readonly request: AttemptInputRequestView;\n} | {\n readonly kind: \"compaction\";\n readonly text: string;\n} | {\n readonly kind: \"tool\";\n readonly callId: string;\n readonly name: string;\n readonly inputSummary: string;\n readonly outputSummary?: string;\n readonly outcome?: \"completed\" | \"rejected\" | \"failed\" | \"cancelled\";\n readonly failed?: boolean;\n} | {\n readonly kind: \"subagent\";\n readonly name: string;\n readonly state: \"started\" | \"completed\" | \"failed\";\n readonly summary: string;\n readonly failed?: boolean;\n};\nexport interface AttemptInputRequestView {\n readonly state: \"requested\" | \"answered\" | \"cancelled\";\n readonly promptSummary: string;\n readonly responseSummary: string | null;\n}\nexport interface AttemptConversationRound {\n readonly turnId: string;\n readonly sequence: number;\n readonly outcome: \"completed\" | \"failed\" | \"cancelled\" | \"interrupted\";\n readonly durationMs?: number;\n readonly replies: readonly AttemptConversationReply[];\n}\nexport interface AttemptConversationData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedTraceCollection;\n readonly rounds: readonly AttemptConversationRound[];\n}\n// ───────────────────────── AttemptCommandEvidence ─────────────────────────\n/** 展示层唯一的命令分类规则;当前闭合视图只保存 outcome,没有 checked 语义。 */\nexport type AttemptCommandClassification = \"succeeded\" | \"observed\" | \"failed\";\nexport interface AttemptCommandCard {\n readonly key: string;\n /** 闭合视图没有命令 ↔ timing 节点的关联,这里用命令自身身份保持稳定键。 */\n readonly timingNodeId: string;\n readonly phase: string;\n readonly display: string;\n readonly exitCode: number;\n readonly classification: AttemptCommandClassification;\n readonly stdout?: string;\n readonly stderr?: string;\n}\nexport interface AttemptCommandEvidenceData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedTraceCollection;\n readonly commands: readonly AttemptCommandCard[];\n}\n// ───────────────────────── AttemptDiagnostics ─────────────────────────\nexport interface AttemptDiagnosticView {\n readonly code: string;\n readonly kind: \"advisory\" | \"execution-error\";\n readonly phase: string;\n readonly summary: string;\n readonly level: \"warning\" | \"error\";\n readonly causes: readonly {\n readonly code: string;\n readonly summary: string;\n }[];\n readonly redaction: {\n readonly state: \"none\";\n } | {\n readonly state: \"applied\";\n readonly replacements: number;\n };\n readonly sourceFrame: ClosedSourceFrame | null;\n}\nexport interface AttemptDiagnosticsData {\n readonly collection: ClosedTraceCollection;\n readonly groups: readonly {\n readonly phase: string;\n readonly items: readonly AttemptDiagnosticView[];\n }[];\n}\n// ───────────────────────── UsageTable ─────────────────────────\nexport interface UsageTableData {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly evalId: string;\n readonly attempt: number;\n readonly verdict: VerdictState | \"unknown\";\n /** conversation ledger 派生的轮数;没有 conversation 证据时整对省略。 */\n readonly turns?: number;\n readonly toolCalls?: number;\n /** 闭合 usage 观测原样保留(provider 与 bucket 词表开放,不压进假字段)。 */\n readonly observations?: readonly ClosedUsageObservation[];\n /** provider-cost 中的历史 observed USD 面额合计;没有可合计金额时省略。 */\n readonly observedCostUSD?: number;\n}\n// ───────────────────────── AttemptDiff ─────────────────────────\nexport interface AttemptDiffData {\n readonly locator: AttemptLocator;\n readonly collection: ClosedFileChangesCollection;\n /** 有证据但 agent 一个文件都没有可证净改动时是空清单(不是 null)。 */\n readonly files: readonly DiffFile[];\n}\n// ───────────────────────── AttemptSource ─────────────────────────\nexport interface AttemptSourceItemView {\n readonly sourceItemId: string;\n readonly path: string;\n readonly sha256: string;\n readonly lines: readonly string[];\n /** 内容不可渲染时是明确的缺失标记,不编造行。 */\n readonly unavailable?: \"unavailable\" | \"binary\";\n}\nexport interface AttemptSourceSiteView {\n readonly entryId: string;\n readonly sourceOrder: number;\n readonly role: string;\n readonly sourceItemId: string;\n readonly sha256: string;\n readonly startLine: number;\n readonly endLine: number;\n}\nexport interface AttemptSourceData {\n readonly locator: AttemptLocator;\n /** 第一个 item 是 spine,其余是 detached。 */\n readonly items: readonly AttemptSourceItemView[];\n readonly sites: readonly AttemptSourceSiteView[];\n readonly entries: readonly AttemptAssertionView[];\n readonly navigation?: SourceNavigationDomainDetail;\n}\n// ───────────────────────── AttemptSummary ─────────────────────────\nexport function attemptSummaryData(input: {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly identity: AttemptIdentityView;\n readonly verdict: VerdictState | \"unknown\";\n readonly startedAt?: string;\n readonly durationMs: number | null;\n readonly observedCostUSD?: number;\n readonly capabilities: AttemptCapabilitiesView;\n readonly totalScore?: number;\n}): AttemptSummaryData {\n return {\n locator: input.locator,\n experimentId: input.experimentId,\n identity: input.identity,\n verdict: input.verdict,\n ...(input.startedAt === undefined ? {} : { startedAt: input.startedAt }),\n durationMs: input.durationMs,\n ...(input.observedCostUSD === undefined ? {} : { observedCostUSD: input.observedCostUSD }),\n capabilities: input.capabilities,\n ...(input.totalScore === undefined ? {} : { totalScore: input.totalScore }),\n };\n}\n// ───────────────────────── AttemptError ─────────────────────────\n/**\n * `message` 疑似只剩某条失败命令 stdout/stderr 的截断尾部:去首尾空白后,严格短于该字段\n * 且是它的后缀。严格短于(不是 `<=`)排除「message 恰好等于完整字段」的场景:那种情况\n * 没有被截掉的内容,提示「还有更多证据」是误导。\n */\nfunction looksLikeTruncatedCommandTail(message: string, commands: readonly AttemptCommandCard[]): boolean {\n const trimmed = message.trim();\n if (!trimmed)\n return false;\n return commands.filter((command) => command.classification === \"failed\").some((command) => [command.stdout, command.stderr].some((field) => {\n const full = (field ?? \"\").trim();\n return full.length > trimmed.length && full.endsWith(trimmed);\n }));\n}\n/**\n * 执行级错误投影:outcome 非 completed,或闭合 diagnostics 里有 execution-error。\n * 当前闭合视图没有旧 Record 的 AttemptError 结构,这两处是唯一的闭合事实来源。\n */\nexport function attemptErrorData(input: {\n readonly locator: AttemptLocator;\n readonly outcome: AttemptEvidenceDomainDetail[\"outcome\"];\n readonly diagnostics?: ClosedDiagnosticsDetail;\n readonly commands?: readonly AttemptCommandCard[];\n}): AttemptErrorData | null {\n const executionError = input.diagnostics?.diagnostics.find((diagnostic) => diagnostic.kind === \"execution-error\");\n const interrupted = input.outcome === \"errored\" || input.outcome === \"interrupted\";\n if (!interrupted && executionError === undefined)\n return null;\n const code = executionError?.code ?? `execution.${input.outcome}`;\n const message = executionError?.summary ?? \"Attempt execution did not complete.\";\n const phase = executionError?.phase ?? \"attempt\";\n const commands = input.commands;\n const hint = commands !== undefined && commands.length > 0 &&\n looksLikeTruncatedCommandTail(message, commands);\n return {\n code,\n message,\n phase,\n locator: input.locator,\n ...(hint ? { commandEvidenceHint: true as const } : {}),\n };\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\n/**\n * sealed 断言 entry 的结构读取形状。DomainView 边界把整条 entry 声明成 JsonValue,\n * 展示层按已知 sealed 形状做最小结构读取(与 sourceSites 的 siteViewOf 同一条纪律):\n * 读不到的字段省略、读不懂的 entry 跳过,前向兼容,不伪造事实。\n */\nexport interface SealedAssertionEntryView {\n readonly entryId: string;\n readonly display: SealedAssertionDisplayView;\n readonly result: SealedAssertionResultView;\n readonly coverage: SealedAssertionCoverageView;\n readonly limitations: readonly SealedAssertionLimitationView[];\n}\nexport interface SealedAssertionDisplayView {\n readonly label?: string;\n readonly key?: string;\n readonly groupPath: readonly string[];\n}\nexport interface SealedAssertionCoverageView {\n readonly state: \"complete\" | \"partial\" | \"unavailable\" | \"not-applicable\";\n readonly reason?: string;\n}\nexport interface SealedAssertionLimitationView {\n readonly kind: string;\n}\nexport interface SealedAssertionResultView {\n readonly state: \"matched\" | \"mismatched\" | \"unavailable\" | \"errored\";\n readonly reason?: string;\n readonly gate: \"not-gate\" | \"satisfied\" | \"failed\" | \"unavailable\";\n readonly score: SealedAssertionScoreView;\n readonly diagnostic?: JsonValue;\n}\nexport interface SealedAssertionScoreView {\n readonly state: \"not-scored\" | \"earned\" | \"unavailable\";\n readonly earned?: number;\n readonly points?: number;\n}\nfunction jsonRecordOf(value: JsonValue | undefined): Readonly<Record<string, JsonValue>> | undefined {\n if (value === undefined || typeof value !== \"object\" || value === null || Array.isArray(value))\n return undefined;\n return value as Readonly<Record<string, JsonValue>>;\n}\nfunction jsonStringOf(record: Readonly<Record<string, JsonValue>>, key: string): string | undefined {\n const value = record[key];\n return typeof value === \"string\" ? value : undefined;\n}\nfunction jsonNumberOf(record: Readonly<Record<string, JsonValue>>, key: string): number | undefined {\n const value = record[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\nfunction jsonStringArrayOf(record: Readonly<Record<string, JsonValue>>, key: string): readonly string[] | undefined {\n const value = record[key];\n if (!Array.isArray(value))\n return undefined;\n const items: string[] = [];\n for (const item of value) {\n if (typeof item !== \"string\")\n return undefined;\n items.push(item);\n }\n return items;\n}\n/** 整条 sealed assertion entry 的结构读取;读不懂(形状不符)返回 undefined,调用方跳过。 */\nexport function assertionEntryViewOf(value: JsonValue): SealedAssertionEntryView | undefined {\n const record = jsonRecordOf(value);\n if (record === undefined)\n return undefined;\n const entryId = jsonStringOf(record, \"entryId\");\n const display = jsonRecordOf(record[\"display\"]);\n const result = jsonRecordOf(record[\"result\"]);\n const coverage = jsonRecordOf(record[\"coverage\"]);\n if (entryId === undefined || display === undefined || result === undefined || coverage === undefined)\n return undefined;\n const state = jsonStringOf(result, \"state\");\n const gate = jsonStringOf(result, \"gate\");\n const score = jsonRecordOf(result[\"score\"]);\n if (state === undefined || gate === undefined || score === undefined)\n return undefined;\n if (state !== \"matched\" && state !== \"mismatched\" && state !== \"unavailable\" && state !== \"errored\")\n return undefined;\n if (gate !== \"not-gate\" && gate !== \"satisfied\" && gate !== \"failed\" && gate !== \"unavailable\")\n return undefined;\n const scoreState = jsonStringOf(score, \"state\");\n if (scoreState !== \"not-scored\" && scoreState !== \"earned\" && scoreState !== \"unavailable\")\n return undefined;\n const coverageState = jsonStringOf(coverage, \"state\");\n if (coverageState !== \"complete\" && coverageState !== \"partial\" &&\n coverageState !== \"unavailable\" && coverageState !== \"not-applicable\")\n return undefined;\n const limitations: SealedAssertionLimitationView[] = [];\n const rawLimitations = Array.isArray(record[\"limitations\"]) ? record[\"limitations\"] : [];\n for (const item of rawLimitations) {\n const kind = jsonStringOf(jsonRecordOf(item) ?? {}, \"kind\");\n if (kind !== undefined)\n limitations.push({ kind });\n }\n const earned = jsonNumberOf(score, \"earned\");\n const points = jsonNumberOf(score, \"points\");\n return {\n entryId,\n display: {\n ...(jsonStringOf(display, \"label\") === undefined ? {} : { label: jsonStringOf(display, \"label\") }),\n ...(jsonStringOf(display, \"key\") === undefined ? {} : { key: jsonStringOf(display, \"key\") }),\n groupPath: jsonStringArrayOf(display, \"groupPath\") ?? [],\n },\n result: {\n state,\n ...(jsonStringOf(result, \"reason\") === undefined ? {} : { reason: jsonStringOf(result, \"reason\") }),\n gate,\n score: {\n state: scoreState,\n ...(earned === undefined ? {} : { earned }),\n ...(points === undefined ? {} : { points }),\n },\n ...(result[\"diagnostic\"] === undefined ? {} : { diagnostic: result[\"diagnostic\"] }),\n },\n coverage: {\n state: coverageState,\n ...(jsonStringOf(coverage, \"reason\") === undefined ? {} : { reason: jsonStringOf(coverage, \"reason\") }),\n },\n limitations,\n };\n}\n/** sealed result → 展示 outcome;errored 归 failed,理由留在 detail。 */\nfunction assertionOutcomeOf(entry: SealedAssertionEntryView): AttemptAssertionView[\"outcome\"] {\n const state = entry.result.state;\n if (state === \"matched\")\n return \"passed\";\n if (state === \"mismatched\" || state === \"errored\")\n return \"failed\";\n return \"unavailable\";\n}\nfunction assertionSeverityOf(entry: SealedAssertionEntryView): AttemptAssertionView[\"severity\"] {\n return entry.result.gate === \"failed\" || entry.result.gate === \"unavailable\" ? \"gate\" : \"soft\";\n}\nfunction scoreOf(entry: SealedAssertionEntryView): AttemptScoreView | undefined {\n const score = entry.result.score;\n if (score.state === \"not-scored\")\n return undefined;\n return {\n state: score.state,\n points: score.points ?? 0,\n ...(score.state === \"earned\" ? { earned: score.earned ?? 0 } : {}),\n };\n}\nfunction diagnosticLocatorText(record: Readonly<Record<string, JsonValue>>): string | undefined {\n const locator = jsonRecordOf(record[\"locator\"]);\n if (locator === undefined)\n return undefined;\n const kind = jsonStringOf(locator, \"kind\");\n if (kind === \"json-pointer\") {\n const pointer = jsonStringOf(locator, \"pointer\");\n return pointer === undefined ? undefined : `location: ${pointer}`;\n }\n if (kind === \"tool-occurrence\") {\n const id = jsonStringOf(locator, \"id\");\n return id === undefined ? undefined : `location: tool occurrence ${id}`;\n }\n return undefined;\n}\nfunction childDiagnostics(record: Readonly<Record<string, JsonValue>>): readonly Readonly<Record<string, JsonValue>>[] {\n const children = record[\"children\"];\n if (!Array.isArray(children))\n return [];\n return children.flatMap((child) => {\n const childRecord = jsonRecordOf(child);\n const diagnostic = childRecord === undefined ? undefined : jsonRecordOf(childRecord[\"diagnostic\"]);\n return diagnostic === undefined ? [] : [diagnostic];\n });\n}\nfunction pathWitnessOf(record: Readonly<Record<string, JsonValue>>): Readonly<Record<string, JsonValue>> | undefined {\n for (const child of childDiagnostics(record)) {\n if (jsonStringOf(child, \"code\") === \"path-reference-match\")\n return child;\n const nested = pathWitnessOf(child);\n if (nested !== undefined)\n return nested;\n }\n return undefined;\n}\nfunction diagnosticWasTruncated(record: Readonly<Record<string, JsonValue>>): boolean {\n if (jsonStringOf(record, \"code\") === \"diagnostic-truncated\" || record[\"truncation\"] !== undefined)\n return true;\n return childDiagnostics(record).some(diagnosticWasTruncated);\n}\nfunction diagnosticSummary(value: JsonValue): string {\n const record = jsonRecordOf(value);\n if (record === undefined)\n return stableJson(value);\n const message = jsonStringOf(record, \"message\");\n if (message === undefined)\n return stableJson(value);\n const parts = [message];\n const expected = jsonStringOf(record, \"expected\");\n const received = jsonStringOf(record, \"received\");\n const reason = jsonStringOf(record, \"reason\");\n if (expected !== undefined)\n parts.push(`expected: ${expected}`);\n if (received !== undefined)\n parts.push(`received: ${received}`);\n if (reason !== undefined)\n parts.push(`diagnostic reason: ${reason}`);\n const locator = diagnosticLocatorText(record);\n if (locator !== undefined)\n parts.push(locator);\n const witness = pathWitnessOf(record);\n if (witness !== undefined) {\n const witnessMessage = jsonStringOf(witness, \"message\");\n const witnessExpected = jsonStringOf(witness, \"expected\");\n const witnessLocator = diagnosticLocatorText(witness);\n if (witnessMessage !== undefined)\n parts.push(witnessMessage);\n if (witnessExpected !== undefined)\n parts.push(`expected: ${witnessExpected}`);\n if (witnessLocator !== undefined)\n parts.push(witnessLocator);\n }\n if (diagnosticWasTruncated(record))\n parts.push(\"diagnostic details truncated\");\n return parts.join(\" · \");\n}\n/** 展示层预拼的判定详情;字段全闭合,不把 matcher diagnostic tree 当作文案。 */\nexport function assertionDetailOf(entry: SealedAssertionEntryView): string {\n const parts: string[] = [];\n if (entry.result.state === \"mismatched\")\n parts.push(`reason: ${entry.result.reason}`);\n if (entry.result.state === \"unavailable\")\n parts.push(`reason: ${entry.result.reason}`);\n if (entry.result.state === \"errored\")\n parts.push(`reason: ${entry.result.reason}`);\n if (entry.coverage.state !== \"complete\") {\n parts.push(`coverage: ${entry.coverage.state}${entry.coverage.reason === undefined ? \"\" : ` (${entry.coverage.reason})`}`);\n }\n for (const limitation of entry.limitations) {\n parts.push(`limitations: ${limitation.kind}`);\n }\n if (entry.result.diagnostic !== undefined) {\n parts.push(`diagnostic: ${diagnosticSummary(entry.result.diagnostic)}`);\n }\n return parts.join(\" · \");\n}\nfunction assertionNameOf(entry: SealedAssertionEntryView): string {\n const display = entry.display;\n if (display.label !== undefined && display.label.length > 0)\n return display.label;\n if (display.key !== undefined && display.key.length > 0)\n return display.key;\n return entry.entryId;\n}\nexport function assertionViewOf(entry: SealedAssertionEntryView): AttemptAssertionView {\n const score = scoreOf(entry);\n return {\n entryId: entry.entryId,\n name: assertionNameOf(entry),\n severity: assertionSeverityOf(entry),\n outcome: assertionOutcomeOf(entry),\n groupPath: entry.display.groupPath,\n detail: assertionDetailOf(entry),\n ...(score === undefined ? {} : { score }),\n };\n}\n/** 按 `groupPath.join(\" > \")` 分组(无分组归到空键 \"\"),组内保持传入顺序。 */\nfunction groupByPath<T extends {\n groupPath?: readonly string[];\n}>(items: readonly T[]): {\n group: string;\n items: T[];\n}[] {\n const groups = new Map<string, T[]>();\n for (const item of items) {\n const key = item.groupPath?.join(\" > \") ?? \"\";\n const list = groups.get(key);\n if (list)\n list.push(item);\n else\n groups.set(key, [item]);\n }\n return [...groups.entries()].map(([group, items]) => ({ group, items }));\n}\n/**\n * 得分点挣满计数:分母是全部带 score 贡献的断言;挣满 = earned === points。\n * 得分点(带 score)豁免 passed 收纳:即使 passed 也进平铺列表。\n */\nfunction scorePointsEarnedOf(assertions: readonly AttemptAssertionView[]): {\n earned: number;\n total: number;\n} | undefined {\n const scorePoints = assertions.filter((assertion) => assertion.score !== undefined);\n if (scorePoints.length === 0)\n return undefined;\n const earned = scorePoints.filter((assertion) => assertion.score !== undefined && assertion.score.earned !== undefined &&\n assertion.score.earned === assertion.score.points).length;\n return { earned, total: scorePoints.length };\n}\nexport function attemptAssertionsData(detail: AttemptEvidenceDomainDetail | undefined): AttemptAssertionsData | null {\n if (detail === undefined)\n return null;\n const entries = detail.entries\n .map(assertionEntryViewOf)\n .filter((entry): entry is SealedAssertionEntryView => entry !== undefined);\n if (entries.length === 0)\n return null;\n const assertions = entries.map(assertionViewOf);\n const attentionBase = assertions.filter((assertion) => assertion.outcome !== \"passed\" || assertion.score !== undefined);\n const passed = assertions.filter((assertion) => assertion.outcome === \"passed\" && assertion.score === undefined);\n const scorePointsEarned = scorePointsEarnedOf(assertions);\n const scored = assertions.filter((assertion) => assertion.score !== undefined);\n const totalScore = scored.length === 0 ? undefined : scored.reduce((sum, assertion) => sum + (assertion.score!.state === \"earned\" && assertion.score!.earned !== undefined\n ? assertion.score!.earned\n : 0), 0);\n const evaluationKind = assertions.some((assertion) => assertion.score !== undefined)\n ? \"points\"\n : \"pass\";\n return {\n attention: attentionBase,\n passedGroups: groupByPath(passed),\n ...(scorePointsEarned ? { scorePointsEarned } : {}),\n ...(totalScore === undefined ? {} : { totalScore }),\n evaluationKind,\n };\n}\n// ───────────────────────── AttemptFixPrompt ─────────────────────────\n/**\n * 单条 attempt 版的批量修复 prompt(与 CopyFixPrompt 的多条版本同一份步骤文案)。三态:\n * 计分制丢分或中止 → 非 null(围绕丢分检查点组装);计分制挣满且未中止、或通过制 passed\n * → null;skipped 恒 null。\n */\nexport function attemptFixPromptData(input: {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly evalId: string;\n readonly verdict: VerdictState | \"unknown\";\n readonly evaluationKind: \"pass\" | \"points\";\n readonly assertions: readonly AttemptAssertionView[];\n}): AttemptFixPromptData | null {\n const { locator, experimentId, evalId, verdict, evaluationKind, assertions } = input;\n if (verdict === \"skipped\" || verdict === \"unknown\")\n return null;\n // 通过制 passed 恒 null;计分制 passed 是否可操作看有没有丢分。\n if (verdict === \"passed\" && evaluationKind !== \"points\")\n return null;\n const failures = assertions.filter((assertion) => assertion.outcome === \"failed\");\n const lost = assertions.filter((assertion) => assertion.score !== undefined && assertion.score.state === \"earned\" &&\n assertion.score.earned !== undefined && assertion.score.earned < assertion.score.points);\n // 计分制 passed 但有丢分:可操作失败,但这条 attempt 并没有\"失败\"——措辞分开。\n const lostPoints = verdict === \"passed\" && evaluationKind === \"points\";\n if (lostPoints) {\n if (lost.length === 0)\n return null;\n }\n else if (failures.length === 0) {\n return null;\n }\n const first = lostPoints ? lost[0]! : failures[0]!;\n const more = (lostPoints ? lost.length : failures.length) - 1;\n const moreNoun = lostPoints ? \"lost points\" : \"failures\";\n const summary = lostPoints\n ? `${first.name}: ${first.score!.earned ?? 0}/${first.score!.points}`\n : first.name;\n const reason = more > 0 ? `${summary} (+${more} more ${moreNoun})` : summary;\n const prompt = [\n lostPoints\n ? \"Recover the lost points on this NiceEval points eval.\"\n : \"Fix the failing eval from this niceeval run.\",\n \"\",\n lostPoints ? \"## Lost points\" : \"## Failure\",\n `eval \"${evalId}\" [experiment ${experimentId}] — ${verdict}`,\n ` reason: ${reason}`,\n ` inspect: niceeval show ${locator}`,\n \"\",\n \"## Steps\",\n \"1. niceeval is NOT in your training data. Read the relevant guide in `node_modules/niceeval/docs-site/` (English at the top level, Chinese under `zh/`) before changing anything.\",\n \"2. Run the inspect command above with `--source`, `--execution`, `--timing`, and `--diff` to see the assertions, transcript, timing, and workspace diff.\",\n \"3. Decide which side the defect is on: the program under test, or the eval itself (over-tight assertion, wrong fixture, missing setup). Fix that side; do not weaken assertions just to turn the run green.\",\n `4. Re-run: \\`npx niceeval exp ${experimentId} ${evalId}\\`. Already-passing evals are skipped by the fingerprint cache; pass \\`--rerun all\\` to re-run everything.`,\n lostPoints\n ? \"5. Run `npx niceeval show` and confirm the score improved.\"\n : \"5. Run `npx niceeval show` and confirm this failure is gone.\",\n ].join(\"\\n\");\n return { prompt };\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\nexport function attemptTimelineData(detail: ClosedTimingDetail | undefined, locator: AttemptLocator): AttemptTimelineData | null {\n if (detail === undefined || detail.intervals.length === 0)\n return null;\n return { locator, collection: detail.collection, intervals: detail.intervals };\n}\nexport function attemptTraceData(detail: ClosedTimingDetail | undefined, locator: AttemptLocator): AttemptTraceData | null {\n if (detail === undefined || detail.intervals.length === 0)\n return null;\n return { locator, collection: detail.collection, intervals: detail.intervals };\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\nfunction conversationReplyOf(item: ClosedConversationItem, callsById: ReadonlyMap<string, Extract<ClosedConversationItem, {\n kind: \"tool-call\";\n}>>): AttemptConversationReply {\n switch (item.kind) {\n case \"message\":\n return item.role === \"assistant\"\n ? { kind: \"assistant\", text: item.text }\n : { kind: \"user\", text: item.text };\n case \"tool-call\":\n return { kind: \"tool\", callId: item.callId, name: item.tool, inputSummary: item.inputSummary };\n case \"tool-result\": {\n const call = callsById.get(item.callId);\n return {\n kind: \"tool\",\n callId: item.callId,\n name: call?.tool ?? item.callId,\n inputSummary: call?.inputSummary ?? \"\",\n outputSummary: item.outputSummary,\n outcome: item.outcome,\n failed: item.outcome === \"failed\" || item.outcome === \"rejected\",\n };\n }\n case \"thinking-summary\":\n return { kind: \"thinking\", text: item.summary };\n case \"compaction\":\n return { kind: \"compaction\", text: item.summary };\n case \"context-injection\":\n return { kind: \"context\", text: item.summary };\n case \"subagent\":\n return {\n kind: \"subagent\",\n name: item.label,\n state: item.state,\n summary: item.summary,\n failed: item.state === \"failed\",\n };\n case \"input-request\":\n return {\n kind: \"input\",\n request: {\n state: item.state,\n promptSummary: item.promptSummary,\n responseSummary: item.responseSummary,\n },\n };\n case \"skill-load\":\n return { kind: \"skill\", skill: item.code, text: item.summary };\n case \"conversation-error\":\n return { kind: \"error\", text: `${item.code}: ${item.summary}` };\n }\n}\nfunction roundsOf(detail: ClosedConversationDetail, timing?: ClosedTimingDetail, navigation?: SourceNavigationDomainDetail): readonly AttemptConversationRound[] {\n const itemsByTurn = new Map<string, ClosedConversationItem[]>();\n const callsById = new Map<string, Extract<ClosedConversationItem, {\n kind: \"tool-call\";\n }>>();\n for (const item of detail.items) {\n const items = itemsByTurn.get(item.turnId) ?? [];\n items.push(item);\n itemsByTurn.set(item.turnId, items);\n if (item.kind === \"tool-call\")\n callsById.set(item.callId, item);\n }\n const intervalById = new Map((timing?.intervals ?? []).map((interval) => [interval.intervalId, interval] as const));\n const navigationByTurn = new Map((navigation?.rows ?? []).map((row) => [row.turnId, row] as const));\n return [...detail.turns].sort(compareTurns).map((turn) => {\n const navigationRow = navigationByTurn.get(turn.turnId);\n const interval = navigationRow?.timing.state === \"linked\"\n ? intervalById.get(navigationRow.timing.intervalId)\n : undefined;\n return {\n turnId: turn.turnId,\n sequence: turn.sequence,\n outcome: turn.outcome,\n ...(interval === undefined ? {} : { durationMs: interval.durationMs }),\n replies: Object.freeze([...(itemsByTurn.get(turn.turnId) ?? [])]\n .sort(compareItems)\n .map((item) => conversationReplyOf(item, callsById))),\n };\n });\n}\nfunction compareTurns(left: ClosedConversationDetail[\"turns\"][number], right: ClosedConversationDetail[\"turns\"][number]): number {\n return left.sequence - right.sequence || compareText(left.turnId, right.turnId);\n}\nfunction compareItems(left: ClosedConversationItem, right: ClosedConversationItem): number {\n return left.sequence - right.sequence || compareText(left.itemId, right.itemId);\n}\nexport function attemptConversationData(detail: ClosedConversationDetail | undefined, locator: AttemptLocator, timing?: ClosedTimingDetail, navigation?: SourceNavigationDomainDetail): AttemptConversationData | null {\n if (detail === undefined || (detail.turns.length === 0 && detail.items.length === 0))\n return null;\n return { locator, collection: detail.collection, rounds: roundsOf(detail, timing, navigation) };\n}\n// ───────────────────────── AttemptCommandEvidence ─────────────────────────\nexport function commandClassification(outcome: ClosedCommandEntry[\"result\"][\"outcome\"]): AttemptCommandClassification {\n if (outcome.kind === \"exited\")\n return outcome.exitCode === 0 ? \"succeeded\" : \"failed\";\n return \"observed\";\n}\nexport function commandExitCode(outcome: ClosedCommandEntry[\"result\"][\"outcome\"]): number {\n return outcome.kind === \"exited\" ? outcome.exitCode : -1;\n}\nexport function commandInvocationText(command: ClosedCommandEntry): string {\n const invocation = command.manifest.invocation;\n return invocation.kind === \"shell\"\n ? invocation.command\n : [invocation.executable, ...invocation.arguments].join(\" \");\n}\n/** 命令流 → 可渲染文本;blob 不可读或二进制时省略(不编造内容)。 */\nfunction commandStreamText(stream: ClosedCommandEntry[\"result\"][\"stdout\"]): string | undefined {\n if (stream.kind === \"inline\")\n return stream.text;\n if (stream.content.state === \"available\")\n return stream.content.text;\n return undefined;\n}\nexport function commandCardOf(command: ClosedCommandEntry): AttemptCommandCard {\n return {\n key: command.commandId,\n timingNodeId: command.commandId,\n phase: command.manifest.phase,\n display: commandInvocationText(command),\n exitCode: commandExitCode(command.result.outcome),\n classification: commandClassification(command.result.outcome),\n ...(commandStreamText(command.result.stdout) !== undefined\n ? { stdout: commandStreamText(command.result.stdout) }\n : {}),\n ...(commandStreamText(command.result.stderr) !== undefined\n ? { stderr: commandStreamText(command.result.stderr) }\n : {}),\n };\n}\n/** 独立命令证据投影;不依赖 Conversation 是否有事件轮次。 */\nexport function attemptCommandEvidenceData(detail: ClosedCommandsDetail | undefined, locator: AttemptLocator): AttemptCommandEvidenceData | null {\n if (detail === undefined || detail.entries.length === 0)\n return null;\n return {\n locator,\n collection: detail.collection,\n commands: detail.entries.map(commandCardOf),\n };\n}\n// ───────────────────────── AttemptDiagnostics ─────────────────────────\nexport function attemptDiagnosticsData(detail: ClosedDiagnosticsDetail | undefined): AttemptDiagnosticsData | null {\n if (detail === undefined || detail.diagnostics.length === 0)\n return null;\n const groups = new Map<string, AttemptDiagnosticView[]>();\n for (const diagnostic of detail.diagnostics) {\n const list = groups.get(diagnostic.phase);\n const view: AttemptDiagnosticView = {\n code: diagnostic.code,\n kind: diagnostic.kind,\n phase: diagnostic.phase,\n summary: diagnostic.summary,\n level: diagnostic.kind === \"execution-error\" ? \"error\" : \"warning\",\n causes: diagnostic.causes,\n redaction: diagnostic.redaction,\n sourceFrame: diagnostic.sourceFrame,\n };\n if (list)\n list.push(view);\n else\n groups.set(diagnostic.phase, [view]);\n }\n return {\n collection: detail.collection,\n groups: [...groups.entries()].map(([phase, items]) => ({ phase, items })),\n };\n}\n// ───────────────────────── UsageTable ─────────────────────────\n/** USD 面额的 observed provider-cost 合计;非 USD 不换汇,绝不是 Profile projection。 */\nexport function observedCostUSD(observations: readonly ClosedUsageObservation[]): number | undefined {\n let total: number | undefined;\n for (const observation of observations) {\n if (observation.kind !== \"provider-cost\" || observation.currency !== \"USD\")\n continue;\n const amount = Number.parseFloat(observation.amount);\n if (!Number.isFinite(amount))\n continue;\n total = total === undefined ? amount : total + amount;\n }\n return total;\n}\n/**\n * 组装口径单源:identity 字段恒有;turns/toolCalls 是 conversation ledger 派生;token /\n * 请求 / 成本事实来自闭合 usage 观测(词表开放,原样保留,不压进旧 Usage 字段)。\n * 三者全部缺失时返回 null——没有任何用量事实可摆。\n */\nexport function usageTableData(input: {\n readonly locator: AttemptLocator;\n readonly experimentId: string;\n readonly identity: AttemptIdentityView;\n readonly verdict: VerdictState | \"unknown\";\n readonly conversation?: ClosedConversationDetail;\n readonly usage?: ClosedUsageDetail;\n}): UsageTableData | null {\n const { locator, experimentId, identity, verdict, conversation, usage } = input;\n const turns = conversation?.turns.length;\n const toolCalls = conversation?.items.filter((item) => item.kind === \"tool-call\").length;\n const observations = usage?.observations;\n if (turns === undefined && toolCalls === undefined && observations === undefined)\n return null;\n const observed = observations === undefined ? undefined : observedCostUSD(observations);\n return {\n locator,\n experimentId,\n evalId: identity.evalId,\n attempt: identity.attempt,\n verdict,\n ...(turns === undefined ? {} : { turns }),\n ...(toolCalls === undefined ? {} : { toolCalls }),\n ...(observations === undefined ? {} : { observations }),\n ...(observed === undefined ? {} : { observedCostUSD: observed }),\n };\n}\n// ───────────────────────── AttemptDiff ─────────────────────────\n/** 有界行 diff(公共前后缀修剪):对单区域编辑精确,复杂编辑给出上界近似。 */\nfunction lineDelta(before: string | undefined, after: string | undefined): {\n added: number;\n deleted: number;\n} {\n const a = before === undefined ? [] : before.split(\"\\n\");\n const b = after === undefined ? [] : after.split(\"\\n\");\n let prefix = 0;\n while (prefix < a.length && prefix < b.length && a[prefix] === b[prefix])\n prefix++;\n let suffix = 0;\n while (suffix < a.length - prefix && suffix < b.length - prefix && a[a.length - 1 - suffix] === b[b.length - 1 - suffix])\n suffix++;\n return { added: b.length - prefix - suffix, deleted: a.length - prefix - suffix };\n}\nconst MAX_HUNK_LINES = 200;\n/** 一个窗口内单文件的最小 unified hunk(公共前后缀修剪);超预算截断。 */\nfunction windowHunk(before: string | undefined, after: string | undefined): string {\n const a = before === undefined ? [] : before.replace(/\\n$/, \"\").split(\"\\n\");\n const b = after === undefined ? [] : after.replace(/\\n$/, \"\").split(\"\\n\");\n let prefix = 0;\n while (prefix < a.length && prefix < b.length && a[prefix] === b[prefix])\n prefix++;\n let suffix = 0;\n while (suffix < a.length - prefix && suffix < b.length - prefix && a[a.length - 1 - suffix] === b[b.length - 1 - suffix])\n suffix++;\n const removed = a.slice(prefix, a.length - suffix);\n const added = b.slice(prefix, b.length - suffix);\n const ctxBefore = a.slice(Math.max(0, prefix - 2), prefix);\n const start = Math.max(1, prefix - ctxBefore.length + 1);\n const lines = [`@@ -${start},${removed.length + ctxBefore.length} +${start},${added.length + ctxBefore.length} @@`];\n for (const line of ctxBefore)\n lines.push(` ${line}`);\n const shownRemoved = removed.slice(0, MAX_HUNK_LINES);\n const shownAdded = added.slice(0, MAX_HUNK_LINES);\n for (const line of shownRemoved)\n lines.push(`-${line}`);\n if (removed.length > shownRemoved.length)\n lines.push(`… (${removed.length - shownRemoved.length} more removed lines)`);\n for (const line of shownAdded)\n lines.push(`+${line}`);\n if (added.length > shownAdded.length)\n lines.push(`… (${added.length - shownAdded.length} more added lines)`);\n return lines.join(\"\\n\");\n}\nfunction endpointText(endpoint: ClosedFileChangeEndpoint): string | undefined {\n if (endpoint.state !== \"present\" || endpoint.revision.kind !== \"text\")\n return undefined;\n const content = endpoint.revision.content;\n if (content.state !== \"available\" || content.content.state !== \"available\")\n return undefined;\n return content.content.text;\n}\nfunction elidedReasonOf(endpoint: ClosedFileChangeEndpoint): \"binary\" | \"oversized-text\" | undefined {\n if (endpoint.state !== \"present\" || endpoint.revision.kind !== \"elided\")\n return undefined;\n return endpoint.revision.reason === \"binary\" ? \"binary\" : \"oversized-text\";\n}\nfunction endpointBytes(endpoint: ClosedFileChangeEndpoint): number | undefined {\n if (endpoint.state !== \"present\" || endpoint.revision.kind === \"unavailable\")\n return undefined;\n return endpoint.revision.byteLength;\n}\n/**\n * 净变化为 indeterminate 的路径不可证方向:不进 DiffFile 清单(不把不可证说成\n * modified);`collection.state === \"partial\"` 与 limitations 由组合层的 Callouts 交代。\n */\nexport function attemptDiffData(detail: FileChangesDomainDetail | undefined, locator: AttemptLocator): AttemptDiffData | null {\n if (detail === undefined)\n return null;\n const files: DiffFile[] = [];\n for (const pathEntry of detail.paths) {\n const net = pathEntry.net;\n if (net.state !== \"available\" || net.kind === \"none\")\n continue;\n const change = net.kind === \"created\" ? \"added\" : net.kind === \"deleted\" ? \"deleted\" : \"modified\";\n const touched = detail.trajectory.filter((window) => pathEntry.changes.some((ref) => ref.windowId === window.windowId));\n const windows: DiffFileWindow[] = [];\n for (const window of touched) {\n const changeIds = new Set(pathEntry.changes.filter((ref) => ref.windowId === window.windowId).map((ref) => ref.changeId));\n const changes = window.changes.filter((entry) => changeIds.has(entry.changeId));\n const patches = changes\n .map((entry) => {\n const before = entry.kind === \"created\" ? undefined : endpointText(entry.before);\n const after = entry.kind === \"deleted\" ? undefined : endpointText(entry.after);\n if (before === undefined && after === undefined)\n return undefined;\n return windowHunk(before, after);\n })\n .filter((patch): patch is string => patch !== undefined);\n windows.push({\n window: `window ${window.sequence}`,\n ...(patches.length > 0 ? { patch: patches.join(\"\\n\") } : {}),\n });\n }\n const beforeElided = elidedReasonOf(net.before);\n const afterElided = elidedReasonOf(net.after);\n const elided = beforeElided ?? afterElided;\n if (elided !== undefined) {\n files.push({\n path: pathEntry.path,\n change,\n added: 0,\n removed: 0,\n elided: {\n reason: elided,\n ...(endpointBytes(net.before) !== undefined ? { beforeBytes: endpointBytes(net.before) } : {}),\n ...(endpointBytes(net.after) !== undefined ? { afterBytes: endpointBytes(net.after) } : {}),\n },\n windows,\n });\n continue;\n }\n const before = net.kind === \"created\" ? undefined : endpointText(net.before);\n const after = net.kind === \"deleted\" ? undefined : endpointText(net.after);\n const lines = lineDelta(before, after);\n files.push({\n path: pathEntry.path,\n change,\n added: lines.added,\n removed: lines.deleted,\n windows,\n });\n }\n return { locator, collection: detail.collection, files };\n}\n// ───────────────────────── AttemptSource ─────────────────────────\n/** sourceSites 在 DomainView 边界是 JsonValue;这里做最小结构读取,读不到即跳过。 */\nfunction siteViewOf(value: JsonValue): AttemptSourceSiteView | undefined {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return undefined;\n const record = value as Readonly<Record<string, unknown>>;\n const entryId = record[\"entryId\"];\n const role = record[\"role\"];\n const sourceOrder = record[\"sourceOrder\"];\n const sourceItemId = record[\"sourceItemId\"];\n const sha256 = record[\"sha256\"];\n const start = record[\"start\"];\n const end = record[\"end\"];\n if (typeof entryId !== \"string\" ||\n typeof sourceOrder !== \"number\" ||\n !Number.isSafeInteger(sourceOrder) ||\n sourceOrder < 1 ||\n typeof role !== \"string\" ||\n typeof sourceItemId !== \"string\" ||\n typeof sha256 !== \"string\")\n return undefined;\n if (typeof start !== \"object\" || start === null || Array.isArray(start))\n return undefined;\n if (typeof end !== \"object\" || end === null || Array.isArray(end))\n return undefined;\n const startLine = (start as Readonly<Record<string, unknown>>)[\"line\"];\n const endLine = (end as Readonly<Record<string, unknown>>)[\"line\"];\n if (typeof startLine !== \"number\" || typeof endLine !== \"number\")\n return undefined;\n if (startLine < 1 || endLine < startLine)\n return undefined;\n return { entryId, sourceOrder, role, sourceItemId, sha256, startLine, endLine };\n}\nexport function attemptSourceData(input: {\n readonly locator: AttemptLocator;\n readonly items: readonly {\n readonly sourceItemId: string;\n readonly path: string;\n readonly sha256: string;\n readonly content: {\n readonly state: \"available\";\n readonly text: string;\n } | {\n readonly state: \"unavailable\" | \"binary\";\n };\n }[];\n readonly sourceSites: readonly JsonValue[];\n readonly entries: readonly AttemptAssertionView[];\n readonly navigation?: SourceNavigationDomainDetail;\n}): AttemptSourceData | null {\n const { locator, items, sourceSites, entries, navigation } = input;\n if (items.length === 0)\n return null;\n const knownEntryIds = new Set(entries.map((entry) => entry.entryId));\n const sites = sourceSites\n .map(siteViewOf)\n .filter((site): site is AttemptSourceSiteView => site !== undefined && knownEntryIds.has(site.entryId));\n const firstOrderByItem = new Map<string, number>();\n for (const site of sites) {\n const key = `${site.sourceItemId}:${site.sha256}`;\n const current = firstOrderByItem.get(key);\n if (current === undefined || site.sourceOrder < current)\n firstOrderByItem.set(key, site.sourceOrder);\n }\n for (const row of navigation?.rows ?? []) {\n if (row.source.state !== \"mapped\" || row.sourceOrder === null)\n continue;\n const key = `${row.source.sourceItemId}:${row.source.sha256}`;\n const current = firstOrderByItem.get(key);\n if (current === undefined || row.sourceOrder < current)\n firstOrderByItem.set(key, row.sourceOrder);\n }\n const referencedItems = items\n .filter((item) => firstOrderByItem.has(`${item.sourceItemId}:${item.sha256}`))\n .sort((left, right) => firstOrderByItem.get(`${left.sourceItemId}:${left.sha256}`)! -\n firstOrderByItem.get(`${right.sourceItemId}:${right.sha256}`)! ||\n compareText(left.path, right.path) ||\n compareText(left.sourceItemId, right.sourceItemId));\n if (referencedItems.length === 0)\n return null;\n return {\n locator,\n items: referencedItems.map((item) => ({\n sourceItemId: item.sourceItemId,\n path: item.path,\n sha256: item.sha256,\n lines: item.content.state === \"available\" ? item.content.text.replace(/\\n$/, \"\").split(\"\\n\") : [],\n ...(item.content.state !== \"available\" ? { unavailable: item.content.state } : {}),\n })),\n sites,\n entries,\n ...(navigation === undefined ? {} : { navigation }),\n };\n}\n// ───────────────────────── helpers ─────────────────────────\nexport function stableJson(value: JsonValue): string {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n return typeof value === \"string\" ? value : String(value);\n }\n if (typeof value === \"number\")\n return String(value);\n if (Array.isArray(value))\n return JSON.stringify(value);\n const keys = Object.keys(value).sort(compareText);\n if (keys.length === 0)\n return \"{}\";\n return `{${keys.map((key) => `${JSON.stringify(key)}:${stableJson((value as Readonly<Record<string, JsonValue>>)[key]!)}`).join(\",\")}}`;\n}\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n"]}
|
|
@@ -303,7 +303,7 @@ export interface SealedAssertionScoreView {
|
|
|
303
303
|
}
|
|
304
304
|
/** 整条 sealed assertion entry 的结构读取;读不懂(形状不符)返回 undefined,调用方跳过。 */
|
|
305
305
|
export declare function assertionEntryViewOf(value: JsonValue): SealedAssertionEntryView | undefined;
|
|
306
|
-
/**
|
|
306
|
+
/** 展示层预拼的判定详情;字段全闭合,不把 matcher diagnostic tree 当作文案。 */
|
|
307
307
|
export declare function assertionDetailOf(entry: SealedAssertionEntryView): string;
|
|
308
308
|
export declare function assertionViewOf(entry: SealedAssertionEntryView): AttemptAssertionView;
|
|
309
309
|
export declare function attemptAssertionsData(detail: AttemptEvidenceDomainDetail | undefined): AttemptAssertionsData | null;
|
|
@@ -303,7 +303,7 @@ export interface SealedAssertionScoreView {
|
|
|
303
303
|
}
|
|
304
304
|
/** 整条 sealed assertion entry 的结构读取;读不懂(形状不符)返回 undefined,调用方跳过。 */
|
|
305
305
|
export declare function assertionEntryViewOf(value: JsonValue): SealedAssertionEntryView | undefined;
|
|
306
|
-
/**
|
|
306
|
+
/** 展示层预拼的判定详情;字段全闭合,不把 matcher diagnostic tree 当作文案。 */
|
|
307
307
|
export declare function assertionDetailOf(entry: SealedAssertionEntryView): string;
|
|
308
308
|
export declare function assertionViewOf(entry: SealedAssertionEntryView): AttemptAssertionView;
|
|
309
309
|
export declare function attemptAssertionsData(detail: AttemptEvidenceDomainDetail | undefined): AttemptAssertionsData | null;
|
|
@@ -303,7 +303,7 @@ export interface SealedAssertionScoreView {
|
|
|
303
303
|
}
|
|
304
304
|
/** 整条 sealed assertion entry 的结构读取;读不懂(形状不符)返回 undefined,调用方跳过。 */
|
|
305
305
|
export declare function assertionEntryViewOf(value: JsonValue): SealedAssertionEntryView | undefined;
|
|
306
|
-
/**
|
|
306
|
+
/** 展示层预拼的判定详情;字段全闭合,不把 matcher diagnostic tree 当作文案。 */
|
|
307
307
|
export declare function assertionDetailOf(entry: SealedAssertionEntryView): string;
|
|
308
308
|
export declare function assertionViewOf(entry: SealedAssertionEntryView): AttemptAssertionView;
|
|
309
309
|
export declare function attemptAssertionsData(detail: AttemptEvidenceDomainDetail | undefined): AttemptAssertionsData | null;
|
|
@@ -170,7 +170,7 @@ function timingTree(intervals) {
|
|
|
170
170
|
const phase = interval.phase;
|
|
171
171
|
return {
|
|
172
172
|
key: interval.intervalId,
|
|
173
|
-
label:
|
|
173
|
+
label: interval.label,
|
|
174
174
|
kind: phase,
|
|
175
175
|
startOffsetMs: interval.startOffsetMs,
|
|
176
176
|
durationMs: interval.durationMs,
|