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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-streams.js","sourceRoot":"","sources":["sdk-streams.ts"],"names":[],"mappings":"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","sourcesContent":["// SDK 原生事件流 → 标准 StreamEvent 的官方转换器(+ 通用 SSE 读帧器)。\n//\n// 定位:各 agent SDK 的流式协议(Claude Agent SDK 的 `SDKMessage`、pi-agent-core 的\n// `AgentEvent`、Codex SDK 的 `ThreadEvent`)是 SDK 定义的通用协议,不是某个应用的私有格式——\n// 这层映射知识属于 niceeval 官方包,adapter 里只该剩传输粘合(应用把流放在哪个端点、\n// 审批走什么端点)。类型全部用结构化的 *Like 声明(同 turnFromAiSdk 的先例),不依赖任何 SDK 包。\n//\n// 用法(以 Claude Agent SDK 为例):\n//\n// ```typescript\n// import { sseJsonFrames, createClaudeSdkEventStream } from \"niceeval/adapter\";\n//\n// const frames = sseJsonFrames<SDKMessage>(res.body);\n// const stream = createClaudeSdkEventStream();\n// for (;;) {\n// const frame = await frames.next();\n// if (frame === null) break;\n// events.push(...stream.add(frame)); // 逐帧翻译;认不出的帧返回 []\n// }\n// return { status: stream.failed ? \"failed\" : \"completed\", events, usage: stream.usage };\n// ```\nimport type { CommandProjection, JsonValue, StreamEvent, ToolName, Usage } from \"../types.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { CODEX_TOOL_ALIASES } from \"../o11y/parsers/codex.ts\";\nimport { CLAUDE_TOOL_ALIASES } from \"../o11y/parsers/claude-code.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\n// ───────────────────────── 通用 SSE 读帧器 ─────────────────────────\nexport interface SseFrameCursor<T> {\n /** 下一个 `data:` JSON 帧;流结束返回 null。`data: [DONE]` 哨兵帧自动跳过。 */\n next(): Promise<T | null>;\n}\n/** 标准 SSE(`data: {...}\\n\\n`)→ 逐帧 JSON。各 adapter 不用再手写 buffer 状态机。 */\nexport function sseJsonFrames<T>(body: ReadableStream<Uint8Array>): SseFrameCursor<T> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n async function next(): Promise<T | null> {\n for (;;) {\n const sepIndex = buffer.indexOf(\"\\n\\n\");\n if (sepIndex !== -1) {\n const rawEvent = buffer.slice(0, sepIndex);\n buffer = buffer.slice(sepIndex + 2);\n const line = rawEvent.split(\"\\n\").find((l) => l.startsWith(\"data: \"));\n if (!line)\n continue;\n const payload = line.slice(\"data: \".length);\n if (payload === \"[DONE]\")\n continue;\n return JSON.parse(payload) as T;\n }\n const { value, done } = await reader.read();\n if (done)\n return null;\n buffer += decoder.decode(value, { stream: true });\n }\n }\n return { next };\n}\nfunction isRecord(v: unknown): v is globalThis.Record<string, unknown> {\n return typeof v === \"object\" && v !== null;\n}\n/** Claude Agent SDK 的原生 Bash tool 只交付 shell source,不交付 argv。 */\nfunction commandProjectionForClaudeSdkTool(name: string): CommandProjection | undefined {\n return name === \"Bash\" ? opaqueCommandProjection(\"unsupported-protocol\") : undefined;\n}\n// ───────────────────────── Claude Agent SDK:SDKMessage ─────────────────────────\n/** 只声明转换器要读的字段;真实的 SDKMessage 直接喂进来即可。 */\nexport interface ClaudeSdkMessageLike {\n type: string;\n subtype?: string;\n session_id?: string;\n tool_use_id?: string;\n is_error?: boolean;\n num_turns?: number;\n total_cost_usd?: number;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n cache_read_input_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n };\n message?: {\n content?: unknown;\n };\n [key: string]: unknown;\n}\nexport interface ClaudeSdkStream {\n /** 逐帧喂 `SDKMessage`,返回这一帧派生的标准事件;认不出的帧(stream_event 等)返回 []。 */\n add(message: ClaudeSdkMessageLike): StreamEvent[];\n /** `system`/`init` 帧带回的 session_id(首帧之后可读),回写 `ctx.session.id` 用。 */\n readonly sessionId: string | undefined;\n /** `result` 帧的聚合用量。 */\n readonly usage: Usage | undefined;\n /** `result` 帧报了 is_error。 */\n readonly failed: boolean;\n /**\n * 拒绝审批后续读前登记:该 tool_use 的 `tool_result` / `permission_denied` 落成\n * `status: \"rejected\"`(而不是 failed),且两种帧只产一条 operation.finished。\n */\n markRejected(toolUseId: string): void;\n}\n/**\n * Claude Agent SDK 消息流(`system` / `assistant` / `user` / `result`)→ 标准事件。\n * `assistant` 的 text/thinking/tool_use 块 → message / thinking / operation.started;`user` 的\n * tool_result 块 → operation.finished;`system`/`permission_denied` → rejected;`stream_event`\n * (逐 token 渲染)整个忽略。HITL 的停轮判定(哪个工具被门控)是应用侧的知识,不在这里——\n * 扫描 add() 返回的 operation.started 自行决定。\n */\nexport function createClaudeSdkEventStream(): ClaudeSdkStream {\n let sessionId: string | undefined;\n let usage: Usage | undefined;\n let failed = false;\n const resolvedCallIds = new Set<string>();\n const rejected = new Set<string>();\n const toolResultText = (content: unknown): string | undefined => {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n return content\n .filter((b): b is {\n type: \"text\";\n text: string;\n } => isRecord(b) && b.type === \"text\" && typeof b.text === \"string\")\n .map((b) => b.text)\n .join(\"\");\n }\n return undefined;\n };\n return {\n get sessionId() {\n return sessionId;\n },\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n markRejected(toolUseId) {\n rejected.add(toolUseId);\n },\n add(frame) {\n const events: StreamEvent[] = [];\n switch (frame.type) {\n case \"system\": {\n if (frame.subtype === \"init\" && typeof frame.session_id === \"string\") {\n sessionId ??= frame.session_id;\n }\n else if (frame.subtype === \"permission_denied\" && typeof frame.tool_use_id === \"string\") {\n if (!resolvedCallIds.has(frame.tool_use_id)) {\n resolvedCallIds.add(frame.tool_use_id);\n events.push({ type: \"operation.finished\", operationId: frame.tool_use_id, kind: \"tool\", status: \"rejected\" });\n }\n }\n break;\n }\n case \"assistant\": {\n const content: unknown[] = Array.isArray(frame.message?.content) ? frame.message.content : [];\n for (const block of content) {\n if (!isRecord(block))\n continue;\n if (block.type === \"text\" && typeof block.text === \"string\" && block.text) {\n events.push({ type: \"message\", role: \"assistant\", text: block.text });\n }\n else if (block.type === \"thinking\" && typeof block.thinking === \"string\" && block.thinking) {\n events.push({ type: \"thinking\", text: block.thinking });\n }\n else if (block.type === \"tool_use\" && typeof block.id === \"string\" && typeof block.name === \"string\") {\n const command = commandProjectionForClaudeSdkTool(block.name);\n events.push({\n type: \"operation.started\",\n operationId: block.id,\n operation: {\n kind: \"tool\",\n name: block.name,\n input: block.input as JsonValue,\n tool: normalizeToolName(block.name, CLAUDE_TOOL_ALIASES),\n ...(command === undefined ? {} : { command }),\n },\n });\n }\n }\n break;\n }\n case \"user\": {\n const content: unknown[] = Array.isArray(frame.message?.content) ? frame.message.content : [];\n for (const block of content) {\n if (!isRecord(block) || block.type !== \"tool_result\" || typeof block.tool_use_id !== \"string\")\n continue;\n if (resolvedCallIds.has(block.tool_use_id))\n continue;\n resolvedCallIds.add(block.tool_use_id);\n events.push({\n type: \"operation.finished\",\n operationId: block.tool_use_id,\n kind: \"tool\",\n output: toolResultText(block.content) as JsonValue,\n status: rejected.has(block.tool_use_id) ? \"rejected\" : block.is_error ? \"failed\" : \"completed\",\n });\n }\n break;\n }\n case \"result\": {\n failed = frame.is_error === true;\n if (frame.usage) {\n usage = {\n inputTokens: frame.usage.input_tokens,\n outputTokens: frame.usage.output_tokens,\n cacheReadTokens: frame.usage.cache_read_input_tokens ?? undefined,\n cacheCreationTokens: frame.usage.cache_creation_input_tokens ?? undefined,\n requests: frame.num_turns,\n costUSD: frame.total_cost_usd,\n };\n }\n break;\n }\n // stream_event(逐 token 渲染)与其它系统/生命周期消息:无对应 StreamEvent。\n default:\n break;\n }\n return events;\n },\n };\n}\n// ───────────────────────── pi-agent-core:AgentEvent ─────────────────────────\nexport interface PiAgentEventLike {\n type: string;\n toolCallId?: string;\n toolName?: string;\n args?: unknown;\n result?: unknown;\n isError?: boolean;\n /** content 在 user 消息上是 string、assistant 消息上是 parts 数组——按 unknown 收,防御式解析。 */\n message?: {\n role?: string;\n content?: unknown;\n /** assistant 消息的收尾原因;\"error\" / \"aborted\" 表示这条消息以失败告终。 */\n stopReason?: string;\n /** stopReason 为 \"error\" 时的错误说明。 */\n errorMessage?: string;\n usage?: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: {\n total: number;\n };\n };\n };\n /** `message_update` 帧携带的增量事件(text_delta / thinking_delta 等)——只读 type/delta,防御式解析。 */\n assistantMessageEvent?: {\n type?: string;\n delta?: unknown;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\nexport interface PiAgentStream {\n /** 逐帧喂 `AgentEvent`,返回这一帧派生的标准事件;生命周期帧(turn_start 等)返回 []。 */\n add(event: PiAgentEventLike): StreamEvent[];\n /** assistant `message_end` 逐条累加的用量。 */\n readonly usage: Usage | undefined;\n /** assistant 消息以 stopReason \"error\" / \"aborted\" 收尾过。 */\n readonly failed: boolean;\n /** 拒绝审批后续读前登记:该调用 `tool_execution_end` 的 isError 判成 \"rejected\" 而非 \"failed\"。 */\n markRejected(toolCallId: string): void;\n}\n/**\n * pi-agent-core 事件流(`message_start` / `message_update` / `message_end` /\n * `tool_execution_start` / `tool_execution_end`)→ 标准事件。消息三段式聚合成一条:\n * message_start 清空增量缓冲、message_update 的 text_delta / thinking_delta 逐段累加、\n * message_end 落地成 message / thinking(优先取 end 帧的完整 content,缺了用累加的增量兜底);\n * 只有 start/delta 的截断流不产出半条消息。message_end 同时累加 usage;assistant 消息以\n * stopReason \"error\" / \"aborted\" 收尾时记失败(`failed`)并发一条 error 事件。\n * tool_execution_start/end → operation.started / operation.finished。\n */\nexport function createPiAgentEventStream(): PiAgentStream {\n let usage: Usage | undefined;\n let failed = false;\n // message_start/update 累加的增量缓冲;message_end 落地后清空,截断流(无 end)不落地。\n let deltaText = \"\";\n let deltaThinking = \"\";\n const rejected = new Set<string>();\n const partText = (event: PiAgentEventLike, type: \"text\" | \"thinking\"): string => {\n if (event.message?.role !== \"assistant\" || !Array.isArray(event.message.content))\n return \"\";\n return event.message.content\n .filter((part): part is globalThis.Record<string, unknown> => isRecord(part) && part.type === type)\n .map((part) => {\n const v = type === \"text\" ? part.text : part.thinking;\n return typeof v === \"string\" ? v : \"\";\n })\n .join(\"\");\n };\n return {\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n markRejected(toolCallId) {\n rejected.add(toolCallId);\n },\n add(event) {\n const events: StreamEvent[] = [];\n switch (event.type) {\n case \"message_start\": {\n // 新消息开始:上一条没等到 message_end 的增量作废(不落地半条消息)。\n deltaText = \"\";\n deltaThinking = \"\";\n break;\n }\n case \"message_update\": {\n const e = event.assistantMessageEvent;\n if (isRecord(e) && typeof e.delta === \"string\") {\n if (e.type === \"text_delta\")\n deltaText += e.delta;\n else if (e.type === \"thinking_delta\")\n deltaThinking += e.delta;\n }\n break;\n }\n case \"message_end\": {\n // 优先取 end 帧的完整 content;缺了(部分传输只带增量)用累加的 delta 兜底。\n const text = partText(event, \"text\") || (event.message?.role === \"assistant\" ? deltaText : \"\");\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n const thinking = partText(event, \"thinking\") || (event.message?.role === \"assistant\" ? deltaThinking : \"\");\n if (thinking)\n events.push({ type: \"thinking\", text: thinking });\n deltaText = \"\";\n deltaThinking = \"\";\n if (event.message?.role === \"assistant\") {\n const stopReason = event.message.stopReason;\n if (stopReason === \"error\" || stopReason === \"aborted\") {\n failed = true;\n events.push({ type: \"error\", message: event.message.errorMessage ?? `pi agent stopReason=${stopReason}` });\n }\n }\n const u = event.message?.role === \"assistant\" ? event.message.usage : undefined;\n if (u) {\n // pi computes u.cost from its own model price table. That estimate\n // is not provider-observed billing and must not enter Usage.costUSD.\n usage = {\n inputTokens: (usage?.inputTokens ?? 0) + u.input,\n outputTokens: (usage?.outputTokens ?? 0) + u.output,\n cacheReadTokens: (usage?.cacheReadTokens ?? 0) + u.cacheRead,\n cacheCreationTokens: (usage?.cacheCreationTokens ?? 0) + u.cacheWrite,\n requests: (usage?.requests ?? 0) + 1,\n };\n }\n break;\n }\n case \"tool_execution_start\": {\n if (typeof event.toolCallId === \"string\" && typeof event.toolName === \"string\") {\n events.push({\n type: \"operation.started\",\n operationId: event.toolCallId,\n operation: { kind: \"tool\", name: event.toolName, input: event.args as JsonValue },\n });\n }\n break;\n }\n case \"tool_execution_end\": {\n if (typeof event.toolCallId === \"string\") {\n const status = event.isError ? (rejected.has(event.toolCallId) ? \"rejected\" : \"failed\") : \"completed\";\n events.push({ type: \"operation.finished\", operationId: event.toolCallId, kind: \"tool\", output: event.result as JsonValue, status });\n }\n break;\n }\n // agent_start / turn_start / turn_end / tool_execution_update / agent_end:\n // 无对应 StreamEvent(消息文本统一在 message_end 落地)。\n default:\n break;\n }\n return events;\n },\n };\n}\n// ───────────────────────── Codex SDK:ThreadEvent ─────────────────────────\nexport interface CodexThreadEventLike {\n type: string;\n thread_id?: string;\n item?: {\n type?: string;\n text?: string;\n message?: string;\n [key: string]: unknown;\n };\n error?: {\n message: string;\n };\n [key: string]: unknown;\n}\nexport interface CodexThreadStream {\n /**\n * 逐帧喂 `ThreadEvent`,返回标准事件:消息类(agent_message → message、reasoning → thinking、\n * error item / turn.failed → error)+ 工具项(command_execution / mcp_tool_call / web_search /\n * file_change → operation.started + operation.finished,附规范工具名 `tool`,如 command_execution →\n * `\"shell\"`,供 `calledTool(\"shell\")` 这类跨 agent 断言命中)。usage 从 `turn.completed` 聚合,经 `usage` 读。\n * 断言依据全部来自这条流;codex CLI 的原生 OTLP span 只用于瀑布图(spanMapper: mapCodexSpans)。\n */\n add(event: CodexThreadEventLike): StreamEvent[];\n /** `thread.started` 带回的 thread_id,回写 `ctx.session.id` 用。 */\n readonly threadId: string | undefined;\n /** `turn.completed` 聚合的用量(input/cached/output tokens)。 */\n readonly usage: Usage | undefined;\n /** turn.failed / error item 出现过。 */\n readonly failed: boolean;\n}\n/** Codex SDK 线程事件流(`thread.started` / `item.*` / `turn.completed` / `turn.failed`)→ 标准事件。 */\nexport function createCodexThreadEventStream(): CodexThreadStream {\n let threadId: string | undefined;\n let usage: Usage | undefined;\n let failed = false;\n // item.started 已发 operation.started 的 id;item.completed 时不重发,只补 result。\n const startedCallIds = new Set<string>();\n let synth = 0;\n const callIdOf = (item: globalThis.Record<string, unknown>, prefix: string): string => {\n const id = item.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : `${prefix}_${++synth}`;\n };\n // 工具项 → operation.started(+completed 时的 operation.finished)。与 o11y/parsers/codex.ts 的\n // transcript 映射保持同一套语义(字段名以 codex exec --json 的 ThreadItem 为准),\n // 包括规范工具名 tool:少了它 derive 只能落 name=\"unknown\",calledTool(\"shell\") 这类\n // 跨 agent 规范名断言在 SDK 流路径上会静默失配(2026-07-09 CI 实红)。\n const handleToolItem = (item: globalThis.Record<string, unknown>, isCompleted: boolean): StreamEvent[] => {\n const events: StreamEvent[] = [];\n const emitCall = (callId: string, name: string, input: JsonValue, tool: ToolName, command: CommandProjection): void => {\n if (startedCallIds.has(callId))\n return;\n startedCallIds.add(callId);\n events.push({ type: \"operation.started\", operationId: callId, operation: { kind: \"tool\", name, input, tool, command } });\n };\n switch (item.type) {\n case \"command_execution\": {\n const callId = callIdOf(item, \"cmd\");\n emitCall(callId, \"command_execution\", { command: item.command ?? null } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n if (isCompleted) {\n const exit = item.exit_code;\n const success = exit === 0 || (exit == null && item.status !== \"failed\" && item.status !== \"error\");\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: { output: (item.aggregated_output ?? null) as JsonValue, exit_code: (exit ?? null) as JsonValue },\n status: success ? \"completed\" : \"failed\",\n });\n }\n return events;\n }\n case \"mcp_tool_call\": {\n const callId = callIdOf(item, \"mcp\");\n const tool = String(item.tool ?? \"unknown\");\n const name = typeof item.server === \"string\" ? `${item.server}.${tool}` : tool;\n emitCall(callId, name, (item.arguments ?? null) as JsonValue, normalizeToolName(tool, CODEX_TOOL_ALIASES), notCommandProjection());\n if (isCompleted) {\n const success = !item.error && item.status !== \"failed\";\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: (item.result ?? null) as JsonValue,\n status: success ? \"completed\" : \"failed\",\n });\n }\n return events;\n }\n case \"web_search\": {\n const callId = callIdOf(item, \"web\");\n emitCall(callId, \"web_search\", { query: item.query ?? null } as JsonValue, \"web_search\", notCommandProjection());\n if (isCompleted) {\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output: null, status: \"completed\" });\n }\n return events;\n }\n case \"file_change\": {\n // 补丁类只在 completed 落一次:changes 里每个文件一对 called/result。\n if (!isCompleted)\n return events;\n const baseId = callIdOf(item, \"patch\");\n const changes = Array.isArray(item.changes) ? item.changes : [];\n changes.forEach((ch, i) => {\n const callId = `${baseId}#${i}`;\n const change = isRecord(ch) ? { path: ch.path ?? null, kind: ch.kind ?? null } : {};\n events.push({\n type: \"operation.started\",\n operationId: callId,\n operation: {\n kind: \"tool\",\n name: \"file_change\",\n input: change as JsonValue,\n tool: \"file_edit\",\n command: notCommandProjection(),\n },\n });\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output: change as JsonValue, status: \"completed\" });\n });\n return events;\n }\n default:\n return events;\n }\n };\n return {\n get threadId() {\n return threadId;\n },\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n add(event) {\n const events: StreamEvent[] = [];\n switch (event.type) {\n case \"thread.started\": {\n if (typeof event.thread_id === \"string\")\n threadId ??= event.thread_id;\n break;\n }\n case \"item.started\": {\n if (event.item)\n events.push(...handleToolItem(event.item, false));\n break;\n }\n case \"item.completed\": {\n const item = event.item;\n if (!item)\n break;\n if (item.type === \"agent_message\" && typeof item.text === \"string\" && item.text) {\n events.push({ type: \"message\", role: \"assistant\", text: item.text });\n }\n else if (item.type === \"reasoning\" && typeof item.text === \"string\" && item.text) {\n events.push({ type: \"thinking\", text: item.text });\n }\n else if (item.type === \"error\" && typeof item.message === \"string\") {\n failed = true;\n events.push({ type: \"error\", message: item.message });\n }\n else {\n events.push(...handleToolItem(item, true));\n }\n break;\n }\n case \"turn.completed\": {\n const u = event.usage;\n if (isRecord(u)) {\n const num = (v: unknown): number => (typeof v === \"number\" ? v : 0);\n usage = {\n // codex-rs TokenUsage 的 cached_input_tokens 是 input_tokens 的子集,\n // 落互斥桶前扣掉(docs/feature/adapters/sdk/codex-sdk/cost.md)\n inputTokens: (usage?.inputTokens ?? 0) + Math.max(0, num(u.input_tokens) - num(u.cached_input_tokens)),\n outputTokens: (usage?.outputTokens ?? 0) + num(u.output_tokens),\n cacheReadTokens: (usage?.cacheReadTokens ?? 0) + num(u.cached_input_tokens),\n // codex-rs TokenUsage 结构体同一份字段(与 o11y/parsers/codex.ts 的\n // transcript 解析同源),只在这次 turn 真的带回时累加。\n ...(typeof u.reasoning_output_tokens === \"number\" || usage?.reasoningTokens !== undefined\n ? { reasoningTokens: (usage?.reasoningTokens ?? 0) + num(u.reasoning_output_tokens) }\n : {}),\n requests: (usage?.requests ?? 0) + 1,\n };\n }\n break;\n }\n case \"turn.failed\": {\n failed = true;\n if (event.error?.message)\n events.push({ type: \"error\", message: event.error.message });\n break;\n }\n // item.updated(中间态)/ turn.started:忽略,等 completed。\n default:\n break;\n }\n return events;\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk-streams.js","sourceRoot":"","sources":["sdk-streams.ts"],"names":[],"mappings":"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","sourcesContent":["// SDK 原生事件流 → 标准 StreamEvent 的官方转换器(+ 通用 SSE 读帧器)。\n//\n// 定位:各 agent SDK 的流式协议(Claude Agent SDK 的 `SDKMessage`、pi-agent-core 的\n// `AgentEvent`、Codex SDK 的 `ThreadEvent`)是 SDK 定义的通用协议,不是某个应用的私有格式——\n// 这层映射知识属于 niceeval 官方包,adapter 里只该剩传输粘合(应用把流放在哪个端点、\n// 审批走什么端点)。类型全部用结构化的 *Like 声明(同 turnFromAiSdk 的先例),不依赖任何 SDK 包。\n//\n// 用法(以 Claude Agent SDK 为例):\n//\n// ```typescript\n// import { sseJsonFrames, createClaudeSdkEventStream } from \"niceeval/adapter\";\n//\n// const frames = sseJsonFrames<SDKMessage>(res.body);\n// const stream = createClaudeSdkEventStream();\n// for (;;) {\n// const frame = await frames.next();\n// if (frame === null) break;\n// events.push(...stream.add(frame)); // 逐帧翻译;认不出的帧返回 []\n// }\n// return { status: stream.failed ? \"failed\" : \"completed\", events, usage: stream.usage };\n// ```\nimport type { CommandProjection, JsonValue, StreamEvent, ToolName, Usage } from \"../types.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { CODEX_TOOL_ALIASES } from \"../o11y/parsers/codex.ts\";\nimport { CLAUDE_TOOL_ALIASES } from \"../o11y/parsers/claude-code.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\n// ───────────────────────── 通用 SSE 读帧器 ─────────────────────────\nexport interface SseFrameCursor<T> {\n /** 下一个 `data:` JSON 帧;流结束返回 null。`data: [DONE]` 哨兵帧自动跳过。 */\n next(): Promise<T | null>;\n}\n/** 标准 SSE(`data: {...}\\n\\n`)→ 逐帧 JSON。各 adapter 不用再手写 buffer 状态机。 */\nexport function sseJsonFrames<T>(body: ReadableStream<Uint8Array>): SseFrameCursor<T> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n async function next(): Promise<T | null> {\n for (;;) {\n const sepIndex = buffer.indexOf(\"\\n\\n\");\n if (sepIndex !== -1) {\n const rawEvent = buffer.slice(0, sepIndex);\n buffer = buffer.slice(sepIndex + 2);\n const line = rawEvent.split(\"\\n\").find((l) => l.startsWith(\"data: \"));\n if (!line)\n continue;\n const payload = line.slice(\"data: \".length);\n if (payload === \"[DONE]\")\n continue;\n return JSON.parse(payload) as T;\n }\n const { value, done } = await reader.read();\n if (done)\n return null;\n buffer += decoder.decode(value, { stream: true });\n }\n }\n return { next };\n}\nfunction isRecord(v: unknown): v is globalThis.Record<string, unknown> {\n return typeof v === \"object\" && v !== null;\n}\n/** Claude Agent SDK 的原生 Bash tool 只交付 shell source,不交付 argv。 */\nfunction commandProjectionForClaudeSdkTool(name: string): CommandProjection | undefined {\n return name === \"Bash\" ? opaqueCommandProjection(\"unsupported-protocol\") : undefined;\n}\n// ───────────────────────── Claude Agent SDK:SDKMessage ─────────────────────────\n/** 只声明转换器要读的字段;真实的 SDKMessage 直接喂进来即可。 */\nexport interface ClaudeSdkMessageLike {\n type: string;\n subtype?: string;\n session_id?: string;\n tool_use_id?: string;\n is_error?: boolean;\n num_turns?: number;\n total_cost_usd?: number;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n cache_read_input_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n };\n message?: {\n content?: unknown;\n };\n [key: string]: unknown;\n}\nexport interface ClaudeSdkStream {\n /** 逐帧喂 `SDKMessage`,返回这一帧派生的标准事件;认不出的帧(stream_event 等)返回 []。 */\n add(message: ClaudeSdkMessageLike): StreamEvent[];\n /** `system`/`init` 帧带回的 session_id(首帧之后可读),回写 `ctx.session.id` 用。 */\n readonly sessionId: string | undefined;\n /** `result` 帧的聚合用量。 */\n readonly usage: Usage | undefined;\n /** `result` 帧报了 is_error。 */\n readonly failed: boolean;\n /**\n * 拒绝审批后续读前登记:该 tool_use 的 `tool_result` / `permission_denied` 落成\n * `status: \"rejected\"`(而不是 failed),且两种帧只产一条 operation.finished。\n */\n markRejected(toolUseId: string): void;\n}\n/**\n * Claude Agent SDK 消息流(`system` / `assistant` / `user` / `result`)→ 标准事件。\n * `assistant` 的 text/thinking/tool_use 块 → message / thinking / operation.started;`user` 的\n * tool_result 块 → operation.finished;`system`/`permission_denied` → rejected;`stream_event`\n * (逐 token 渲染)整个忽略。HITL 的停轮判定(哪个工具被门控)是应用侧的知识,不在这里——\n * 扫描 add() 返回的 operation.started 自行决定。\n */\nexport function createClaudeSdkEventStream(): ClaudeSdkStream {\n let sessionId: string | undefined;\n let usage: Usage | undefined;\n let failed = false;\n const resolvedCallIds = new Set<string>();\n const rejected = new Set<string>();\n const toolResultText = (content: unknown): string | undefined => {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n return content\n .filter((b): b is {\n type: \"text\";\n text: string;\n } => isRecord(b) && b.type === \"text\" && typeof b.text === \"string\")\n .map((b) => b.text)\n .join(\"\");\n }\n return undefined;\n };\n return {\n get sessionId() {\n return sessionId;\n },\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n markRejected(toolUseId) {\n rejected.add(toolUseId);\n },\n add(frame) {\n const events: StreamEvent[] = [];\n switch (frame.type) {\n case \"system\": {\n if (frame.subtype === \"init\" && typeof frame.session_id === \"string\") {\n sessionId ??= frame.session_id;\n }\n else if (frame.subtype === \"permission_denied\" && typeof frame.tool_use_id === \"string\") {\n if (!resolvedCallIds.has(frame.tool_use_id)) {\n resolvedCallIds.add(frame.tool_use_id);\n events.push({ type: \"operation.finished\", operationId: frame.tool_use_id, kind: \"tool\", status: \"rejected\" });\n }\n }\n break;\n }\n case \"assistant\": {\n const content: unknown[] = Array.isArray(frame.message?.content) ? frame.message.content : [];\n for (const block of content) {\n if (!isRecord(block))\n continue;\n if (block.type === \"text\" && typeof block.text === \"string\" && block.text) {\n events.push({ type: \"message\", role: \"assistant\", text: block.text });\n }\n else if (block.type === \"thinking\" && typeof block.thinking === \"string\" && block.thinking) {\n events.push({ type: \"thinking\", text: block.thinking });\n }\n else if (block.type === \"tool_use\" && typeof block.id === \"string\" && typeof block.name === \"string\") {\n const command = commandProjectionForClaudeSdkTool(block.name);\n events.push({\n type: \"operation.started\",\n operationId: block.id,\n operation: {\n kind: \"tool\",\n name: block.name,\n input: block.input as JsonValue,\n tool: normalizeToolName(block.name, CLAUDE_TOOL_ALIASES),\n ...(command === undefined ? {} : { command }),\n },\n });\n }\n }\n break;\n }\n case \"user\": {\n const content: unknown[] = Array.isArray(frame.message?.content) ? frame.message.content : [];\n for (const block of content) {\n if (!isRecord(block) || block.type !== \"tool_result\" || typeof block.tool_use_id !== \"string\")\n continue;\n if (resolvedCallIds.has(block.tool_use_id))\n continue;\n resolvedCallIds.add(block.tool_use_id);\n events.push({\n type: \"operation.finished\",\n operationId: block.tool_use_id,\n kind: \"tool\",\n output: toolResultText(block.content) as JsonValue,\n status: rejected.has(block.tool_use_id) ? \"rejected\" : block.is_error ? \"failed\" : \"completed\",\n });\n }\n break;\n }\n case \"result\": {\n failed = frame.is_error === true;\n if (frame.usage) {\n usage = {\n inputTokens: frame.usage.input_tokens,\n outputTokens: frame.usage.output_tokens,\n cacheReadTokens: frame.usage.cache_read_input_tokens ?? undefined,\n cacheCreationTokens: frame.usage.cache_creation_input_tokens ?? undefined,\n requests: frame.num_turns,\n costUSD: frame.total_cost_usd,\n };\n }\n break;\n }\n // stream_event(逐 token 渲染)与其它系统/生命周期消息:无对应 StreamEvent。\n default:\n break;\n }\n return events;\n },\n };\n}\n// ───────────────────────── pi-agent-core:AgentEvent ─────────────────────────\nexport interface PiAgentEventLike {\n type: string;\n toolCallId?: string;\n toolName?: string;\n args?: unknown;\n result?: unknown;\n isError?: boolean;\n /** content 在 user 消息上是 string、assistant 消息上是 parts 数组——按 unknown 收,防御式解析。 */\n message?: {\n role?: string;\n content?: unknown;\n /** assistant 消息的收尾原因;\"error\" / \"aborted\" 表示这条消息以失败告终。 */\n stopReason?: string;\n /** stopReason 为 \"error\" 时的错误说明。 */\n errorMessage?: string;\n usage?: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: {\n total: number;\n };\n };\n };\n /** `message_update` 帧携带的增量事件(text_delta / thinking_delta 等)——只读 type/delta,防御式解析。 */\n assistantMessageEvent?: {\n type?: string;\n delta?: unknown;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\nexport interface PiAgentStream {\n /** 逐帧喂 `AgentEvent`,返回这一帧派生的标准事件;生命周期帧(turn_start 等)返回 []。 */\n add(event: PiAgentEventLike): StreamEvent[];\n /** assistant `message_end` 逐条累加的用量。 */\n readonly usage: Usage | undefined;\n /** assistant 消息以 stopReason \"error\" / \"aborted\" 收尾过。 */\n readonly failed: boolean;\n /** 拒绝审批后续读前登记:该调用 `tool_execution_end` 的 isError 判成 \"rejected\" 而非 \"failed\"。 */\n markRejected(toolCallId: string): void;\n}\n/**\n * pi-agent-core 事件流(`message_start` / `message_update` / `message_end` /\n * `tool_execution_start` / `tool_execution_end`)→ 标准事件。消息三段式聚合成一条:\n * message_start 清空增量缓冲、message_update 的 text_delta / thinking_delta 逐段累加、\n * message_end 落地成 message / thinking(优先取 end 帧的完整 content,缺了用累加的增量兜底);\n * 只有 start/delta 的截断流不产出半条消息。message_end 同时累加 usage;assistant 消息以\n * stopReason \"error\" / \"aborted\" 收尾时记失败(`failed`)并发一条 error 事件。\n * tool_execution_start/end → operation.started / operation.finished。\n */\nexport function createPiAgentEventStream(): PiAgentStream {\n let usage: Usage | undefined;\n let failed = false;\n // message_start/update 累加的增量缓冲;message_end 落地后清空,截断流(无 end)不落地。\n let deltaText = \"\";\n let deltaThinking = \"\";\n const rejected = new Set<string>();\n const partText = (event: PiAgentEventLike, type: \"text\" | \"thinking\"): string => {\n if (event.message?.role !== \"assistant\" || !Array.isArray(event.message.content))\n return \"\";\n return event.message.content\n .filter((part): part is globalThis.Record<string, unknown> => isRecord(part) && part.type === type)\n .map((part) => {\n const v = type === \"text\" ? part.text : part.thinking;\n return typeof v === \"string\" ? v : \"\";\n })\n .join(\"\");\n };\n return {\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n markRejected(toolCallId) {\n rejected.add(toolCallId);\n },\n add(event) {\n const events: StreamEvent[] = [];\n switch (event.type) {\n case \"message_start\": {\n // 新消息开始:上一条没等到 message_end 的增量作废(不落地半条消息)。\n deltaText = \"\";\n deltaThinking = \"\";\n break;\n }\n case \"message_update\": {\n const e = event.assistantMessageEvent;\n if (isRecord(e) && typeof e.delta === \"string\") {\n if (e.type === \"text_delta\")\n deltaText += e.delta;\n else if (e.type === \"thinking_delta\")\n deltaThinking += e.delta;\n }\n break;\n }\n case \"message_end\": {\n // 优先取 end 帧的完整 content;缺了(部分传输只带增量)用累加的 delta 兜底。\n const text = partText(event, \"text\") || (event.message?.role === \"assistant\" ? deltaText : \"\");\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n const thinking = partText(event, \"thinking\") || (event.message?.role === \"assistant\" ? deltaThinking : \"\");\n if (thinking)\n events.push({ type: \"thinking\", text: thinking });\n deltaText = \"\";\n deltaThinking = \"\";\n if (event.message?.role === \"assistant\") {\n const stopReason = event.message.stopReason;\n if (stopReason === \"error\" || stopReason === \"aborted\") {\n failed = true;\n events.push({ type: \"error\", message: event.message.errorMessage ?? `pi agent stopReason=${stopReason}` });\n }\n }\n const u = event.message?.role === \"assistant\" ? event.message.usage : undefined;\n if (u) {\n // pi computes u.cost from its own model price table. That estimate\n // is not provider-observed billing and must not enter Usage.costUSD.\n usage = {\n inputTokens: (usage?.inputTokens ?? 0) + u.input,\n outputTokens: (usage?.outputTokens ?? 0) + u.output,\n cacheReadTokens: (usage?.cacheReadTokens ?? 0) + u.cacheRead,\n cacheCreationTokens: (usage?.cacheCreationTokens ?? 0) + u.cacheWrite,\n requests: (usage?.requests ?? 0) + 1,\n };\n }\n break;\n }\n case \"tool_execution_start\": {\n if (typeof event.toolCallId === \"string\" && typeof event.toolName === \"string\") {\n events.push({\n type: \"operation.started\",\n operationId: event.toolCallId,\n operation: { kind: \"tool\", name: event.toolName, input: event.args as JsonValue },\n });\n }\n break;\n }\n case \"tool_execution_end\": {\n if (typeof event.toolCallId === \"string\") {\n const status = event.isError ? (rejected.has(event.toolCallId) ? \"rejected\" : \"failed\") : \"completed\";\n events.push({ type: \"operation.finished\", operationId: event.toolCallId, kind: \"tool\", output: event.result as JsonValue, status });\n }\n break;\n }\n // agent_start / turn_start / turn_end / tool_execution_update / agent_end:\n // 无对应 StreamEvent(消息文本统一在 message_end 落地)。\n default:\n break;\n }\n return events;\n },\n };\n}\n// ───────────────────────── Codex SDK:ThreadEvent ─────────────────────────\nexport interface CodexThreadEventLike {\n type: string;\n thread_id?: string;\n item?: {\n type?: string;\n text?: string;\n message?: string;\n [key: string]: unknown;\n };\n error?: {\n message: string;\n };\n [key: string]: unknown;\n}\nexport interface CodexThreadStream {\n /**\n * 逐帧喂 `ThreadEvent`,返回标准事件:消息类(agent_message → message、reasoning → thinking、\n * error item / turn.failed → error)+ 工具项(command_execution / mcp_tool_call / web_search /\n * file_change → operation.started + operation.finished,附规范工具名 `tool`,如 command_execution →\n * `\"shell\"`,供 `calledTool(\"shell\")` 这类跨 agent 断言命中)。usage 从 `turn.completed` 聚合,经 `usage` 读。\n * 断言依据全部来自这条流;codex CLI 的原生 OTLP span 只用于瀑布图(spanMapper: mapCodexSpans)。\n */\n add(event: CodexThreadEventLike): StreamEvent[];\n /** `thread.started` 带回的 thread_id,回写 `ctx.session.id` 用。 */\n readonly threadId: string | undefined;\n /** `turn.completed` 聚合的用量(input/cached/output tokens)。 */\n readonly usage: Usage | undefined;\n /** turn.failed / error item 出现过。 */\n readonly failed: boolean;\n}\n/** Codex SDK 线程事件流(`thread.started` / `item.*` / `turn.completed` / `turn.failed`)→ 标准事件。 */\nexport function createCodexThreadEventStream(): CodexThreadStream {\n let threadId: string | undefined;\n let usage: Usage | undefined;\n let failed = false;\n // item.started 已发 operation.started 的 id;item.completed 时不重发,只补 result。\n const startedCallIds = new Set<string>();\n let synth = 0;\n const callIdOf = (item: globalThis.Record<string, unknown>, prefix: string): string => {\n const id = item.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : `${prefix}_${++synth}`;\n };\n // 工具项 → operation.started(+completed 时的 operation.finished)。与 o11y/parsers/codex.ts 的\n // transcript 映射保持同一套语义(字段名以 codex exec --json 的 ThreadItem 为准),\n // 包括规范工具名 tool:少了它 derive 只能落 name=\"unknown\",calledTool(\"shell\") 这类\n // 跨 agent 规范名断言在 SDK 流路径上会静默失配(2026-07-09 CI 实红)。\n const handleToolItem = (item: globalThis.Record<string, unknown>, isCompleted: boolean): StreamEvent[] => {\n const events: StreamEvent[] = [];\n const emitCall = (callId: string, name: string, input: JsonValue, tool: ToolName, command: CommandProjection): void => {\n if (startedCallIds.has(callId))\n return;\n startedCallIds.add(callId);\n events.push({ type: \"operation.started\", operationId: callId, operation: { kind: \"tool\", name, input, tool, command } });\n };\n switch (item.type) {\n case \"command_execution\": {\n const callId = callIdOf(item, \"cmd\");\n emitCall(callId, \"command_execution\", { command: item.command ?? null } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n if (isCompleted) {\n const exit = item.exit_code ?? item.exitCode;\n const output = item.aggregated_output ?? item.aggregatedOutput ?? item.output;\n const status = item.status === \"declined\" || item.status === \"rejected\"\n ? \"rejected\" as const\n : exit === 0 || (exit == null && item.status !== \"failed\" && item.status !== \"error\")\n ? \"completed\" as const\n : \"failed\" as const;\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n ...(output === undefined && exit === undefined\n ? {}\n : { output: { output: (output ?? null) as JsonValue, exit_code: (exit ?? null) as JsonValue } }),\n status,\n });\n }\n return events;\n }\n case \"mcp_tool_call\": {\n const callId = callIdOf(item, \"mcp\");\n const tool = String(item.tool ?? \"unknown\");\n const name = typeof item.server === \"string\" ? `${item.server}.${tool}` : tool;\n emitCall(callId, name, (item.arguments ?? null) as JsonValue, normalizeToolName(tool, CODEX_TOOL_ALIASES), notCommandProjection());\n if (isCompleted) {\n const success = !item.error && item.status !== \"failed\";\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: (item.result ?? null) as JsonValue,\n status: success ? \"completed\" : \"failed\",\n });\n }\n return events;\n }\n case \"web_search\": {\n const callId = callIdOf(item, \"web\");\n emitCall(callId, \"web_search\", { query: item.query ?? null } as JsonValue, \"web_search\", notCommandProjection());\n if (isCompleted) {\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output: null, status: \"completed\" });\n }\n return events;\n }\n case \"file_change\": {\n // 补丁类只在 completed 落一次:changes 里每个文件一对 called/result。\n if (!isCompleted)\n return events;\n const baseId = callIdOf(item, \"patch\");\n const changes = Array.isArray(item.changes) ? item.changes : [];\n changes.forEach((ch, i) => {\n const callId = `${baseId}#${i}`;\n const change = isRecord(ch) ? { path: ch.path ?? null, kind: ch.kind ?? null } : {};\n events.push({\n type: \"operation.started\",\n operationId: callId,\n operation: {\n kind: \"tool\",\n name: \"file_change\",\n input: change as JsonValue,\n tool: \"file_edit\",\n command: notCommandProjection(),\n },\n });\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output: change as JsonValue, status: \"completed\" });\n });\n return events;\n }\n default:\n return events;\n }\n };\n return {\n get threadId() {\n return threadId;\n },\n get usage() {\n return usage;\n },\n get failed() {\n return failed;\n },\n add(event) {\n const events: StreamEvent[] = [];\n switch (event.type) {\n case \"thread.started\": {\n if (typeof event.thread_id === \"string\")\n threadId ??= event.thread_id;\n break;\n }\n case \"item.started\": {\n if (event.item)\n events.push(...handleToolItem(event.item, false));\n break;\n }\n case \"item.completed\": {\n const item = event.item;\n if (!item)\n break;\n if (item.type === \"agent_message\" && typeof item.text === \"string\" && item.text) {\n events.push({ type: \"message\", role: \"assistant\", text: item.text });\n }\n else if (item.type === \"reasoning\" && typeof item.text === \"string\" && item.text) {\n events.push({ type: \"thinking\", text: item.text });\n }\n else if (item.type === \"error\" && typeof item.message === \"string\") {\n failed = true;\n events.push({ type: \"error\", message: item.message });\n }\n else {\n events.push(...handleToolItem(item, true));\n }\n break;\n }\n case \"turn.completed\": {\n const u = event.usage;\n if (isRecord(u)) {\n const num = (v: unknown): number => (typeof v === \"number\" ? v : 0);\n usage = {\n // codex-rs TokenUsage 的 cached_input_tokens 是 input_tokens 的子集,\n // 落互斥桶前扣掉(docs/feature/adapters/sdk/codex-sdk/cost.md)\n inputTokens: (usage?.inputTokens ?? 0) + Math.max(0, num(u.input_tokens) - num(u.cached_input_tokens)),\n outputTokens: (usage?.outputTokens ?? 0) + num(u.output_tokens),\n cacheReadTokens: (usage?.cacheReadTokens ?? 0) + num(u.cached_input_tokens),\n // codex-rs TokenUsage 结构体同一份字段(与 o11y/parsers/codex.ts 的\n // transcript 解析同源),只在这次 turn 真的带回时累加。\n ...(typeof u.reasoning_output_tokens === \"number\" || usage?.reasoningTokens !== undefined\n ? { reasoningTokens: (usage?.reasoningTokens ?? 0) + num(u.reasoning_output_tokens) }\n : {}),\n requests: (usage?.requests ?? 0) + 1,\n };\n }\n break;\n }\n case \"turn.failed\": {\n failed = true;\n if (event.error?.message)\n events.push({ type: \"error\", message: event.error.message });\n break;\n }\n // item.updated(中间态)/ turn.started:忽略,等 completed。\n default:\n break;\n }\n return events;\n },\n };\n}\n"]}
|
|
@@ -41,13 +41,7 @@ exports.publishedAnalysisInputBindings = Object.freeze({
|
|
|
41
41
|
family: assertionsFamily,
|
|
42
42
|
project: ({ core, payload }) => {
|
|
43
43
|
const verdict = (0, verdict_ts_1.foldRecordedAttemptVerdict)({ outcome: core.outcome, assertions: payload });
|
|
44
|
-
|
|
45
|
-
return Object.freeze({ state: "value", value: verdict === "passed" });
|
|
46
|
-
}
|
|
47
|
-
return Object.freeze({
|
|
48
|
-
state: "unsupported",
|
|
49
|
-
message: `Attempt verdict ${verdict} has no pass/fail reading`,
|
|
50
|
-
});
|
|
44
|
+
return Object.freeze({ state: "value", value: verdict === "passed" });
|
|
51
45
|
},
|
|
52
46
|
}),
|
|
53
47
|
attemptLatencyMs: Object.freeze({
|
|
@@ -182,15 +176,51 @@ function closeAssertions(core, payload, _blobs) {
|
|
|
182
176
|
verdict: (0, verdict_ts_1.foldRecordedAttemptVerdict)({ outcome: core.outcome, assertions: payload }),
|
|
183
177
|
entries: Object.freeze(payload.entries.map((entry) => Object.freeze({
|
|
184
178
|
entryId: entry.entryId,
|
|
185
|
-
display:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
179
|
+
display: Object.freeze({ ...entry.display, groupPath: Object.freeze([...entry.display.groupPath]) }),
|
|
180
|
+
source: Object.freeze({
|
|
181
|
+
kind: "fields",
|
|
182
|
+
fields: Object.freeze([Object.freeze({
|
|
183
|
+
label: "input",
|
|
184
|
+
value: assertionMaterialFact(entry.materials.source),
|
|
185
|
+
}), ...(entry.materials.evidence.length === 0 ? [] : [Object.freeze({
|
|
186
|
+
label: "evidence",
|
|
187
|
+
value: Object.freeze({
|
|
188
|
+
kind: "list",
|
|
189
|
+
items: Object.freeze(entry.materials.evidence.map(assertionMaterialFact)),
|
|
190
|
+
}),
|
|
191
|
+
})])]),
|
|
192
|
+
coverage: entry.materials.coverage,
|
|
193
|
+
limitations: entry.materials.limitations,
|
|
194
|
+
}),
|
|
195
|
+
check: entry.criterion.state === "available"
|
|
196
|
+
? assertionFact(entry.criterion.value)
|
|
197
|
+
: Object.freeze({ kind: "unavailable", reason: "not-recorded" }),
|
|
198
|
+
observed: Object.freeze({
|
|
199
|
+
kind: "fields",
|
|
200
|
+
fields: entry.evaluation.observed.kind === "fields"
|
|
201
|
+
? entry.evaluation.observed.fields
|
|
202
|
+
: Object.freeze([Object.freeze({ label: "value", value: entry.evaluation.observed })]),
|
|
203
|
+
...(entry.evaluation.receipt === undefined ? {} : { receipt: entry.evaluation.receipt }),
|
|
204
|
+
}),
|
|
205
|
+
expected: entry.policy.condition.state === "available"
|
|
206
|
+
? assertionFact(entry.policy.condition.value)
|
|
207
|
+
: Object.freeze({ kind: "unavailable", reason: "not-recorded" }),
|
|
208
|
+
explanation: entry.explanationRetention.state === "retained"
|
|
209
|
+
? entry.explanationRetention.value
|
|
210
|
+
: Object.freeze({ kind: "unavailable", reason: "not-recorded" }),
|
|
211
|
+
decision: Object.freeze({
|
|
212
|
+
result: entry.decision.result,
|
|
213
|
+
reason: entry.decision.reason,
|
|
214
|
+
gate: entry.decision.gate,
|
|
215
|
+
policy: entry.policy,
|
|
216
|
+
contribution: entry.contribution,
|
|
217
|
+
}),
|
|
218
|
+
}))),
|
|
219
|
+
sourceSites: Object.freeze(payload.sourceSites.map((site) => Object.freeze({
|
|
220
|
+
...site,
|
|
221
|
+
start: Object.freeze({ ...site.start }),
|
|
222
|
+
end: Object.freeze({ ...site.end }),
|
|
192
223
|
}))),
|
|
193
|
-
sourceSites: Object.freeze(payload.sourceSites.map(closeJson)),
|
|
194
224
|
});
|
|
195
225
|
}
|
|
196
226
|
function closeSourceNavigation(payload) {
|
|
@@ -571,12 +601,37 @@ function closeSources(payload, blobs) {
|
|
|
571
601
|
}))),
|
|
572
602
|
});
|
|
573
603
|
}
|
|
574
|
-
function
|
|
604
|
+
function assertionFact(value) {
|
|
605
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
606
|
+
return Object.freeze({ kind: "value", value });
|
|
607
|
+
}
|
|
608
|
+
if (typeof value === "number") {
|
|
609
|
+
return Number.isFinite(value)
|
|
610
|
+
? Object.freeze({ kind: "value", value })
|
|
611
|
+
: Object.freeze({ kind: "unavailable", reason: "source-unavailable" });
|
|
612
|
+
}
|
|
613
|
+
if (Array.isArray(value)) {
|
|
614
|
+
return Object.freeze({ kind: "list", items: Object.freeze(value.map(assertionFact)) });
|
|
615
|
+
}
|
|
616
|
+
if (typeof value === "object" && value !== null) {
|
|
617
|
+
return Object.freeze({
|
|
618
|
+
kind: "fields",
|
|
619
|
+
fields: Object.freeze(Object.entries(value).map(([label, item]) => Object.freeze({
|
|
620
|
+
label,
|
|
621
|
+
value: assertionFact(item),
|
|
622
|
+
}))),
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
return Object.freeze({ kind: "unavailable", reason: "source-unavailable" });
|
|
626
|
+
}
|
|
627
|
+
function assertionMaterialFact(value) {
|
|
575
628
|
if (value.kind === "snapshot") {
|
|
576
|
-
return
|
|
629
|
+
return assertionFact(value.value);
|
|
630
|
+
}
|
|
631
|
+
if (value.kind === "unavailable") {
|
|
632
|
+
return Object.freeze({ kind: "unavailable", reason: "not-recorded" });
|
|
577
633
|
}
|
|
578
|
-
|
|
579
|
-
return Object.freeze({ kind: "blob", encoding: blob.encoding, byteLength: blob.byteLength, preview: blob.preview });
|
|
634
|
+
return assertionFact({ encoding: value.encoding, byteLength: value.byteLength, preview: value.preview });
|
|
580
635
|
}
|
|
581
636
|
function closeBlob(ref, blobs) {
|
|
582
637
|
const bytes = blobs.bytes(ref);
|