niceeval 0.13.2 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/bub.cjs +4 -4
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +2 -2
- package/dist/agents/bub.d.mts +2 -2
- package/dist/agents/bub.d.ts +2 -2
- package/dist/agents/claude-code-native.cjs +213 -0
- package/dist/agents/claude-code-native.cjs.map +1 -0
- package/dist/agents/claude-code-native.d.cts +5 -0
- package/dist/agents/claude-code-native.d.mts +5 -0
- package/dist/agents/claude-code-native.d.ts +5 -0
- package/dist/agents/claude-code-native.js +6 -0
- package/dist/agents/claude-code-native.js.map +1 -0
- package/dist/agents/claude-code.cjs +26 -80
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/codex-app-server.cjs +314 -0
- package/dist/agents/codex-app-server.cjs.map +1 -0
- package/dist/agents/codex-app-server.d.cts +9 -0
- package/dist/agents/codex-app-server.d.mts +9 -0
- package/dist/agents/codex-app-server.d.ts +9 -0
- package/dist/agents/codex-app-server.js +6 -0
- package/dist/agents/codex-app-server.js.map +1 -0
- package/dist/agents/codex.cjs +19 -68
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +3 -3
- package/dist/agents/codex.d.mts +3 -3
- package/dist/agents/codex.d.ts +3 -3
- package/dist/agents/index.cjs +3 -1
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +1 -0
- package/dist/agents/index.d.mts +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.js +84 -82
- package/dist/agents/index.mjs +84 -82
- package/dist/agents/managed-jsonl.cjs +207 -0
- package/dist/agents/managed-jsonl.cjs.map +1 -0
- package/dist/agents/managed-jsonl.d.cts +39 -0
- package/dist/agents/managed-jsonl.d.mts +39 -0
- package/dist/agents/managed-jsonl.d.ts +39 -0
- package/dist/agents/managed-jsonl.js +6 -0
- package/dist/agents/managed-jsonl.js.map +1 -0
- package/dist/agents/managed-process.cjs +31 -0
- package/dist/agents/managed-process.cjs.map +1 -0
- package/dist/agents/managed-process.d.cts +3 -0
- package/dist/agents/managed-process.d.mts +3 -0
- package/dist/agents/managed-process.d.ts +3 -0
- package/dist/agents/managed-process.js +6 -0
- package/dist/agents/managed-process.js.map +1 -0
- package/dist/agents/omp.cjs +18 -1
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/sdk-streams.cjs +11 -4
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +8 -0
- package/dist/agents/types.d.mts +8 -0
- package/dist/agents/types.d.ts +8 -0
- package/dist/analysis/bindings.cjs +74 -19
- package/dist/analysis/bindings.cjs.map +1 -1
- package/dist/analysis/bindings.d.cts +534 -156
- package/dist/analysis/bindings.d.mts +534 -156
- package/dist/analysis/bindings.d.ts +534 -156
- package/dist/analysis/domain-view.cjs.map +1 -1
- package/dist/analysis/domain-view.d.cts +137 -8
- package/dist/analysis/domain-view.d.mts +137 -8
- package/dist/analysis/domain-view.d.ts +137 -8
- package/dist/analysis/index.cjs.map +1 -1
- package/dist/analysis/index.d.cts +1 -1
- package/dist/analysis/index.d.mts +1 -1
- package/dist/analysis/index.d.ts +1 -1
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +62 -0
- package/dist/assertions/api.d.mts +62 -0
- package/dist/assertions/api.d.ts +62 -0
- package/dist/assertions/judge.cjs +56 -5
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +66 -42
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +13 -0
- package/dist/assertions/match.d.mts +13 -0
- package/dist/assertions/match.d.ts +13 -0
- package/dist/assertions/record/attachment.cjs +104 -33
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/attachment.d.cts +294 -57
- package/dist/assertions/record/attachment.d.mts +294 -57
- package/dist/assertions/record/attachment.d.ts +294 -57
- package/dist/assertions/record/codec.cjs +91 -17
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/codec.d.cts +280 -52
- package/dist/assertions/record/codec.d.mts +280 -52
- package/dist/assertions/record/codec.d.ts +280 -52
- package/dist/assertions/record/index.js +2 -0
- package/dist/assertions/record/model.cjs +16 -0
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +120 -13
- package/dist/assertions/record/model.d.mts +120 -13
- package/dist/assertions/record/model.d.ts +120 -13
- package/dist/assertions/record/model.js +2 -0
- package/dist/assertions/record/producer.cjs +70 -50
- package/dist/assertions/record/producer.cjs.map +1 -1
- package/dist/assertions/record/producer.d.cts +8 -7
- package/dist/assertions/record/producer.d.mts +8 -7
- package/dist/assertions/record/producer.d.ts +8 -7
- package/dist/assertions/runtime.cjs +49 -7
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/application.cjs +40 -0
- package/dist/cli/application.cjs.map +1 -0
- package/dist/cli/application.d.cts +129 -0
- package/dist/cli/application.d.mts +129 -0
- package/dist/cli/application.d.ts +129 -0
- package/dist/cli/application.js +24 -0
- package/dist/cli/application.js.map +1 -0
- package/dist/cli/bootstrap.cjs +10 -4
- package/dist/cli/bootstrap.cjs.map +1 -1
- package/dist/cli/node-application.cjs +123 -0
- package/dist/cli/node-application.cjs.map +1 -0
- package/dist/cli/node-application.d.cts +14 -0
- package/dist/cli/node-application.d.mts +14 -0
- package/dist/cli/node-application.d.ts +14 -0
- package/dist/cli/node-application.js +26 -0
- package/dist/cli/node-application.js.map +1 -0
- package/dist/cli/program.cjs +2807 -0
- package/dist/cli/program.cjs.map +1 -0
- package/dist/cli/program.d.cts +352 -0
- package/dist/cli/program.d.mts +352 -0
- package/dist/cli/program.d.ts +352 -0
- package/dist/cli/program.js +36 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/project-configuration.cjs +134 -0
- package/dist/cli/project-configuration.cjs.map +1 -0
- package/dist/cli/project-configuration.d.cts +64 -0
- package/dist/cli/project-configuration.d.mts +64 -0
- package/dist/cli/project-configuration.d.ts +64 -0
- package/dist/cli/project-configuration.js +22 -0
- package/dist/cli/project-configuration.js.map +1 -0
- package/dist/cli/record.cjs +20 -4
- package/dist/cli/record.cjs.map +1 -1
- package/dist/cli/record.d.cts +3 -3
- package/dist/cli/record.d.mts +3 -3
- package/dist/cli/record.d.ts +3 -3
- package/dist/cli.cjs +19 -3130
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +2 -148
- package/dist/cli.d.mts +2 -148
- package/dist/cli.d.ts +2 -148
- package/dist/cli.js +22 -30
- package/dist/context/assert-first.cjs +21 -15
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +1 -0
- package/dist/context/assert-first.d.mts +1 -0
- package/dist/context/assert-first.d.ts +1 -0
- package/dist/context/attempt-resources.cjs +13 -0
- package/dist/context/attempt-resources.cjs.map +1 -0
- package/dist/context/attempt-resources.d.cts +3 -0
- package/dist/context/attempt-resources.d.mts +3 -0
- package/dist/context/attempt-resources.d.ts +3 -0
- package/dist/context/attempt-resources.js +8 -0
- package/dist/context/attempt-resources.js.map +1 -0
- package/dist/context/session.cjs +4 -3
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +1 -0
- package/dist/context/session.d.mts +1 -0
- package/dist/context/session.d.ts +1 -0
- package/dist/eval/record/verdict.cjs +3 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -6
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/index.d.cts +1 -0
- package/dist/experiment/host/index.d.mts +1 -0
- package/dist/experiment/host/index.d.ts +1 -0
- package/dist/load-config.cjs +13 -4
- package/dist/load-config.cjs.map +1 -1
- package/dist/load-config.d.cts +4 -3
- package/dist/load-config.d.mts +4 -3
- package/dist/load-config.d.ts +4 -3
- package/dist/load-config.js +4 -2
- package/dist/o11y/parsers/codex.cjs +29 -7
- package/dist/o11y/parsers/codex.cjs.map +1 -1
- package/dist/record/codec/core.d.cts +0 -2
- package/dist/record/codec/core.d.mts +0 -2
- package/dist/record/codec/core.d.ts +0 -2
- package/dist/record/codec/identifiers.cjs +2 -3
- package/dist/record/codec/identifiers.cjs.map +1 -1
- package/dist/record/codec/identifiers.d.cts +1 -2
- package/dist/record/codec/identifiers.d.mts +1 -2
- package/dist/record/codec/identifiers.d.ts +1 -2
- package/dist/record/codec/identifiers.js +10 -12
- package/dist/record/codec/index.js +42 -44
- package/dist/record/definition/attachment.cjs +1 -0
- package/dist/record/definition/attachment.cjs.map +1 -1
- package/dist/record/definition/attachment.d.cts +14 -0
- package/dist/record/definition/attachment.d.mts +14 -0
- package/dist/record/definition/attachment.d.ts +14 -0
- package/dist/record/family/assertions-v1.cjs +104 -0
- package/dist/record/family/assertions-v1.cjs.map +1 -0
- package/dist/record/family/assertions-v1.d.cts +2 -0
- package/dist/record/family/assertions-v1.d.mts +2 -0
- package/dist/record/family/assertions-v1.d.ts +2 -0
- package/dist/record/family/assertions-v1.js +6 -0
- package/dist/record/family/assertions-v1.js.map +1 -0
- package/dist/record/family/assertions.cjs +16 -5
- package/dist/record/family/assertions.cjs.map +1 -1
- package/dist/record/family/assertions.d.cts +510 -56
- package/dist/record/family/assertions.d.mts +510 -56
- package/dist/record/family/assertions.d.ts +510 -56
- package/dist/record/family/assertions.js +14 -10
- package/dist/record/family/catalog.cjs +17 -1
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +1292 -104
- package/dist/record/family/catalog.d.mts +1292 -104
- package/dist/record/family/catalog.d.ts +1292 -104
- package/dist/record/family/catalog.js +22 -20
- package/dist/record/family/index.js +144 -138
- package/dist/record/family/observability-v1.cjs +5 -0
- package/dist/record/family/observability-v1.cjs.map +1 -1
- package/dist/record/family/observability.cjs +1 -1
- package/dist/record/family/observability.cjs.map +1 -1
- package/dist/record/host/runtime.cjs +323 -173
- package/dist/record/host/runtime.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +9 -7
- package/dist/record/host/types.d.mts +9 -7
- package/dist/record/host/types.d.ts +9 -7
- package/dist/record/model/core.cjs.map +1 -1
- package/dist/record/model/core.d.cts +1 -2
- package/dist/record/model/core.d.mts +1 -2
- package/dist/record/model/core.d.ts +1 -2
- package/dist/record/model/definition.cjs +1 -2
- package/dist/record/model/definition.cjs.map +1 -1
- package/dist/record/model/definition.d.cts +1 -7
- package/dist/record/model/definition.d.mts +1 -7
- package/dist/record/model/definition.d.ts +1 -7
- package/dist/record/model/identifiers.cjs +2 -3
- package/dist/record/model/identifiers.cjs.map +1 -1
- package/dist/record/model/identifiers.d.cts +1 -3
- package/dist/record/model/identifiers.d.mts +1 -3
- package/dist/record/model/identifiers.d.ts +1 -3
- package/dist/record/model/identifiers.js +36 -38
- package/dist/record/model/index.js +60 -62
- package/dist/record/platform/node.cjs +17 -7
- package/dist/record/platform/node.cjs.map +1 -1
- package/dist/record/platform/services.cjs.map +1 -1
- package/dist/record/platform/services.d.cts +8 -3
- package/dist/record/platform/services.d.mts +8 -3
- package/dist/record/platform/services.d.ts +8 -3
- package/dist/record/reader/format.cjs +16 -65
- package/dist/record/reader/format.cjs.map +1 -1
- package/dist/record/reader/format.d.cts +5 -9
- package/dist/record/reader/format.d.mts +5 -9
- package/dist/record/reader/format.d.ts +5 -9
- package/dist/record/reader/index.js +10 -8
- package/dist/record/reader/runtime.cjs +63 -32
- package/dist/record/reader/runtime.cjs.map +1 -1
- package/dist/record/reader/runtime.d.cts +40 -4
- package/dist/record/reader/runtime.d.mts +40 -4
- package/dist/record/reader/runtime.d.ts +40 -4
- package/dist/record/reader/runtime.js +6 -4
- package/dist/report/assets/enhance.js +5 -5
- package/dist/report/assets/styles.css +190 -24
- package/dist/report/built-in/result-components.cjs +8 -5
- package/dist/report/built-in/result-components.cjs.map +1 -1
- package/dist/report/built-in/standard.cjs +3 -0
- package/dist/report/built-in/standard.cjs.map +1 -1
- package/dist/report/built-in/standard.d.cts +2 -0
- package/dist/report/built-in/standard.d.mts +2 -0
- package/dist/report/built-in/standard.d.ts +2 -0
- package/dist/report/client-dist/app.js +53 -0
- package/dist/report/components/attempt-detail/compute.cjs +108 -231
- package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
- package/dist/report/components/attempt-detail/compute.d.cts +11 -45
- package/dist/report/components/attempt-detail/compute.d.mts +11 -45
- package/dist/report/components/attempt-detail/compute.d.ts +11 -45
- package/dist/report/components/attempt-detail/compute.js +2 -4
- package/dist/report/components/attempt-detail/content.cjs +4 -4
- package/dist/report/components/attempt-detail/content.cjs.map +1 -1
- package/dist/report/components/attempt-detail/validate.cjs +47 -4
- package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.cjs +9 -15
- package/dist/report/components/entity-lists/compute.cjs.map +1 -1
- package/dist/report/components/entity-lists/content.cjs +53 -40
- package/dist/report/components/entity-lists/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.cjs +1 -3
- package/dist/report/components/entity-lists/index.cjs.map +1 -1
- package/dist/report/components/experiment-detail/compute.cjs +4 -6
- package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
- package/dist/report/components/summaries/index.cjs +5 -1
- package/dist/report/components/summaries/index.cjs.map +1 -1
- package/dist/report/definition/cell.cjs +14 -7
- package/dist/report/definition/cell.cjs.map +1 -1
- package/dist/report/definition/cell.d.cts +4 -0
- package/dist/report/definition/cell.d.mts +4 -0
- package/dist/report/definition/cell.d.ts +4 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
- package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.js +6 -0
- package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
- package/dist/report/definition/primitives/conversation.cjs +7 -0
- package/dist/report/definition/primitives/conversation.cjs.map +1 -1
- package/dist/report/definition/primitives/conversation.d.cts +2 -0
- package/dist/report/definition/primitives/conversation.d.mts +2 -0
- package/dist/report/definition/primitives/conversation.d.ts +2 -0
- package/dist/report/definition/primitives/turn-trace.cjs +53 -3
- package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
- package/dist/report/definition/primitives.cjs +14 -1
- package/dist/report/definition/primitives.cjs.map +1 -1
- package/dist/report/definition/report.cjs +16 -8
- package/dist/report/definition/report.cjs.map +1 -1
- package/dist/report/definition/report.d.cts +6 -0
- package/dist/report/definition/report.d.mts +6 -0
- package/dist/report/definition/report.d.ts +6 -0
- package/dist/report/definition/table-text.cjs +12 -3
- package/dist/report/definition/table-text.cjs.map +1 -1
- package/dist/report/definition/table-text.d.cts +6 -1
- package/dist/report/definition/table-text.d.mts +6 -1
- package/dist/report/definition/table-text.d.ts +6 -1
- package/dist/report/execution/model.cjs +6 -14
- package/dist/report/execution/model.cjs.map +1 -1
- package/dist/report/execution/model.d.cts +5 -10
- package/dist/report/execution/model.d.mts +5 -10
- package/dist/report/execution/model.d.ts +5 -10
- package/dist/report/execution/model.js +6 -6
- package/dist/report/execution/paths.cjs +0 -11
- package/dist/report/execution/paths.cjs.map +1 -1
- package/dist/report/execution/paths.d.cts +0 -1
- package/dist/report/execution/paths.d.mts +0 -1
- package/dist/report/execution/paths.d.ts +0 -1
- package/dist/report/execution/paths.js +6 -8
- package/dist/report/host/execute.cjs +13 -22
- package/dist/report/host/execute.cjs.map +1 -1
- package/dist/report/host/execute.d.cts +1 -4
- package/dist/report/host/execute.d.mts +1 -4
- package/dist/report/host/execute.d.ts +1 -4
- package/dist/report/host/from-record.cjs +3 -0
- package/dist/report/host/from-record.cjs.map +1 -1
- package/dist/report/host/from-record.d.cts +4 -1
- package/dist/report/host/from-record.d.mts +4 -1
- package/dist/report/host/from-record.d.ts +4 -1
- package/dist/report/host/site-assets.cjs +1 -2
- package/dist/report/host/site-assets.cjs.map +1 -1
- package/dist/report/host/site-assets.d.cts +0 -1
- package/dist/report/host/site-assets.d.mts +0 -1
- package/dist/report/host/site-assets.d.ts +0 -1
- package/dist/report/host/site-assets.js +2 -4
- package/dist/report/host/static.cjs +71 -346
- package/dist/report/host/static.cjs.map +1 -1
- package/dist/report/host/static.d.cts +1 -3
- package/dist/report/host/static.d.mts +1 -3
- package/dist/report/host/static.d.ts +1 -3
- package/dist/report/host/static.js +2 -2
- package/dist/report/host/view-session.cjs.map +1 -1
- package/dist/report/host/view-session.d.cts +1 -1
- package/dist/report/host/view-session.d.mts +1 -1
- package/dist/report/host/view-session.d.ts +1 -1
- package/dist/report/model/locale.cjs +1 -1
- package/dist/report/model/locale.cjs.map +1 -1
- package/dist/report/model/locale.d.cts +1 -1
- package/dist/report/model/locale.d.mts +1 -1
- package/dist/report/model/locale.d.ts +1 -1
- package/dist/report/model/pricing.cjs +2 -2
- package/dist/report/model/pricing.cjs.map +1 -1
- package/dist/report/react/enhance.js +5 -5
- package/dist/report/react/styles.css +190 -24
- package/dist/runner/adoption.cjs +4 -7
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-resources.cjs +60 -0
- package/dist/runner/attempt-resources.cjs.map +1 -0
- package/dist/runner/attempt-resources.d.cts +13 -0
- package/dist/runner/attempt-resources.d.mts +13 -0
- package/dist/runner/attempt-resources.d.ts +13 -0
- package/dist/runner/attempt-resources.js +6 -0
- package/dist/runner/attempt-resources.js.map +1 -0
- package/dist/runner/attempt.cjs +37 -3
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/feedback/failure.cjs +77 -2
- package/dist/runner/feedback/failure.cjs.map +1 -1
- package/dist/runner/feedback/failure.d.cts +2 -1
- package/dist/runner/feedback/failure.d.mts +2 -1
- package/dist/runner/feedback/failure.d.ts +2 -1
- package/dist/runner/project-current.cjs +2 -13
- package/dist/runner/project-current.cjs.map +1 -1
- package/dist/runner/project-current.d.cts +4 -2
- package/dist/runner/project-current.d.mts +4 -2
- package/dist/runner/project-current.d.ts +4 -2
- package/dist/runner/reporters/braintrust.cjs +7 -7
- package/dist/runner/reporters/braintrust.cjs.map +1 -1
- package/dist/runner/reuse-readback.cjs +3 -4
- package/dist/runner/reuse-readback.cjs.map +1 -1
- package/dist/runner/run.cjs +5 -2
- package/dist/runner/run.cjs.map +1 -1
- package/dist/sandbox/backend.cjs +32 -2
- package/dist/sandbox/backend.cjs.map +1 -1
- package/dist/sandbox/backend.d.cts +12 -1
- package/dist/sandbox/backend.d.mts +12 -1
- package/dist/sandbox/backend.d.ts +12 -1
- package/dist/sandbox/backend.js +28 -22
- package/dist/sandbox/docker.cjs +140 -0
- package/dist/sandbox/docker.cjs.map +1 -1
- package/dist/sandbox/docker.d.cts +3 -1
- package/dist/sandbox/docker.d.mts +3 -1
- package/dist/sandbox/docker.d.ts +3 -1
- package/dist/sandbox/e2b.cjs +42 -0
- package/dist/sandbox/e2b.cjs.map +1 -1
- package/dist/sandbox/e2b.d.cts +2 -0
- package/dist/sandbox/e2b.d.mts +2 -0
- package/dist/sandbox/e2b.d.ts +2 -0
- package/dist/sandbox/local.cjs +64 -0
- package/dist/sandbox/local.cjs.map +1 -1
- package/dist/sandbox/local.d.cts +3 -1
- package/dist/sandbox/local.d.mts +3 -1
- package/dist/sandbox/local.d.ts +3 -1
- package/dist/sandbox/managed-process.cjs +49 -0
- package/dist/sandbox/managed-process.cjs.map +1 -0
- package/dist/sandbox/managed-process.d.cts +11 -0
- package/dist/sandbox/managed-process.d.mts +11 -0
- package/dist/sandbox/managed-process.d.ts +11 -0
- package/dist/sandbox/managed-process.js +6 -0
- package/dist/sandbox/managed-process.js.map +1 -0
- package/dist/sandbox/types.cjs.map +1 -1
- package/dist/sandbox/types.d.cts +24 -0
- package/dist/sandbox/types.d.mts +24 -0
- package/dist/sandbox/types.d.ts +24 -0
- package/dist/sandbox/vercel.cjs +1 -0
- package/dist/sandbox/vercel.cjs.map +1 -1
- package/dist/sandbox/vercel.d.cts +1 -0
- package/dist/sandbox/vercel.d.mts +1 -0
- package/dist/sandbox/vercel.d.ts +1 -0
- package/dist/view/server.cjs +2 -37
- package/dist/view/server.cjs.map +1 -1
- package/dist/view/server.d.cts +0 -3
- package/dist/view/server.d.mts +0 -3
- package/dist/view/server.d.ts +0 -3
- package/docs-site/zh/reference/builtin-agents.mdx +7 -7
- package/docs-site/zh/reference/official-adapters.mdx +4 -4
- package/docs-site/zh/reference/report-components.mdx +2 -2
- package/docs-site/zh/tutorials/configuration.mdx +2 -2
- package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
- package/docs-site/zh/tutorials/publish-report.mdx +4 -4
- package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
- package/docs-site/zh/tutorials/theming.mdx +2 -2
- package/package.json +4 -6
- package/dist/record/migration/index.cjs +0 -5
- package/dist/record/migration/index.cjs.map +0 -1
- package/dist/record/migration/index.d.cts +0 -11
- package/dist/record/migration/index.d.mts +0 -11
- package/dist/record/migration/index.d.ts +0 -11
- package/dist/record/migration/index.js +0 -6
- package/dist/record/migration/index.js.map +0 -1
- package/dist/report/host/site-runtime.cjs +0 -92
- package/dist/report/host/site-runtime.cjs.map +0 -1
- package/dist/report/host/site-runtime.d.cts +0 -9
- package/dist/report/host/site-runtime.d.mts +0 -9
- package/dist/report/host/site-runtime.d.ts +0 -9
- package/dist/report/host/site-runtime.js +0 -10
- package/dist/report/host/site-runtime.js.map +0 -1
- package/dist/view/client-dist/app.css +0 -2
- package/dist/view/client-dist/app.js +0 -49
- package/dist/view/data.cjs +0 -3
- package/dist/view/data.cjs.map +0 -1
- package/dist/view/data.d.cts +0 -9
- package/dist/view/data.d.mts +0 -9
- package/dist/view/data.d.ts +0 -9
- package/dist/view/data.js +0 -4
- package/dist/view/data.js.map +0 -1
- package/dist/view/index.cjs +0 -24
- package/dist/view/index.cjs.map +0 -1
- package/dist/view/index.d.cts +0 -9
- package/dist/view/index.d.mts +0 -9
- package/dist/view/index.d.ts +0 -9
- package/dist/view/index.js +0 -28
- package/dist/view/index.js.map +0 -1
- package/dist/view/report-view-cache.cjs +0 -200
- package/dist/view/report-view-cache.cjs.map +0 -1
- package/dist/view/report-view-cache.d.cts +0 -67
- package/dist/view/report-view-cache.d.mts +0 -67
- package/dist/view/report-view-cache.d.ts +0 -67
- package/dist/view/report-view-cache.js +0 -8
- package/dist/view/report-view-cache.js.map +0 -1
- package/dist/view/shared/types.cjs +0 -3
- package/dist/view/shared/types.cjs.map +0 -1
- package/dist/view/shared/types.d.cts +0 -51
- package/dist/view/shared/types.d.mts +0 -51
- package/dist/view/shared/types.d.ts +0 -51
- package/dist/view/shared/types.js +0 -4
- package/dist/view/shared/types.js.map +0 -1
- package/dist/view/site.cjs +0 -32
- package/dist/view/site.cjs.map +0 -1
- package/dist/view/site.d.cts +0 -24
- package/dist/view/site.d.mts +0 -24
- package/dist/view/site.d.ts +0 -24
- package/dist/view/site.js +0 -8
- package/dist/view/site.js.map +0 -1
- package/dist/view/styles.css +0 -170
- package/dist/view/template.html +0 -17
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ManagedProcessStart, Sandbox } from "../types.cjs";
|
|
2
|
+
export declare class ManagedJsonlDriver {
|
|
3
|
+
private readonly process;
|
|
4
|
+
private readonly shutdownFrame;
|
|
5
|
+
private readonly onFrame;
|
|
6
|
+
private readonly frames;
|
|
7
|
+
private readonly waiters;
|
|
8
|
+
private stderrText;
|
|
9
|
+
private outputFailure;
|
|
10
|
+
private state;
|
|
11
|
+
private revision;
|
|
12
|
+
private shutdownReceipt?;
|
|
13
|
+
private releaseReceipt?;
|
|
14
|
+
private writes;
|
|
15
|
+
private readonly exit;
|
|
16
|
+
private observedExit?;
|
|
17
|
+
private constructor();
|
|
18
|
+
static start(sandbox: Sandbox, agent: string, resources: import("../types.cjs").AttemptResourceRegistry, input: ManagedProcessStart, shutdownFrame?: () => unknown | undefined, onFrame?: (frame: unknown) => void): Promise<ManagedJsonlDriver>;
|
|
19
|
+
cursor(): number;
|
|
20
|
+
stderr(): string;
|
|
21
|
+
processReceipt(): {
|
|
22
|
+
readonly exitCode?: number;
|
|
23
|
+
readonly signal?: string;
|
|
24
|
+
readonly stderr: string;
|
|
25
|
+
};
|
|
26
|
+
write(value: unknown): Promise<void>;
|
|
27
|
+
waitFor(cursor: number, accept: (frame: unknown) => boolean, signal: AbortSignal): Promise<{
|
|
28
|
+
readonly frame: unknown;
|
|
29
|
+
readonly cursor: number;
|
|
30
|
+
}>;
|
|
31
|
+
framesSince(cursor: number): readonly unknown[];
|
|
32
|
+
frameKinds(): string;
|
|
33
|
+
shutdown(): Promise<void>;
|
|
34
|
+
release(): Promise<void>;
|
|
35
|
+
private consume;
|
|
36
|
+
private writeRaw;
|
|
37
|
+
private waitForChange;
|
|
38
|
+
private notify;
|
|
39
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ManagedProcessStart, Sandbox } from "../types.mjs";
|
|
2
|
+
export declare class ManagedJsonlDriver {
|
|
3
|
+
private readonly process;
|
|
4
|
+
private readonly shutdownFrame;
|
|
5
|
+
private readonly onFrame;
|
|
6
|
+
private readonly frames;
|
|
7
|
+
private readonly waiters;
|
|
8
|
+
private stderrText;
|
|
9
|
+
private outputFailure;
|
|
10
|
+
private state;
|
|
11
|
+
private revision;
|
|
12
|
+
private shutdownReceipt?;
|
|
13
|
+
private releaseReceipt?;
|
|
14
|
+
private writes;
|
|
15
|
+
private readonly exit;
|
|
16
|
+
private observedExit?;
|
|
17
|
+
private constructor();
|
|
18
|
+
static start(sandbox: Sandbox, agent: string, resources: import("../types.mjs").AttemptResourceRegistry, input: ManagedProcessStart, shutdownFrame?: () => unknown | undefined, onFrame?: (frame: unknown) => void): Promise<ManagedJsonlDriver>;
|
|
19
|
+
cursor(): number;
|
|
20
|
+
stderr(): string;
|
|
21
|
+
processReceipt(): {
|
|
22
|
+
readonly exitCode?: number;
|
|
23
|
+
readonly signal?: string;
|
|
24
|
+
readonly stderr: string;
|
|
25
|
+
};
|
|
26
|
+
write(value: unknown): Promise<void>;
|
|
27
|
+
waitFor(cursor: number, accept: (frame: unknown) => boolean, signal: AbortSignal): Promise<{
|
|
28
|
+
readonly frame: unknown;
|
|
29
|
+
readonly cursor: number;
|
|
30
|
+
}>;
|
|
31
|
+
framesSince(cursor: number): readonly unknown[];
|
|
32
|
+
frameKinds(): string;
|
|
33
|
+
shutdown(): Promise<void>;
|
|
34
|
+
release(): Promise<void>;
|
|
35
|
+
private consume;
|
|
36
|
+
private writeRaw;
|
|
37
|
+
private waitForChange;
|
|
38
|
+
private notify;
|
|
39
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ManagedProcessStart, Sandbox } from "../types.js";
|
|
2
|
+
export declare class ManagedJsonlDriver {
|
|
3
|
+
private readonly process;
|
|
4
|
+
private readonly shutdownFrame;
|
|
5
|
+
private readonly onFrame;
|
|
6
|
+
private readonly frames;
|
|
7
|
+
private readonly waiters;
|
|
8
|
+
private stderrText;
|
|
9
|
+
private outputFailure;
|
|
10
|
+
private state;
|
|
11
|
+
private revision;
|
|
12
|
+
private shutdownReceipt?;
|
|
13
|
+
private releaseReceipt?;
|
|
14
|
+
private writes;
|
|
15
|
+
private readonly exit;
|
|
16
|
+
private observedExit?;
|
|
17
|
+
private constructor();
|
|
18
|
+
static start(sandbox: Sandbox, agent: string, resources: import("../types.js").AttemptResourceRegistry, input: ManagedProcessStart, shutdownFrame?: () => unknown | undefined, onFrame?: (frame: unknown) => void): Promise<ManagedJsonlDriver>;
|
|
19
|
+
cursor(): number;
|
|
20
|
+
stderr(): string;
|
|
21
|
+
processReceipt(): {
|
|
22
|
+
readonly exitCode?: number;
|
|
23
|
+
readonly signal?: string;
|
|
24
|
+
readonly stderr: string;
|
|
25
|
+
};
|
|
26
|
+
write(value: unknown): Promise<void>;
|
|
27
|
+
waitFor(cursor: number, accept: (frame: unknown) => boolean, signal: AbortSignal): Promise<{
|
|
28
|
+
readonly frame: unknown;
|
|
29
|
+
readonly cursor: number;
|
|
30
|
+
}>;
|
|
31
|
+
framesSince(cursor: number): readonly unknown[];
|
|
32
|
+
frameKinds(): string;
|
|
33
|
+
shutdown(): Promise<void>;
|
|
34
|
+
release(): Promise<void>;
|
|
35
|
+
private consume;
|
|
36
|
+
private writeRaw;
|
|
37
|
+
private waitForChange;
|
|
38
|
+
private notify;
|
|
39
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createRequire as __niceevalCreateRequire } from "node:module";
|
|
2
|
+
const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
|
|
3
|
+
const __niceevalCanonical = __niceevalRequire("./managed-jsonl.cjs");
|
|
4
|
+
const __niceevalExport0 = __niceevalCanonical["ManagedJsonlDriver"];
|
|
5
|
+
export { __niceevalExport0 as ManagedJsonlDriver };
|
|
6
|
+
//# sourceMappingURL=managed-jsonl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-jsonl.js","sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.acquireManagedProcess = acquireManagedProcess;
|
|
4
|
+
const backend_ts_1 = require("../sandbox/backend.cjs");
|
|
5
|
+
const attempt_resources_ts_1 = require("../context/attempt-resources.cjs");
|
|
6
|
+
function bounded(promise, milliseconds) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const timer = setTimeout(() => reject(new Error(`managed process cleanup exceeded ${milliseconds}ms`)), milliseconds);
|
|
9
|
+
promise.then((value) => { clearTimeout(timer); resolve(value); }, (error) => { clearTimeout(timer); reject(error); });
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/** Adapter-facing neutral capability. It is deliberately absent from Eval's t.sandbox facade. */
|
|
13
|
+
async function acquireManagedProcess(ctx, agent, input) {
|
|
14
|
+
const resources = (0, attempt_resources_ts_1.attemptResources)(ctx);
|
|
15
|
+
if (!resources)
|
|
16
|
+
throw new Error(`${agent} managed process requires an Attempt resource registry`);
|
|
17
|
+
const start = (0, backend_ts_1.requireManagedProcessCapability)(ctx.sandbox, agent);
|
|
18
|
+
return resources.acquire(() => start(input), {
|
|
19
|
+
shutdown: async (process) => { await process.closeStdin(); },
|
|
20
|
+
release: async (process) => {
|
|
21
|
+
try {
|
|
22
|
+
await bounded(process.wait(), 2000);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
await process.terminate();
|
|
26
|
+
await bounded(process.wait(), 2000);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=managed-process.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-process.js","sourceRoot":"","sources":["managed-process.ts"],"names":[],"mappings":";;AAUA,sDAiBC;AA1BD,sDAAwE;AACxE,0EAAmE;AACnE,SAAS,OAAO,CAAI,OAAmB,EAAE,YAAoB;IACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,YAAY,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACtH,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1H,CAAC,CAAC,CAAC;AACP,CAAC;AACD,iGAAiG;AAC1F,KAAK,UAAU,qBAAqB,CAAC,GAAwB,EAAE,KAAa,EAAE,KAA0B;IAC3G,MAAM,SAAS,GAAG,IAAA,uCAAgB,EAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS;QACV,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,wDAAwD,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,IAAA,4CAA+B,EAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClE,OAAO,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACzC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACvB,IAAI,CAAC;gBACD,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,CAAC;gBACH,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC1B,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YACxC,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC","sourcesContent":["import type { ManagedProcess, ManagedProcessStart, SandboxAgentContext } from \"../types.ts\";\nimport { requireManagedProcessCapability } from \"../sandbox/backend.ts\";\nimport { attemptResources } from \"../context/attempt-resources.ts\";\nfunction bounded<T>(promise: Promise<T>, milliseconds: number): Promise<T> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => reject(new Error(`managed process cleanup exceeded ${milliseconds}ms`)), milliseconds);\n promise.then((value) => { clearTimeout(timer); resolve(value); }, (error) => { clearTimeout(timer); reject(error); });\n });\n}\n/** Adapter-facing neutral capability. It is deliberately absent from Eval's t.sandbox facade. */\nexport async function acquireManagedProcess(ctx: SandboxAgentContext, agent: string, input: ManagedProcessStart): Promise<ManagedProcess> {\n const resources = attemptResources(ctx);\n if (!resources)\n throw new Error(`${agent} managed process requires an Attempt resource registry`);\n const start = requireManagedProcessCapability(ctx.sandbox, agent);\n return resources.acquire(() => start(input), {\n shutdown: async (process) => { await process.closeStdin(); },\n release: async (process) => {\n try {\n await bounded(process.wait(), 2000);\n }\n catch {\n await process.terminate();\n await bounded(process.wait(), 2000);\n }\n },\n });\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ManagedProcess, ManagedProcessStart, SandboxAgentContext } from "../types.cjs";
|
|
2
|
+
/** Adapter-facing neutral capability. It is deliberately absent from Eval's t.sandbox facade. */
|
|
3
|
+
export declare function acquireManagedProcess(ctx: SandboxAgentContext, agent: string, input: ManagedProcessStart): Promise<ManagedProcess>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ManagedProcess, ManagedProcessStart, SandboxAgentContext } from "../types.mjs";
|
|
2
|
+
/** Adapter-facing neutral capability. It is deliberately absent from Eval's t.sandbox facade. */
|
|
3
|
+
export declare function acquireManagedProcess(ctx: SandboxAgentContext, agent: string, input: ManagedProcessStart): Promise<ManagedProcess>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ManagedProcess, ManagedProcessStart, SandboxAgentContext } from "../types.js";
|
|
2
|
+
/** Adapter-facing neutral capability. It is deliberately absent from Eval's t.sandbox facade. */
|
|
3
|
+
export declare function acquireManagedProcess(ctx: SandboxAgentContext, agent: string, input: ManagedProcessStart): Promise<ManagedProcess>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createRequire as __niceevalCreateRequire } from "node:module";
|
|
2
|
+
const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
|
|
3
|
+
const __niceevalCanonical = __niceevalRequire("./managed-process.cjs");
|
|
4
|
+
const __niceevalExport0 = __niceevalCanonical["acquireManagedProcess"];
|
|
5
|
+
export { __niceevalExport0 as acquireManagedProcess };
|
|
6
|
+
//# sourceMappingURL=managed-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-process.js","sources":[],"names":[],"mappings":""}
|
package/dist/agents/omp.cjs
CHANGED
|
@@ -7,6 +7,8 @@ const util_ts_1 = require("../util.cjs");
|
|
|
7
7
|
const send_failures_ts_1 = require("../context/send-failures.cjs");
|
|
8
8
|
const shared_ts_1 = require("./shared.cjs");
|
|
9
9
|
const sdk_streams_ts_1 = require("./sdk-streams.cjs");
|
|
10
|
+
const tool_names_ts_1 = require("../o11y/tool-names.cjs");
|
|
11
|
+
const command_projection_ts_1 = require("../o11y/command-projection.cjs");
|
|
10
12
|
const npm_staged_ts_1 = require("./npm-staged.cjs");
|
|
11
13
|
const coding_cli_versions_ts_1 = require("./coding-cli-versions.cjs");
|
|
12
14
|
const COMPAT_PROVIDER = "niceeval-compat";
|
|
@@ -56,6 +58,21 @@ function parseJsonl(raw) {
|
|
|
56
58
|
return value;
|
|
57
59
|
});
|
|
58
60
|
}
|
|
61
|
+
function enrichOmpEvent(event) {
|
|
62
|
+
if (event.type !== "operation.started" || event.operation.kind !== "tool")
|
|
63
|
+
return event;
|
|
64
|
+
const tool = (0, tool_names_ts_1.normalizeToolName)(event.operation.name);
|
|
65
|
+
return {
|
|
66
|
+
...event,
|
|
67
|
+
operation: {
|
|
68
|
+
...event.operation,
|
|
69
|
+
tool,
|
|
70
|
+
command: tool === "shell"
|
|
71
|
+
? (0, command_projection_ts_1.opaqueCommandProjection)("unsupported-protocol")
|
|
72
|
+
: (0, command_projection_ts_1.notCommandProjection)(),
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
59
76
|
/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */
|
|
60
77
|
function ompAgent(config) {
|
|
61
78
|
const version = config?.version ?? coding_cli_versions_ts_1.DEFAULT_OMP_CLI_VERSION;
|
|
@@ -140,7 +157,7 @@ function ompAgent(config) {
|
|
|
140
157
|
});
|
|
141
158
|
}
|
|
142
159
|
const stream = (0, sdk_streams_ts_1.createPiAgentEventStream)();
|
|
143
|
-
const events = nativeEvents.flatMap((event) => stream.add(event));
|
|
160
|
+
const events = nativeEvents.flatMap((event) => stream.add(event)).map(enrichOmpEvent);
|
|
144
161
|
const terminal = nativeEvents.filter((event) => event.type === "agent_end" &&
|
|
145
162
|
event.isTerminal !== false &&
|
|
146
163
|
Array.isArray(event.messages));
|
package/dist/agents/omp.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omp.js","sourceRoot":"","sources":["omp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { getEnv, requireEnv } from \"../util.ts\";\nimport type { Agent, EvidenceCoverage, StreamEvent } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shared } from \"./shared.ts\";\nimport { createPiAgentEventStream, type PiAgentEventLike } from \"./sdk-streams.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { AGENT_BASELINE_RECIPE_REVISION, DEFAULT_BUN_VERSION, DEFAULT_OMP_CLI_VERSION, } from \"./coding-cli-versions.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nconst COMPAT_PROVIDER = \"niceeval-compat\";\nconst API_KEY_ENV = \"NICEEVAL_OMP_API_KEY\";\nconst OMP_EVIDENCE_COVERAGE: EvidenceCoverage = {\n events: { status: \"complete\" },\n actions: { status: \"complete\" },\n messages: { status: \"complete\" },\n usage: { status: \"complete\" },\n status: { status: \"complete\" },\n data: { status: \"unavailable\", reason: \"OMP print mode does not expose a separate Turn.data value.\" },\n};\nexport interface OmpConfig {\n /** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */\n apiKey?: string;\n /** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */\n baseUrl?: string;\n /** Exact npm version of `@oh-my-pi/pi-coding-agent`. */\n version?: string;\n /** Exact Bun runtime version used by the fallback installer. */\n bunVersion?: string;\n}\nfunction resolveApiKey(config?: OmpConfig): string {\n return config?.apiKey ?? getEnv(\"OMP_API_KEY\") ?? requireEnv(\"OPENAI_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OmpConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OMP_BASE_URL\") ?? getEnv(\"OPENAI_BASE_URL\");\n}\nfunction bunPlatformPackage(version: string, platform: AgentArtifactPlatform): {\n spec: string;\n binPath: string;\n} | undefined {\n if (platform.os === \"linux\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n const musl = platform.libc === \"musl\" ? \"-musl\" : \"\";\n return { spec: `@oven/bun-linux-${arch}${musl}@${version}`, binPath: \"bin/bun\" };\n }\n if (platform.os === \"darwin\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n return { spec: `@oven/bun-darwin-${arch}@${version}`, binPath: \"bin/bun\" };\n }\n return undefined;\n}\nfunction parseJsonl(raw: string): PiAgentEventLike[] {\n return raw.split(/\\r?\\n/).filter((line) => line.trim()).map((line, index) => {\n let value: unknown;\n try {\n value = JSON.parse(line);\n }\n catch (cause) {\n throw new Error(`OMP emitted invalid JSONL at line ${index + 1}`, { cause });\n }\n if (typeof value !== \"object\" || value === null || typeof (value as {\n type?: unknown;\n }).type !== \"string\") {\n throw new Error(`OMP emitted an invalid event at line ${index + 1}`);\n }\n return value as PiAgentEventLike;\n });\n}\n/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */\nexport function ompAgent(config?: OmpConfig): Agent {\n const version = config?.version ?? DEFAULT_OMP_CLI_VERSION;\n const bunVersion = config?.bunVersion ?? DEFAULT_BUN_VERSION;\n const ompInstall = createNpmCliInstaller({\n identity: { agent: \"omp\", version, revision: String(AGENT_BASELINE_RECIPE_REVISION.omp) },\n packageName: \"@oh-my-pi/pi-coding-agent\",\n bin: \"omp\",\n });\n const bunInstall = createNpmCliInstaller({\n identity: { agent: \"bun\", version: bunVersion, revision: \"1\" },\n packageName: \"bun\",\n bin: \"bun\",\n platformPackage: (platform) => bunPlatformPackage(bunVersion, platform),\n });\n const configDirs = new Map<string, string>();\n return defineSandboxAgent({\n name: \"omp\",\n evidenceCoverage: OMP_EVIDENCE_COVERAGE,\n ensure: [bunInstall.ensure, ompInstall.ensure],\n installers: [bunInstall.installer, ompInstall.installer],\n async setup(sb, ctx) {\n const homeResult = await sb.runShell('test -n \"$HOME\" && printf \"%s\" \"$HOME\"');\n const home = homeResult.stdout.trim();\n if (homeResult.exitCode !== 0 || !home.startsWith(\"/\")) {\n throw new Error(\"OMP setup requires an absolute sandbox HOME directory\");\n }\n const dir = `${home}/.niceeval-omp`;\n configDirs.set(sb.sandboxId, dir);\n const baseUrl = resolveBaseUrl(config);\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const models = {\n providers: {\n [COMPAT_PROVIDER]: {\n ...(baseUrl ? { baseUrl } : {}),\n api: \"openai-completions\",\n apiKey: API_KEY_ENV,\n models: [{ id: model, name: model, contextWindow: 1000000, maxTokens: 64000 }],\n },\n },\n };\n await shared.writeFile(sb, `${dir}/models.yml`, JSON.stringify(models, null, 2));\n },\n send: (input, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n const ompBin = yield* resolveAgentBinEffect(ctx.sandbox, \"omp\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const apiKey = resolveApiKey(config);\n const dir = configDirs.get(ctx.sandbox.sandboxId);\n if (!dir)\n throw new Error(\"OMP setup state is unavailable\");\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const env: globalThis.Record<string, string> = {\n [API_KEY_ENV]: apiKey,\n PI_CODING_AGENT_DIR: dir,\n ...ctx.telemetry?.env,\n };\n const args = [\n \"--print\",\n \"--mode\", \"json\",\n \"--model\", `${COMPAT_PROVIDER}/${model}`,\n \"--approval-mode\", \"yolo\",\n \"--no-pty\",\n \"--no-title\",\n input.text,\n ];\n const res = await ctx.sandbox.runCommand(ompBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n let nativeEvents: PiAgentEventLike[];\n try {\n nativeEvents = parseJsonl(res.stdout);\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: cause instanceof Error ? cause.message : \"OMP transcript could not be parsed\",\n process: res,\n });\n }\n const stream = createPiAgentEventStream();\n const events: StreamEvent[] = nativeEvents.flatMap((event) => stream.add(event));\n const terminal = nativeEvents.filter((event) => event.type === \"agent_end\" &&\n (event as {\n isTerminal?: unknown;\n }).isTerminal !== false &&\n Array.isArray((event as {\n messages?: unknown;\n }).messages));\n if (res.exitCode !== 0 || terminal.length !== 1) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: res.exitCode !== 0\n ? shared.diagnoseFailure(res, events, res.stdout)\n : `OMP produced ${terminal.length} valid terminal agent_end events; expected exactly one.`,\n events,\n usage: stream.usage,\n process: res,\n });\n }\n return {\n events,\n usage: stream.usage,\n status: stream.failed ? \"failed\" as const : \"completed\" as const,\n };\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n });\n}\nexport default ompAgent;\n"]}
|
|
1
|
+
{"version":3,"file":"omp.js","sourceRoot":"","sources":["omp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { getEnv, requireEnv } from \"../util.ts\";\nimport type { Agent, EvidenceCoverage, StreamEvent } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shared } from \"./shared.ts\";\nimport { createPiAgentEventStream, type PiAgentEventLike } from \"./sdk-streams.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { AGENT_BASELINE_RECIPE_REVISION, DEFAULT_BUN_VERSION, DEFAULT_OMP_CLI_VERSION, } from \"./coding-cli-versions.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nconst COMPAT_PROVIDER = \"niceeval-compat\";\nconst API_KEY_ENV = \"NICEEVAL_OMP_API_KEY\";\nconst OMP_EVIDENCE_COVERAGE: EvidenceCoverage = {\n events: { status: \"complete\" },\n actions: { status: \"complete\" },\n messages: { status: \"complete\" },\n usage: { status: \"complete\" },\n status: { status: \"complete\" },\n data: { status: \"unavailable\", reason: \"OMP print mode does not expose a separate Turn.data value.\" },\n};\nexport interface OmpConfig {\n /** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */\n apiKey?: string;\n /** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */\n baseUrl?: string;\n /** Exact npm version of `@oh-my-pi/pi-coding-agent`. */\n version?: string;\n /** Exact Bun runtime version used by the fallback installer. */\n bunVersion?: string;\n}\nfunction resolveApiKey(config?: OmpConfig): string {\n return config?.apiKey ?? getEnv(\"OMP_API_KEY\") ?? requireEnv(\"OPENAI_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OmpConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OMP_BASE_URL\") ?? getEnv(\"OPENAI_BASE_URL\");\n}\nfunction bunPlatformPackage(version: string, platform: AgentArtifactPlatform): {\n spec: string;\n binPath: string;\n} | undefined {\n if (platform.os === \"linux\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n const musl = platform.libc === \"musl\" ? \"-musl\" : \"\";\n return { spec: `@oven/bun-linux-${arch}${musl}@${version}`, binPath: \"bin/bun\" };\n }\n if (platform.os === \"darwin\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n return { spec: `@oven/bun-darwin-${arch}@${version}`, binPath: \"bin/bun\" };\n }\n return undefined;\n}\nfunction parseJsonl(raw: string): PiAgentEventLike[] {\n return raw.split(/\\r?\\n/).filter((line) => line.trim()).map((line, index) => {\n let value: unknown;\n try {\n value = JSON.parse(line);\n }\n catch (cause) {\n throw new Error(`OMP emitted invalid JSONL at line ${index + 1}`, { cause });\n }\n if (typeof value !== \"object\" || value === null || typeof (value as {\n type?: unknown;\n }).type !== \"string\") {\n throw new Error(`OMP emitted an invalid event at line ${index + 1}`);\n }\n return value as PiAgentEventLike;\n });\n}\nfunction enrichOmpEvent(event: StreamEvent): StreamEvent {\n if (event.type !== \"operation.started\" || event.operation.kind !== \"tool\")\n return event;\n const tool = normalizeToolName(event.operation.name);\n return {\n ...event,\n operation: {\n ...event.operation,\n tool,\n command: tool === \"shell\"\n ? opaqueCommandProjection(\"unsupported-protocol\")\n : notCommandProjection(),\n },\n };\n}\n/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */\nexport function ompAgent(config?: OmpConfig): Agent {\n const version = config?.version ?? DEFAULT_OMP_CLI_VERSION;\n const bunVersion = config?.bunVersion ?? DEFAULT_BUN_VERSION;\n const ompInstall = createNpmCliInstaller({\n identity: { agent: \"omp\", version, revision: String(AGENT_BASELINE_RECIPE_REVISION.omp) },\n packageName: \"@oh-my-pi/pi-coding-agent\",\n bin: \"omp\",\n });\n const bunInstall = createNpmCliInstaller({\n identity: { agent: \"bun\", version: bunVersion, revision: \"1\" },\n packageName: \"bun\",\n bin: \"bun\",\n platformPackage: (platform) => bunPlatformPackage(bunVersion, platform),\n });\n const configDirs = new Map<string, string>();\n return defineSandboxAgent({\n name: \"omp\",\n evidenceCoverage: OMP_EVIDENCE_COVERAGE,\n ensure: [bunInstall.ensure, ompInstall.ensure],\n installers: [bunInstall.installer, ompInstall.installer],\n async setup(sb, ctx) {\n const homeResult = await sb.runShell('test -n \"$HOME\" && printf \"%s\" \"$HOME\"');\n const home = homeResult.stdout.trim();\n if (homeResult.exitCode !== 0 || !home.startsWith(\"/\")) {\n throw new Error(\"OMP setup requires an absolute sandbox HOME directory\");\n }\n const dir = `${home}/.niceeval-omp`;\n configDirs.set(sb.sandboxId, dir);\n const baseUrl = resolveBaseUrl(config);\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const models = {\n providers: {\n [COMPAT_PROVIDER]: {\n ...(baseUrl ? { baseUrl } : {}),\n api: \"openai-completions\",\n apiKey: API_KEY_ENV,\n models: [{ id: model, name: model, contextWindow: 1000000, maxTokens: 64000 }],\n },\n },\n };\n await shared.writeFile(sb, `${dir}/models.yml`, JSON.stringify(models, null, 2));\n },\n send: (input, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n const ompBin = yield* resolveAgentBinEffect(ctx.sandbox, \"omp\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const apiKey = resolveApiKey(config);\n const dir = configDirs.get(ctx.sandbox.sandboxId);\n if (!dir)\n throw new Error(\"OMP setup state is unavailable\");\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const env: globalThis.Record<string, string> = {\n [API_KEY_ENV]: apiKey,\n PI_CODING_AGENT_DIR: dir,\n ...ctx.telemetry?.env,\n };\n const args = [\n \"--print\",\n \"--mode\", \"json\",\n \"--model\", `${COMPAT_PROVIDER}/${model}`,\n \"--approval-mode\", \"yolo\",\n \"--no-pty\",\n \"--no-title\",\n input.text,\n ];\n const res = await ctx.sandbox.runCommand(ompBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n let nativeEvents: PiAgentEventLike[];\n try {\n nativeEvents = parseJsonl(res.stdout);\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: cause instanceof Error ? cause.message : \"OMP transcript could not be parsed\",\n process: res,\n });\n }\n const stream = createPiAgentEventStream();\n const events: StreamEvent[] = nativeEvents.flatMap((event) => stream.add(event)).map(enrichOmpEvent);\n const terminal = nativeEvents.filter((event) => event.type === \"agent_end\" &&\n (event as {\n isTerminal?: unknown;\n }).isTerminal !== false &&\n Array.isArray((event as {\n messages?: unknown;\n }).messages));\n if (res.exitCode !== 0 || terminal.length !== 1) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: res.exitCode !== 0\n ? shared.diagnoseFailure(res, events, res.stdout)\n : `OMP produced ${terminal.length} valid terminal agent_end events; expected exactly one.`,\n events,\n usage: stream.usage,\n process: res,\n });\n }\n return {\n events,\n usage: stream.usage,\n status: stream.failed ? \"failed\" as const : \"completed\" as const,\n };\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n });\n}\nexport default ompAgent;\n"]}
|
|
@@ -304,14 +304,21 @@ function createCodexThreadEventStream() {
|
|
|
304
304
|
const callId = callIdOf(item, "cmd");
|
|
305
305
|
emitCall(callId, "command_execution", { command: item.command ?? null }, "shell", (0, command_projection_ts_1.opaqueCommandProjection)("unsupported-protocol"));
|
|
306
306
|
if (isCompleted) {
|
|
307
|
-
const exit = item.exit_code;
|
|
308
|
-
const
|
|
307
|
+
const exit = item.exit_code ?? item.exitCode;
|
|
308
|
+
const output = item.aggregated_output ?? item.aggregatedOutput ?? item.output;
|
|
309
|
+
const status = item.status === "declined" || item.status === "rejected"
|
|
310
|
+
? "rejected"
|
|
311
|
+
: exit === 0 || (exit == null && item.status !== "failed" && item.status !== "error")
|
|
312
|
+
? "completed"
|
|
313
|
+
: "failed";
|
|
309
314
|
events.push({
|
|
310
315
|
type: "operation.finished",
|
|
311
316
|
operationId: callId,
|
|
312
317
|
kind: "tool",
|
|
313
|
-
output
|
|
314
|
-
|
|
318
|
+
...(output === undefined && exit === undefined
|
|
319
|
+
? {}
|
|
320
|
+
: { output: { output: (output ?? null), exit_code: (exit ?? null) } }),
|
|
321
|
+
status,
|
|
315
322
|
});
|
|
316
323
|
}
|
|
317
324
|
return events;
|
|
@@ -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"]}
|