niceeval 0.13.3-canary.37 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/bub.cjs +4 -4
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +2 -2
- package/dist/agents/bub.d.mts +2 -2
- package/dist/agents/bub.d.ts +2 -2
- package/dist/agents/codex-app-server.cjs +2 -3
- package/dist/agents/codex-app-server.cjs.map +1 -1
- 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/sdk-streams.cjs +11 -4
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/analysis/bindings.cjs +74 -19
- package/dist/analysis/bindings.cjs.map +1 -1
- package/dist/analysis/bindings.d.cts +534 -156
- package/dist/analysis/bindings.d.mts +534 -156
- package/dist/analysis/bindings.d.ts +534 -156
- package/dist/analysis/domain-view.cjs.map +1 -1
- package/dist/analysis/domain-view.d.cts +137 -8
- package/dist/analysis/domain-view.d.mts +137 -8
- package/dist/analysis/domain-view.d.ts +137 -8
- package/dist/analysis/index.cjs.map +1 -1
- package/dist/analysis/index.d.cts +1 -1
- package/dist/analysis/index.d.mts +1 -1
- package/dist/analysis/index.d.ts +1 -1
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +62 -0
- package/dist/assertions/api.d.mts +62 -0
- package/dist/assertions/api.d.ts +62 -0
- package/dist/assertions/judge.cjs +56 -5
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +66 -42
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +13 -0
- package/dist/assertions/match.d.mts +13 -0
- package/dist/assertions/match.d.ts +13 -0
- package/dist/assertions/record/attachment.cjs +104 -33
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/attachment.d.cts +294 -57
- package/dist/assertions/record/attachment.d.mts +294 -57
- package/dist/assertions/record/attachment.d.ts +294 -57
- package/dist/assertions/record/codec.cjs +91 -17
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/codec.d.cts +280 -52
- package/dist/assertions/record/codec.d.mts +280 -52
- package/dist/assertions/record/codec.d.ts +280 -52
- package/dist/assertions/record/index.js +2 -0
- package/dist/assertions/record/model.cjs +16 -0
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +120 -13
- package/dist/assertions/record/model.d.mts +120 -13
- package/dist/assertions/record/model.d.ts +120 -13
- package/dist/assertions/record/model.js +2 -0
- package/dist/assertions/record/producer.cjs +70 -50
- package/dist/assertions/record/producer.cjs.map +1 -1
- package/dist/assertions/record/producer.d.cts +8 -7
- package/dist/assertions/record/producer.d.mts +8 -7
- package/dist/assertions/record/producer.d.ts +8 -7
- package/dist/assertions/runtime.cjs +49 -7
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/application.cjs +40 -0
- package/dist/cli/application.cjs.map +1 -0
- package/dist/cli/application.d.cts +129 -0
- package/dist/cli/application.d.mts +129 -0
- package/dist/cli/application.d.ts +129 -0
- package/dist/cli/application.js +24 -0
- package/dist/cli/application.js.map +1 -0
- package/dist/cli/bootstrap.cjs +10 -4
- package/dist/cli/bootstrap.cjs.map +1 -1
- package/dist/cli/node-application.cjs +123 -0
- package/dist/cli/node-application.cjs.map +1 -0
- package/dist/cli/node-application.d.cts +14 -0
- package/dist/cli/node-application.d.mts +14 -0
- package/dist/cli/node-application.d.ts +14 -0
- package/dist/cli/node-application.js +26 -0
- package/dist/cli/node-application.js.map +1 -0
- package/dist/cli/program.cjs +2807 -0
- package/dist/cli/program.cjs.map +1 -0
- package/dist/cli/program.d.cts +352 -0
- package/dist/cli/program.d.mts +352 -0
- package/dist/cli/program.d.ts +352 -0
- package/dist/cli/program.js +36 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/project-configuration.cjs +134 -0
- package/dist/cli/project-configuration.cjs.map +1 -0
- package/dist/cli/project-configuration.d.cts +64 -0
- package/dist/cli/project-configuration.d.mts +64 -0
- package/dist/cli/project-configuration.d.ts +64 -0
- package/dist/cli/project-configuration.js +22 -0
- package/dist/cli/project-configuration.js.map +1 -0
- package/dist/cli/record.cjs +20 -4
- package/dist/cli/record.cjs.map +1 -1
- package/dist/cli/record.d.cts +3 -3
- package/dist/cli/record.d.mts +3 -3
- package/dist/cli/record.d.ts +3 -3
- package/dist/cli.cjs +19 -3130
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +2 -148
- package/dist/cli.d.mts +2 -148
- package/dist/cli.d.ts +2 -148
- package/dist/cli.js +22 -30
- package/dist/context/assert-first.cjs +20 -15
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/eval/record/verdict.cjs +3 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -6
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/index.d.cts +1 -0
- package/dist/experiment/host/index.d.mts +1 -0
- package/dist/experiment/host/index.d.ts +1 -0
- package/dist/load-config.cjs +13 -4
- package/dist/load-config.cjs.map +1 -1
- package/dist/load-config.d.cts +4 -3
- package/dist/load-config.d.mts +4 -3
- package/dist/load-config.d.ts +4 -3
- package/dist/load-config.js +4 -2
- package/dist/o11y/parsers/codex.cjs +29 -7
- package/dist/o11y/parsers/codex.cjs.map +1 -1
- package/dist/record/codec/core.d.cts +0 -2
- package/dist/record/codec/core.d.mts +0 -2
- package/dist/record/codec/core.d.ts +0 -2
- package/dist/record/codec/identifiers.cjs +2 -3
- package/dist/record/codec/identifiers.cjs.map +1 -1
- package/dist/record/codec/identifiers.d.cts +1 -2
- package/dist/record/codec/identifiers.d.mts +1 -2
- package/dist/record/codec/identifiers.d.ts +1 -2
- package/dist/record/codec/identifiers.js +10 -12
- package/dist/record/codec/index.js +42 -44
- package/dist/record/definition/attachment.cjs +1 -0
- package/dist/record/definition/attachment.cjs.map +1 -1
- package/dist/record/definition/attachment.d.cts +14 -0
- package/dist/record/definition/attachment.d.mts +14 -0
- package/dist/record/definition/attachment.d.ts +14 -0
- package/dist/record/family/assertions-v1.cjs +104 -0
- package/dist/record/family/assertions-v1.cjs.map +1 -0
- package/dist/record/family/assertions-v1.d.cts +2 -0
- package/dist/record/family/assertions-v1.d.mts +2 -0
- package/dist/record/family/assertions-v1.d.ts +2 -0
- package/dist/record/family/assertions-v1.js +6 -0
- package/dist/record/family/assertions-v1.js.map +1 -0
- package/dist/record/family/assertions.cjs +16 -5
- package/dist/record/family/assertions.cjs.map +1 -1
- package/dist/record/family/assertions.d.cts +510 -56
- package/dist/record/family/assertions.d.mts +510 -56
- package/dist/record/family/assertions.d.ts +510 -56
- package/dist/record/family/assertions.js +14 -10
- package/dist/record/family/catalog.cjs +17 -1
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +1292 -104
- package/dist/record/family/catalog.d.mts +1292 -104
- package/dist/record/family/catalog.d.ts +1292 -104
- package/dist/record/family/catalog.js +22 -20
- package/dist/record/family/index.js +144 -138
- package/dist/record/family/observability-v1.cjs +5 -0
- package/dist/record/family/observability-v1.cjs.map +1 -1
- package/dist/record/family/observability.cjs +1 -1
- package/dist/record/family/observability.cjs.map +1 -1
- package/dist/record/host/runtime.cjs +323 -173
- package/dist/record/host/runtime.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +9 -7
- package/dist/record/host/types.d.mts +9 -7
- package/dist/record/host/types.d.ts +9 -7
- package/dist/record/model/core.cjs.map +1 -1
- package/dist/record/model/core.d.cts +1 -2
- package/dist/record/model/core.d.mts +1 -2
- package/dist/record/model/core.d.ts +1 -2
- package/dist/record/model/definition.cjs +1 -2
- package/dist/record/model/definition.cjs.map +1 -1
- package/dist/record/model/definition.d.cts +1 -7
- package/dist/record/model/definition.d.mts +1 -7
- package/dist/record/model/definition.d.ts +1 -7
- package/dist/record/model/identifiers.cjs +2 -3
- package/dist/record/model/identifiers.cjs.map +1 -1
- package/dist/record/model/identifiers.d.cts +1 -3
- package/dist/record/model/identifiers.d.mts +1 -3
- package/dist/record/model/identifiers.d.ts +1 -3
- package/dist/record/model/identifiers.js +36 -38
- package/dist/record/model/index.js +60 -62
- package/dist/record/platform/node.cjs +17 -7
- package/dist/record/platform/node.cjs.map +1 -1
- package/dist/record/platform/services.cjs.map +1 -1
- package/dist/record/platform/services.d.cts +8 -3
- package/dist/record/platform/services.d.mts +8 -3
- package/dist/record/platform/services.d.ts +8 -3
- package/dist/record/reader/format.cjs +16 -65
- package/dist/record/reader/format.cjs.map +1 -1
- package/dist/record/reader/format.d.cts +5 -9
- package/dist/record/reader/format.d.mts +5 -9
- package/dist/record/reader/format.d.ts +5 -9
- package/dist/record/reader/index.js +10 -8
- package/dist/record/reader/runtime.cjs +63 -32
- package/dist/record/reader/runtime.cjs.map +1 -1
- package/dist/record/reader/runtime.d.cts +40 -4
- package/dist/record/reader/runtime.d.mts +40 -4
- package/dist/record/reader/runtime.d.ts +40 -4
- package/dist/record/reader/runtime.js +6 -4
- package/dist/report/assets/enhance.js +5 -5
- package/dist/report/assets/styles.css +186 -24
- package/dist/report/built-in/result-components.cjs +8 -5
- package/dist/report/built-in/result-components.cjs.map +1 -1
- package/dist/report/built-in/standard.cjs +3 -0
- package/dist/report/built-in/standard.cjs.map +1 -1
- package/dist/report/built-in/standard.d.cts +2 -0
- package/dist/report/built-in/standard.d.mts +2 -0
- package/dist/report/built-in/standard.d.ts +2 -0
- package/dist/report/client-dist/app.js +53 -0
- package/dist/report/components/attempt-detail/compute.cjs +106 -231
- package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
- package/dist/report/components/attempt-detail/compute.d.cts +9 -43
- package/dist/report/components/attempt-detail/compute.d.mts +9 -43
- package/dist/report/components/attempt-detail/compute.d.ts +9 -43
- package/dist/report/components/attempt-detail/compute.js +2 -4
- package/dist/report/components/attempt-detail/content.cjs +3 -4
- package/dist/report/components/attempt-detail/content.cjs.map +1 -1
- package/dist/report/components/attempt-detail/validate.cjs +44 -2
- package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.cjs +9 -15
- package/dist/report/components/entity-lists/compute.cjs.map +1 -1
- package/dist/report/components/entity-lists/content.cjs +53 -40
- package/dist/report/components/entity-lists/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.cjs +1 -3
- package/dist/report/components/entity-lists/index.cjs.map +1 -1
- package/dist/report/components/experiment-detail/compute.cjs +4 -6
- package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
- package/dist/report/definition/cell.cjs +14 -7
- package/dist/report/definition/cell.cjs.map +1 -1
- package/dist/report/definition/cell.d.cts +4 -0
- package/dist/report/definition/cell.d.mts +4 -0
- package/dist/report/definition/cell.d.ts +4 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
- package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.js +6 -0
- package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
- package/dist/report/definition/primitives.cjs +14 -1
- package/dist/report/definition/primitives.cjs.map +1 -1
- package/dist/report/definition/report.cjs +16 -8
- package/dist/report/definition/report.cjs.map +1 -1
- package/dist/report/definition/report.d.cts +6 -0
- package/dist/report/definition/report.d.mts +6 -0
- package/dist/report/definition/report.d.ts +6 -0
- package/dist/report/definition/table-text.cjs +12 -3
- package/dist/report/definition/table-text.cjs.map +1 -1
- package/dist/report/definition/table-text.d.cts +6 -1
- package/dist/report/definition/table-text.d.mts +6 -1
- package/dist/report/definition/table-text.d.ts +6 -1
- package/dist/report/execution/model.cjs +6 -14
- package/dist/report/execution/model.cjs.map +1 -1
- package/dist/report/execution/model.d.cts +5 -10
- package/dist/report/execution/model.d.mts +5 -10
- package/dist/report/execution/model.d.ts +5 -10
- package/dist/report/execution/model.js +6 -6
- package/dist/report/execution/paths.cjs +0 -11
- package/dist/report/execution/paths.cjs.map +1 -1
- package/dist/report/execution/paths.d.cts +0 -1
- package/dist/report/execution/paths.d.mts +0 -1
- package/dist/report/execution/paths.d.ts +0 -1
- package/dist/report/execution/paths.js +6 -8
- package/dist/report/host/execute.cjs +13 -22
- package/dist/report/host/execute.cjs.map +1 -1
- package/dist/report/host/execute.d.cts +1 -4
- package/dist/report/host/execute.d.mts +1 -4
- package/dist/report/host/execute.d.ts +1 -4
- package/dist/report/host/from-record.cjs +3 -0
- package/dist/report/host/from-record.cjs.map +1 -1
- package/dist/report/host/from-record.d.cts +4 -1
- package/dist/report/host/from-record.d.mts +4 -1
- package/dist/report/host/from-record.d.ts +4 -1
- package/dist/report/host/site-assets.cjs +1 -2
- package/dist/report/host/site-assets.cjs.map +1 -1
- package/dist/report/host/site-assets.d.cts +0 -1
- package/dist/report/host/site-assets.d.mts +0 -1
- package/dist/report/host/site-assets.d.ts +0 -1
- package/dist/report/host/site-assets.js +2 -4
- package/dist/report/host/static.cjs +71 -346
- package/dist/report/host/static.cjs.map +1 -1
- package/dist/report/host/static.d.cts +1 -3
- package/dist/report/host/static.d.mts +1 -3
- package/dist/report/host/static.d.ts +1 -3
- package/dist/report/host/static.js +2 -2
- package/dist/report/host/view-session.cjs.map +1 -1
- package/dist/report/host/view-session.d.cts +1 -1
- package/dist/report/host/view-session.d.mts +1 -1
- package/dist/report/host/view-session.d.ts +1 -1
- package/dist/report/model/locale.cjs +1 -1
- package/dist/report/model/locale.cjs.map +1 -1
- package/dist/report/model/locale.d.cts +1 -1
- package/dist/report/model/locale.d.mts +1 -1
- package/dist/report/model/locale.d.ts +1 -1
- package/dist/report/model/pricing.cjs +2 -2
- package/dist/report/model/pricing.cjs.map +1 -1
- package/dist/report/react/enhance.js +5 -5
- package/dist/report/react/styles.css +186 -24
- package/dist/runner/adoption.cjs +4 -7
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/feedback/failure.cjs +77 -2
- package/dist/runner/feedback/failure.cjs.map +1 -1
- package/dist/runner/feedback/failure.d.cts +2 -1
- package/dist/runner/feedback/failure.d.mts +2 -1
- package/dist/runner/feedback/failure.d.ts +2 -1
- package/dist/runner/project-current.cjs +2 -13
- package/dist/runner/project-current.cjs.map +1 -1
- package/dist/runner/project-current.d.cts +4 -2
- package/dist/runner/project-current.d.mts +4 -2
- package/dist/runner/project-current.d.ts +4 -2
- package/dist/runner/reporters/braintrust.cjs +7 -7
- package/dist/runner/reporters/braintrust.cjs.map +1 -1
- package/dist/runner/reuse-readback.cjs +3 -4
- package/dist/runner/reuse-readback.cjs.map +1 -1
- package/dist/runner/run.cjs +5 -2
- package/dist/runner/run.cjs.map +1 -1
- package/dist/view/server.cjs +2 -37
- package/dist/view/server.cjs.map +1 -1
- package/dist/view/server.d.cts +0 -3
- package/dist/view/server.d.mts +0 -3
- package/dist/view/server.d.ts +0 -3
- package/docs-site/zh/reference/builtin-agents.mdx +7 -7
- package/docs-site/zh/reference/official-adapters.mdx +4 -4
- package/docs-site/zh/reference/report-components.mdx +2 -2
- package/docs-site/zh/tutorials/configuration.mdx +2 -2
- package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
- package/docs-site/zh/tutorials/publish-report.mdx +4 -4
- package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
- package/docs-site/zh/tutorials/theming.mdx +2 -2
- package/package.json +4 -6
- package/dist/record/migration/index.cjs +0 -5
- package/dist/record/migration/index.cjs.map +0 -1
- package/dist/record/migration/index.d.cts +0 -11
- package/dist/record/migration/index.d.mts +0 -11
- package/dist/record/migration/index.d.ts +0 -11
- package/dist/record/migration/index.js +0 -6
- package/dist/record/migration/index.js.map +0 -1
- package/dist/report/host/site-runtime.cjs +0 -92
- package/dist/report/host/site-runtime.cjs.map +0 -1
- package/dist/report/host/site-runtime.d.cts +0 -9
- package/dist/report/host/site-runtime.d.mts +0 -9
- package/dist/report/host/site-runtime.d.ts +0 -9
- package/dist/report/host/site-runtime.js +0 -10
- package/dist/report/host/site-runtime.js.map +0 -1
- package/dist/view/client-dist/app.css +0 -2
- package/dist/view/client-dist/app.js +0 -49
- package/dist/view/data.cjs +0 -3
- package/dist/view/data.cjs.map +0 -1
- package/dist/view/data.d.cts +0 -9
- package/dist/view/data.d.mts +0 -9
- package/dist/view/data.d.ts +0 -9
- package/dist/view/data.js +0 -4
- package/dist/view/data.js.map +0 -1
- package/dist/view/index.cjs +0 -24
- package/dist/view/index.cjs.map +0 -1
- package/dist/view/index.d.cts +0 -9
- package/dist/view/index.d.mts +0 -9
- package/dist/view/index.d.ts +0 -9
- package/dist/view/index.js +0 -28
- package/dist/view/index.js.map +0 -1
- package/dist/view/report-view-cache.cjs +0 -200
- package/dist/view/report-view-cache.cjs.map +0 -1
- package/dist/view/report-view-cache.d.cts +0 -67
- package/dist/view/report-view-cache.d.mts +0 -67
- package/dist/view/report-view-cache.d.ts +0 -67
- package/dist/view/report-view-cache.js +0 -8
- package/dist/view/report-view-cache.js.map +0 -1
- package/dist/view/shared/types.cjs +0 -3
- package/dist/view/shared/types.cjs.map +0 -1
- package/dist/view/shared/types.d.cts +0 -51
- package/dist/view/shared/types.d.mts +0 -51
- package/dist/view/shared/types.d.ts +0 -51
- package/dist/view/shared/types.js +0 -4
- package/dist/view/shared/types.js.map +0 -1
- package/dist/view/site.cjs +0 -32
- package/dist/view/site.cjs.map +0 -1
- package/dist/view/site.d.cts +0 -24
- package/dist/view/site.d.mts +0 -24
- package/dist/view/site.d.ts +0 -24
- package/dist/view/site.js +0 -8
- package/dist/view/site.js.map +0 -1
- package/dist/view/styles.css +0 -170
- package/dist/view/template.html +0 -17
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AttemptLocator } from "../../../attempt-locator.js";
|
|
2
2
|
import type { VerdictState } from "../../../eval/record/verdict.js";
|
|
3
|
-
import type { AttemptEvidenceDomainDetail, ClosedCommandEntry, ClosedCommandsDetail, ClosedConversationDetail, ClosedDiagnosticsDetail, ClosedFileChangesCollection, ClosedSourceFrame, ClosedTimingDetail, ClosedTimingInterval, ClosedTraceCollection, ClosedUsageDetail, ClosedUsageObservation, FileChangesDomainDetail,
|
|
3
|
+
import type { AttemptEvidenceDomainDetail, ClosedCommandEntry, ClosedAssertionSourceSite, ClosedCommandsDetail, ClosedConversationDetail, ClosedDiagnosticsDetail, ClosedFileChangesCollection, ClosedSourceFrame, ClosedTimingDetail, ClosedTimingInterval, ClosedTraceCollection, ClosedUsageDetail, ClosedUsageObservation, FileChangesDomainDetail, SourceNavigationDomainDetail } from "../../../analysis/index.js";
|
|
4
|
+
import type { AssertionEvidenceContent } from "../../definition/primitives/assertion-evidence.js";
|
|
4
5
|
import type { DiffFile } from "../../definition/primitives/diff-lines.js";
|
|
5
6
|
/** 不可变身份元组的展示投影。 */
|
|
6
7
|
export interface AttemptIdentityView {
|
|
@@ -55,8 +56,10 @@ export interface AttemptAssertionView {
|
|
|
55
56
|
readonly severity: "gate" | "recorded" | "soft";
|
|
56
57
|
readonly outcome: "passed" | "failed" | "unavailable";
|
|
57
58
|
readonly groupPath: readonly string[];
|
|
58
|
-
/**
|
|
59
|
+
/** Table 等紧凑读面的中立判定摘要。 */
|
|
59
60
|
readonly detail: string;
|
|
61
|
+
/** Source 展开区消费的五段闭合结构。 */
|
|
62
|
+
readonly evidence: AssertionEvidenceContent;
|
|
60
63
|
/** 得分点贡献;没有 score 贡献时整字段省略。 */
|
|
61
64
|
readonly score?: AttemptScoreView;
|
|
62
65
|
}
|
|
@@ -265,45 +268,9 @@ export declare function attemptErrorData(input: {
|
|
|
265
268
|
readonly diagnostics?: ClosedDiagnosticsDetail;
|
|
266
269
|
readonly commands?: readonly AttemptCommandCard[];
|
|
267
270
|
}): AttemptErrorData | null;
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
* 读不到的字段省略、读不懂的 entry 跳过,前向兼容,不伪造事实。
|
|
272
|
-
*/
|
|
273
|
-
export interface SealedAssertionEntryView {
|
|
274
|
-
readonly entryId: string;
|
|
275
|
-
readonly display: SealedAssertionDisplayView;
|
|
276
|
-
readonly result: SealedAssertionResultView;
|
|
277
|
-
readonly coverage: SealedAssertionCoverageView;
|
|
278
|
-
readonly limitations: readonly SealedAssertionLimitationView[];
|
|
279
|
-
}
|
|
280
|
-
export interface SealedAssertionDisplayView {
|
|
281
|
-
readonly label?: string;
|
|
282
|
-
readonly key?: string;
|
|
283
|
-
readonly groupPath: readonly string[];
|
|
284
|
-
}
|
|
285
|
-
export interface SealedAssertionCoverageView {
|
|
286
|
-
readonly state: "complete" | "partial" | "unavailable" | "not-applicable";
|
|
287
|
-
readonly reason?: string;
|
|
288
|
-
}
|
|
289
|
-
export interface SealedAssertionLimitationView {
|
|
290
|
-
readonly kind: string;
|
|
291
|
-
}
|
|
292
|
-
export interface SealedAssertionResultView {
|
|
293
|
-
readonly state: "matched" | "mismatched" | "unavailable" | "errored";
|
|
294
|
-
readonly reason?: string;
|
|
295
|
-
readonly gate: "not-gate" | "satisfied" | "failed" | "unavailable";
|
|
296
|
-
readonly score: SealedAssertionScoreView;
|
|
297
|
-
readonly diagnostic?: JsonValue;
|
|
298
|
-
}
|
|
299
|
-
export interface SealedAssertionScoreView {
|
|
300
|
-
readonly state: "not-scored" | "earned" | "unavailable";
|
|
301
|
-
readonly earned?: number;
|
|
302
|
-
readonly points?: number;
|
|
303
|
-
}
|
|
304
|
-
/** 整条 sealed assertion entry 的结构读取;读不懂(形状不符)返回 undefined,调用方跳过。 */
|
|
305
|
-
export declare function assertionEntryViewOf(value: JsonValue): SealedAssertionEntryView | undefined;
|
|
306
|
-
/** 展示层预拼的判定详情;字段全闭合,不把 matcher diagnostic tree 当作文案。 */
|
|
271
|
+
export type SealedAssertionEntryView = AttemptEvidenceDomainDetail["entries"][number];
|
|
272
|
+
/** Typed Analysis entry → report view. No Record or matcher shape is parsed here. */
|
|
273
|
+
export declare function assertionEntryViewOf(value: SealedAssertionEntryView): SealedAssertionEntryView;
|
|
307
274
|
export declare function assertionDetailOf(entry: SealedAssertionEntryView): string;
|
|
308
275
|
export declare function assertionViewOf(entry: SealedAssertionEntryView): AttemptAssertionView;
|
|
309
276
|
export declare function attemptAssertionsData(detail: AttemptEvidenceDomainDetail | undefined): AttemptAssertionsData | null;
|
|
@@ -363,8 +330,7 @@ export declare function attemptSourceData(input: {
|
|
|
363
330
|
readonly state: "unavailable" | "binary";
|
|
364
331
|
};
|
|
365
332
|
}[];
|
|
366
|
-
readonly sourceSites: readonly
|
|
333
|
+
readonly sourceSites: readonly ClosedAssertionSourceSite[];
|
|
367
334
|
readonly entries: readonly AttemptAssertionView[];
|
|
368
335
|
readonly navigation?: SourceNavigationDomainDetail;
|
|
369
336
|
}): AttemptSourceData | null;
|
|
370
|
-
export declare function stableJson(value: JsonValue): string;
|
|
@@ -39,8 +39,6 @@ const __niceevalExport17 = __niceevalCanonical["commandInvocationText"];
|
|
|
39
39
|
export { __niceevalExport17 as commandInvocationText };
|
|
40
40
|
const __niceevalExport18 = __niceevalCanonical["observedCostUSD"];
|
|
41
41
|
export { __niceevalExport18 as observedCostUSD };
|
|
42
|
-
const __niceevalExport19 = __niceevalCanonical["
|
|
43
|
-
export { __niceevalExport19 as
|
|
44
|
-
const __niceevalExport20 = __niceevalCanonical["usageTableData"];
|
|
45
|
-
export { __niceevalExport20 as usageTableData };
|
|
42
|
+
const __niceevalExport19 = __niceevalCanonical["usageTableData"];
|
|
43
|
+
export { __niceevalExport19 as usageTableData };
|
|
46
44
|
//# sourceMappingURL=compute.js.map
|
|
@@ -18,6 +18,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
18
18
|
// 输入全部是当前闭合 DomainView 派生的普通值。
|
|
19
19
|
const primitives_tsx_1 = require("../../definition/primitives.cjs");
|
|
20
20
|
const tool_evidence_tsx_1 = require("../../definition/primitives/tool-evidence.cjs");
|
|
21
|
+
const assertion_evidence_tsx_1 = require("../../definition/primitives/assertion-evidence.cjs");
|
|
21
22
|
const format_ts_1 = require("../../model/format.cjs");
|
|
22
23
|
const locale_ts_1 = require("../../model/locale.cjs");
|
|
23
24
|
const turn_label_ts_1 = require("../../../shared/turn-label.cjs");
|
|
@@ -31,7 +32,7 @@ function assertionToneClass(assertion) {
|
|
|
31
32
|
return assertion.severity === "gate" ? "niceeval-tone-bad" : "niceeval-tone-warn";
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
|
-
* 一条 assertion
|
|
35
|
+
* 一条 assertion 在展开区里的呈现:一行判定摘要,再接五段中立结构
|
|
35
36
|
* (docs/feature/reports/library.md「源码行展开区里有什么」)。
|
|
36
37
|
*/
|
|
37
38
|
function assertionNodes(assertion, key) {
|
|
@@ -42,9 +43,7 @@ function assertionNodes(assertion, key) {
|
|
|
42
43
|
const nodes = [
|
|
43
44
|
(0, jsx_runtime_1.jsx)(primitives_tsx_1.Text, { className: `niceeval-source-assertion ${assertionToneClass(assertion)}`, children: head }, `${key}:head`),
|
|
44
45
|
];
|
|
45
|
-
|
|
46
|
-
nodes.push((0, jsx_runtime_1.jsx)(primitives_tsx_1.Text, { className: "niceeval-source-assertion-body", children: assertion.detail }, `${key}:body`));
|
|
47
|
-
}
|
|
46
|
+
nodes.push((0, jsx_runtime_1.jsx)(assertion_evidence_tsx_1.AssertionEvidence, { content: assertion.evidence }, `${key}:body`));
|
|
48
47
|
return nodes;
|
|
49
48
|
}
|
|
50
49
|
function lineToneOf(assertions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["content.tsx"],"names":[],"mappings":";;;AAoHA,wDAgBC;AAED,4DA0BC;AAsCD,wDAYC;AACD,kDAYC;AAuED,gEAWC;AAED,sEAIC;AAaD,8DAUC;AACD,kDASC;AACD,0DAIC;AAED,gDAUC;AACD,sDAGC;AAMD,8DA0CC;;AA7ZD,sDAAsD;AACtD,+BAA+B;AAC/B,mEAAkE;AAKlE,oFAA6E;AAM7E,qDAA6E;AAC7E,qDAAyD;AACzD,iEAAmE;AAEnE,oEAAoE;AACpE,2CAA2C;AAC3C,SAAS,kBAAkB,CAAC,SAA+B;IACvD,IAAI,SAAS,CAAC,OAAO,KAAK,aAAa;QACnC,OAAO,kBAAkB,CAAC;IAC9B,IAAI,SAAS,CAAC,OAAO,KAAK,QAAQ;QAC9B,OAAO,oBAAoB,CAAC;IAChC,OAAO,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACtF,CAAC;AACD;;;GAGG;AACH,SAAS,cAAc,CAAC,SAA+B,EAAE,GAAW;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,KAAK,aAAa,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;QAC/E,CAAC,CAAC,IAAI,IAAA,8BAAkB,EAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAChG,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;IACvF,MAAM,KAAK,GAAiB;QACxB,uBAAC,qBAAI,IAAqB,SAAS,EAAE,6BAA6B,kBAAkB,CAAC,SAAS,CAAC,EAAE,YAClG,IAAI,IADQ,GAAG,GAAG,OAAO,CAErB;KACN,CAAC;IACF,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,uBAAC,qBAAI,IAAqB,SAAS,EAAC,gCAAgC,YAC9E,SAAS,CAAC,MAAM,IADK,GAAG,GAAG,OAAO,CAE9B,CAAC,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAS,UAAU,CAAC,UAA2C;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC;QAC/F,OAAO,WAAW,CAAC;IACvB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC;QAC9D,OAAO,WAAW,CAAC;IACvB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,aAAa,CAAC;QACnE,OAAO,aAAa,CAAC;IACzB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC;QAC9D,OAAO,QAAQ,CAAC;IACpB,OAAO,SAAS,CAAC;AACrB,CAAC;AAMD,sDAAsD;AACtD,SAAS,cAAc,CAAC,IAAuB;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YACnB,SAAS;QACb,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9D,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AACD,SAAS,eAAe,CAAC,IAA2B,EAAE,IAAuB,EAAE,QAAyD;IACpI,MAAM,KAAK,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAc,EAAE;QACnE,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACjE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvG,MAAM,OAAO,GAAG,KAAK;aAChB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;aACtE,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;aACnG,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,KAAK;aACf,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;aAC7C,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxH,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC;aACxC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ;YAC9C,GAAG,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YAC7C,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;aAC9B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB,CAAC;YACrH,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACtE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO;YACH,MAAM,EAAE,IAAI;YACZ,IAAI;YACJ,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAA,8BAAkB,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7C,CAAC;IACN,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC;AACD;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,IAA8B,EAAE,OAAsC;IACzG,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAiB,IAAI,CAAC,OAAO;SACtC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACjD,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1F,OAAO;QACH,KAAK;QACL,QAAQ;QACR,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACN,CAAC;AACD,wEAAwE;AACxE,SAAgB,wBAAwB,CAAC,IAAkC;IACvE,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IAChB,MAAM,IAAI,GAAsB,EAAE,CAAC;IACnC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC;YACN,GAAG,EAAE,SAAS,CAAC,OAAO;YACtB,KAAK,EAAE;gBACH,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;gBAC5C,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE;gBACpD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;gBAC1G,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;oBAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE;oBAC1C,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE;aAClC;SACJ,CAAC,CAAC;IACP,CAAC;IACD,OAAO;QACH,OAAO,EAAE;YACL,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAA,4BAAgB,EAAC,wBAAwB,CAAC,EAAE;YACnE,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,IAAA,4BAAgB,EAAC,4BAA4B,CAAC,EAAE;YAC3E,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAA,4BAAgB,EAAC,2BAA2B,CAAC,EAAE;YACzE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAA,4BAAgB,EAAC,0BAA0B,CAAC,EAAE;SAC1E;QACD,IAAI;KACP,CAAC;AACN,CAAC;AACD,qFAAqF;AACrF,SAAS,UAAU,CAAC,SAA0C;IAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC;IAClE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAqB,EAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACjF,IAAI,CAAC,gBAAgB,CAAC;SACtB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,OAAO;YACH,GAAG,EAAE,QAAQ,CAAC,UAAU;YACxB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,KAAK;YACX,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzG,0CAA0C;YAC1C,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7F,CAAC;IACN,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AACD,SAAS,gBAAgB,CAAC,IAA0B,EAAE,KAA2B;IAC7E,OAAO,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;AACtG,CAAC;AACD,SAAS,UAAU,CAAC,SAA0C;IAC1D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACnG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;AACpC,CAAC;AACD,+CAA+C;AAC/C,SAAgB,sBAAsB,CAAC,IAAgC;IACnE,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO;QACH;YACI,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACtC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;SACpC;KACJ,CAAC;AACN,CAAC;AACD,SAAgB,mBAAmB,CAAC,IAA6B;IAC7D,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO;QACH;YACI,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACtC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;SACpC;KACJ,CAAC;AACN,CAAC;AACD,0EAA0E;AAC1E,+DAA+D;AAC/D,SAAS,WAAW,CAAC,KAAyB;IAC1C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AACD,SAAS,mBAAmB,CAAC,KAA+B;IACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO;YACR,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACrF,KAAK,SAAS;YACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC;YACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YAChE,OAAO;gBACH,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,QAAQ;oBACb,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,SAAS;oBACxB,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;gBACzD,GAAG;gBACH,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;gBAC5C,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBACtE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,EAAE,CAAC,uBAAC,gCAAY,IAAC,OAAO,EAAE;wBACxB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;wBACxC,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,YAAY,EAAE,KAAK,CAAC,YAAY;wBAChC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;wBACpF,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;qBACrE,GAAG,CAAC;aACZ,CAAC;QACN,CAAC;QACD,KAAK,UAAU;YACX,OAAO;gBACH,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,KAAK,CAAC,IAAI;gBACnB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAC,qBAAI,cAAE,KAAK,CAAC,OAAO,GAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrE,CAAC;QACN,KAAK,OAAO;YACR,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClG,KAAK,OAAO;YACR,OAAO;gBACH,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,MAAM,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;gBAClE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI;oBACtC,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAC,qBAAI,cAAE,KAAK,CAAC,OAAO,CAAC,eAAe,GAAQ,EAAE;oBAC1D,CAAC,CAAC,EAAE,CAAC;aACZ,CAAC;QACN,KAAK,YAAY;YACb,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAClF,CAAC;AACL,CAAC;AACD,SAAS,aAAa,CAAC,OAA6D;IAChF,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,WAAW;YACZ,OAAO,SAAS,CAAC;QACrB,KAAK,QAAQ;YACT,OAAO,QAAQ,CAAC;QACpB,KAAK,WAAW;YACZ,OAAO,SAAS,CAAC;QACrB,KAAK,aAAa;YACd,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC;AACD,SAAgB,0BAA0B,CAAC,IAAoC;IAC3E,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,MAAM,KAAK,GAAuB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1D,GAAG,EAAE,KAAK,CAAC,MAAM;QACjB,KAAK,EAAE,QAAQ,KAAK,CAAC,QAAQ,EAAE;QAC/B,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3E,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;KAClD,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5C,CAAC;AACD,6EAA6E;AAC7E,SAAgB,6BAA6B,CAAC,IAAuC;IACjF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC3C,OAAO,IAAI,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9D,CAAC;AACD,wFAAwF;AAC3E,QAAA,oCAAoC,GAA4B;IACzE;QACI,KAAK,EAAE,gCAAgC;QACvC,KAAK,EAAE;YACH;gBACI,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,sDAAsD;aAClE;SACJ;KACJ;CACJ,CAAC;AACF,SAAgB,yBAAyB,CAAC,IAAmC;IACzE,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAe,EAAE,CAAC,CAAC;YACjD,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE;SACvD,CAAC,CAAC;KACN,CAAC,CAAC,CAAC;AACR,CAAC;AACD,SAAgB,mBAAmB,CAAC,IAA6B;IAC7D,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO;QACH;YACI,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;SACxE;KACJ,CAAC;AACN,CAAC;AACD,SAAgB,uBAAuB,CAAC,IAAiC;IACrE,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACpF,CAAC;AACD,qDAAqD;AACrD,SAAgB,kBAAkB,CAAC,IAA4B;IAC3D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,IAAI;QACP,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,MAAM;YACT,MAAM,EAAE,IAAA,kCAAkB,EAAC,MAAM,CAAC,MAAM,CAAC;SAC5C,CAAC,CAAC;KACN,CAAC,CAAC,CAAC;AACR,CAAC;AACD,SAAgB,qBAAqB,CAAC,KAA8B,EAAE,WAA0C;IAC5G,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,yBAAyB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1G,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AACD,wEAAwE;AACxE;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,MAA4B,EAAE,YAAwC;IAI5G,MAAM,KAAK,GAAG,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAU,CAAC,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,MAAM,SAAS,GAAG,CAAC,IAAgB,EAAc,EAAE;QAC/C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,IAAI,KAAK,SAAS;gBAClB,OAAO,EAAE,CAAC;YACd,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAChE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;gBACvB,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAC,0BAAS,IAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;aAChF,CAAC;QACN,OAAO;YACH,GAAG,IAAI;YACP,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAChD,CAAC;IACN,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAsB,EAAE,CAAC,CAAC;QACnE,GAAG,KAAK;QACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;KACpC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,MAAM,KAAK,IAAI;QAClC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACE,GAAG,MAAM;YACT,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;SAC5C,CAAC;IACN,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,qBAAqB,GAAG,YAAY,KAAK,IAAI,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAC9E,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAC3E,CAAC;AACD,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC5C,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC","sourcesContent":["// Attempt 详情 Content 投影:compute 领域结果 → 原语 Content 形状。\n// 输入全部是当前闭合 DomainView 派生的普通值。\nimport { Text, TurnTrace } from \"../../definition/primitives.tsx\";\nimport type { ReportNode } from \"../../definition/tree.ts\";\nimport type { CalloutGroup, CalloutItem } from \"../../definition/primitives/callouts-logic.ts\";\nimport type { CopyBlockContent } from \"../../definition/primitives/copy-block.tsx\";\nimport type { CommandEvidenceContent, ConversationContent, ConversationEntry, ConversationTurn } from \"../../definition/primitives/conversation.tsx\";\nimport { ToolEvidence } from \"../../definition/primitives/tool-evidence.tsx\";\nimport type { DiffContent } from \"../../definition/primitives/diff-lines.ts\";\nimport type { SourceBlockContent, SourceContent, SourceLine, SourceLineTone, } from \"../../definition/primitives/source-view.tsx\";\nimport type { WaterfallContent, WaterfallNode } from \"../../definition/primitives/waterfall.tsx\";\nimport type { TableContent, TableContentRow } from \"../../definition/cell.ts\";\nimport type { ClosedTimingInterval } from \"../../../analysis/index.ts\";\nimport { formatDurationMs, formatPointsSuffix } from \"../../model/format.ts\";\nimport { localizedMessage } from \"../../model/locale.ts\";\nimport { normalizeTurnLabel } from \"../../../shared/turn-label.ts\";\nimport type { AttemptAssertionsData, AttemptAssertionView, AttemptCommandEvidenceData, AttemptConversationData, AttemptConversationReply, AttemptDiagnosticsData, AttemptDiffData, AttemptErrorData, AttemptFixPromptData, AttemptSourceData, AttemptSourceItemView, AttemptTimelineData, AttemptTraceData, } from \"./compute.ts\";\n// ───────────────────────── AttemptSource ─────────────────────────\n/** 该行 assertion 的判定摘要行 tone:与源码行状态同一套色。 */\nfunction assertionToneClass(assertion: AttemptAssertionView): string {\n if (assertion.outcome === \"unavailable\")\n return \"niceeval-tone-na\";\n if (assertion.outcome === \"passed\")\n return \"niceeval-tone-good\";\n return assertion.severity === \"gate\" ? \"niceeval-tone-bad\" : \"niceeval-tone-warn\";\n}\n/**\n * 一条 assertion 在展开区里的呈现:一行判定摘要,再接一段详情正文\n * (docs/feature/reports/library.md「源码行展开区里有什么」)。\n */\nfunction assertionNodes(assertion: AttemptAssertionView, key: string): ReportNode[] {\n const points = assertion.outcome !== \"unavailable\" && assertion.score !== undefined\n ? ` ${formatPointsSuffix(assertion.score.state === \"earned\" ? assertion.score.earned ?? 0 : 0)}`\n : \"\";\n const head = `${assertion.name} · ${assertion.severity} ${assertion.outcome}${points}`;\n const nodes: ReportNode[] = [\n <Text key={`${key}:head`} className={`niceeval-source-assertion ${assertionToneClass(assertion)}`}>\n {head}\n </Text>,\n ];\n if (assertion.detail.length > 0) {\n nodes.push(<Text key={`${key}:body`} className=\"niceeval-source-assertion-body\">\n {assertion.detail}\n </Text>);\n }\n return nodes;\n}\nfunction lineToneOf(assertions: readonly AttemptAssertionView[]): SourceLineTone | undefined {\n if (assertions.some((assertion) => assertion.outcome === \"failed\" && assertion.severity === \"gate\"))\n return \"gate-fail\";\n if (assertions.some((assertion) => assertion.outcome === \"failed\"))\n return \"soft-fail\";\n if (assertions.some((assertion) => assertion.outcome === \"unavailable\"))\n return \"unavailable\";\n if (assertions.some((assertion) => assertion.outcome === \"passed\"))\n return \"passed\";\n return undefined;\n}\ninterface SiteLineBinding {\n readonly entry: AttemptAssertionView;\n readonly role: string;\n readonly line: number;\n}\n/** sourceSites → 每行注解绑定:detail 落在起始行,tone 覆盖整个行区间。 */\nfunction siteBindingsOf(data: AttemptSourceData): ReadonlyMap<string, readonly SiteLineBinding[]> {\n const entriesById = new Map(data.entries.map((entry) => [entry.entryId, entry] as const));\n const bindings = new Map<string, SiteLineBinding[]>();\n for (const site of data.sites) {\n const entry = entriesById.get(site.entryId);\n if (entry === undefined)\n continue;\n for (let line = site.startLine; line <= site.endLine; line += 1) {\n const bucket = bindings.get(`${site.sourceItemId}:${line}`) ?? [];\n bucket.push({ entry, role: site.role, line: site.startLine });\n bindings.set(`${site.sourceItemId}:${line}`, bucket);\n }\n }\n return bindings;\n}\nfunction sourceItemBlock(item: AttemptSourceItemView, data: AttemptSourceData, bindings: ReadonlyMap<string, readonly SiteLineBinding[]>): SourceBlockContent {\n const lines: SourceLine[] = item.lines.map((text, index): SourceLine => {\n const line = index + 1;\n const bound = bindings.get(`${item.sourceItemId}:${line}`) ?? [];\n const assertions = bound.filter((binding) => binding.role !== \"score\").map((binding) => binding.entry);\n const details = bound\n .filter((binding) => binding.line === line && binding.role !== \"score\")\n .map((binding, detailIndex) => assertionNodes(binding.entry, `${item.path}:${line}:${detailIndex}`))\n .flat();\n const points = bound\n .filter((binding) => binding.role === \"score\")\n .reduce((sum, binding) => sum + (binding.entry.score?.state === \"earned\" ? binding.entry.score.earned ?? 0 : 0), 0);\n const hasPoints = bound.some((binding) => binding.role === \"score\" && binding.entry.score !== undefined);\n const tone = lineToneOf(assertions);\n const turnIds = (data.navigation?.rows ?? [])\n .filter((row) => row.source.state === \"mapped\" &&\n row.source.sourceItemId === item.sourceItemId &&\n row.source.sha256 === item.sha256 &&\n row.source.start.line === line)\n .sort((left, right) => (left.sourceOrder ?? Number.MAX_SAFE_INTEGER) - (right.sourceOrder ?? Number.MAX_SAFE_INTEGER) ||\n (left.turnId < right.turnId ? -1 : left.turnId > right.turnId ? 1 : 0))\n .map((row) => row.turnId);\n return {\n number: line,\n text,\n ...(turnIds.length > 0 ? { interaction: \"send\" as const, turnIds } : {}),\n ...(tone !== undefined ? { tone } : {}),\n ...(hasPoints ? { pill: formatPointsSuffix(points) } : {}),\n ...(details.length > 0 ? { details } : {}),\n };\n });\n return { path: item.path, lines };\n}\n/**\n * 闭合 Sources + sourceSites → SourceView Content。spine 是第一个 source item,\n * 其余是 detached;没有 sourceSite 的 attention 断言进 unmapped 区,不丢弃。\n */\nexport function projectedSourceContent(data: AttemptSourceData | null, locator?: AttemptSourceData[\"locator\"]): SourceContent | null {\n if (data === null)\n return null;\n const bindings = siteBindingsOf(data);\n const referenced = new Set(data.sites.map((site) => site.entryId));\n const unmapped: ReportNode[] = data.entries\n .filter((entry) => !referenced.has(entry.entryId))\n .flatMap((entry, index) => assertionNodes(entry, `unmapped:${index}`));\n const spine = sourceItemBlock(data.items[0]!, data, bindings);\n const detached = data.items.slice(1).map((item) => sourceItemBlock(item, data, bindings));\n return {\n spine,\n detached,\n ...(unmapped.length > 0 ? { unmapped } : {}),\n ...(locator !== undefined ? { locator } : {}),\n };\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\nexport function attemptAssertionsContent(data: AttemptAssertionsData | null): TableContent | null {\n if (data === null || (data.attention.length === 0 && data.passedGroups.length === 0))\n return null;\n const rows: TableContentRow[] = [];\n for (const assertion of data.attention) {\n rows.push({\n key: assertion.entryId,\n cells: {\n name: { kind: \"text\", text: assertion.name },\n severity: { kind: \"text\", text: assertion.severity },\n outcome: { kind: \"verdict\", verdict: assertion.outcome === \"unavailable\" ? \"skipped\" : assertion.outcome },\n detail: assertion.detail.length > 0\n ? { kind: \"text\", text: assertion.detail }\n : { kind: \"notApplicable\" },\n },\n });\n }\n return {\n columns: [\n { key: \"name\", header: localizedMessage(\"attemptAssertions.name\") },\n { key: \"severity\", header: localizedMessage(\"attemptAssertions.severity\") },\n { key: \"outcome\", header: localizedMessage(\"attemptAssertions.outcome\") },\n { key: \"detail\", header: localizedMessage(\"attemptAssertions.detail\") },\n ],\n rows,\n };\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\nfunction timingTree(intervals: readonly ClosedTimingInterval[]): readonly WaterfallNode[] {\n const children = new Map<string | null, ClosedTimingInterval[]>();\n for (const interval of intervals) {\n const siblings = children.get(interval.parentIntervalId) ?? [];\n siblings.push(interval);\n children.set(interval.parentIntervalId, siblings);\n }\n const build = (parent: string | null): WaterfallNode[] => (children.get(parent) ?? [])\n .sort(compareIntervals)\n .map((interval) => {\n const phase = interval.phase;\n return {\n key: interval.intervalId,\n label: interval.label,\n kind: phase,\n startOffsetMs: interval.startOffsetMs,\n durationMs: interval.durationMs,\n ...(interval.outcome === \"failed\" || interval.outcome === \"interrupted\" ? { failed: true as const } : {}),\n // 主干默认展开:直接看到 eval.run 与 agent.send 内部活动。\n ...(phase === \"eval.run\" || phase === \"agent.send\" ? { open: true as const } : {}),\n ...(build(interval.intervalId).length > 0 ? { children: build(interval.intervalId) } : {}),\n };\n });\n return build(null);\n}\nfunction compareIntervals(left: ClosedTimingInterval, right: ClosedTimingInterval): number {\n return left.startOffsetMs - right.startOffsetMs || compareText(left.intervalId, right.intervalId);\n}\nfunction timingSpan(intervals: readonly ClosedTimingInterval[]): number | null {\n if (intervals.length === 0)\n return null;\n const start = Math.min(...intervals.map((interval) => interval.startOffsetMs));\n const end = Math.max(...intervals.map((interval) => interval.startOffsetMs + interval.durationMs));\n return Math.max(0, end - start);\n}\n/** 执行时间树:root 区间是 phase 主链,children 是采集侧层级。 */\nexport function attemptTimelineContent(data: AttemptTimelineData | null): WaterfallContent | null {\n if (data === null)\n return null;\n return [\n {\n key: data.locator,\n label: data.locator,\n durationMs: timingSpan(data.intervals),\n locator: data.locator,\n nodes: timingTree(data.intervals),\n },\n ];\n}\nexport function attemptTraceContent(data: AttemptTraceData | null): WaterfallContent | null {\n if (data === null)\n return null;\n return [\n {\n key: data.locator,\n label: data.locator,\n durationMs: timingSpan(data.intervals),\n locator: data.locator,\n nodes: timingTree(data.intervals),\n },\n ];\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\n/** 工具出入参等结构化值:JSON 化后交原语收口成单行预览(Conversation 的 preview 契约)。 */\nfunction jsonPreview(value: string | undefined): string {\n return value === undefined ? \"\" : value;\n}\nfunction conversationEntryOf(reply: AttemptConversationReply): ConversationEntry {\n switch (reply.kind) {\n case \"assistant\":\n case \"user\":\n case \"thinking\":\n case \"error\":\n return { kind: reply.kind, preview: reply.text, failed: reply.kind === \"error\" };\n case \"context\":\n return { kind: \"context\", preview: reply.text };\n case \"tool\": {\n const finished = reply.outputSummary !== undefined;\n const raw = finished ? reply.outputSummary : reply.inputSummary;\n return {\n kind: \"tool\",\n preview: finished\n ? `${reply.name} result`\n : `${reply.name}(${jsonPreview(reply.inputSummary)})`,\n raw,\n callId: reply.callId,\n callPhase: finished ? \"finished\" : \"started\",\n ...(reply.outcome === undefined ? {} : { callOutcome: reply.outcome }),\n ...(reply.failed === true ? { failed: true } : {}),\n detail: (<ToolEvidence content={{\n phase: finished ? \"finished\" : \"started\",\n tool: reply.name,\n callId: reply.callId,\n inputSummary: reply.inputSummary,\n ...(reply.outputSummary === undefined ? {} : { outputSummary: reply.outputSummary }),\n ...(reply.outcome === undefined ? {} : { outcome: reply.outcome }),\n }}/>),\n };\n }\n case \"subagent\":\n return {\n kind: \"subagent\",\n preview: reply.name,\n ...(reply.failed === true ? { failed: true } : {}),\n ...(reply.summary ? { detail: <Text>{reply.summary}</Text> } : {}),\n };\n case \"skill\":\n return { kind: \"skill\", preview: reply.text ? `${reply.skill}: ${reply.text}` : reply.skill };\n case \"input\":\n return {\n kind: \"input\",\n preview: `${reply.request.state} · ${reply.request.promptSummary}`,\n ...(reply.request.responseSummary !== null\n ? { detail: <Text>{reply.request.responseSummary}</Text> }\n : {}),\n };\n case \"compaction\":\n return { kind: \"compaction\", preview: reply.text || \"context compacted\" };\n }\n}\nfunction turnVerdictOf(outcome: AttemptConversationData[\"rounds\"][number][\"outcome\"]): ConversationTurn[\"verdict\"] {\n switch (outcome) {\n case \"completed\":\n return undefined;\n case \"failed\":\n return \"failed\";\n case \"cancelled\":\n return \"skipped\";\n case \"interrupted\":\n return \"errored\";\n }\n}\nexport function attemptConversationContent(data: AttemptConversationData | null): ConversationContent | null {\n if (data === null || data.rounds.length === 0)\n return null;\n const turns: ConversationTurn[] = data.rounds.map((round) => ({\n key: round.turnId,\n label: `Turn ${round.sequence}`,\n ...(round.durationMs === undefined ? {} : { durationMs: round.durationMs }),\n verdict: turnVerdictOf(round.outcome),\n entries: round.replies.map(conversationEntryOf),\n }));\n return { turns, locator: data.locator };\n}\n// ───────────────────────── AttemptCommandEvidence ─────────────────────────\nexport function attemptCommandEvidenceContent(data: AttemptCommandEvidenceData | null): CommandEvidenceContent | null {\n if (data === null || data.commands.length === 0)\n return null;\n return { locator: data.locator, commands: data.commands };\n}\n// ───────────────────────── AttemptDiagnostics / AttemptError ─────────────────────────\nexport const executionEvidenceUnavailableCallouts: readonly CalloutGroup[] = [\n {\n title: \"Execution evidence unavailable\",\n items: [\n {\n level: \"warning\",\n message: \"The events artifact is missing or was not published.\",\n },\n ],\n },\n];\nexport function attemptDiagnosticsContent(data: AttemptDiagnosticsData | null): readonly CalloutGroup[] | null {\n if (data === null)\n return null;\n return data.groups.map((group) => ({\n title: group.phase,\n items: group.items.map((diagnostic): CalloutItem => ({\n level: diagnostic.level,\n message: `${diagnostic.code}: ${diagnostic.summary}`,\n })),\n }));\n}\nexport function attemptErrorContent(data: AttemptErrorData | null): readonly CalloutGroup[] | null {\n if (data === null)\n return null;\n return [\n {\n title: data.phase,\n items: [{ level: \"error\", message: `${data.code}: ${data.message}` }],\n },\n ];\n}\nexport function attemptFixPromptContent(data: AttemptFixPromptData | null): CopyBlockContent | null {\n if (data === null)\n return null;\n return { title: { en: \"Fix prompt\", \"zh-CN\": \"修复 prompt\" }, text: data.prompt };\n}\n/** 投影已经是 `DiffFile[]`,这里只把「没有证据」与「没有改动」都收成组件的零输出。 */\nexport function attemptDiffContent(data: AttemptDiffData | null): DiffContent | null {\n if (data === null || data.files.length === 0)\n return null;\n return data.files.map((file) => ({\n ...file,\n windows: file.windows.map((window) => ({\n ...window,\n window: normalizeTurnLabel(window.window),\n })),\n }));\n}\nexport function attemptNoticesContent(error: AttemptErrorData | null, diagnostics: AttemptDiagnosticsData | null): readonly CalloutGroup[] | null {\n const groups = [...(attemptErrorContent(error) ?? []), ...(attemptDiagnosticsContent(diagnostics) ?? [])];\n return groups.length > 0 ? groups : null;\n}\n// ───────────────────────── Conversation 嵌入源码 ─────────────────────────\n/**\n * 只按已验证的 navigation turnId 将 Conversation 轮嵌入源码 send 行;没有\n * mapped row 的轮留在页尾。这里禁止按标签、源码顺序或数组位置补配。\n */\nexport function embedConversationInSource(source: SourceContent | null, conversation: ConversationContent | null): {\n source: SourceContent | null;\n conversation: ConversationContent | null;\n} {\n const turns = conversation?.turns ?? [];\n const turnById = new Map(turns.map((turn) => [turn.key, turn] as const));\n const mappedTurnIds = new Set<string>();\n const cloneLine = (line: SourceLine): SourceLine => {\n const lineTurns = (line.turnIds ?? []).flatMap((turnId) => {\n const turn = turnById.get(turnId);\n if (turn === undefined)\n return [];\n mappedTurnIds.add(turnId);\n return [turn];\n });\n const details = line.details === undefined && lineTurns.length === 0\n ? undefined\n : [\n ...(line.details ?? []),\n ...(lineTurns.length === 0 ? [] : [<TurnTrace data={{ turns: lineTurns }}/>]),\n ];\n return {\n ...line,\n ...(details === undefined ? {} : { details }),\n };\n };\n const cloneBlock = (block: SourceBlockContent): SourceBlockContent => ({\n ...block,\n lines: block.lines.map(cloneLine),\n });\n const embeddedSource = source === null\n ? null\n : {\n ...source,\n spine: cloneBlock(source.spine),\n detached: source.detached.map(cloneBlock),\n };\n const remainingTurns = turns.filter((turn) => !mappedTurnIds.has(turn.key));\n const remainingConversation = conversation === null || remainingTurns.length === 0\n ? null\n : { ...conversation, turns: remainingTurns };\n return { source: embeddedSource, conversation: remainingConversation };\n}\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["content.tsx"],"names":[],"mappings":";;;AAiHA,wDAgBC;AAED,4DA0BC;AAsCD,wDAYC;AACD,kDAYC;AAuED,gEAWC;AAED,sEAIC;AAaD,8DAUC;AACD,kDASC;AACD,0DAIC;AAED,gDAUC;AACD,sDAGC;AAMD,8DA0CC;;AA1ZD,sDAAsD;AACtD,+BAA+B;AAC/B,mEAAkE;AAKlE,oFAA6E;AAC7E,8FAAuF;AAMvF,qDAA6E;AAC7E,qDAAyD;AACzD,iEAAmE;AAEnE,oEAAoE;AACpE,2CAA2C;AAC3C,SAAS,kBAAkB,CAAC,SAA+B;IACvD,IAAI,SAAS,CAAC,OAAO,KAAK,aAAa;QACnC,OAAO,kBAAkB,CAAC;IAC9B,IAAI,SAAS,CAAC,OAAO,KAAK,QAAQ;QAC9B,OAAO,oBAAoB,CAAC;IAChC,OAAO,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACtF,CAAC;AACD;;;GAGG;AACH,SAAS,cAAc,CAAC,SAA+B,EAAE,GAAW;IAChE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,KAAK,aAAa,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;QAC/E,CAAC,CAAC,IAAI,IAAA,8BAAkB,EAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAChG,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;IACvF,MAAM,KAAK,GAAiB;QACxB,uBAAC,qBAAI,IAAqB,SAAS,EAAE,6BAA6B,kBAAkB,CAAC,SAAS,CAAC,EAAE,YAClG,IAAI,IADQ,GAAG,GAAG,OAAO,CAErB;KACN,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,uBAAC,0CAAiB,IAAqB,OAAO,EAAE,SAAS,CAAC,QAAQ,IAA1C,GAAG,GAAG,OAAO,CAAgC,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAS,UAAU,CAAC,UAA2C;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC;QAC/F,OAAO,WAAW,CAAC;IACvB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC;QAC9D,OAAO,WAAW,CAAC;IACvB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,aAAa,CAAC;QACnE,OAAO,aAAa,CAAC;IACzB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC;QAC9D,OAAO,QAAQ,CAAC;IACpB,OAAO,SAAS,CAAC;AACrB,CAAC;AAMD,sDAAsD;AACtD,SAAS,cAAc,CAAC,IAAuB;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YACnB,SAAS;QACb,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9D,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AACD,SAAS,eAAe,CAAC,IAA2B,EAAE,IAAuB,EAAE,QAAyD;IACpI,MAAM,KAAK,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAc,EAAE;QACnE,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACjE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvG,MAAM,OAAO,GAAG,KAAK;aAChB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;aACtE,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;aACnG,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,KAAK;aACf,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;aAC7C,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxH,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC;aACxC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ;YAC9C,GAAG,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;YAC7C,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;aAC9B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB,CAAC;YACrH,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACtE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO;YACH,MAAM,EAAE,IAAI;YACZ,IAAI;YACJ,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAA,8BAAkB,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7C,CAAC;IACN,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC;AACD;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,IAA8B,EAAE,OAAsC;IACzG,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAiB,IAAI,CAAC,OAAO;SACtC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACjD,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1F,OAAO;QACH,KAAK;QACL,QAAQ;QACR,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACN,CAAC;AACD,wEAAwE;AACxE,SAAgB,wBAAwB,CAAC,IAAkC;IACvE,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IAChB,MAAM,IAAI,GAAsB,EAAE,CAAC;IACnC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC;YACN,GAAG,EAAE,SAAS,CAAC,OAAO;YACtB,KAAK,EAAE;gBACH,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;gBAC5C,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE;gBACpD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;gBAC1G,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;oBAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE;oBAC1C,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE;aAClC;SACJ,CAAC,CAAC;IACP,CAAC;IACD,OAAO;QACH,OAAO,EAAE;YACL,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAA,4BAAgB,EAAC,wBAAwB,CAAC,EAAE;YACnE,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,IAAA,4BAAgB,EAAC,4BAA4B,CAAC,EAAE;YAC3E,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAA,4BAAgB,EAAC,2BAA2B,CAAC,EAAE;YACzE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAA,4BAAgB,EAAC,0BAA0B,CAAC,EAAE;SAC1E;QACD,IAAI;KACP,CAAC;AACN,CAAC;AACD,qFAAqF;AACrF,SAAS,UAAU,CAAC,SAA0C;IAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC;IAClE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAqB,EAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACjF,IAAI,CAAC,gBAAgB,CAAC;SACtB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,OAAO;YACH,GAAG,EAAE,QAAQ,CAAC,UAAU;YACxB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,KAAK;YACX,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzG,0CAA0C;YAC1C,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7F,CAAC;IACN,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AACD,SAAS,gBAAgB,CAAC,IAA0B,EAAE,KAA2B;IAC7E,OAAO,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;AACtG,CAAC;AACD,SAAS,UAAU,CAAC,SAA0C;IAC1D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACnG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;AACpC,CAAC;AACD,+CAA+C;AAC/C,SAAgB,sBAAsB,CAAC,IAAgC;IACnE,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO;QACH;YACI,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACtC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;SACpC;KACJ,CAAC;AACN,CAAC;AACD,SAAgB,mBAAmB,CAAC,IAA6B;IAC7D,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO;QACH;YACI,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACtC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;SACpC;KACJ,CAAC;AACN,CAAC;AACD,0EAA0E;AAC1E,+DAA+D;AAC/D,SAAS,WAAW,CAAC,KAAyB;IAC1C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AACD,SAAS,mBAAmB,CAAC,KAA+B;IACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO;YACR,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACrF,KAAK,SAAS;YACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC;YACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YAChE,OAAO;gBACH,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,QAAQ;oBACb,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,SAAS;oBACxB,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;gBACzD,GAAG;gBACH,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;gBAC5C,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBACtE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,EAAE,CAAC,uBAAC,gCAAY,IAAC,OAAO,EAAE;wBACxB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;wBACxC,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,YAAY,EAAE,KAAK,CAAC,YAAY;wBAChC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;wBACpF,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;qBACrE,GAAG,CAAC;aACZ,CAAC;QACN,CAAC;QACD,KAAK,UAAU;YACX,OAAO;gBACH,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,KAAK,CAAC,IAAI;gBACnB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAC,qBAAI,cAAE,KAAK,CAAC,OAAO,GAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrE,CAAC;QACN,KAAK,OAAO;YACR,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClG,KAAK,OAAO;YACR,OAAO;gBACH,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,MAAM,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;gBAClE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI;oBACtC,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAC,qBAAI,cAAE,KAAK,CAAC,OAAO,CAAC,eAAe,GAAQ,EAAE;oBAC1D,CAAC,CAAC,EAAE,CAAC;aACZ,CAAC;QACN,KAAK,YAAY;YACb,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAClF,CAAC;AACL,CAAC;AACD,SAAS,aAAa,CAAC,OAA6D;IAChF,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,WAAW;YACZ,OAAO,SAAS,CAAC;QACrB,KAAK,QAAQ;YACT,OAAO,QAAQ,CAAC;QACpB,KAAK,WAAW;YACZ,OAAO,SAAS,CAAC;QACrB,KAAK,aAAa;YACd,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC;AACD,SAAgB,0BAA0B,CAAC,IAAoC;IAC3E,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,MAAM,KAAK,GAAuB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1D,GAAG,EAAE,KAAK,CAAC,MAAM;QACjB,KAAK,EAAE,QAAQ,KAAK,CAAC,QAAQ,EAAE;QAC/B,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3E,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;KAClD,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5C,CAAC;AACD,6EAA6E;AAC7E,SAAgB,6BAA6B,CAAC,IAAuC;IACjF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC3C,OAAO,IAAI,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9D,CAAC;AACD,wFAAwF;AAC3E,QAAA,oCAAoC,GAA4B;IACzE;QACI,KAAK,EAAE,gCAAgC;QACvC,KAAK,EAAE;YACH;gBACI,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,sDAAsD;aAClE;SACJ;KACJ;CACJ,CAAC;AACF,SAAgB,yBAAyB,CAAC,IAAmC;IACzE,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAe,EAAE,CAAC,CAAC;YACjD,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE;SACvD,CAAC,CAAC;KACN,CAAC,CAAC,CAAC;AACR,CAAC;AACD,SAAgB,mBAAmB,CAAC,IAA6B;IAC7D,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO;QACH;YACI,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;SACxE;KACJ,CAAC;AACN,CAAC;AACD,SAAgB,uBAAuB,CAAC,IAAiC;IACrE,IAAI,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,CAAC;IAChB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACpF,CAAC;AACD,qDAAqD;AACrD,SAAgB,kBAAkB,CAAC,IAA4B;IAC3D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,IAAI;QACP,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,MAAM;YACT,MAAM,EAAE,IAAA,kCAAkB,EAAC,MAAM,CAAC,MAAM,CAAC;SAC5C,CAAC,CAAC;KACN,CAAC,CAAC,CAAC;AACR,CAAC;AACD,SAAgB,qBAAqB,CAAC,KAA8B,EAAE,WAA0C;IAC5G,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,yBAAyB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1G,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AACD,wEAAwE;AACxE;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,MAA4B,EAAE,YAAwC;IAI5G,MAAM,KAAK,GAAG,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAU,CAAC,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,MAAM,SAAS,GAAG,CAAC,IAAgB,EAAc,EAAE;QAC/C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,IAAI,KAAK,SAAS;gBAClB,OAAO,EAAE,CAAC;YACd,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAChE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;gBACvB,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAC,0BAAS,IAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;aAChF,CAAC;QACN,OAAO;YACH,GAAG,IAAI;YACP,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAChD,CAAC;IACN,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAsB,EAAE,CAAC,CAAC;QACnE,GAAG,KAAK;QACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;KACpC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,MAAM,KAAK,IAAI;QAClC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACE,GAAG,MAAM;YACT,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;SAC5C,CAAC;IACN,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,qBAAqB,GAAG,YAAY,KAAK,IAAI,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAC9E,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAC3E,CAAC;AACD,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC5C,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC","sourcesContent":["// Attempt 详情 Content 投影:compute 领域结果 → 原语 Content 形状。\n// 输入全部是当前闭合 DomainView 派生的普通值。\nimport { Text, TurnTrace } from \"../../definition/primitives.tsx\";\nimport type { ReportNode } from \"../../definition/tree.ts\";\nimport type { CalloutGroup, CalloutItem } from \"../../definition/primitives/callouts-logic.ts\";\nimport type { CopyBlockContent } from \"../../definition/primitives/copy-block.tsx\";\nimport type { CommandEvidenceContent, ConversationContent, ConversationEntry, ConversationTurn } from \"../../definition/primitives/conversation.tsx\";\nimport { ToolEvidence } from \"../../definition/primitives/tool-evidence.tsx\";\nimport { AssertionEvidence } from \"../../definition/primitives/assertion-evidence.tsx\";\nimport type { DiffContent } from \"../../definition/primitives/diff-lines.ts\";\nimport type { SourceBlockContent, SourceContent, SourceLine, SourceLineTone, } from \"../../definition/primitives/source-view.tsx\";\nimport type { WaterfallContent, WaterfallNode } from \"../../definition/primitives/waterfall.tsx\";\nimport type { TableContent, TableContentRow } from \"../../definition/cell.ts\";\nimport type { ClosedTimingInterval } from \"../../../analysis/index.ts\";\nimport { formatDurationMs, formatPointsSuffix } from \"../../model/format.ts\";\nimport { localizedMessage } from \"../../model/locale.ts\";\nimport { normalizeTurnLabel } from \"../../../shared/turn-label.ts\";\nimport type { AttemptAssertionsData, AttemptAssertionView, AttemptCommandEvidenceData, AttemptConversationData, AttemptConversationReply, AttemptDiagnosticsData, AttemptDiffData, AttemptErrorData, AttemptFixPromptData, AttemptSourceData, AttemptSourceItemView, AttemptTimelineData, AttemptTraceData, } from \"./compute.ts\";\n// ───────────────────────── AttemptSource ─────────────────────────\n/** 该行 assertion 的判定摘要行 tone:与源码行状态同一套色。 */\nfunction assertionToneClass(assertion: AttemptAssertionView): string {\n if (assertion.outcome === \"unavailable\")\n return \"niceeval-tone-na\";\n if (assertion.outcome === \"passed\")\n return \"niceeval-tone-good\";\n return assertion.severity === \"gate\" ? \"niceeval-tone-bad\" : \"niceeval-tone-warn\";\n}\n/**\n * 一条 assertion 在展开区里的呈现:一行判定摘要,再接五段中立结构\n * (docs/feature/reports/library.md「源码行展开区里有什么」)。\n */\nfunction assertionNodes(assertion: AttemptAssertionView, key: string): ReportNode[] {\n const points = assertion.outcome !== \"unavailable\" && assertion.score !== undefined\n ? ` ${formatPointsSuffix(assertion.score.state === \"earned\" ? assertion.score.earned ?? 0 : 0)}`\n : \"\";\n const head = `${assertion.name} · ${assertion.severity} ${assertion.outcome}${points}`;\n const nodes: ReportNode[] = [\n <Text key={`${key}:head`} className={`niceeval-source-assertion ${assertionToneClass(assertion)}`}>\n {head}\n </Text>,\n ];\n nodes.push(<AssertionEvidence key={`${key}:body`} content={assertion.evidence}/>);\n return nodes;\n}\nfunction lineToneOf(assertions: readonly AttemptAssertionView[]): SourceLineTone | undefined {\n if (assertions.some((assertion) => assertion.outcome === \"failed\" && assertion.severity === \"gate\"))\n return \"gate-fail\";\n if (assertions.some((assertion) => assertion.outcome === \"failed\"))\n return \"soft-fail\";\n if (assertions.some((assertion) => assertion.outcome === \"unavailable\"))\n return \"unavailable\";\n if (assertions.some((assertion) => assertion.outcome === \"passed\"))\n return \"passed\";\n return undefined;\n}\ninterface SiteLineBinding {\n readonly entry: AttemptAssertionView;\n readonly role: string;\n readonly line: number;\n}\n/** sourceSites → 每行注解绑定:detail 落在起始行,tone 覆盖整个行区间。 */\nfunction siteBindingsOf(data: AttemptSourceData): ReadonlyMap<string, readonly SiteLineBinding[]> {\n const entriesById = new Map(data.entries.map((entry) => [entry.entryId, entry] as const));\n const bindings = new Map<string, SiteLineBinding[]>();\n for (const site of data.sites) {\n const entry = entriesById.get(site.entryId);\n if (entry === undefined)\n continue;\n for (let line = site.startLine; line <= site.endLine; line += 1) {\n const bucket = bindings.get(`${site.sourceItemId}:${line}`) ?? [];\n bucket.push({ entry, role: site.role, line: site.startLine });\n bindings.set(`${site.sourceItemId}:${line}`, bucket);\n }\n }\n return bindings;\n}\nfunction sourceItemBlock(item: AttemptSourceItemView, data: AttemptSourceData, bindings: ReadonlyMap<string, readonly SiteLineBinding[]>): SourceBlockContent {\n const lines: SourceLine[] = item.lines.map((text, index): SourceLine => {\n const line = index + 1;\n const bound = bindings.get(`${item.sourceItemId}:${line}`) ?? [];\n const assertions = bound.filter((binding) => binding.role !== \"score\").map((binding) => binding.entry);\n const details = bound\n .filter((binding) => binding.line === line && binding.role !== \"score\")\n .map((binding, detailIndex) => assertionNodes(binding.entry, `${item.path}:${line}:${detailIndex}`))\n .flat();\n const points = bound\n .filter((binding) => binding.role === \"score\")\n .reduce((sum, binding) => sum + (binding.entry.score?.state === \"earned\" ? binding.entry.score.earned ?? 0 : 0), 0);\n const hasPoints = bound.some((binding) => binding.role === \"score\" && binding.entry.score !== undefined);\n const tone = lineToneOf(assertions);\n const turnIds = (data.navigation?.rows ?? [])\n .filter((row) => row.source.state === \"mapped\" &&\n row.source.sourceItemId === item.sourceItemId &&\n row.source.sha256 === item.sha256 &&\n row.source.start.line === line)\n .sort((left, right) => (left.sourceOrder ?? Number.MAX_SAFE_INTEGER) - (right.sourceOrder ?? Number.MAX_SAFE_INTEGER) ||\n (left.turnId < right.turnId ? -1 : left.turnId > right.turnId ? 1 : 0))\n .map((row) => row.turnId);\n return {\n number: line,\n text,\n ...(turnIds.length > 0 ? { interaction: \"send\" as const, turnIds } : {}),\n ...(tone !== undefined ? { tone } : {}),\n ...(hasPoints ? { pill: formatPointsSuffix(points) } : {}),\n ...(details.length > 0 ? { details } : {}),\n };\n });\n return { path: item.path, lines };\n}\n/**\n * 闭合 Sources + sourceSites → SourceView Content。spine 是第一个 source item,\n * 其余是 detached;没有 sourceSite 的 attention 断言进 unmapped 区,不丢弃。\n */\nexport function projectedSourceContent(data: AttemptSourceData | null, locator?: AttemptSourceData[\"locator\"]): SourceContent | null {\n if (data === null)\n return null;\n const bindings = siteBindingsOf(data);\n const referenced = new Set(data.sites.map((site) => site.entryId));\n const unmapped: ReportNode[] = data.entries\n .filter((entry) => !referenced.has(entry.entryId))\n .flatMap((entry, index) => assertionNodes(entry, `unmapped:${index}`));\n const spine = sourceItemBlock(data.items[0]!, data, bindings);\n const detached = data.items.slice(1).map((item) => sourceItemBlock(item, data, bindings));\n return {\n spine,\n detached,\n ...(unmapped.length > 0 ? { unmapped } : {}),\n ...(locator !== undefined ? { locator } : {}),\n };\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\nexport function attemptAssertionsContent(data: AttemptAssertionsData | null): TableContent | null {\n if (data === null || (data.attention.length === 0 && data.passedGroups.length === 0))\n return null;\n const rows: TableContentRow[] = [];\n for (const assertion of data.attention) {\n rows.push({\n key: assertion.entryId,\n cells: {\n name: { kind: \"text\", text: assertion.name },\n severity: { kind: \"text\", text: assertion.severity },\n outcome: { kind: \"verdict\", verdict: assertion.outcome === \"unavailable\" ? \"skipped\" : assertion.outcome },\n detail: assertion.detail.length > 0\n ? { kind: \"text\", text: assertion.detail }\n : { kind: \"notApplicable\" },\n },\n });\n }\n return {\n columns: [\n { key: \"name\", header: localizedMessage(\"attemptAssertions.name\") },\n { key: \"severity\", header: localizedMessage(\"attemptAssertions.severity\") },\n { key: \"outcome\", header: localizedMessage(\"attemptAssertions.outcome\") },\n { key: \"detail\", header: localizedMessage(\"attemptAssertions.detail\") },\n ],\n rows,\n };\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\nfunction timingTree(intervals: readonly ClosedTimingInterval[]): readonly WaterfallNode[] {\n const children = new Map<string | null, ClosedTimingInterval[]>();\n for (const interval of intervals) {\n const siblings = children.get(interval.parentIntervalId) ?? [];\n siblings.push(interval);\n children.set(interval.parentIntervalId, siblings);\n }\n const build = (parent: string | null): WaterfallNode[] => (children.get(parent) ?? [])\n .sort(compareIntervals)\n .map((interval) => {\n const phase = interval.phase;\n return {\n key: interval.intervalId,\n label: interval.label,\n kind: phase,\n startOffsetMs: interval.startOffsetMs,\n durationMs: interval.durationMs,\n ...(interval.outcome === \"failed\" || interval.outcome === \"interrupted\" ? { failed: true as const } : {}),\n // 主干默认展开:直接看到 eval.run 与 agent.send 内部活动。\n ...(phase === \"eval.run\" || phase === \"agent.send\" ? { open: true as const } : {}),\n ...(build(interval.intervalId).length > 0 ? { children: build(interval.intervalId) } : {}),\n };\n });\n return build(null);\n}\nfunction compareIntervals(left: ClosedTimingInterval, right: ClosedTimingInterval): number {\n return left.startOffsetMs - right.startOffsetMs || compareText(left.intervalId, right.intervalId);\n}\nfunction timingSpan(intervals: readonly ClosedTimingInterval[]): number | null {\n if (intervals.length === 0)\n return null;\n const start = Math.min(...intervals.map((interval) => interval.startOffsetMs));\n const end = Math.max(...intervals.map((interval) => interval.startOffsetMs + interval.durationMs));\n return Math.max(0, end - start);\n}\n/** 执行时间树:root 区间是 phase 主链,children 是采集侧层级。 */\nexport function attemptTimelineContent(data: AttemptTimelineData | null): WaterfallContent | null {\n if (data === null)\n return null;\n return [\n {\n key: data.locator,\n label: data.locator,\n durationMs: timingSpan(data.intervals),\n locator: data.locator,\n nodes: timingTree(data.intervals),\n },\n ];\n}\nexport function attemptTraceContent(data: AttemptTraceData | null): WaterfallContent | null {\n if (data === null)\n return null;\n return [\n {\n key: data.locator,\n label: data.locator,\n durationMs: timingSpan(data.intervals),\n locator: data.locator,\n nodes: timingTree(data.intervals),\n },\n ];\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\n/** 工具出入参等结构化值:JSON 化后交原语收口成单行预览(Conversation 的 preview 契约)。 */\nfunction jsonPreview(value: string | undefined): string {\n return value === undefined ? \"\" : value;\n}\nfunction conversationEntryOf(reply: AttemptConversationReply): ConversationEntry {\n switch (reply.kind) {\n case \"assistant\":\n case \"user\":\n case \"thinking\":\n case \"error\":\n return { kind: reply.kind, preview: reply.text, failed: reply.kind === \"error\" };\n case \"context\":\n return { kind: \"context\", preview: reply.text };\n case \"tool\": {\n const finished = reply.outputSummary !== undefined;\n const raw = finished ? reply.outputSummary : reply.inputSummary;\n return {\n kind: \"tool\",\n preview: finished\n ? `${reply.name} result`\n : `${reply.name}(${jsonPreview(reply.inputSummary)})`,\n raw,\n callId: reply.callId,\n callPhase: finished ? \"finished\" : \"started\",\n ...(reply.outcome === undefined ? {} : { callOutcome: reply.outcome }),\n ...(reply.failed === true ? { failed: true } : {}),\n detail: (<ToolEvidence content={{\n phase: finished ? \"finished\" : \"started\",\n tool: reply.name,\n callId: reply.callId,\n inputSummary: reply.inputSummary,\n ...(reply.outputSummary === undefined ? {} : { outputSummary: reply.outputSummary }),\n ...(reply.outcome === undefined ? {} : { outcome: reply.outcome }),\n }}/>),\n };\n }\n case \"subagent\":\n return {\n kind: \"subagent\",\n preview: reply.name,\n ...(reply.failed === true ? { failed: true } : {}),\n ...(reply.summary ? { detail: <Text>{reply.summary}</Text> } : {}),\n };\n case \"skill\":\n return { kind: \"skill\", preview: reply.text ? `${reply.skill}: ${reply.text}` : reply.skill };\n case \"input\":\n return {\n kind: \"input\",\n preview: `${reply.request.state} · ${reply.request.promptSummary}`,\n ...(reply.request.responseSummary !== null\n ? { detail: <Text>{reply.request.responseSummary}</Text> }\n : {}),\n };\n case \"compaction\":\n return { kind: \"compaction\", preview: reply.text || \"context compacted\" };\n }\n}\nfunction turnVerdictOf(outcome: AttemptConversationData[\"rounds\"][number][\"outcome\"]): ConversationTurn[\"verdict\"] {\n switch (outcome) {\n case \"completed\":\n return undefined;\n case \"failed\":\n return \"failed\";\n case \"cancelled\":\n return \"skipped\";\n case \"interrupted\":\n return \"errored\";\n }\n}\nexport function attemptConversationContent(data: AttemptConversationData | null): ConversationContent | null {\n if (data === null || data.rounds.length === 0)\n return null;\n const turns: ConversationTurn[] = data.rounds.map((round) => ({\n key: round.turnId,\n label: `Turn ${round.sequence}`,\n ...(round.durationMs === undefined ? {} : { durationMs: round.durationMs }),\n verdict: turnVerdictOf(round.outcome),\n entries: round.replies.map(conversationEntryOf),\n }));\n return { turns, locator: data.locator };\n}\n// ───────────────────────── AttemptCommandEvidence ─────────────────────────\nexport function attemptCommandEvidenceContent(data: AttemptCommandEvidenceData | null): CommandEvidenceContent | null {\n if (data === null || data.commands.length === 0)\n return null;\n return { locator: data.locator, commands: data.commands };\n}\n// ───────────────────────── AttemptDiagnostics / AttemptError ─────────────────────────\nexport const executionEvidenceUnavailableCallouts: readonly CalloutGroup[] = [\n {\n title: \"Execution evidence unavailable\",\n items: [\n {\n level: \"warning\",\n message: \"The events artifact is missing or was not published.\",\n },\n ],\n },\n];\nexport function attemptDiagnosticsContent(data: AttemptDiagnosticsData | null): readonly CalloutGroup[] | null {\n if (data === null)\n return null;\n return data.groups.map((group) => ({\n title: group.phase,\n items: group.items.map((diagnostic): CalloutItem => ({\n level: diagnostic.level,\n message: `${diagnostic.code}: ${diagnostic.summary}`,\n })),\n }));\n}\nexport function attemptErrorContent(data: AttemptErrorData | null): readonly CalloutGroup[] | null {\n if (data === null)\n return null;\n return [\n {\n title: data.phase,\n items: [{ level: \"error\", message: `${data.code}: ${data.message}` }],\n },\n ];\n}\nexport function attemptFixPromptContent(data: AttemptFixPromptData | null): CopyBlockContent | null {\n if (data === null)\n return null;\n return { title: { en: \"Fix prompt\", \"zh-CN\": \"修复 prompt\" }, text: data.prompt };\n}\n/** 投影已经是 `DiffFile[]`,这里只把「没有证据」与「没有改动」都收成组件的零输出。 */\nexport function attemptDiffContent(data: AttemptDiffData | null): DiffContent | null {\n if (data === null || data.files.length === 0)\n return null;\n return data.files.map((file) => ({\n ...file,\n windows: file.windows.map((window) => ({\n ...window,\n window: normalizeTurnLabel(window.window),\n })),\n }));\n}\nexport function attemptNoticesContent(error: AttemptErrorData | null, diagnostics: AttemptDiagnosticsData | null): readonly CalloutGroup[] | null {\n const groups = [...(attemptErrorContent(error) ?? []), ...(attemptDiagnosticsContent(diagnostics) ?? [])];\n return groups.length > 0 ? groups : null;\n}\n// ───────────────────────── Conversation 嵌入源码 ─────────────────────────\n/**\n * 只按已验证的 navigation turnId 将 Conversation 轮嵌入源码 send 行;没有\n * mapped row 的轮留在页尾。这里禁止按标签、源码顺序或数组位置补配。\n */\nexport function embedConversationInSource(source: SourceContent | null, conversation: ConversationContent | null): {\n source: SourceContent | null;\n conversation: ConversationContent | null;\n} {\n const turns = conversation?.turns ?? [];\n const turnById = new Map(turns.map((turn) => [turn.key, turn] as const));\n const mappedTurnIds = new Set<string>();\n const cloneLine = (line: SourceLine): SourceLine => {\n const lineTurns = (line.turnIds ?? []).flatMap((turnId) => {\n const turn = turnById.get(turnId);\n if (turn === undefined)\n return [];\n mappedTurnIds.add(turnId);\n return [turn];\n });\n const details = line.details === undefined && lineTurns.length === 0\n ? undefined\n : [\n ...(line.details ?? []),\n ...(lineTurns.length === 0 ? [] : [<TurnTrace data={{ turns: lineTurns }}/>]),\n ];\n return {\n ...line,\n ...(details === undefined ? {} : { details }),\n };\n };\n const cloneBlock = (block: SourceBlockContent): SourceBlockContent => ({\n ...block,\n lines: block.lines.map(cloneLine),\n });\n const embeddedSource = source === null\n ? null\n : {\n ...source,\n spine: cloneBlock(source.spine),\n detached: source.detached.map(cloneBlock),\n };\n const remainingTurns = turns.filter((turn) => !mappedTurnIds.has(turn.key));\n const remainingConversation = conversation === null || remainingTurns.length === 0\n ? null\n : { ...conversation, turns: remainingTurns };\n return { source: embeddedSource, conversation: remainingConversation };\n}\nfunction compareText(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n"]}
|
|
@@ -42,6 +42,41 @@ function capabilitiesProblem(value, path) {
|
|
|
42
42
|
}
|
|
43
43
|
return null;
|
|
44
44
|
}
|
|
45
|
+
function assertionFactProblem(value, path) {
|
|
46
|
+
if (!(0, shared_ts_1.isObject)(value) || typeof value.kind !== "string")
|
|
47
|
+
return `"${path}" must be a closed assertion fact`;
|
|
48
|
+
switch (value.kind) {
|
|
49
|
+
case "unavailable":
|
|
50
|
+
return typeof value.reason === "string" ? null : `"${path}.reason" must be a string`;
|
|
51
|
+
case "value":
|
|
52
|
+
return value.value === null || typeof value.value === "string" || typeof value.value === "number" ||
|
|
53
|
+
typeof value.value === "boolean"
|
|
54
|
+
? null
|
|
55
|
+
: `"${path}.value" must be a JSON scalar`;
|
|
56
|
+
case "text":
|
|
57
|
+
return typeof value.text === "string" ? null : `"${path}.text" must be a string`;
|
|
58
|
+
case "list":
|
|
59
|
+
return (0, shared_ts_1.arrayProblem)(value.items, `${path}.items`, assertionFactProblem);
|
|
60
|
+
case "fields":
|
|
61
|
+
return (0, shared_ts_1.arrayProblem)(value.fields, `${path}.fields`, (field, fieldPath) => {
|
|
62
|
+
if (!(0, shared_ts_1.isObject)(field) || typeof field.label !== "string")
|
|
63
|
+
return `"${fieldPath}.label" must be a string`;
|
|
64
|
+
return assertionFactProblem(field.value, `${fieldPath}.value`);
|
|
65
|
+
});
|
|
66
|
+
default:
|
|
67
|
+
return `"${path}.kind" is unsupported`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function assertionEvidenceProblem(value, path) {
|
|
71
|
+
if (!(0, shared_ts_1.isObject)(value))
|
|
72
|
+
return `"${path}" must be an AssertionEvidenceContent object`;
|
|
73
|
+
for (const key of ["source", "check", "observed", "expected", "explanation"]) {
|
|
74
|
+
const problem = assertionFactProblem(value[key], `${path}.${key}`);
|
|
75
|
+
if (problem !== null)
|
|
76
|
+
return problem;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
45
80
|
/** AttemptAssertionView(compute.ts):sealed 断言 entry 的展示投影。 */
|
|
46
81
|
function assertionViewProblem(value, path) {
|
|
47
82
|
if (!(0, shared_ts_1.isObject)(value))
|
|
@@ -58,6 +93,9 @@ function assertionViewProblem(value, path) {
|
|
|
58
93
|
}
|
|
59
94
|
if (typeof value.detail !== "string")
|
|
60
95
|
return `"${path}.detail" must be a string`;
|
|
96
|
+
const evidenceProblem = assertionEvidenceProblem(value.evidence, `${path}.evidence`);
|
|
97
|
+
if (evidenceProblem !== null)
|
|
98
|
+
return evidenceProblem;
|
|
61
99
|
if (!Array.isArray(value.groupPath) || !value.groupPath.every((segment) => typeof segment === "string")) {
|
|
62
100
|
return `"${path}.groupPath" must be an array of strings`;
|
|
63
101
|
}
|
|
@@ -67,10 +105,14 @@ function assertionViewProblem(value, path) {
|
|
|
67
105
|
if (value.score.state !== "earned" && value.score.state !== "unavailable") {
|
|
68
106
|
return `"${path}.score.state" must be "earned" | "unavailable"`;
|
|
69
107
|
}
|
|
70
|
-
if (typeof value.score.earned !== "number")
|
|
71
|
-
return `"${path}.score.earned" must be a number`;
|
|
72
108
|
if (typeof value.score.points !== "number")
|
|
73
109
|
return `"${path}.score.points" must be a number`;
|
|
110
|
+
if (value.score.state === "earned" && typeof value.score.earned !== "number") {
|
|
111
|
+
return `"${path}.score.earned" must be a number for an earned contribution`;
|
|
112
|
+
}
|
|
113
|
+
if (value.score.state === "unavailable" && value.score.earned !== undefined) {
|
|
114
|
+
return `"${path}.score.earned" must be omitted for an unavailable contribution`;
|
|
115
|
+
}
|
|
74
116
|
}
|
|
75
117
|
return null;
|
|
76
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["validate.tsx"],"names":[],"mappings":"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","sourcesContent":["// Attempt 详情 Content / Data 形状校验。\n// 数据契约照 docs/feature/reports/library.md;这些不是持久化\n// 格式,没有 format / schemaVersion 信封,兼容性跟随 npm 版本(组件消费 data 时校验\n// 结构,不符按完整用户反馈报错并提示版本漂移)。\nimport { arrayProblem, isObject, type Validator } from \"../../definition/primitives/shared.ts\";\n// ───────────────────────── 跨叶子复用的字段路径校验 ─────────────────────────\n/** AttemptIdentityView(compute.ts):locator 派生自的不可变身份元组。 */\nfunction attemptIdentityProblem(value: unknown, path: string): string | null {\n if (!isObject(value)) {\n return `\"${path}\" must be an AttemptIdentityView { runId, evalId, attempt }`;\n }\n if (typeof value.runId !== \"string\")\n return `\"${path}.runId\" must be a string`;\n if (typeof value.evalId !== \"string\")\n return `\"${path}.evalId\" must be a string`;\n if (typeof value.attempt !== \"number\")\n return `\"${path}.attempt\" must be a number`;\n return null;\n}\n/** AttemptCapabilitiesView(compute.ts):四个证据切面开关。 */\nfunction capabilitiesProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object { source, execution, timing, diff }`;\n for (const key of [\"source\", \"execution\", \"timing\", \"diff\"] as const) {\n if (typeof value[key] !== \"boolean\")\n return `\"${path}.${key}\" must be a boolean`;\n }\n return null;\n}\n/** AttemptAssertionView(compute.ts):sealed 断言 entry 的展示投影。 */\nfunction assertionViewProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptAssertionView object`;\n if (typeof value.entryId !== \"string\")\n return `\"${path}.entryId\" must be a string`;\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (value.severity !== \"gate\" && value.severity !== \"recorded\" && value.severity !== \"soft\") {\n return `\"${path}.severity\" must be \"gate\" | \"recorded\" | \"soft\"`;\n }\n if (value.outcome !== \"passed\" && value.outcome !== \"failed\" && value.outcome !== \"unavailable\") {\n return `\"${path}.outcome\" must be \"passed\" | \"failed\" | \"unavailable\"`;\n }\n if (typeof value.detail !== \"string\")\n return `\"${path}.detail\" must be a string`;\n if (!Array.isArray(value.groupPath) || !value.groupPath.every((segment: unknown) => typeof segment === \"string\")) {\n return `\"${path}.groupPath\" must be an array of strings`;\n }\n if (value.score !== undefined) {\n if (!isObject(value.score))\n return `\"${path}.score\" must be an AttemptScoreView object`;\n if (value.score.state !== \"earned\" && value.score.state !== \"unavailable\") {\n return `\"${path}.score.state\" must be \"earned\" | \"unavailable\"`;\n }\n if (typeof value.score.earned !== \"number\")\n return `\"${path}.score.earned\" must be a number`;\n if (typeof value.score.points !== \"number\")\n return `\"${path}.score.points\" must be a number`;\n }\n return null;\n}\n/** ClosedTraceCollection(src/analysis/domain-view.ts):collection 状态与限制清单。 */\nfunction traceCollectionProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a ClosedTraceCollection object`;\n if (value.state !== \"complete\" && value.state !== \"partial\")\n return `\"${path}.state\" must be \"complete\" | \"partial\"`;\n if (!Array.isArray(value.limitations))\n return `\"${path}.limitations\" must be an array`;\n return null;\n}\n// ───────────────────────── AttemptSummary(恒非空) ─────────────────────────\nexport function validateSummaryData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (typeof data.experimentId !== \"string\")\n return 'missing \"experimentId\" (string)';\n const identityProblem = attemptIdentityProblem(data.identity, \"identity\");\n if (identityProblem !== null)\n return identityProblem;\n const verdict = data.verdict;\n if (verdict !== \"passed\" && verdict !== \"failed\" && verdict !== \"errored\" && verdict !== \"skipped\" && verdict !== \"unknown\") {\n return '\"verdict\" must be passed | failed | errored | skipped | unknown';\n }\n if (data.startedAt !== undefined && typeof data.startedAt !== \"string\")\n return '\"startedAt\" must be a string';\n if (!(data.durationMs === null || typeof data.durationMs === \"number\"))\n return '\"durationMs\" must be a number or null';\n if (data.observedCostUSD !== undefined && typeof data.observedCostUSD !== \"number\") {\n return '\"observedCostUSD\" must be a number';\n }\n if (data.totalScore !== undefined && typeof data.totalScore !== \"number\")\n return '\"totalScore\" must be a number';\n return capabilitiesProblem(data.capabilities, \"capabilities\");\n}\n// ───────────────────────── AttemptError ─────────────────────────\nexport function validateErrorData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.code !== \"string\")\n return '\"code\" must be a string';\n if (typeof data.message !== \"string\")\n return '\"message\" must be a string';\n if (typeof data.phase !== \"string\")\n return '\"phase\" must be a string';\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (data.commandEvidenceHint !== undefined && data.commandEvidenceHint !== true) {\n return '\"commandEvidenceHint\" must be true or omitted';\n }\n return null;\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\n/** `{ group, items: AttemptAssertionView[] }[]` 分组结构。 */\nfunction assertionGroupsProblem(value: unknown, path: string): string | null {\n return arrayProblem(value, path, (group, groupPath) => {\n if (!isObject(group) || typeof group.group !== \"string\") {\n return `\"${groupPath}\" must be an object with a string \"group\"`;\n }\n return arrayProblem(group.items, `${groupPath}.items`, assertionViewProblem);\n });\n}\n/** AttemptAssertionsData 的得分点挣满计数。 */\nfunction scorePointsEarnedProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object { earned, total }`;\n if (typeof value.earned !== \"number\")\n return `\"${path}.earned\" must be a number`;\n if (typeof value.total !== \"number\")\n return `\"${path}.total\" must be a number`;\n return null;\n}\nexport function validateAssertionsData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n const attentionProblem = arrayProblem(data.attention, \"attention\", assertionViewProblem);\n if (attentionProblem !== null)\n return attentionProblem;\n const passedGroupsProblem = assertionGroupsProblem(data.passedGroups, \"passedGroups\");\n if (passedGroupsProblem !== null)\n return passedGroupsProblem;\n if (data.scorePointsEarned !== undefined) {\n const problem = scorePointsEarnedProblem(data.scorePointsEarned, \"scorePointsEarned\");\n if (problem !== null)\n return problem;\n }\n if (data.totalScore !== undefined && typeof data.totalScore !== \"number\")\n return '\"totalScore\" must be a number';\n if (data.evaluationKind !== \"pass\" && data.evaluationKind !== \"points\") {\n return '\"evaluationKind\" must be \"pass\" | \"points\"';\n }\n return null;\n}\n// ───────────────────────── AttemptFixPrompt ─────────────────────────\nexport function validateFixPromptData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.prompt !== \"string\")\n return 'missing \"prompt\" (string)';\n return null;\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\n/** ClosedTimingInterval(src/analysis/domain-view.ts):闭合 timing 区间。 */\nfunction timingIntervalProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a ClosedTimingInterval object`;\n if (typeof value.intervalId !== \"string\")\n return `\"${path}.intervalId\" must be a string`;\n if (value.parentIntervalId !== null && typeof value.parentIntervalId !== \"string\") {\n return `\"${path}.parentIntervalId\" must be a string or null`;\n }\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.label !== \"string\")\n return `\"${path}.label\" must be a string`;\n if (typeof value.startOffsetMs !== \"number\")\n return `\"${path}.startOffsetMs\" must be a number`;\n if (typeof value.durationMs !== \"number\")\n return `\"${path}.durationMs\" must be a number`;\n if (typeof value.outcome !== \"string\")\n return `\"${path}.outcome\" must be a string`;\n return null;\n}\nfunction validateTimelineShape(data: unknown, kind: string): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.intervals, kind, timingIntervalProblem);\n}\nexport function validateTimelineData(data: unknown): string | null {\n return validateTimelineShape(data, \"intervals\");\n}\nexport function validateTraceData(data: unknown): string | null {\n return validateTimelineShape(data, \"intervals\");\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\nconst CONVERSATION_REPLY_KINDS = [\n \"assistant\",\n \"user\",\n \"thinking\",\n \"error\",\n \"tool\",\n \"skill\",\n \"context\",\n \"subagent\",\n \"input\",\n \"compaction\",\n];\n/** AttemptConversationReply(compute.ts):按 `kind` 判别的联合,每支自己的必填字段各自校验。 */\nfunction conversationReplyProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptConversationReply object`;\n switch (value.kind) {\n case \"assistant\":\n case \"user\":\n case \"thinking\":\n case \"error\":\n case \"compaction\":\n if (typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"context\":\n if (typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"tool\":\n if (typeof value.callId !== \"string\")\n return `\"${path}.callId\" must be a string`;\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (typeof value.inputSummary !== \"string\")\n return `\"${path}.inputSummary\" must be a string`;\n if (value.outputSummary !== undefined && typeof value.outputSummary !== \"string\") {\n return `\"${path}.outputSummary\" must be a string`;\n }\n if (value.failed !== undefined && typeof value.failed !== \"boolean\")\n return `\"${path}.failed\" must be a boolean`;\n return null;\n case \"skill\":\n if (typeof value.skill !== \"string\")\n return `\"${path}.skill\" must be a string`;\n if (value.text !== undefined && typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"subagent\":\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (typeof value.summary !== \"string\")\n return `\"${path}.summary\" must be a string`;\n return null;\n case \"input\":\n if (!isObject(value.request))\n return `\"${path}.request\" must be an AttemptInputRequestView object`;\n if (typeof value.request.promptSummary !== \"string\")\n return `\"${path}.request.promptSummary\" must be a string`;\n return null;\n default:\n return `\"${path}.kind\" must be one of ${JSON.stringify(CONVERSATION_REPLY_KINDS)}`;\n }\n}\nfunction conversationRoundProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptConversationRound object`;\n if (typeof value.turnId !== \"string\")\n return `\"${path}.turnId\" must be a string`;\n if (typeof value.sequence !== \"number\")\n return `\"${path}.sequence\" must be a number`;\n if (value.outcome !== \"completed\" && value.outcome !== \"failed\" &&\n value.outcome !== \"cancelled\" && value.outcome !== \"interrupted\") {\n return `\"${path}.outcome\" must be completed | failed | cancelled | interrupted`;\n }\n return arrayProblem(value.replies, `${path}.replies`, conversationReplyProblem);\n}\nexport function validateConversationData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.rounds, \"rounds\", conversationRoundProblem);\n}\n/** AttemptCommandCard(compute.ts):闭合命令证据的展示卡。 */\nfunction commandCardProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptCommandCard object`;\n if (typeof value.key !== \"string\")\n return `\"${path}.key\" must be a string`;\n if (typeof value.timingNodeId !== \"string\")\n return `\"${path}.timingNodeId\" must be a string`;\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.display !== \"string\")\n return `\"${path}.display\" must be a string`;\n if (typeof value.exitCode !== \"number\")\n return `\"${path}.exitCode\" must be a number`;\n if (value.classification !== \"succeeded\" && value.classification !== \"observed\" && value.classification !== \"failed\") {\n return `\"${path}.classification\" must be succeeded | observed | failed`;\n }\n if (value.stdout !== undefined && typeof value.stdout !== \"string\")\n return `\"${path}.stdout\" must be a string`;\n if (value.stderr !== undefined && typeof value.stderr !== \"string\")\n return `\"${path}.stderr\" must be a string`;\n return null;\n}\nexport function validateCommandEvidenceData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.commands, \"commands\", commandCardProblem);\n}\n// ───────────────────────── AttemptDiagnostics ─────────────────────────\nfunction diagnosticViewProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptDiagnosticView object`;\n if (typeof value.code !== \"string\")\n return `\"${path}.code\" must be a string`;\n if (value.kind !== \"advisory\" && value.kind !== \"execution-error\") {\n return `\"${path}.kind\" must be \"advisory\" | \"execution-error\"`;\n }\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.summary !== \"string\")\n return `\"${path}.summary\" must be a string`;\n if (value.level !== \"warning\" && value.level !== \"error\")\n return `\"${path}.level\" must be \"warning\" | \"error\"`;\n return null;\n}\nexport function validateDiagnosticsData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.groups, \"groups\", (group, path) => {\n if (!isObject(group) || typeof group.phase !== \"string\") {\n return `\"${path}\" must be an object with a string \"phase\"`;\n }\n return arrayProblem(group.items, `${path}.items`, diagnosticViewProblem);\n });\n}\n// ───────────────────────── UsageTable ─────────────────────────\nexport function validateUsageData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (typeof data.experimentId !== \"string\")\n return 'missing \"experimentId\" (string)';\n if (typeof data.evalId !== \"string\")\n return 'missing \"evalId\" (string)';\n if (typeof data.attempt !== \"number\")\n return '\"attempt\" must be a number';\n const verdict = data.verdict;\n if (verdict !== \"passed\" && verdict !== \"failed\" && verdict !== \"errored\" && verdict !== \"skipped\" && verdict !== \"unknown\") {\n return '\"verdict\" must be passed | failed | errored | skipped | unknown';\n }\n if (data.turns !== undefined && typeof data.turns !== \"number\")\n return '\"turns\" must be a number';\n if (data.toolCalls !== undefined && typeof data.toolCalls !== \"number\")\n return '\"toolCalls\" must be a number';\n if (data.observations !== undefined) {\n const problem = arrayProblem(data.observations, \"observations\", (observation, path) => {\n if (!isObject(observation) || typeof observation.provider !== \"string\" || typeof observation.kind !== \"string\") {\n return `\"${path}\" must be a ClosedUsageObservation object`;\n }\n return null;\n });\n if (problem !== null)\n return problem;\n }\n if (data.observedCostUSD !== undefined && typeof data.observedCostUSD !== \"number\") {\n return '\"observedCostUSD\" must be a number';\n }\n return null;\n}\n// ───────────────────────── AttemptDiff ─────────────────────────\nconst DIFF_FILE_CHANGE = [\"added\", \"modified\", \"deleted\"];\n/** DiffFile(src/report/definition/primitives/diff-lines.ts):净无变化的文件不进这份列表。 */\nfunction diffFileEntryProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a DiffFile { path, change, added, removed, windows }`;\n if (typeof value.path !== \"string\")\n return `\"${path}.path\" must be a string`;\n if (typeof value.change !== \"string\" || !DIFF_FILE_CHANGE.includes(value.change)) {\n return `\"${path}.change\" must be one of ${JSON.stringify(DIFF_FILE_CHANGE)}`;\n }\n if (typeof value.added !== \"number\" || typeof value.removed !== \"number\") {\n return `\"${path}.added\" and \"${path}.removed\" must be numbers`;\n }\n if (!Array.isArray(value.windows))\n return `\"${path}.windows\" must be an array`;\n for (let i = 0; i < value.windows.length; i += 1) {\n const window = value.windows[i];\n if (!isObject(window) || typeof window.window !== \"string\") {\n return `\"${path}.windows[${i}].window\" must be a string`;\n }\n if (window.patch !== undefined && typeof window.patch !== \"string\") {\n return `\"${path}.windows[${i}].patch\" must be a string`;\n }\n }\n return null;\n}\nexport function validateDiffData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (!isObject(data.collection) || typeof data.collection.state !== \"string\") {\n return '\"collection\" must be a ClosedFileChangesCollection object';\n }\n return arrayProblem(data.files, \"files\", diffFileEntryProblem);\n}\n// ───────────────────────── AttemptSource ─────────────────────────\nexport function validateSourceData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const itemsProblem = arrayProblem(data.items, \"items\", (item, path) => {\n if (!isObject(item))\n return `\"${path}\" must be an AttemptSourceItemView object`;\n if (typeof item.sourceItemId !== \"string\")\n return `\"${path}.sourceItemId\" must be a string`;\n if (typeof item.path !== \"string\")\n return `\"${path}.path\" must be a string`;\n if (typeof item.sha256 !== \"string\")\n return `\"${path}.sha256\" must be a string`;\n if (!Array.isArray(item.lines) || !item.lines.every((line: unknown) => typeof line === \"string\")) {\n return `\"${path}.lines\" must be an array of strings`;\n }\n if (item.unavailable !== undefined && item.unavailable !== \"unavailable\" && item.unavailable !== \"binary\") {\n return `\"${path}.unavailable\" must be \"unavailable\" | \"binary\"`;\n }\n return null;\n });\n if (itemsProblem !== null)\n return itemsProblem;\n const sitesProblem = arrayProblem(data.sites, \"sites\", (site, path) => {\n if (!isObject(site))\n return `\"${path}\" must be an AttemptSourceSiteView object`;\n if (typeof site.entryId !== \"string\")\n return `\"${path}.entryId\" must be a string`;\n if (typeof site.role !== \"string\")\n return `\"${path}.role\" must be a string`;\n if (typeof site.sourceItemId !== \"string\")\n return `\"${path}.sourceItemId\" must be a string`;\n if (typeof site.startLine !== \"number\")\n return `\"${path}.startLine\" must be a number`;\n if (typeof site.endLine !== \"number\")\n return `\"${path}.endLine\" must be a number`;\n return null;\n });\n if (sitesProblem !== null)\n return sitesProblem;\n return arrayProblem(data.entries, \"entries\", assertionViewProblem);\n}\nexport const attemptDetailValidators: Readonly<Record<string, Validator>> = Object.freeze({\n summary: validateSummaryData,\n error: validateErrorData,\n assertions: validateAssertionsData,\n fixPrompt: validateFixPromptData,\n timeline: validateTimelineData,\n trace: validateTraceData,\n conversation: validateConversationData,\n commandEvidence: validateCommandEvidenceData,\n diagnostics: validateDiagnosticsData,\n usage: validateUsageData,\n diff: validateDiffData,\n source: validateSourceData,\n});\n"]}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["validate.tsx"],"names":[],"mappings":"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","sourcesContent":["// Attempt 详情 Content / Data 形状校验。\n// 数据契约照 docs/feature/reports/library.md;这些不是持久化\n// 格式,没有 format / schemaVersion 信封,兼容性跟随 npm 版本(组件消费 data 时校验\n// 结构,不符按完整用户反馈报错并提示版本漂移)。\nimport { arrayProblem, isObject, type Validator } from \"../../definition/primitives/shared.ts\";\n// ───────────────────────── 跨叶子复用的字段路径校验 ─────────────────────────\n/** AttemptIdentityView(compute.ts):locator 派生自的不可变身份元组。 */\nfunction attemptIdentityProblem(value: unknown, path: string): string | null {\n if (!isObject(value)) {\n return `\"${path}\" must be an AttemptIdentityView { runId, evalId, attempt }`;\n }\n if (typeof value.runId !== \"string\")\n return `\"${path}.runId\" must be a string`;\n if (typeof value.evalId !== \"string\")\n return `\"${path}.evalId\" must be a string`;\n if (typeof value.attempt !== \"number\")\n return `\"${path}.attempt\" must be a number`;\n return null;\n}\n/** AttemptCapabilitiesView(compute.ts):四个证据切面开关。 */\nfunction capabilitiesProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object { source, execution, timing, diff }`;\n for (const key of [\"source\", \"execution\", \"timing\", \"diff\"] as const) {\n if (typeof value[key] !== \"boolean\")\n return `\"${path}.${key}\" must be a boolean`;\n }\n return null;\n}\nfunction assertionFactProblem(value: unknown, path: string): string | null {\n if (!isObject(value) || typeof value.kind !== \"string\")\n return `\"${path}\" must be a closed assertion fact`;\n switch (value.kind) {\n case \"unavailable\":\n return typeof value.reason === \"string\" ? null : `\"${path}.reason\" must be a string`;\n case \"value\":\n return value.value === null || typeof value.value === \"string\" || typeof value.value === \"number\" ||\n typeof value.value === \"boolean\"\n ? null\n : `\"${path}.value\" must be a JSON scalar`;\n case \"text\":\n return typeof value.text === \"string\" ? null : `\"${path}.text\" must be a string`;\n case \"list\":\n return arrayProblem(value.items, `${path}.items`, assertionFactProblem);\n case \"fields\":\n return arrayProblem(value.fields, `${path}.fields`, (field, fieldPath) => {\n if (!isObject(field) || typeof field.label !== \"string\")\n return `\"${fieldPath}.label\" must be a string`;\n return assertionFactProblem(field.value, `${fieldPath}.value`);\n });\n default:\n return `\"${path}.kind\" is unsupported`;\n }\n}\nfunction assertionEvidenceProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AssertionEvidenceContent object`;\n for (const key of [\"source\", \"check\", \"observed\", \"expected\", \"explanation\"] as const) {\n const problem = assertionFactProblem(value[key], `${path}.${key}`);\n if (problem !== null)\n return problem;\n }\n return null;\n}\n/** AttemptAssertionView(compute.ts):sealed 断言 entry 的展示投影。 */\nfunction assertionViewProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptAssertionView object`;\n if (typeof value.entryId !== \"string\")\n return `\"${path}.entryId\" must be a string`;\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (value.severity !== \"gate\" && value.severity !== \"recorded\" && value.severity !== \"soft\") {\n return `\"${path}.severity\" must be \"gate\" | \"recorded\" | \"soft\"`;\n }\n if (value.outcome !== \"passed\" && value.outcome !== \"failed\" && value.outcome !== \"unavailable\") {\n return `\"${path}.outcome\" must be \"passed\" | \"failed\" | \"unavailable\"`;\n }\n if (typeof value.detail !== \"string\")\n return `\"${path}.detail\" must be a string`;\n const evidenceProblem = assertionEvidenceProblem(value.evidence, `${path}.evidence`);\n if (evidenceProblem !== null)\n return evidenceProblem;\n if (!Array.isArray(value.groupPath) || !value.groupPath.every((segment: unknown) => typeof segment === \"string\")) {\n return `\"${path}.groupPath\" must be an array of strings`;\n }\n if (value.score !== undefined) {\n if (!isObject(value.score))\n return `\"${path}.score\" must be an AttemptScoreView object`;\n if (value.score.state !== \"earned\" && value.score.state !== \"unavailable\") {\n return `\"${path}.score.state\" must be \"earned\" | \"unavailable\"`;\n }\n if (typeof value.score.points !== \"number\")\n return `\"${path}.score.points\" must be a number`;\n if (value.score.state === \"earned\" && typeof value.score.earned !== \"number\") {\n return `\"${path}.score.earned\" must be a number for an earned contribution`;\n }\n if (value.score.state === \"unavailable\" && value.score.earned !== undefined) {\n return `\"${path}.score.earned\" must be omitted for an unavailable contribution`;\n }\n }\n return null;\n}\n/** ClosedTraceCollection(src/analysis/domain-view.ts):collection 状态与限制清单。 */\nfunction traceCollectionProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a ClosedTraceCollection object`;\n if (value.state !== \"complete\" && value.state !== \"partial\")\n return `\"${path}.state\" must be \"complete\" | \"partial\"`;\n if (!Array.isArray(value.limitations))\n return `\"${path}.limitations\" must be an array`;\n return null;\n}\n// ───────────────────────── AttemptSummary(恒非空) ─────────────────────────\nexport function validateSummaryData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (typeof data.experimentId !== \"string\")\n return 'missing \"experimentId\" (string)';\n const identityProblem = attemptIdentityProblem(data.identity, \"identity\");\n if (identityProblem !== null)\n return identityProblem;\n const verdict = data.verdict;\n if (verdict !== \"passed\" && verdict !== \"failed\" && verdict !== \"errored\" && verdict !== \"skipped\" && verdict !== \"unknown\") {\n return '\"verdict\" must be passed | failed | errored | skipped | unknown';\n }\n if (data.startedAt !== undefined && typeof data.startedAt !== \"string\")\n return '\"startedAt\" must be a string';\n if (!(data.durationMs === null || typeof data.durationMs === \"number\"))\n return '\"durationMs\" must be a number or null';\n if (data.observedCostUSD !== undefined && typeof data.observedCostUSD !== \"number\") {\n return '\"observedCostUSD\" must be a number';\n }\n if (data.totalScore !== undefined && typeof data.totalScore !== \"number\")\n return '\"totalScore\" must be a number';\n return capabilitiesProblem(data.capabilities, \"capabilities\");\n}\n// ───────────────────────── AttemptError ─────────────────────────\nexport function validateErrorData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.code !== \"string\")\n return '\"code\" must be a string';\n if (typeof data.message !== \"string\")\n return '\"message\" must be a string';\n if (typeof data.phase !== \"string\")\n return '\"phase\" must be a string';\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (data.commandEvidenceHint !== undefined && data.commandEvidenceHint !== true) {\n return '\"commandEvidenceHint\" must be true or omitted';\n }\n return null;\n}\n// ───────────────────────── AttemptAssertions ─────────────────────────\n/** `{ group, items: AttemptAssertionView[] }[]` 分组结构。 */\nfunction assertionGroupsProblem(value: unknown, path: string): string | null {\n return arrayProblem(value, path, (group, groupPath) => {\n if (!isObject(group) || typeof group.group !== \"string\") {\n return `\"${groupPath}\" must be an object with a string \"group\"`;\n }\n return arrayProblem(group.items, `${groupPath}.items`, assertionViewProblem);\n });\n}\n/** AttemptAssertionsData 的得分点挣满计数。 */\nfunction scorePointsEarnedProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an object { earned, total }`;\n if (typeof value.earned !== \"number\")\n return `\"${path}.earned\" must be a number`;\n if (typeof value.total !== \"number\")\n return `\"${path}.total\" must be a number`;\n return null;\n}\nexport function validateAssertionsData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n const attentionProblem = arrayProblem(data.attention, \"attention\", assertionViewProblem);\n if (attentionProblem !== null)\n return attentionProblem;\n const passedGroupsProblem = assertionGroupsProblem(data.passedGroups, \"passedGroups\");\n if (passedGroupsProblem !== null)\n return passedGroupsProblem;\n if (data.scorePointsEarned !== undefined) {\n const problem = scorePointsEarnedProblem(data.scorePointsEarned, \"scorePointsEarned\");\n if (problem !== null)\n return problem;\n }\n if (data.totalScore !== undefined && typeof data.totalScore !== \"number\")\n return '\"totalScore\" must be a number';\n if (data.evaluationKind !== \"pass\" && data.evaluationKind !== \"points\") {\n return '\"evaluationKind\" must be \"pass\" | \"points\"';\n }\n return null;\n}\n// ───────────────────────── AttemptFixPrompt ─────────────────────────\nexport function validateFixPromptData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.prompt !== \"string\")\n return 'missing \"prompt\" (string)';\n return null;\n}\n// ───────────────────────── AttemptTimeline / AttemptTrace ─────────────────────────\n/** ClosedTimingInterval(src/analysis/domain-view.ts):闭合 timing 区间。 */\nfunction timingIntervalProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a ClosedTimingInterval object`;\n if (typeof value.intervalId !== \"string\")\n return `\"${path}.intervalId\" must be a string`;\n if (value.parentIntervalId !== null && typeof value.parentIntervalId !== \"string\") {\n return `\"${path}.parentIntervalId\" must be a string or null`;\n }\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.label !== \"string\")\n return `\"${path}.label\" must be a string`;\n if (typeof value.startOffsetMs !== \"number\")\n return `\"${path}.startOffsetMs\" must be a number`;\n if (typeof value.durationMs !== \"number\")\n return `\"${path}.durationMs\" must be a number`;\n if (typeof value.outcome !== \"string\")\n return `\"${path}.outcome\" must be a string`;\n return null;\n}\nfunction validateTimelineShape(data: unknown, kind: string): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.intervals, kind, timingIntervalProblem);\n}\nexport function validateTimelineData(data: unknown): string | null {\n return validateTimelineShape(data, \"intervals\");\n}\nexport function validateTraceData(data: unknown): string | null {\n return validateTimelineShape(data, \"intervals\");\n}\n// ───────────────────────── AttemptConversation ─────────────────────────\nconst CONVERSATION_REPLY_KINDS = [\n \"assistant\",\n \"user\",\n \"thinking\",\n \"error\",\n \"tool\",\n \"skill\",\n \"context\",\n \"subagent\",\n \"input\",\n \"compaction\",\n];\n/** AttemptConversationReply(compute.ts):按 `kind` 判别的联合,每支自己的必填字段各自校验。 */\nfunction conversationReplyProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptConversationReply object`;\n switch (value.kind) {\n case \"assistant\":\n case \"user\":\n case \"thinking\":\n case \"error\":\n case \"compaction\":\n if (typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"context\":\n if (typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"tool\":\n if (typeof value.callId !== \"string\")\n return `\"${path}.callId\" must be a string`;\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (typeof value.inputSummary !== \"string\")\n return `\"${path}.inputSummary\" must be a string`;\n if (value.outputSummary !== undefined && typeof value.outputSummary !== \"string\") {\n return `\"${path}.outputSummary\" must be a string`;\n }\n if (value.failed !== undefined && typeof value.failed !== \"boolean\")\n return `\"${path}.failed\" must be a boolean`;\n return null;\n case \"skill\":\n if (typeof value.skill !== \"string\")\n return `\"${path}.skill\" must be a string`;\n if (value.text !== undefined && typeof value.text !== \"string\")\n return `\"${path}.text\" must be a string`;\n return null;\n case \"subagent\":\n if (typeof value.name !== \"string\")\n return `\"${path}.name\" must be a string`;\n if (typeof value.summary !== \"string\")\n return `\"${path}.summary\" must be a string`;\n return null;\n case \"input\":\n if (!isObject(value.request))\n return `\"${path}.request\" must be an AttemptInputRequestView object`;\n if (typeof value.request.promptSummary !== \"string\")\n return `\"${path}.request.promptSummary\" must be a string`;\n return null;\n default:\n return `\"${path}.kind\" must be one of ${JSON.stringify(CONVERSATION_REPLY_KINDS)}`;\n }\n}\nfunction conversationRoundProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptConversationRound object`;\n if (typeof value.turnId !== \"string\")\n return `\"${path}.turnId\" must be a string`;\n if (typeof value.sequence !== \"number\")\n return `\"${path}.sequence\" must be a number`;\n if (value.outcome !== \"completed\" && value.outcome !== \"failed\" &&\n value.outcome !== \"cancelled\" && value.outcome !== \"interrupted\") {\n return `\"${path}.outcome\" must be completed | failed | cancelled | interrupted`;\n }\n return arrayProblem(value.replies, `${path}.replies`, conversationReplyProblem);\n}\nexport function validateConversationData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.rounds, \"rounds\", conversationRoundProblem);\n}\n/** AttemptCommandCard(compute.ts):闭合命令证据的展示卡。 */\nfunction commandCardProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptCommandCard object`;\n if (typeof value.key !== \"string\")\n return `\"${path}.key\" must be a string`;\n if (typeof value.timingNodeId !== \"string\")\n return `\"${path}.timingNodeId\" must be a string`;\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.display !== \"string\")\n return `\"${path}.display\" must be a string`;\n if (typeof value.exitCode !== \"number\")\n return `\"${path}.exitCode\" must be a number`;\n if (value.classification !== \"succeeded\" && value.classification !== \"observed\" && value.classification !== \"failed\") {\n return `\"${path}.classification\" must be succeeded | observed | failed`;\n }\n if (value.stdout !== undefined && typeof value.stdout !== \"string\")\n return `\"${path}.stdout\" must be a string`;\n if (value.stderr !== undefined && typeof value.stderr !== \"string\")\n return `\"${path}.stderr\" must be a string`;\n return null;\n}\nexport function validateCommandEvidenceData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.commands, \"commands\", commandCardProblem);\n}\n// ───────────────────────── AttemptDiagnostics ─────────────────────────\nfunction diagnosticViewProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be an AttemptDiagnosticView object`;\n if (typeof value.code !== \"string\")\n return `\"${path}.code\" must be a string`;\n if (value.kind !== \"advisory\" && value.kind !== \"execution-error\") {\n return `\"${path}.kind\" must be \"advisory\" | \"execution-error\"`;\n }\n if (typeof value.phase !== \"string\")\n return `\"${path}.phase\" must be a string`;\n if (typeof value.summary !== \"string\")\n return `\"${path}.summary\" must be a string`;\n if (value.level !== \"warning\" && value.level !== \"error\")\n return `\"${path}.level\" must be \"warning\" | \"error\"`;\n return null;\n}\nexport function validateDiagnosticsData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n const collectionProblem = traceCollectionProblem(data.collection, \"collection\");\n if (collectionProblem !== null)\n return collectionProblem;\n return arrayProblem(data.groups, \"groups\", (group, path) => {\n if (!isObject(group) || typeof group.phase !== \"string\") {\n return `\"${path}\" must be an object with a string \"phase\"`;\n }\n return arrayProblem(group.items, `${path}.items`, diagnosticViewProblem);\n });\n}\n// ───────────────────────── UsageTable ─────────────────────────\nexport function validateUsageData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (typeof data.experimentId !== \"string\")\n return 'missing \"experimentId\" (string)';\n if (typeof data.evalId !== \"string\")\n return 'missing \"evalId\" (string)';\n if (typeof data.attempt !== \"number\")\n return '\"attempt\" must be a number';\n const verdict = data.verdict;\n if (verdict !== \"passed\" && verdict !== \"failed\" && verdict !== \"errored\" && verdict !== \"skipped\" && verdict !== \"unknown\") {\n return '\"verdict\" must be passed | failed | errored | skipped | unknown';\n }\n if (data.turns !== undefined && typeof data.turns !== \"number\")\n return '\"turns\" must be a number';\n if (data.toolCalls !== undefined && typeof data.toolCalls !== \"number\")\n return '\"toolCalls\" must be a number';\n if (data.observations !== undefined) {\n const problem = arrayProblem(data.observations, \"observations\", (observation, path) => {\n if (!isObject(observation) || typeof observation.provider !== \"string\" || typeof observation.kind !== \"string\") {\n return `\"${path}\" must be a ClosedUsageObservation object`;\n }\n return null;\n });\n if (problem !== null)\n return problem;\n }\n if (data.observedCostUSD !== undefined && typeof data.observedCostUSD !== \"number\") {\n return '\"observedCostUSD\" must be a number';\n }\n return null;\n}\n// ───────────────────────── AttemptDiff ─────────────────────────\nconst DIFF_FILE_CHANGE = [\"added\", \"modified\", \"deleted\"];\n/** DiffFile(src/report/definition/primitives/diff-lines.ts):净无变化的文件不进这份列表。 */\nfunction diffFileEntryProblem(value: unknown, path: string): string | null {\n if (!isObject(value))\n return `\"${path}\" must be a DiffFile { path, change, added, removed, windows }`;\n if (typeof value.path !== \"string\")\n return `\"${path}.path\" must be a string`;\n if (typeof value.change !== \"string\" || !DIFF_FILE_CHANGE.includes(value.change)) {\n return `\"${path}.change\" must be one of ${JSON.stringify(DIFF_FILE_CHANGE)}`;\n }\n if (typeof value.added !== \"number\" || typeof value.removed !== \"number\") {\n return `\"${path}.added\" and \"${path}.removed\" must be numbers`;\n }\n if (!Array.isArray(value.windows))\n return `\"${path}.windows\" must be an array`;\n for (let i = 0; i < value.windows.length; i += 1) {\n const window = value.windows[i];\n if (!isObject(window) || typeof window.window !== \"string\") {\n return `\"${path}.windows[${i}].window\" must be a string`;\n }\n if (window.patch !== undefined && typeof window.patch !== \"string\") {\n return `\"${path}.windows[${i}].patch\" must be a string`;\n }\n }\n return null;\n}\nexport function validateDiffData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n if (!isObject(data.collection) || typeof data.collection.state !== \"string\") {\n return '\"collection\" must be a ClosedFileChangesCollection object';\n }\n return arrayProblem(data.files, \"files\", diffFileEntryProblem);\n}\n// ───────────────────────── AttemptSource ─────────────────────────\nexport function validateSourceData(data: unknown): string | null {\n if (!isObject(data))\n return \"expected an object\";\n if (typeof data.locator !== \"string\")\n return 'missing \"locator\" (string)';\n const itemsProblem = arrayProblem(data.items, \"items\", (item, path) => {\n if (!isObject(item))\n return `\"${path}\" must be an AttemptSourceItemView object`;\n if (typeof item.sourceItemId !== \"string\")\n return `\"${path}.sourceItemId\" must be a string`;\n if (typeof item.path !== \"string\")\n return `\"${path}.path\" must be a string`;\n if (typeof item.sha256 !== \"string\")\n return `\"${path}.sha256\" must be a string`;\n if (!Array.isArray(item.lines) || !item.lines.every((line: unknown) => typeof line === \"string\")) {\n return `\"${path}.lines\" must be an array of strings`;\n }\n if (item.unavailable !== undefined && item.unavailable !== \"unavailable\" && item.unavailable !== \"binary\") {\n return `\"${path}.unavailable\" must be \"unavailable\" | \"binary\"`;\n }\n return null;\n });\n if (itemsProblem !== null)\n return itemsProblem;\n const sitesProblem = arrayProblem(data.sites, \"sites\", (site, path) => {\n if (!isObject(site))\n return `\"${path}\" must be an AttemptSourceSiteView object`;\n if (typeof site.entryId !== \"string\")\n return `\"${path}.entryId\" must be a string`;\n if (typeof site.role !== \"string\")\n return `\"${path}.role\" must be a string`;\n if (typeof site.sourceItemId !== \"string\")\n return `\"${path}.sourceItemId\" must be a string`;\n if (typeof site.startLine !== \"number\")\n return `\"${path}.startLine\" must be a number`;\n if (typeof site.endLine !== \"number\")\n return `\"${path}.endLine\" must be a number`;\n return null;\n });\n if (sitesProblem !== null)\n return sitesProblem;\n return arrayProblem(data.entries, \"entries\", assertionViewProblem);\n}\nexport const attemptDetailValidators: Readonly<Record<string, Validator>> = Object.freeze({\n summary: validateSummaryData,\n error: validateErrorData,\n assertions: validateAssertionsData,\n fixPrompt: validateFixPromptData,\n timeline: validateTimelineData,\n trace: validateTraceData,\n conversation: validateConversationData,\n commandEvidence: validateCommandEvidenceData,\n diagnostics: validateDiagnosticsData,\n usage: validateUsageData,\n diff: validateDiffData,\n source: validateSourceData,\n});\n"]}
|