niceeval 0.13.3-canary.37 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/bub.cjs +4 -4
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +2 -2
- package/dist/agents/bub.d.mts +2 -2
- package/dist/agents/bub.d.ts +2 -2
- package/dist/agents/codex-app-server.cjs +2 -3
- package/dist/agents/codex-app-server.cjs.map +1 -1
- package/dist/agents/codex.cjs +4 -4
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +3 -3
- package/dist/agents/codex.d.mts +3 -3
- package/dist/agents/codex.d.ts +3 -3
- package/dist/agents/sdk-streams.cjs +11 -4
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/analysis/bindings.cjs +74 -19
- package/dist/analysis/bindings.cjs.map +1 -1
- package/dist/analysis/bindings.d.cts +534 -156
- package/dist/analysis/bindings.d.mts +534 -156
- package/dist/analysis/bindings.d.ts +534 -156
- package/dist/analysis/domain-view.cjs.map +1 -1
- package/dist/analysis/domain-view.d.cts +137 -8
- package/dist/analysis/domain-view.d.mts +137 -8
- package/dist/analysis/domain-view.d.ts +137 -8
- package/dist/analysis/index.cjs.map +1 -1
- package/dist/analysis/index.d.cts +1 -1
- package/dist/analysis/index.d.mts +1 -1
- package/dist/analysis/index.d.ts +1 -1
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +62 -0
- package/dist/assertions/api.d.mts +62 -0
- package/dist/assertions/api.d.ts +62 -0
- package/dist/assertions/judge.cjs +56 -5
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +66 -42
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +13 -0
- package/dist/assertions/match.d.mts +13 -0
- package/dist/assertions/match.d.ts +13 -0
- package/dist/assertions/record/attachment.cjs +104 -33
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/attachment.d.cts +294 -57
- package/dist/assertions/record/attachment.d.mts +294 -57
- package/dist/assertions/record/attachment.d.ts +294 -57
- package/dist/assertions/record/codec.cjs +91 -17
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/codec.d.cts +280 -52
- package/dist/assertions/record/codec.d.mts +280 -52
- package/dist/assertions/record/codec.d.ts +280 -52
- package/dist/assertions/record/index.js +2 -0
- package/dist/assertions/record/model.cjs +16 -0
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +120 -13
- package/dist/assertions/record/model.d.mts +120 -13
- package/dist/assertions/record/model.d.ts +120 -13
- package/dist/assertions/record/model.js +2 -0
- package/dist/assertions/record/producer.cjs +70 -50
- package/dist/assertions/record/producer.cjs.map +1 -1
- package/dist/assertions/record/producer.d.cts +8 -7
- package/dist/assertions/record/producer.d.mts +8 -7
- package/dist/assertions/record/producer.d.ts +8 -7
- package/dist/assertions/runtime.cjs +49 -7
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/application.cjs +40 -0
- package/dist/cli/application.cjs.map +1 -0
- package/dist/cli/application.d.cts +129 -0
- package/dist/cli/application.d.mts +129 -0
- package/dist/cli/application.d.ts +129 -0
- package/dist/cli/application.js +24 -0
- package/dist/cli/application.js.map +1 -0
- package/dist/cli/bootstrap.cjs +10 -4
- package/dist/cli/bootstrap.cjs.map +1 -1
- package/dist/cli/node-application.cjs +123 -0
- package/dist/cli/node-application.cjs.map +1 -0
- package/dist/cli/node-application.d.cts +14 -0
- package/dist/cli/node-application.d.mts +14 -0
- package/dist/cli/node-application.d.ts +14 -0
- package/dist/cli/node-application.js +26 -0
- package/dist/cli/node-application.js.map +1 -0
- package/dist/cli/program.cjs +2807 -0
- package/dist/cli/program.cjs.map +1 -0
- package/dist/cli/program.d.cts +352 -0
- package/dist/cli/program.d.mts +352 -0
- package/dist/cli/program.d.ts +352 -0
- package/dist/cli/program.js +36 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/project-configuration.cjs +134 -0
- package/dist/cli/project-configuration.cjs.map +1 -0
- package/dist/cli/project-configuration.d.cts +64 -0
- package/dist/cli/project-configuration.d.mts +64 -0
- package/dist/cli/project-configuration.d.ts +64 -0
- package/dist/cli/project-configuration.js +22 -0
- package/dist/cli/project-configuration.js.map +1 -0
- package/dist/cli/record.cjs +20 -4
- package/dist/cli/record.cjs.map +1 -1
- package/dist/cli/record.d.cts +3 -3
- package/dist/cli/record.d.mts +3 -3
- package/dist/cli/record.d.ts +3 -3
- package/dist/cli.cjs +19 -3130
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +2 -148
- package/dist/cli.d.mts +2 -148
- package/dist/cli.d.ts +2 -148
- package/dist/cli.js +22 -30
- package/dist/context/assert-first.cjs +20 -15
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/eval/record/verdict.cjs +3 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -6
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/index.d.cts +1 -0
- package/dist/experiment/host/index.d.mts +1 -0
- package/dist/experiment/host/index.d.ts +1 -0
- package/dist/load-config.cjs +13 -4
- package/dist/load-config.cjs.map +1 -1
- package/dist/load-config.d.cts +4 -3
- package/dist/load-config.d.mts +4 -3
- package/dist/load-config.d.ts +4 -3
- package/dist/load-config.js +4 -2
- package/dist/o11y/parsers/codex.cjs +29 -7
- package/dist/o11y/parsers/codex.cjs.map +1 -1
- package/dist/record/codec/core.d.cts +0 -2
- package/dist/record/codec/core.d.mts +0 -2
- package/dist/record/codec/core.d.ts +0 -2
- package/dist/record/codec/identifiers.cjs +2 -3
- package/dist/record/codec/identifiers.cjs.map +1 -1
- package/dist/record/codec/identifiers.d.cts +1 -2
- package/dist/record/codec/identifiers.d.mts +1 -2
- package/dist/record/codec/identifiers.d.ts +1 -2
- package/dist/record/codec/identifiers.js +10 -12
- package/dist/record/codec/index.js +42 -44
- package/dist/record/definition/attachment.cjs +1 -0
- package/dist/record/definition/attachment.cjs.map +1 -1
- package/dist/record/definition/attachment.d.cts +14 -0
- package/dist/record/definition/attachment.d.mts +14 -0
- package/dist/record/definition/attachment.d.ts +14 -0
- package/dist/record/family/assertions-v1.cjs +104 -0
- package/dist/record/family/assertions-v1.cjs.map +1 -0
- package/dist/record/family/assertions-v1.d.cts +2 -0
- package/dist/record/family/assertions-v1.d.mts +2 -0
- package/dist/record/family/assertions-v1.d.ts +2 -0
- package/dist/record/family/assertions-v1.js +6 -0
- package/dist/record/family/assertions-v1.js.map +1 -0
- package/dist/record/family/assertions.cjs +16 -5
- package/dist/record/family/assertions.cjs.map +1 -1
- package/dist/record/family/assertions.d.cts +510 -56
- package/dist/record/family/assertions.d.mts +510 -56
- package/dist/record/family/assertions.d.ts +510 -56
- package/dist/record/family/assertions.js +14 -10
- package/dist/record/family/catalog.cjs +17 -1
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +1292 -104
- package/dist/record/family/catalog.d.mts +1292 -104
- package/dist/record/family/catalog.d.ts +1292 -104
- package/dist/record/family/catalog.js +22 -20
- package/dist/record/family/index.js +144 -138
- package/dist/record/family/observability-v1.cjs +5 -0
- package/dist/record/family/observability-v1.cjs.map +1 -1
- package/dist/record/family/observability.cjs +1 -1
- package/dist/record/family/observability.cjs.map +1 -1
- package/dist/record/host/runtime.cjs +323 -173
- package/dist/record/host/runtime.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +9 -7
- package/dist/record/host/types.d.mts +9 -7
- package/dist/record/host/types.d.ts +9 -7
- package/dist/record/model/core.cjs.map +1 -1
- package/dist/record/model/core.d.cts +1 -2
- package/dist/record/model/core.d.mts +1 -2
- package/dist/record/model/core.d.ts +1 -2
- package/dist/record/model/definition.cjs +1 -2
- package/dist/record/model/definition.cjs.map +1 -1
- package/dist/record/model/definition.d.cts +1 -7
- package/dist/record/model/definition.d.mts +1 -7
- package/dist/record/model/definition.d.ts +1 -7
- package/dist/record/model/identifiers.cjs +2 -3
- package/dist/record/model/identifiers.cjs.map +1 -1
- package/dist/record/model/identifiers.d.cts +1 -3
- package/dist/record/model/identifiers.d.mts +1 -3
- package/dist/record/model/identifiers.d.ts +1 -3
- package/dist/record/model/identifiers.js +36 -38
- package/dist/record/model/index.js +60 -62
- package/dist/record/platform/node.cjs +17 -7
- package/dist/record/platform/node.cjs.map +1 -1
- package/dist/record/platform/services.cjs.map +1 -1
- package/dist/record/platform/services.d.cts +8 -3
- package/dist/record/platform/services.d.mts +8 -3
- package/dist/record/platform/services.d.ts +8 -3
- package/dist/record/reader/format.cjs +16 -65
- package/dist/record/reader/format.cjs.map +1 -1
- package/dist/record/reader/format.d.cts +5 -9
- package/dist/record/reader/format.d.mts +5 -9
- package/dist/record/reader/format.d.ts +5 -9
- package/dist/record/reader/index.js +10 -8
- package/dist/record/reader/runtime.cjs +63 -32
- package/dist/record/reader/runtime.cjs.map +1 -1
- package/dist/record/reader/runtime.d.cts +40 -4
- package/dist/record/reader/runtime.d.mts +40 -4
- package/dist/record/reader/runtime.d.ts +40 -4
- package/dist/record/reader/runtime.js +6 -4
- package/dist/report/assets/enhance.js +5 -5
- package/dist/report/assets/styles.css +186 -24
- package/dist/report/built-in/result-components.cjs +8 -5
- package/dist/report/built-in/result-components.cjs.map +1 -1
- package/dist/report/built-in/standard.cjs +3 -0
- package/dist/report/built-in/standard.cjs.map +1 -1
- package/dist/report/built-in/standard.d.cts +2 -0
- package/dist/report/built-in/standard.d.mts +2 -0
- package/dist/report/built-in/standard.d.ts +2 -0
- package/dist/report/client-dist/app.js +53 -0
- package/dist/report/components/attempt-detail/compute.cjs +106 -231
- package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
- package/dist/report/components/attempt-detail/compute.d.cts +9 -43
- package/dist/report/components/attempt-detail/compute.d.mts +9 -43
- package/dist/report/components/attempt-detail/compute.d.ts +9 -43
- package/dist/report/components/attempt-detail/compute.js +2 -4
- package/dist/report/components/attempt-detail/content.cjs +3 -4
- package/dist/report/components/attempt-detail/content.cjs.map +1 -1
- package/dist/report/components/attempt-detail/validate.cjs +44 -2
- package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.cjs +9 -15
- package/dist/report/components/entity-lists/compute.cjs.map +1 -1
- package/dist/report/components/entity-lists/content.cjs +53 -40
- package/dist/report/components/entity-lists/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.cjs +1 -3
- package/dist/report/components/entity-lists/index.cjs.map +1 -1
- package/dist/report/components/experiment-detail/compute.cjs +4 -6
- package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
- package/dist/report/definition/cell.cjs +14 -7
- package/dist/report/definition/cell.cjs.map +1 -1
- package/dist/report/definition/cell.d.cts +4 -0
- package/dist/report/definition/cell.d.mts +4 -0
- package/dist/report/definition/cell.d.ts +4 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
- package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
- package/dist/report/definition/primitives/assertion-evidence.js +6 -0
- package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
- package/dist/report/definition/primitives.cjs +14 -1
- package/dist/report/definition/primitives.cjs.map +1 -1
- package/dist/report/definition/report.cjs +16 -8
- package/dist/report/definition/report.cjs.map +1 -1
- package/dist/report/definition/report.d.cts +6 -0
- package/dist/report/definition/report.d.mts +6 -0
- package/dist/report/definition/report.d.ts +6 -0
- package/dist/report/definition/table-text.cjs +12 -3
- package/dist/report/definition/table-text.cjs.map +1 -1
- package/dist/report/definition/table-text.d.cts +6 -1
- package/dist/report/definition/table-text.d.mts +6 -1
- package/dist/report/definition/table-text.d.ts +6 -1
- package/dist/report/execution/model.cjs +6 -14
- package/dist/report/execution/model.cjs.map +1 -1
- package/dist/report/execution/model.d.cts +5 -10
- package/dist/report/execution/model.d.mts +5 -10
- package/dist/report/execution/model.d.ts +5 -10
- package/dist/report/execution/model.js +6 -6
- package/dist/report/execution/paths.cjs +0 -11
- package/dist/report/execution/paths.cjs.map +1 -1
- package/dist/report/execution/paths.d.cts +0 -1
- package/dist/report/execution/paths.d.mts +0 -1
- package/dist/report/execution/paths.d.ts +0 -1
- package/dist/report/execution/paths.js +6 -8
- package/dist/report/host/execute.cjs +13 -22
- package/dist/report/host/execute.cjs.map +1 -1
- package/dist/report/host/execute.d.cts +1 -4
- package/dist/report/host/execute.d.mts +1 -4
- package/dist/report/host/execute.d.ts +1 -4
- package/dist/report/host/from-record.cjs +3 -0
- package/dist/report/host/from-record.cjs.map +1 -1
- package/dist/report/host/from-record.d.cts +4 -1
- package/dist/report/host/from-record.d.mts +4 -1
- package/dist/report/host/from-record.d.ts +4 -1
- package/dist/report/host/site-assets.cjs +1 -2
- package/dist/report/host/site-assets.cjs.map +1 -1
- package/dist/report/host/site-assets.d.cts +0 -1
- package/dist/report/host/site-assets.d.mts +0 -1
- package/dist/report/host/site-assets.d.ts +0 -1
- package/dist/report/host/site-assets.js +2 -4
- package/dist/report/host/static.cjs +71 -346
- package/dist/report/host/static.cjs.map +1 -1
- package/dist/report/host/static.d.cts +1 -3
- package/dist/report/host/static.d.mts +1 -3
- package/dist/report/host/static.d.ts +1 -3
- package/dist/report/host/static.js +2 -2
- package/dist/report/host/view-session.cjs.map +1 -1
- package/dist/report/host/view-session.d.cts +1 -1
- package/dist/report/host/view-session.d.mts +1 -1
- package/dist/report/host/view-session.d.ts +1 -1
- package/dist/report/model/locale.cjs +1 -1
- package/dist/report/model/locale.cjs.map +1 -1
- package/dist/report/model/locale.d.cts +1 -1
- package/dist/report/model/locale.d.mts +1 -1
- package/dist/report/model/locale.d.ts +1 -1
- package/dist/report/model/pricing.cjs +2 -2
- package/dist/report/model/pricing.cjs.map +1 -1
- package/dist/report/react/enhance.js +5 -5
- package/dist/report/react/styles.css +186 -24
- package/dist/runner/adoption.cjs +4 -7
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/feedback/failure.cjs +77 -2
- package/dist/runner/feedback/failure.cjs.map +1 -1
- package/dist/runner/feedback/failure.d.cts +2 -1
- package/dist/runner/feedback/failure.d.mts +2 -1
- package/dist/runner/feedback/failure.d.ts +2 -1
- package/dist/runner/project-current.cjs +2 -13
- package/dist/runner/project-current.cjs.map +1 -1
- package/dist/runner/project-current.d.cts +4 -2
- package/dist/runner/project-current.d.mts +4 -2
- package/dist/runner/project-current.d.ts +4 -2
- package/dist/runner/reporters/braintrust.cjs +7 -7
- package/dist/runner/reporters/braintrust.cjs.map +1 -1
- package/dist/runner/reuse-readback.cjs +3 -4
- package/dist/runner/reuse-readback.cjs.map +1 -1
- package/dist/runner/run.cjs +5 -2
- package/dist/runner/run.cjs.map +1 -1
- package/dist/view/server.cjs +2 -37
- package/dist/view/server.cjs.map +1 -1
- package/dist/view/server.d.cts +0 -3
- package/dist/view/server.d.mts +0 -3
- package/dist/view/server.d.ts +0 -3
- package/docs-site/zh/reference/builtin-agents.mdx +7 -7
- package/docs-site/zh/reference/official-adapters.mdx +4 -4
- package/docs-site/zh/reference/report-components.mdx +2 -2
- package/docs-site/zh/tutorials/configuration.mdx +2 -2
- package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
- package/docs-site/zh/tutorials/publish-report.mdx +4 -4
- package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
- package/docs-site/zh/tutorials/theming.mdx +2 -2
- package/package.json +4 -6
- package/dist/record/migration/index.cjs +0 -5
- package/dist/record/migration/index.cjs.map +0 -1
- package/dist/record/migration/index.d.cts +0 -11
- package/dist/record/migration/index.d.mts +0 -11
- package/dist/record/migration/index.d.ts +0 -11
- package/dist/record/migration/index.js +0 -6
- package/dist/record/migration/index.js.map +0 -1
- package/dist/report/host/site-runtime.cjs +0 -92
- package/dist/report/host/site-runtime.cjs.map +0 -1
- package/dist/report/host/site-runtime.d.cts +0 -9
- package/dist/report/host/site-runtime.d.mts +0 -9
- package/dist/report/host/site-runtime.d.ts +0 -9
- package/dist/report/host/site-runtime.js +0 -10
- package/dist/report/host/site-runtime.js.map +0 -1
- package/dist/view/client-dist/app.css +0 -2
- package/dist/view/client-dist/app.js +0 -49
- package/dist/view/data.cjs +0 -3
- package/dist/view/data.cjs.map +0 -1
- package/dist/view/data.d.cts +0 -9
- package/dist/view/data.d.mts +0 -9
- package/dist/view/data.d.ts +0 -9
- package/dist/view/data.js +0 -4
- package/dist/view/data.js.map +0 -1
- package/dist/view/index.cjs +0 -24
- package/dist/view/index.cjs.map +0 -1
- package/dist/view/index.d.cts +0 -9
- package/dist/view/index.d.mts +0 -9
- package/dist/view/index.d.ts +0 -9
- package/dist/view/index.js +0 -28
- package/dist/view/index.js.map +0 -1
- package/dist/view/report-view-cache.cjs +0 -200
- package/dist/view/report-view-cache.cjs.map +0 -1
- package/dist/view/report-view-cache.d.cts +0 -67
- package/dist/view/report-view-cache.d.mts +0 -67
- package/dist/view/report-view-cache.d.ts +0 -67
- package/dist/view/report-view-cache.js +0 -8
- package/dist/view/report-view-cache.js.map +0 -1
- package/dist/view/shared/types.cjs +0 -3
- package/dist/view/shared/types.cjs.map +0 -1
- package/dist/view/shared/types.d.cts +0 -51
- package/dist/view/shared/types.d.mts +0 -51
- package/dist/view/shared/types.d.ts +0 -51
- package/dist/view/shared/types.js +0 -4
- package/dist/view/shared/types.js.map +0 -1
- package/dist/view/site.cjs +0 -32
- package/dist/view/site.cjs.map +0 -1
- package/dist/view/site.d.cts +0 -24
- package/dist/view/site.d.mts +0 -24
- package/dist/view/site.d.ts +0 -24
- package/dist/view/site.js +0 -8
- package/dist/view/site.js.map +0 -1
- package/dist/view/styles.css +0 -170
- package/dist/view/template.html +0 -17
|
@@ -7,6 +7,7 @@ exports.buildVerdictPayload = buildVerdictPayload;
|
|
|
7
7
|
exports.validateVerdictCoherence = validateVerdictCoherence;
|
|
8
8
|
exports.projectVerdictPayload = projectVerdictPayload;
|
|
9
9
|
const effect_1 = require("effect");
|
|
10
|
+
const model_ts_1 = require("../../assertions/record/model.cjs");
|
|
10
11
|
const sealed_assertion_ts_1 = require("./sealed-assertion.cjs");
|
|
11
12
|
/**
|
|
12
13
|
* A transient fold result. Verdict is derived from sealed Assertion facts and
|
|
@@ -40,8 +41,8 @@ function foldRecordedAttemptVerdict(input) {
|
|
|
40
41
|
assertions: input.assertions.entries.map((entry) => Object.freeze({
|
|
41
42
|
// `unavailable` is a required gate's sealed representation. Entries
|
|
42
43
|
// marked `not-gate` stay optional and cannot invent an execution error.
|
|
43
|
-
required: entry.
|
|
44
|
-
result: entry
|
|
44
|
+
required: entry.policy.requirement.state === "available" && entry.policy.requirement.value === "required",
|
|
45
|
+
result: (0, model_ts_1.sealedAssertionResult)(entry),
|
|
45
46
|
})),
|
|
46
47
|
});
|
|
47
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdict.js","sourceRoot":"","sources":["verdict.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"verdict.js","sourceRoot":"","sources":["verdict.ts"],"names":[],"mappings":";;;AAmBA,kCAQC;AAMD,gEAgBC;AACD,kDAEC;AAMD,4DAcC;AAED,sDAEC;AA5ED,mCAAgC;AAEhC,+DAAyE;AAGzE,+DAA0J;AAC1J;;;GAGG;AACU,QAAA,kBAAkB,GAAG,eAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE9E,QAAA,oBAAoB,GAAG,eAAM,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,0BAAkB;CAC5B,CAAC,CAAC;AAIU,QAAA,sBAAsB,GAAG,kDAA4B,CAAC;AACnE,SAAgB,WAAW,CAAC,KAAuB;IAC/C,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;WAC1B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,6DAAuC,CAAC,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kCAAY,CAAC;QACnC,OAAO,QAAQ,CAAC;IACpB,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1D,CAAC;AACD;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,KAG1C;IACG,OAAO,WAAW,CAAC;QACf,SAAS,EAAE,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,aAAa;YACrE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,WAAW;QACjB,iBAAiB,EAAE,KAAK,CAAC,OAAO,KAAK,WAAW;QAChD,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9D,oEAAoE;YACpE,wEAAwE;YACxE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,UAAU;YACzG,MAAM,EAAE,IAAA,gCAAqB,EAAC,KAAK,CAAC;SACvC,CAAC,CAAC;KACN,CAAC,CAAC;AACP,CAAC;AACD,SAAgB,mBAAmB,CAAC,KAAuB;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAMD,SAAgB,wBAAwB,CAAC,KAGxC;IACG,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;QACnC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC;gBACV,IAAI,EAAE,uBAAgC;gBACtC,QAAQ;gBACR,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;aAC9B,CAAC;SACL,CAAC,CAAC;AACX,CAAC;AACD,+EAA+E;AAC/E,SAAgB,qBAAqB,CAAC,OAAuB;IACzD,OAAO,OAAO,CAAC,KAAK,CAAC;AACzB,CAAC","sourcesContent":["import { Schema } from \"effect\";\nimport type { AssertionsAttachment } from \"../../record/family/assertions.ts\";\nimport { sealedAssertionResult } from \"../../assertions/record/model.ts\";\nimport type { AttemptOutcome } from \"../../record/model/core.ts\";\nimport type { Verdict } from \"../../shared/types.ts\";\nimport { EvaluationAttemptFactsSchema, isGateFailed, isRequiredAssertionUnavailableOrErrored, type EvaluationAttemptFacts, } from \"./sealed-assertion.ts\";\n/**\n * A transient fold result. Verdict is derived from sealed Assertion facts and\n * Attempt outcome; it is deliberately not a Record Attachment family.\n */\nexport const VerdictStateSchema = Schema.Literal(\"passed\", \"failed\", \"errored\", \"skipped\");\nexport type VerdictState = Schema.Schema.Type<typeof VerdictStateSchema>;\nexport const VerdictPayloadSchema = Schema.Struct({\n state: VerdictStateSchema,\n});\nexport type VerdictPayload = Schema.Schema.Type<typeof VerdictPayloadSchema>;\nexport type VerdictPayloadEncoded = Schema.Schema.Encoded<typeof VerdictPayloadSchema>;\nexport type VerdictFoldInput = EvaluationAttemptFacts;\nexport const VerdictFoldInputSchema = EvaluationAttemptFactsSchema;\nexport function foldVerdict(input: VerdictFoldInput): VerdictState {\n if (input.execution === \"errored\"\n || input.assertions.some(isRequiredAssertionUnavailableOrErrored)) {\n return \"errored\";\n }\n if (input.assertions.some(isGateFailed))\n return \"failed\";\n return input.explicitlySkipped ? \"skipped\" : \"passed\";\n}\n/**\n * Folds the public Verdict from the immutable Attempt outcome and verified\n * Assertions payload. This is the one adapter from Record's terminal Core\n * state into the verdict fold; consumers must not reproduce these rules.\n */\nexport function foldRecordedAttemptVerdict(input: {\n readonly outcome: AttemptOutcome;\n readonly assertions: AssertionsAttachment;\n}): VerdictState {\n return foldVerdict({\n execution: input.outcome === \"errored\" || input.outcome === \"interrupted\"\n ? \"errored\"\n : \"completed\",\n explicitlySkipped: input.outcome === \"cancelled\",\n assertions: input.assertions.entries.map((entry) => Object.freeze({\n // `unavailable` is a required gate's sealed representation. Entries\n // marked `not-gate` stay optional and cannot invent an execution error.\n required: entry.policy.requirement.state === \"available\" && entry.policy.requirement.value === \"required\",\n result: sealedAssertionResult(entry),\n })),\n });\n}\nexport function buildVerdictPayload(input: VerdictFoldInput): VerdictPayload {\n return Object.freeze({ state: foldVerdict(input) });\n}\nexport type VerdictCoherenceIssue = {\n readonly code: \"verdict-fold-mismatch\";\n readonly expected: VerdictState;\n readonly actual: VerdictState;\n};\nexport function validateVerdictCoherence(input: {\n readonly payload: VerdictPayload;\n readonly fold: VerdictFoldInput;\n}): readonly VerdictCoherenceIssue[] {\n const expected = foldVerdict(input.fold);\n return input.payload.state === expected\n ? Object.freeze([])\n : Object.freeze([\n Object.freeze({\n code: \"verdict-fold-mismatch\" as const,\n expected,\n actual: input.payload.state,\n }),\n ]);\n}\n/** Plain domain projection for callers that need NiceEval's public verdict. */\nexport function projectVerdictPayload(payload: VerdictPayload): Verdict {\n return payload.state;\n}\n"]}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.experimentHost = void 0;
|
|
4
4
|
const effect_1 = require("effect");
|
|
5
|
-
const load_config_ts_1 = require("../../load-config.cjs");
|
|
6
5
|
const command_plan_ts_1 = require("../../runner/command-plan.cjs");
|
|
7
6
|
const discover_ts_1 = require("../../runner/discover.cjs");
|
|
8
7
|
const fingerprint_ts_1 = require("../../runner/fingerprint.cjs");
|
|
@@ -90,10 +89,6 @@ function debugAgentRun(experiment, evalId) {
|
|
|
90
89
|
*/
|
|
91
90
|
function debug(input) {
|
|
92
91
|
return effect_1.Effect.gen(function* () {
|
|
93
|
-
const config = yield* effect_1.Effect.tryPromise({
|
|
94
|
-
try: () => (0, load_config_ts_1.loadConfigFile)(input.cwd),
|
|
95
|
-
catch: (cause) => cause,
|
|
96
|
-
});
|
|
97
92
|
const listed = yield* list({ cwd: input.cwd });
|
|
98
93
|
const selectedExperiments = uniqueExactOrPrefix(listed.selections, input.experimentSelector, ({ experiment }) => experiment.id).slice().sort((left, right) => left.experiment.id.localeCompare(right.experiment.id));
|
|
99
94
|
if (selectedExperiments.length === 0) {
|
|
@@ -134,7 +129,7 @@ function debug(input) {
|
|
|
134
129
|
}
|
|
135
130
|
const evalDef = selectedEvals[0];
|
|
136
131
|
const run = debugAgentRun(experiment, evalDef.id);
|
|
137
|
-
const target = yield* (0, fingerprint_ts_1.planProjectTarget)(listed.evals, [run], config.timeoutMs, { configJudge: config.judge });
|
|
132
|
+
const target = yield* (0, fingerprint_ts_1.planProjectTarget)(listed.evals, [run], input.config.timeoutMs, { configJudge: input.config.judge });
|
|
138
133
|
const commandPlan = (0, command_plan_ts_1.assembleCommandPlan)({
|
|
139
134
|
rows: [{
|
|
140
135
|
experimentId: experiment.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { loadConfigFile } from \"../../load-config.ts\";\nimport { assembleCommandPlan, type CommandPlan } from \"../../runner/command-plan.ts\";\nimport { discoverEvals, discoverExperiments } from \"../../runner/discover.ts\";\nimport { planProjectTarget } from \"../../runner/fingerprint.ts\";\nimport { resolveExperimentEvals } from \"../../runner/eval-selection.ts\";\nimport { prepareRunnerRecordReuse, withRunnerCurrentReusePreview, } from \"../../runner/record.ts\";\nimport { projectCurrentReuseReadback, } from \"../../runner/reuse-readback.ts\";\nimport { acceptLocators } from \"../../runner/accept.ts\";\nimport { runEvals } from \"../../runner/run.ts\";\nimport type { AcceptLocatorsOptions, } from \"../../runner/accept.ts\";\nimport type { ProjectTargetPlan } from \"../../runner/fingerprint.ts\";\nimport type { CurrentReuseReadbackSnapshot } from \"../../runner/reuse-readback.ts\";\nimport type { ExecutionReusePlanSlot } from \"../../runner/reuse-plan.ts\";\nimport { resolveRunTimeout } from \"../../runner/timeout.ts\";\nimport type { AgentRun, Config, DiscoveredEval, DiscoveredExperiment, RunOptions, } from \"../../runner/types.ts\";\nimport type { RecordRoot } from \"../../record/platform/root.ts\";\nimport { matchExperimentSelector } from \"../../shared/aggregate.ts\";\n/**\n * Public, supported high-level Host composition SDK for the NiceEval CLI,\n * replacement CLI/Web hosts, and deep application integrations. Eval authors\n * use `defineExperiment`; this entry deliberately exposes no Runner internals.\n */\n/** One discovered Experiment after its author selector and CLI prefixes close. */\nexport interface ExperimentHostSelection {\n readonly experiment: DiscoveredExperiment;\n readonly selectedEvalIds: readonly string[];\n /** The Experiment-owned set before CLI eval-prefix narrowing. */\n readonly selectorEvalIds: readonly string[];\n}\n/** Discovery result used by both `exp list` and execution planning. */\nexport interface ExperimentHostListResult {\n readonly evals: readonly DiscoveredEval[];\n readonly experimentIds: readonly string[];\n readonly selections: readonly ExperimentHostSelection[];\n}\n/**\n * Discovery and selection are owned here so consumers cannot invoke an\n * Experiment's predicate a second time while reconstructing an AgentRun.\n */\nfunction list(input: {\n readonly cwd: string;\n /** Keep the CLI's public `--tag` selection inside the Experiment boundary. */\n readonly tag?: string;\n readonly selector?: string;\n readonly evalPatterns?: readonly string[];\n}): Effect.Effect<ExperimentHostListResult, unknown> {\n return Effect.gen(function* () {\n const discoveredEvals = yield* discoverEvals(input.cwd);\n const evals = input.tag === undefined\n ? discoveredEvals\n : discoveredEvals.filter((evalDefinition) => evalDefinition.tags?.includes(input.tag!));\n const experiments = yield* discoverExperiments(input.cwd);\n const experimentIds = Object.freeze(experiments.map((experiment) => experiment.id));\n const selectedIds = input.selector === undefined\n ? undefined\n : new Set(matchExperimentSelector(experimentIds, input.selector));\n const selections = experiments\n .filter((experiment) => selectedIds === undefined || selectedIds.has(experiment.id))\n .map((experiment): ExperimentHostSelection => {\n const selected = resolveExperimentEvals({\n experimentId: experiment.id,\n selector: experiment.evals,\n cliPatterns: input.evalPatterns ?? [],\n evals,\n });\n return Object.freeze({\n experiment,\n selectedEvalIds: Object.freeze([...selected.selectedEvalIds]),\n selectorEvalIds: Object.freeze(selected.selectorEvals.map((evalDefinition) => evalDefinition.id)),\n });\n });\n return Object.freeze({\n evals: Object.freeze([...evals]),\n experimentIds,\n selections: Object.freeze(selections),\n });\n });\n}\nexport interface ExperimentHostDebugPlanRequest {\n readonly cwd: string;\n readonly experimentSelector: string;\n readonly evalSelector: string;\n}\n/** A fully closed, read-only lifecycle plan for exactly one Experiment × Eval pair. */\nexport interface ExperimentHostDebugPlan {\n readonly status: \"planned\";\n readonly experimentId: string;\n readonly evalId: string;\n readonly commandPlan: CommandPlan;\n}\n/**\n * Selector outcomes are data, rather than CLI-owned selection logic or a\n * partially constructed plan. The caller can render them in its own surface.\n */\nexport type ExperimentHostDebugPlanResult = ExperimentHostDebugPlan | {\n readonly status: \"experiment-no-match\";\n readonly selector: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"experiment-ambiguous\";\n readonly selector: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"eval-no-match\";\n readonly selector: string;\n readonly experimentId: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"eval-ambiguous\";\n readonly selector: string;\n readonly experimentId: string;\n readonly candidates: readonly string[];\n};\nfunction uniqueExactOrPrefix<T>(candidates: readonly T[], selector: string, id: (candidate: T) => string): readonly T[] {\n const exact = candidates.find((candidate) => id(candidate) === selector);\n return exact === undefined\n ? candidates.filter((candidate) => id(candidate).startsWith(selector))\n : [exact];\n}\nfunction debugAgentRun(experiment: DiscoveredExperiment, evalId: string): AgentRun {\n return {\n agent: experiment.agent,\n model: experiment.model,\n reasoningEffort: experiment.reasoningEffort,\n flags: experiment.flags ?? {},\n plugins: experiment.plugins,\n attempts: experiment.attempts ?? 1,\n earlyExit: experiment.earlyExit ?? false,\n sandbox: experiment.sandbox,\n sandboxReuse: experiment.sandboxReuse,\n ...(experiment.sharedState === undefined ? {} : { sharedState: experiment.sharedState }),\n judge: experiment.judge,\n ...resolveRunTimeout(undefined, experiment.timeoutMs),\n budget: experiment.budget,\n selectedEvalIds: [evalId],\n experimentId: experiment.id,\n experimentBaseDir: experiment.baseDir,\n experimentSourcePath: experiment.sourcePath,\n description: experiment.description,\n labels: experiment.labels,\n maxConcurrency: experiment.maxConcurrency,\n setup: experiment.setup,\n teardown: experiment.teardown,\n classifyFailure: experiment.classifyFailure,\n };\n}\n/**\n * Closes selector resolution, physical planning, and command-plan projection\n * inside the Experiment Host. It deliberately does not construct a Record\n * root, enter a lease, read history, or invoke an author callback.\n */\nfunction debug(input: ExperimentHostDebugPlanRequest): Effect.Effect<ExperimentHostDebugPlanResult, unknown> {\n return Effect.gen(function* () {\n const config = yield* Effect.tryPromise({\n try: () => loadConfigFile(input.cwd),\n catch: (cause) => cause,\n });\n const listed = yield* list({ cwd: input.cwd });\n const selectedExperiments = uniqueExactOrPrefix(listed.selections, input.experimentSelector, ({ experiment }) => experiment.id).slice().sort((left, right) => left.experiment.id.localeCompare(right.experiment.id));\n if (selectedExperiments.length === 0) {\n return Object.freeze({\n status: \"experiment-no-match\" as const,\n selector: input.experimentSelector,\n candidates: Object.freeze([...listed.experimentIds].sort()),\n });\n }\n if (selectedExperiments.length > 1) {\n return Object.freeze({\n status: \"experiment-ambiguous\" as const,\n selector: input.experimentSelector,\n candidates: Object.freeze(selectedExperiments.map(({ experiment }) => experiment.id)),\n });\n }\n const selection = selectedExperiments[0]!;\n const experiment = selection.experiment;\n const selectorEvalIds = new Set(selection.selectorEvalIds);\n const selectorEvals = listed.evals.filter((evalDef) => selectorEvalIds.has(evalDef.id));\n const selectedEvals = uniqueExactOrPrefix(selectorEvals, input.evalSelector, (evalDef) => evalDef.id)\n .slice().sort((left, right) => left.id.localeCompare(right.id));\n if (selectedEvals.length === 0) {\n return Object.freeze({\n status: \"eval-no-match\" as const,\n selector: input.evalSelector,\n experimentId: experiment.id,\n candidates: Object.freeze(selectorEvals.map((evalDef) => evalDef.id).sort()),\n });\n }\n if (selectedEvals.length > 1) {\n return Object.freeze({\n status: \"eval-ambiguous\" as const,\n selector: input.evalSelector,\n experimentId: experiment.id,\n candidates: Object.freeze(selectedEvals.map((evalDef) => evalDef.id)),\n });\n }\n const evalDef = selectedEvals[0]!;\n const run = debugAgentRun(experiment, evalDef.id);\n const target = yield* planProjectTarget(listed.evals, [run], config.timeoutMs, { configJudge: config.judge });\n const commandPlan = assembleCommandPlan({\n rows: [{\n experimentId: experiment.id,\n evalId: evalDef.id,\n ...(evalDef.evalGroup === undefined ? {} : { evalGroupId: evalDef.evalGroup.id }),\n attempts: run.attempts,\n dispatch: [{ attempts: Array.from({ length: run.attempts }, (_, attempt) => attempt) }],\n }],\n preparedPairsByKey: target.preparedPairsByKey,\n });\n return Object.freeze({\n status: \"planned\" as const,\n experimentId: experiment.id,\n evalId: evalDef.id,\n commandPlan,\n });\n });\n}\nexport interface ExperimentHostPlanRequest {\n readonly evals: readonly DiscoveredEval[];\n readonly agentRuns: readonly AgentRun[];\n readonly config: Config;\n readonly recordRoot: RecordRoot;\n readonly rerun?: \"failed\" | \"all\";\n readonly keepSandbox?: \"failed\" | \"all\";\n /** Omit for a dispatch plan; include only for the read-only `exp --dry` path. */\n readonly previewStartedAt?: number;\n}\nexport interface ExperimentHostCurrentPlan {\n readonly slots: readonly ExecutionReusePlanSlot[];\n readonly readbacks: readonly CurrentReuseReadbackSnapshot[];\n}\nexport interface ExperimentHostPlan {\n readonly target: ProjectTargetPlan;\n readonly current?: ExperimentHostCurrentPlan;\n}\n/**\n * Reuses the production physical planner and frozen Record reuse planner.\n * It never creates a Run; current history is read only when a dry preview was\n * explicitly requested.\n */\nfunction plan(input: ExperimentHostPlanRequest) {\n return Effect.gen(function* () {\n const target = yield* planProjectTarget(input.evals, input.agentRuns, input.config.timeoutMs, {\n configJudge: input.config.judge,\n ...(input.keepSandbox === undefined ? {} : { keepSandbox: input.keepSandbox }),\n });\n const reuse = yield* prepareRunnerRecordReuse({\n evals: input.evals,\n runs: input.agentRuns,\n config: { timeoutMs: input.config.timeoutMs },\n plannedFingerprints: target.plannedFingerprints,\n plannedConfigHashes: target.plannedConfigHashes,\n ...(input.rerun === undefined ? {} : { rerun: input.rerun }),\n ...(input.keepSandbox === undefined ? {} : { keepSandbox: input.keepSandbox }),\n });\n const current = input.previewStartedAt === undefined\n ? undefined\n : yield* withRunnerCurrentReusePreview({\n recordRoot: input.recordRoot,\n startedAt: input.previewStartedAt,\n evals: input.evals,\n runs: input.agentRuns,\n reuse,\n use: ({ reusePlan, readReadbacks }) => readReadbacks().pipe(Effect.map((readbacks): ExperimentHostCurrentPlan => Object.freeze({\n slots: Object.freeze([...reusePlan.slots]),\n readbacks: Object.freeze(readbacks.map(projectCurrentReuseReadback)),\n }))),\n });\n return Object.freeze({\n target,\n ...(current === undefined ? {} : { current }),\n });\n });\n}\n/** The existing Runner remains the one execution implementation. */\nfunction run<AttachmentError, AttachmentRequirements>(input: RunOptions<AttachmentError, AttachmentRequirements>) {\n return runEvals(input);\n}\n/** The existing adoption flow remains the one acceptance implementation. */\nfunction accept(input: AcceptLocatorsOptions) {\n return acceptLocators(input);\n}\nexport interface ExperimentHostSDK {\n readonly list: typeof list;\n readonly plan: typeof plan;\n readonly debug: typeof debug;\n readonly run: typeof run;\n readonly accept: typeof accept;\n}\n/** The fixed public Host surface; discovery, Runner, and adoption internals stay private. */\nexport const experimentHost: ExperimentHostSDK = Object.freeze({\n list,\n plan,\n debug,\n run,\n accept,\n});\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { assembleCommandPlan, type CommandPlan } from \"../../runner/command-plan.ts\";\nimport { discoverEvals, discoverExperiments } from \"../../runner/discover.ts\";\nimport { planProjectTarget } from \"../../runner/fingerprint.ts\";\nimport { resolveExperimentEvals } from \"../../runner/eval-selection.ts\";\nimport { prepareRunnerRecordReuse, withRunnerCurrentReusePreview, } from \"../../runner/record.ts\";\nimport { projectCurrentReuseReadback, } from \"../../runner/reuse-readback.ts\";\nimport { acceptLocators } from \"../../runner/accept.ts\";\nimport { runEvals } from \"../../runner/run.ts\";\nimport type { AcceptLocatorsOptions, } from \"../../runner/accept.ts\";\nimport type { ProjectTargetPlan } from \"../../runner/fingerprint.ts\";\nimport type { CurrentReuseReadbackSnapshot } from \"../../runner/reuse-readback.ts\";\nimport type { ExecutionReusePlanSlot } from \"../../runner/reuse-plan.ts\";\nimport { resolveRunTimeout } from \"../../runner/timeout.ts\";\nimport type { AgentRun, Config, DiscoveredEval, DiscoveredExperiment, RunOptions, } from \"../../runner/types.ts\";\nimport type { RecordRoot } from \"../../record/platform/root.ts\";\nimport { matchExperimentSelector } from \"../../shared/aggregate.ts\";\n/**\n * Public, supported high-level Host composition SDK for the NiceEval CLI,\n * replacement CLI/Web hosts, and deep application integrations. Eval authors\n * use `defineExperiment`; this entry deliberately exposes no Runner internals.\n */\n/** One discovered Experiment after its author selector and CLI prefixes close. */\nexport interface ExperimentHostSelection {\n readonly experiment: DiscoveredExperiment;\n readonly selectedEvalIds: readonly string[];\n /** The Experiment-owned set before CLI eval-prefix narrowing. */\n readonly selectorEvalIds: readonly string[];\n}\n/** Discovery result used by both `exp list` and execution planning. */\nexport interface ExperimentHostListResult {\n readonly evals: readonly DiscoveredEval[];\n readonly experimentIds: readonly string[];\n readonly selections: readonly ExperimentHostSelection[];\n}\n/**\n * Discovery and selection are owned here so consumers cannot invoke an\n * Experiment's predicate a second time while reconstructing an AgentRun.\n */\nfunction list(input: {\n readonly cwd: string;\n /** Keep the CLI's public `--tag` selection inside the Experiment boundary. */\n readonly tag?: string;\n readonly selector?: string;\n readonly evalPatterns?: readonly string[];\n}): Effect.Effect<ExperimentHostListResult, unknown> {\n return Effect.gen(function* () {\n const discoveredEvals = yield* discoverEvals(input.cwd);\n const evals = input.tag === undefined\n ? discoveredEvals\n : discoveredEvals.filter((evalDefinition) => evalDefinition.tags?.includes(input.tag!));\n const experiments = yield* discoverExperiments(input.cwd);\n const experimentIds = Object.freeze(experiments.map((experiment) => experiment.id));\n const selectedIds = input.selector === undefined\n ? undefined\n : new Set(matchExperimentSelector(experimentIds, input.selector));\n const selections = experiments\n .filter((experiment) => selectedIds === undefined || selectedIds.has(experiment.id))\n .map((experiment): ExperimentHostSelection => {\n const selected = resolveExperimentEvals({\n experimentId: experiment.id,\n selector: experiment.evals,\n cliPatterns: input.evalPatterns ?? [],\n evals,\n });\n return Object.freeze({\n experiment,\n selectedEvalIds: Object.freeze([...selected.selectedEvalIds]),\n selectorEvalIds: Object.freeze(selected.selectorEvals.map((evalDefinition) => evalDefinition.id)),\n });\n });\n return Object.freeze({\n evals: Object.freeze([...evals]),\n experimentIds,\n selections: Object.freeze(selections),\n });\n });\n}\nexport interface ExperimentHostDebugPlanRequest {\n readonly cwd: string;\n readonly config: Config;\n readonly experimentSelector: string;\n readonly evalSelector: string;\n}\n/** A fully closed, read-only lifecycle plan for exactly one Experiment × Eval pair. */\nexport interface ExperimentHostDebugPlan {\n readonly status: \"planned\";\n readonly experimentId: string;\n readonly evalId: string;\n readonly commandPlan: CommandPlan;\n}\n/**\n * Selector outcomes are data, rather than CLI-owned selection logic or a\n * partially constructed plan. The caller can render them in its own surface.\n */\nexport type ExperimentHostDebugPlanResult = ExperimentHostDebugPlan | {\n readonly status: \"experiment-no-match\";\n readonly selector: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"experiment-ambiguous\";\n readonly selector: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"eval-no-match\";\n readonly selector: string;\n readonly experimentId: string;\n readonly candidates: readonly string[];\n} | {\n readonly status: \"eval-ambiguous\";\n readonly selector: string;\n readonly experimentId: string;\n readonly candidates: readonly string[];\n};\nfunction uniqueExactOrPrefix<T>(candidates: readonly T[], selector: string, id: (candidate: T) => string): readonly T[] {\n const exact = candidates.find((candidate) => id(candidate) === selector);\n return exact === undefined\n ? candidates.filter((candidate) => id(candidate).startsWith(selector))\n : [exact];\n}\nfunction debugAgentRun(experiment: DiscoveredExperiment, evalId: string): AgentRun {\n return {\n agent: experiment.agent,\n model: experiment.model,\n reasoningEffort: experiment.reasoningEffort,\n flags: experiment.flags ?? {},\n plugins: experiment.plugins,\n attempts: experiment.attempts ?? 1,\n earlyExit: experiment.earlyExit ?? false,\n sandbox: experiment.sandbox,\n sandboxReuse: experiment.sandboxReuse,\n ...(experiment.sharedState === undefined ? {} : { sharedState: experiment.sharedState }),\n judge: experiment.judge,\n ...resolveRunTimeout(undefined, experiment.timeoutMs),\n budget: experiment.budget,\n selectedEvalIds: [evalId],\n experimentId: experiment.id,\n experimentBaseDir: experiment.baseDir,\n experimentSourcePath: experiment.sourcePath,\n description: experiment.description,\n labels: experiment.labels,\n maxConcurrency: experiment.maxConcurrency,\n setup: experiment.setup,\n teardown: experiment.teardown,\n classifyFailure: experiment.classifyFailure,\n };\n}\n/**\n * Closes selector resolution, physical planning, and command-plan projection\n * inside the Experiment Host. It deliberately does not construct a Record\n * root, enter a lease, read history, or invoke an author callback.\n */\nfunction debug(input: ExperimentHostDebugPlanRequest): Effect.Effect<ExperimentHostDebugPlanResult, unknown> {\n return Effect.gen(function* () {\n const listed = yield* list({ cwd: input.cwd });\n const selectedExperiments = uniqueExactOrPrefix(listed.selections, input.experimentSelector, ({ experiment }) => experiment.id).slice().sort((left, right) => left.experiment.id.localeCompare(right.experiment.id));\n if (selectedExperiments.length === 0) {\n return Object.freeze({\n status: \"experiment-no-match\" as const,\n selector: input.experimentSelector,\n candidates: Object.freeze([...listed.experimentIds].sort()),\n });\n }\n if (selectedExperiments.length > 1) {\n return Object.freeze({\n status: \"experiment-ambiguous\" as const,\n selector: input.experimentSelector,\n candidates: Object.freeze(selectedExperiments.map(({ experiment }) => experiment.id)),\n });\n }\n const selection = selectedExperiments[0]!;\n const experiment = selection.experiment;\n const selectorEvalIds = new Set(selection.selectorEvalIds);\n const selectorEvals = listed.evals.filter((evalDef) => selectorEvalIds.has(evalDef.id));\n const selectedEvals = uniqueExactOrPrefix(selectorEvals, input.evalSelector, (evalDef) => evalDef.id)\n .slice().sort((left, right) => left.id.localeCompare(right.id));\n if (selectedEvals.length === 0) {\n return Object.freeze({\n status: \"eval-no-match\" as const,\n selector: input.evalSelector,\n experimentId: experiment.id,\n candidates: Object.freeze(selectorEvals.map((evalDef) => evalDef.id).sort()),\n });\n }\n if (selectedEvals.length > 1) {\n return Object.freeze({\n status: \"eval-ambiguous\" as const,\n selector: input.evalSelector,\n experimentId: experiment.id,\n candidates: Object.freeze(selectedEvals.map((evalDef) => evalDef.id)),\n });\n }\n const evalDef = selectedEvals[0]!;\n const run = debugAgentRun(experiment, evalDef.id);\n const target = yield* planProjectTarget(listed.evals, [run], input.config.timeoutMs, { configJudge: input.config.judge });\n const commandPlan = assembleCommandPlan({\n rows: [{\n experimentId: experiment.id,\n evalId: evalDef.id,\n ...(evalDef.evalGroup === undefined ? {} : { evalGroupId: evalDef.evalGroup.id }),\n attempts: run.attempts,\n dispatch: [{ attempts: Array.from({ length: run.attempts }, (_, attempt) => attempt) }],\n }],\n preparedPairsByKey: target.preparedPairsByKey,\n });\n return Object.freeze({\n status: \"planned\" as const,\n experimentId: experiment.id,\n evalId: evalDef.id,\n commandPlan,\n });\n });\n}\nexport interface ExperimentHostPlanRequest {\n readonly evals: readonly DiscoveredEval[];\n readonly agentRuns: readonly AgentRun[];\n readonly config: Config;\n readonly recordRoot: RecordRoot;\n readonly rerun?: \"failed\" | \"all\";\n readonly keepSandbox?: \"failed\" | \"all\";\n /** Omit for a dispatch plan; include only for the read-only `exp --dry` path. */\n readonly previewStartedAt?: number;\n}\nexport interface ExperimentHostCurrentPlan {\n readonly slots: readonly ExecutionReusePlanSlot[];\n readonly readbacks: readonly CurrentReuseReadbackSnapshot[];\n}\nexport interface ExperimentHostPlan {\n readonly target: ProjectTargetPlan;\n readonly current?: ExperimentHostCurrentPlan;\n}\n/**\n * Reuses the production physical planner and frozen Record reuse planner.\n * It never creates a Run; current history is read only when a dry preview was\n * explicitly requested.\n */\nfunction plan(input: ExperimentHostPlanRequest) {\n return Effect.gen(function* () {\n const target = yield* planProjectTarget(input.evals, input.agentRuns, input.config.timeoutMs, {\n configJudge: input.config.judge,\n ...(input.keepSandbox === undefined ? {} : { keepSandbox: input.keepSandbox }),\n });\n const reuse = yield* prepareRunnerRecordReuse({\n evals: input.evals,\n runs: input.agentRuns,\n config: { timeoutMs: input.config.timeoutMs },\n plannedFingerprints: target.plannedFingerprints,\n plannedConfigHashes: target.plannedConfigHashes,\n ...(input.rerun === undefined ? {} : { rerun: input.rerun }),\n ...(input.keepSandbox === undefined ? {} : { keepSandbox: input.keepSandbox }),\n });\n const current = input.previewStartedAt === undefined\n ? undefined\n : yield* withRunnerCurrentReusePreview({\n recordRoot: input.recordRoot,\n startedAt: input.previewStartedAt,\n evals: input.evals,\n runs: input.agentRuns,\n reuse,\n use: ({ reusePlan, readReadbacks }) => readReadbacks().pipe(Effect.map((readbacks): ExperimentHostCurrentPlan => Object.freeze({\n slots: Object.freeze([...reusePlan.slots]),\n readbacks: Object.freeze(readbacks.map(projectCurrentReuseReadback)),\n }))),\n });\n return Object.freeze({\n target,\n ...(current === undefined ? {} : { current }),\n });\n });\n}\n/** The existing Runner remains the one execution implementation. */\nfunction run<AttachmentError, AttachmentRequirements>(input: RunOptions<AttachmentError, AttachmentRequirements>) {\n return runEvals(input);\n}\n/** The existing adoption flow remains the one acceptance implementation. */\nfunction accept(input: AcceptLocatorsOptions) {\n return acceptLocators(input);\n}\nexport interface ExperimentHostSDK {\n readonly list: typeof list;\n readonly plan: typeof plan;\n readonly debug: typeof debug;\n readonly run: typeof run;\n readonly accept: typeof accept;\n}\n/** The fixed public Host surface; discovery, Runner, and adoption internals stay private. */\nexport const experimentHost: ExperimentHostSDK = Object.freeze({\n list,\n plan,\n debug,\n run,\n accept,\n});\n"]}
|
|
@@ -37,6 +37,7 @@ declare function list(input: {
|
|
|
37
37
|
}): Effect.Effect<ExperimentHostListResult, unknown>;
|
|
38
38
|
export interface ExperimentHostDebugPlanRequest {
|
|
39
39
|
readonly cwd: string;
|
|
40
|
+
readonly config: Config;
|
|
40
41
|
readonly experimentSelector: string;
|
|
41
42
|
readonly evalSelector: string;
|
|
42
43
|
}
|
|
@@ -37,6 +37,7 @@ declare function list(input: {
|
|
|
37
37
|
}): Effect.Effect<ExperimentHostListResult, unknown>;
|
|
38
38
|
export interface ExperimentHostDebugPlanRequest {
|
|
39
39
|
readonly cwd: string;
|
|
40
|
+
readonly config: Config;
|
|
40
41
|
readonly experimentSelector: string;
|
|
41
42
|
readonly evalSelector: string;
|
|
42
43
|
}
|
|
@@ -37,6 +37,7 @@ declare function list(input: {
|
|
|
37
37
|
}): Effect.Effect<ExperimentHostListResult, unknown>;
|
|
38
38
|
export interface ExperimentHostDebugPlanRequest {
|
|
39
39
|
readonly cwd: string;
|
|
40
|
+
readonly config: Config;
|
|
40
41
|
readonly experimentSelector: string;
|
|
41
42
|
readonly evalSelector: string;
|
|
42
43
|
}
|
package/dist/load-config.cjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const __niceevalDynamicImport = (specifier) => import(specifier);
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
4
|
+
exports.loadConfigModuleOnce = loadConfigModuleOnce;
|
|
5
|
+
exports.rebuildConfigModule = rebuildConfigModule;
|
|
5
6
|
// niceeval.config.ts 装载:CLI 与 view 共用。view 本地模式每次重建传 freshImport,
|
|
6
7
|
// 让 config.report / config.theme 及其整棵 import 图失效(docs/feature/reports/README.md)。
|
|
7
8
|
const node_fs_1 = require("node:fs");
|
|
@@ -16,14 +17,14 @@ function needsAdditionalTsxLoader(error) {
|
|
|
16
17
|
"code" in error &&
|
|
17
18
|
error.code === "ERR_UNKNOWN_FILE_EXTENSION");
|
|
18
19
|
}
|
|
19
|
-
async function
|
|
20
|
+
async function loadConfigModule(cwd, rebuild) {
|
|
20
21
|
const path = (0, node_path_1.join)(cwd, "niceeval.config.ts");
|
|
21
22
|
if (!(0, node_fs_1.existsSync)(path)) {
|
|
22
23
|
throw new Error((0, index_ts_1.t)("cli.config.missing"));
|
|
23
24
|
}
|
|
24
25
|
let mod;
|
|
25
26
|
try {
|
|
26
|
-
mod =
|
|
27
|
+
mod = rebuild
|
|
27
28
|
? (await (0, fresh_import_ts_1.freshImportModule)(path))
|
|
28
29
|
: (await __niceevalDynamicImport((0, node_url_1.pathToFileURL)(path).href));
|
|
29
30
|
}
|
|
@@ -33,7 +34,7 @@ async function loadConfigFile(cwd, options) {
|
|
|
33
34
|
// ERR_UNKNOWN_FILE_EXTENSION。只对普通一次性装载的能力错误补一层 tsx hook
|
|
34
35
|
// 重试,用户模块自己抛错时不重放副作用。fresh 装载不能退回 canonical URL:
|
|
35
36
|
// 它可能已被 view 启动时缓存,从而用上一代成功配置掩盖当前损坏。
|
|
36
|
-
if (!
|
|
37
|
+
if (!rebuild && needsAdditionalTsxLoader(e)) {
|
|
37
38
|
const url = (0, node_url_1.pathToFileURL)(path).href;
|
|
38
39
|
(0, api_1.register)();
|
|
39
40
|
// 这是一次性 CLI 装载器:保留 hook 到进程结束。不用 namespace——
|
|
@@ -49,4 +50,12 @@ async function loadConfigFile(cwd, options) {
|
|
|
49
50
|
throw new Error((0, index_ts_1.t)("cli.config.noDefault"));
|
|
50
51
|
return mod.default;
|
|
51
52
|
}
|
|
53
|
+
/** Canonical trusted module load; callers that need fresh evaluation use rebuild. */
|
|
54
|
+
function loadConfigModuleOnce(cwd) {
|
|
55
|
+
return loadConfigModule(cwd, false);
|
|
56
|
+
}
|
|
57
|
+
/** Serial callers deliberately request a new module graph rather than a boolean mode. */
|
|
58
|
+
function rebuildConfigModule(cwd) {
|
|
59
|
+
return loadConfigModule(cwd, true);
|
|
60
|
+
}
|
|
52
61
|
//# sourceMappingURL=load-config.cjs.map
|
package/dist/load-config.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["load-config.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["load-config.ts"],"names":[],"mappings":";;AA2DA,oDAEC;AAED,kDAEC;AAjED,kEAAkE;AAClE,kFAAkF;AAClF,qCAAqC;AACrC,yCAAiC;AACjC,uCAAyC;AACzC,qCAAuC;AACvC,uDAAsD;AACtD,8CAAoC;AAEpC,SAAS,wBAAwB,CAAC,KAAc;IAC5C,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ;QAC7B,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAEC,CAAC,IAAI,KAAK,4BAA4B,CAAC,CAAC;AAClD,CAAC;AACD,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAAgB;IACzD,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,oBAAoB,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,GAEH,CAAC;IACF,IAAI,CAAC;QACD,GAAG,GAAG,OAAO;YACT,CAAC,CAAE,CAAC,MAAM,IAAA,mCAAiB,EAAC,IAAI,CAAC,CAE/B;YACF,CAAC,CAAE,CAAC,MAAM,uBAAuB,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAEzD,CAAC;IACX,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,sDAAsD;QACtD,uDAAuD;QACvD,wDAAwD;QACxD,iDAAiD;QACjD,qCAAqC;QACrC,IAAI,CAAC,OAAO,IAAI,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACrC,IAAA,cAAQ,GAAE,CAAC;YACX,6CAA6C;YAC7C,sEAAsE;YACtE,+CAA+C;YAC/C,GAAG,GAAG,CAAC,MAAM,uBAAuB,CAAC,GAAG,GAAG,oBAAoB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAE3E,CAAC;QACN,CAAC;aACI,CAAC;YACF,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,OAAO;QACZ,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,sBAAsB,CAAC,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC;AACvB,CAAC;AACD,qFAAqF;AACrF,SAAgB,oBAAoB,CAAC,GAAW;IAC5C,OAAO,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AACD,yFAAyF;AACzF,SAAgB,mBAAmB,CAAC,GAAW;IAC3C,OAAO,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC","sourcesContent":["// niceeval.config.ts 装载:CLI 与 view 共用。view 本地模式每次重建传 freshImport,\n// 让 config.report / config.theme 及其整棵 import 图失效(docs/feature/reports/README.md)。\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { register } from \"tsx/esm/api\";\nimport { freshImportModule } from \"./fresh-import.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { Config } from \"./runner/types.ts\";\nfunction needsAdditionalTsxLoader(error: unknown): boolean {\n return (typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as {\n code?: unknown;\n }).code === \"ERR_UNKNOWN_FILE_EXTENSION\");\n}\nasync function loadConfigModule(cwd: string, rebuild: boolean): Promise<Config> {\n const path = join(cwd, \"niceeval.config.ts\");\n if (!existsSync(path)) {\n throw new Error(t(\"cli.config.missing\"));\n }\n let mod: {\n default?: Config;\n };\n try {\n mod = rebuild\n ? ((await freshImportModule(path)) as {\n default?: Config;\n })\n : ((await __niceevalDynamicImport(pathToFileURL(path).href)) as {\n default?: Config;\n });\n }\n catch (e) {\n // 全局 tsx hook 能装载 config.ts,但 Node ESM 在某些项目形态下会让它的静态\n // import 回落原生 loader;config 一旦 import 了 Report .tsx 就报\n // ERR_UNKNOWN_FILE_EXTENSION。只对普通一次性装载的能力错误补一层 tsx hook\n // 重试,用户模块自己抛错时不重放副作用。fresh 装载不能退回 canonical URL:\n // 它可能已被 view 启动时缓存,从而用上一代成功配置掩盖当前损坏。\n if (!rebuild && needsAdditionalTsxLoader(e)) {\n const url = pathToFileURL(path).href;\n register();\n // 这是一次性 CLI 装载器:保留 hook 到进程结束。不用 namespace——\n // config 图可能进入 CJS package,tsx 在 Node builtin URL 上传播 namespace query\n // 会把 node:util 误当文件读取。query 只击穿上一次失败的入口 cache。\n mod = (await __niceevalDynamicImport(`${url}?niceeval-config=${Date.now()}`)) as {\n default?: Config;\n };\n }\n else {\n throw e;\n }\n }\n if (!mod.default)\n throw new Error(t(\"cli.config.noDefault\"));\n return mod.default;\n}\n/** Canonical trusted module load; callers that need fresh evaluation use rebuild. */\nexport function loadConfigModuleOnce(cwd: string): Promise<Config> {\n return loadConfigModule(cwd, false);\n}\n/** Serial callers deliberately request a new module graph rather than a boolean mode. */\nexport function rebuildConfigModule(cwd: string): Promise<Config> {\n return loadConfigModule(cwd, true);\n}\n"]}
|
package/dist/load-config.d.cts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Config } from "./runner/types.cjs";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/** Canonical trusted module load; callers that need fresh evaluation use rebuild. */
|
|
3
|
+
export declare function loadConfigModuleOnce(cwd: string): Promise<Config>;
|
|
4
|
+
/** Serial callers deliberately request a new module graph rather than a boolean mode. */
|
|
5
|
+
export declare function rebuildConfigModule(cwd: string): Promise<Config>;
|
package/dist/load-config.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Config } from "./runner/types.mjs";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/** Canonical trusted module load; callers that need fresh evaluation use rebuild. */
|
|
3
|
+
export declare function loadConfigModuleOnce(cwd: string): Promise<Config>;
|
|
4
|
+
/** Serial callers deliberately request a new module graph rather than a boolean mode. */
|
|
5
|
+
export declare function rebuildConfigModule(cwd: string): Promise<Config>;
|
package/dist/load-config.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Config } from "./runner/types.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/** Canonical trusted module load; callers that need fresh evaluation use rebuild. */
|
|
3
|
+
export declare function loadConfigModuleOnce(cwd: string): Promise<Config>;
|
|
4
|
+
/** Serial callers deliberately request a new module graph rather than a boolean mode. */
|
|
5
|
+
export declare function rebuildConfigModule(cwd: string): Promise<Config>;
|
package/dist/load-config.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createRequire as __niceevalCreateRequire } from "node:module";
|
|
2
2
|
const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
|
|
3
3
|
const __niceevalCanonical = __niceevalRequire("./load-config.cjs");
|
|
4
|
-
const __niceevalExport0 = __niceevalCanonical["
|
|
5
|
-
export { __niceevalExport0 as
|
|
4
|
+
const __niceevalExport0 = __niceevalCanonical["loadConfigModuleOnce"];
|
|
5
|
+
export { __niceevalExport0 as loadConfigModuleOnce };
|
|
6
|
+
const __niceevalExport1 = __niceevalCanonical["rebuildConfigModule"];
|
|
7
|
+
export { __niceevalExport1 as rebuildConfigModule };
|
|
6
8
|
//# sourceMappingURL=load-config.js.map
|
|
@@ -191,13 +191,27 @@ function parseCodexTranscript(raw) {
|
|
|
191
191
|
if (!startedCallIds.has(callId)) {
|
|
192
192
|
emitCall(callId, "command_execution", { command }, "shell", (0, command_projection_ts_1.opaqueCommandProjection)("unsupported-protocol"));
|
|
193
193
|
}
|
|
194
|
-
|
|
194
|
+
// `codex exec --json` uses snake_case while app-server v2 keeps the
|
|
195
|
+
// protocol's camelCase fields after normalizeItem() rewrites only the
|
|
196
|
+
// tagged-union type. Both are public Codex transports and must close
|
|
197
|
+
// to the same provider-neutral result.
|
|
198
|
+
const exit = get(item, "exit_code") ?? get(item, "exitCode");
|
|
199
|
+
const output = get(item, "aggregated_output") ??
|
|
200
|
+
get(item, "aggregatedOutput") ??
|
|
201
|
+
get(item, "output");
|
|
195
202
|
const statusStr = get(item, "status");
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
203
|
+
const status = statusStr === "declined" || statusStr === "rejected"
|
|
204
|
+
? "rejected"
|
|
205
|
+
: exit === 0 || (exit == null && statusStr !== "failed" && statusStr !== "error")
|
|
206
|
+
? "completed"
|
|
207
|
+
: "failed";
|
|
208
|
+
const result = output === undefined && exit === undefined
|
|
209
|
+
? undefined
|
|
210
|
+
: {
|
|
211
|
+
output: (output ?? null),
|
|
212
|
+
exit_code: (exit ?? null),
|
|
213
|
+
};
|
|
214
|
+
emitResult(callId, result, status);
|
|
201
215
|
return;
|
|
202
216
|
}
|
|
203
217
|
case "mcp_tool_call": {
|
|
@@ -284,11 +298,19 @@ function parseCodexTranscript(raw) {
|
|
|
284
298
|
case "thread.started":
|
|
285
299
|
case "thread.completed":
|
|
286
300
|
case "turn.started":
|
|
287
|
-
case "turn.completed":
|
|
288
301
|
case "response.created":
|
|
289
302
|
case "response.completed":
|
|
290
303
|
case "response.cancelled":
|
|
291
304
|
break;
|
|
305
|
+
case "turn.completed": {
|
|
306
|
+
const turn = get(data, "turn");
|
|
307
|
+
if (get(turn, "status") !== "failed")
|
|
308
|
+
break;
|
|
309
|
+
const err = get(turn, "error");
|
|
310
|
+
const msg = get(err, "message") ?? get(data, "message") ?? "turn failed";
|
|
311
|
+
events.push({ type: "error", message: String(msg) });
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
292
314
|
case "turn.failed":
|
|
293
315
|
case "response.failed": {
|
|
294
316
|
const err = get(data, "error");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["codex.ts"],"names":[],"mappings":";;;AA8HA,oDAsRC;AAyCD,gCAEC;AAxbD,oDAA8F;AAC9F,8DAAgE;AAChE,oEAAyF;AACzF,4DAA4D;AAC5D,qEAAqE;AACxD,QAAA,kBAAkB,GAAwC;IACnE,GAAG,oCAAoB;IACvB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,YAAY;CAC5B,CAAC;AACF,SAAS,iBAAiB,CAAC,IAAY;IACnC,OAAO,IAAA,iCAAe,EAAC,IAAI,EAAE,0BAAkB,CAAC,CAAC;AACrD,CAAC;AACD,0DAA0D;AAC1D,yCAAyC;AACzC,SAAS,GAAG,CAAC,GAAY,EAAE,GAAW;IAClC,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAE,GAA0C,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzG,CAAC;AACD,uCAAuC;AACvC,SAAS,UAAU,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,IAAA,kCAAkB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAA,kCAAkB,EAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AACD,yCAAyC;AACzC,SAAS,WAAW,CAAC,OAAgB;IACjC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,OAAO,CAAC;IACnB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,SAAS;YACb,CAAC;YACD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAChF,IAAI,OAAO,CAAC,KAAK,QAAQ;gBACrB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AACD,6DAA6D;AAC7D,SAAS,gBAAgB,CAAC,IAAa;IACnC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM;QACpC,OAAO,MAAM,CAAC;IAClB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACtB,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AACD,+DAA+D;AAC/D,qFAAqF;AACrF,SAAS,SAAS,CAAC,CAAU;IAMzB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAC3B,OAAO,IAAI,CAAC;IAChB,MAAM,CAAC,GAAG,CAAuC,CAAC;IAClD,MAAM,GAAG,GAAG,CAAC,GAAG,IAAc,EAAU,EAAE;QACtC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,GAAG,CAAC,qBAAqB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAChH,uEAAuE;IACvE,gDAAgD;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAC7F,4EAA4E;IAC5E,uDAAuD;IACvD,MAAM,SAAS,GAAG,GAAG,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,CAAC;IACjH,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;QACjE,OAAO,IAAI,CAAC;IAChB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AACD,mDAAmD;AACnD,SAAS,SAAS,CAAC,IAAa;IAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;QACtB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QACnC,IAAI,CAAC,CAAC;AACd,CAAC;AACD,oEAAoE;AACpE;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,SAAkB,EAAE,IAAa;IACzD,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACrF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,KAAK,QAAQ;YACrB,SAAS;QACb,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACtD,OAAO,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,0DAA0D;AAC1D,SAAgB,oBAAoB,CAAC,GAAuB;IACxD,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC;IACD,wDAAwD;IACxD,0DAA0D;IAC1D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,WAAW,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC;IACvE,MAAM,YAAY,GAAG,CAAC,IAAa,EAAQ,EAAE;QACzC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC;YACF,OAAO;QACX,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC;QACvB,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC;QACzB,eAAe,IAAI,CAAC,CAAC,SAAS,CAAC;QAC/B,eAAe,IAAI,CAAC,CAAC,SAAS,CAAC;QAC/B,QAAQ,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,KAAgB,EAAE,IAAc,EAAE,OAA0B,EAAQ,EAAE;QAClH,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7H,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,MAA6B,EAAE,MAA2C,EAAQ,EAAE;QACpH,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnG,CAAC,CAAC;IACF,4CAA4C;IAC5C,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,WAAoB,EAAQ,EAAE;QAC7D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YACjC,OAAO;QACX,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,WAAW,CAAC;YACjB,KAAK,UAAU,CAAC,CAAC,CAAC;gBACd,8CAA8C;gBAC9C,IAAI,CAAC,WAAW;oBACZ,OAAO;gBACX,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,IAAI;oBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,OAAO;YACX,CAAC;YACD,KAAK,eAAe,CAAC;YACrB,KAAK,mBAAmB,CAAC;YACzB,KAAK,SAAS,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,WAAW;oBACZ,OAAO;gBACX,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC5F,IAAI,IAAI;oBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9D,OAAO;YACX,CAAC;YACD,KAAK,mBAAmB,CAAC;YACzB,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC5E,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAe,EAAE,OAAO,EAAE,IAAA,+CAAuB,EAAC,sBAAsB,CAAC,CAAC,CAAC;oBAC1H,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAe,EAAE,OAAO,EAAE,IAAA,+CAAuB,EAAC,sBAAsB,CAAC,CAAC,CAAC;gBAC9H,CAAC;gBACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACpC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,CAAC,CAAC;gBAChG,UAAU,CAAC,MAAM,EAAE;oBACf,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAc;oBACpF,SAAS,EAAE,CAAC,IAAI,IAAI,IAAI,CAAc;iBACzC,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACrC,OAAO;YACX,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACnB,MAAM,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACnC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC;gBACpE,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnG,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvE,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAA,4CAAoB,GAAE,CAAC,CAAC;oBAClG,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAA,4CAAoB,GAAE,CAAC,CAAC;gBACtG,CAAC;gBACD,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACtC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS,KAAK,QAAQ,CAAC;gBAC9D,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAc,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACjG,OAAO;YACX,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAChB,MAAM,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACxD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAe,EAAE,YAAY,EAAE,IAAA,4CAAoB,GAAE,CAAC,CAAC;oBAC7F,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAe,EAAE,YAAY,EAAE,IAAA,4CAAoB,GAAE,CAAC,CAAC;gBACjG,CAAC;gBACD,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAc,EAAE,WAAW,CAAC,CAAC;gBACpG,OAAO;YACX,CAAC;YACD,KAAK,aAAa,CAAC;YACnB,KAAK,OAAO,CAAC;YACb,KAAK,YAAY,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,WAAW;oBACZ,OAAO;gBACX,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC9E,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;oBACnB,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAChD,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACxE,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC5E,MAAM,IAAI,GAAa,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;oBACxF,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;oBAC3C,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAe,EAAE,IAAI,EAAE,IAAA,4CAAoB,GAAE,CAAC,CAAC;oBAC3F,UAAU,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAe,EAAE,WAAW,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACX,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrD,OAAO;YACX,CAAC;YACD;gBACI,OAAO,CAAC,6BAA6B;QAC7C,CAAC;IACL,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YACR,SAAS;QACb,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC;YACH,YAAY,GAAG,KAAK,CAAC;YACrB,SAAS;QACb,CAAC;QACD,IAAI,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAC;YAC5F,IAAI,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACpC,WAAW,IAAI,CAAC,CAAC;gBACjB,SAAS;YACb,CAAC;YACD,QAAQ,SAAS,EAAE,CAAC;gBAChB,yBAAyB;gBACzB,KAAK,gBAAgB,CAAC;gBACtB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,cAAc,CAAC;gBACpB,KAAK,gBAAgB,CAAC;gBACtB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,oBAAoB,CAAC;gBAC1B,KAAK,oBAAoB;oBACrB,MAAM;gBACV,KAAK,aAAa,CAAC;gBACnB,KAAK,iBAAiB,CAAC,CAAC,CAAC;oBACrB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,aAAa,CAAC;oBACzE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrD,MAAM;gBACV,CAAC;gBACD,mBAAmB;gBACnB,KAAK,cAAc;oBACf,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;oBACrC,MAAM;gBACV,KAAK,cAAc;oBACf,oBAAoB;oBACpB,MAAM;gBACV,KAAK,gBAAgB;oBACjB,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;oBACpC,MAAM;gBACV,0CAA0C;gBAC1C,KAAK,SAAS,CAAC;gBACf,KAAK,MAAM,CAAC,CAAC,CAAC;oBACV,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAChG,MAAM,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;oBACvD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;oBAC5F,IAAI,IAAI;wBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjD,MAAM;gBACV,CAAC;gBACD,KAAK,WAAW,CAAC;gBACjB,KAAK,UAAU,CAAC;gBAChB,KAAK,SAAS,CAAC,CAAC,CAAC;oBACb,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,IAAI;wBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBACV,CAAC;gBACD,KAAK,eAAe,CAAC;gBACrB,KAAK,WAAW,CAAC;gBACjB,KAAK,UAAU,CAAC;gBAChB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,QAAQ,CAAC;gBACd,KAAK,kBAAkB,CAAC,CAAC,CAAC;oBACtB,MAAM,OAAO,GAAG,SAAS,KAAK,kBAAkB,CAAC;oBACjD,MAAM,OAAO,GAAG,OAAO;wBACnB,CAAC,CAAC,OAAO;wBACT,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC;oBACzH,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC7B,MAAM,OAAO,GAAG,OAAO;wBACnB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;wBAC7C,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACvH,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;oBAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBACtF,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACzE,IAAI,QAAQ,IAAI,IAAI;wBAChB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAChC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAA,+CAAuB,EAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAA,4CAAoB,GAAE,CAAC,CAAC;oBAC3I,MAAM;gBACV,CAAC;gBACD,KAAK,sBAAsB,CAAC;gBAC5B,KAAK,aAAa,CAAC;gBACnB,KAAK,eAAe,CAAC;gBACrB,KAAK,eAAe,CAAC;gBACrB,KAAK,yBAAyB,CAAC,CAAC,CAAC;oBAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACtF,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;oBACrG,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBAClF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBACzD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;oBACnC,MAAM;gBACV,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACX,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC;oBAC3F,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrD,MAAM;gBACV,CAAC;gBACD,+DAA+D;gBAC/D,kEAAkE;gBAClE,KAAK,mBAAmB,CAAC;gBACzB,KAAK,kBAAkB;oBACnB,MAAM;gBACV,OAAO,CAAC,CAAC,CAAC;oBACN,WAAW;oBACX,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAC/B,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;wBACpE,IAAI,IAAI;4BACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrD,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,MAAM,CAAC;YACH,2BAA2B;YAC3B,YAAY,GAAG,KAAK,CAAC;QACzB,CAAC;IACL,CAAC;IACD,8DAA8D;IAC9D,qEAAqE;IACrE,MAAM,KAAK,GAAU,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,eAAe,GAAG,CAAC;QACnB,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;IAC5C,IAAI,eAAe,GAAG,CAAC;QACnB,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;IAC5C,IAAI,QAAQ,GAAG,CAAC;QACZ,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC;AACD;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAe,EAAE,IAAa;IAInD,yBAAyB;IACzB,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C,IAAI,eAAe,KAAK,KAAK;QACzB,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACvE,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACvE,mCAAmC;IACnC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1E,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAClD,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACvD,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAc,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACzE,CAAC;IACD,yCAAyC;IACzC,IAAI,MAAM,GAAY,MAAM,CAAC;IAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,CAAC;YACH,MAAM,GAAG,MAAM,CAAC;QACpB,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9G,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAc,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAc,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC1E,CAAC;AACD,6BAA6B;AAC7B,SAAgB,UAAU,CAAC,GAAuB;IAC9C,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAC5C,CAAC","sourcesContent":["// OpenAI Codex CLI transcript 解析器(关键路径)。\n// 两类输入都吃:\n// 1. `codex exec --json` 打到 stdout 的事件 JSONL(thread.* / turn.* / item.* / response.*);\n// 2. 磁盘上 session rollout JSONL(ResponseItem:message / function_call / reasoning ...)。\n// 唯一硬活:把这堆五花八门的原始事件归一成 niceeval 的 StreamEvent[]。\nimport type { CommandProjection, StreamEvent, Usage, ToolName, JsonValue } from \"../../types.ts\";\nimport type { ParsedTranscript } from \"./index.ts\";\nimport { GENERIC_VERB_ALIASES, normalizeToolName as normalizeShared } from \"../tool-names.ts\";\nimport { normalizeJsonValue } from \"../../shared/json-value.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../command-projection.ts\";\n// ───────────────────────── 工具名归一 ─────────────────────────\n/** Codex 特有别名 + 裸动词(codex transcript 的工具名由 CLI 控制,裸动词安全);通用别名走基表。 */\nexport const CODEX_TOOL_ALIASES: globalThis.Record<string, ToolName> = {\n ...GENERIC_VERB_ALIASES,\n file_change: \"file_edit\",\n update_plan: \"agent_task\",\n};\nfunction normalizeToolName(name: string): ToolName {\n return normalizeShared(name, CODEX_TOOL_ALIASES);\n}\n// ───────────────────────── 小工具 ─────────────────────────\n/** 宽松取一个对象字段(原始 JSON 尚未验证,这里只做存在性收口)。 */\nfunction get(obj: unknown, key: string): unknown {\n return obj && typeof obj === \"object\" ? (obj as globalThis.Record<string, unknown>)[key] : undefined;\n}\n/** 字符串则尝试 JSON.parse,失败原样返回;对象原样返回。 */\nfunction coerceArgs(value: unknown): JsonValue {\n if (typeof value === \"string\") {\n try {\n const parsed: unknown = JSON.parse(value);\n return normalizeJsonValue(parsed, value);\n }\n catch {\n return value;\n }\n }\n return normalizeJsonValue(value, {});\n}\n/** 从 content(string | block[])里抠出纯文本。 */\nfunction extractText(content: unknown): string {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === \"string\") {\n parts.push(block);\n continue;\n }\n const t = get(block, \"text\") ?? get(block, \"content\") ?? get(block, \"thinking\");\n if (typeof t === \"string\")\n parts.push(t);\n }\n return parts.join(\"\\n\");\n }\n return \"\";\n}\n/** 从 reasoning item 抠文本(text / content / summary[].text)。 */\nfunction extractReasoning(item: unknown): string {\n const direct = get(item, \"text\") ?? get(item, \"content\");\n if (typeof direct === \"string\" && direct)\n return direct;\n const summary = get(item, \"summary\");\n if (Array.isArray(summary))\n return extractText(summary);\n return extractText(direct);\n}\n// ───────────────────────── usage 聚合 ─────────────────────────\n/** 从一个 usage-like 对象读出增量(支持 input/output_tokens 与 prompt/completion_tokens 两套命名)。 */\nfunction readUsage(u: unknown): {\n input: number;\n output: number;\n cacheRead: number;\n reasoning: number;\n} | null {\n if (!u || typeof u !== \"object\")\n return null;\n const o = u as globalThis.Record<string, unknown>;\n const num = (...keys: string[]): number => {\n for (const k of keys) {\n const v = o[k];\n if (typeof v === \"number\" && Number.isFinite(v))\n return v;\n }\n return 0;\n };\n const rawInput = num(\"input_tokens\", \"prompt_tokens\", \"inputTokens\", \"promptTokens\");\n const cacheRead = num(\"cached_input_tokens\", \"cache_read_input_tokens\", \"cache_read_tokens\", \"cacheReadTokens\");\n // codex-rs TokenUsage 的 cached_input_tokens 是 input_tokens 的子集,落互斥桶前扣掉\n // (docs/feature/adapters/sdk/codex-cli/cost.md)\n const input = Math.max(0, rawInput - cacheRead);\n const output = num(\"output_tokens\", \"completion_tokens\", \"outputTokens\", \"completionTokens\");\n // codex-rs TokenUsage 结构体与 Responses API usage.output_tokens_details 都拆出这项:\n // 推理模型(o-series/gpt-5 系列)的思考 token,已计入 output 但值得单列展示。\n const reasoning = num(\"reasoning_output_tokens\", \"reasoning_tokens\", \"reasoningOutputTokens\", \"reasoningTokens\");\n if (input === 0 && output === 0 && cacheRead === 0 && reasoning === 0)\n return null;\n return { input, output, cacheRead, reasoning };\n}\n/** 防御式地从一行事件里找到第一处 usage(优先级顺序,每行至多取一次,避免重复计数)。 */\nfunction pickUsage(data: unknown): unknown {\n return (get(data, \"usage\") ??\n get(get(data, \"payload\"), \"usage\") ??\n get(get(data, \"item\"), \"usage\") ??\n get(get(data, \"turn\"), \"usage\") ??\n get(get(data, \"response\"), \"usage\") ??\n null);\n}\n// ───────────────────────── compaction 标记 ─────────────────────────\n/**\n * 仅在出现可信压缩标记时才认(保守):type / item.type / subtype 含 compact 或 context_truncat。\n * 不再匹配 \"summariz\"——任何名字带 summarize 的工具 / item(如 summarization_tool)都会被\n * 误判成压缩边界并整条吞掉,污染计数且丢事件。命中即吞整条事件,匹配面必须窄。\n */\nfunction isCompactionMarker(eventType: unknown, data: unknown): boolean {\n const candidates = [eventType, get(get(data, \"item\"), \"type\"), get(data, \"subtype\")];\n for (const c of candidates) {\n if (typeof c !== \"string\")\n continue;\n const s = c.toLowerCase();\n if (s.includes(\"compact\") || s.includes(\"context_truncat\"))\n return true;\n }\n return false;\n}\n// ───────────────────────── 主解析 ─────────────────────────\nexport function parseCodexTranscript(raw: string | undefined): ParsedTranscript {\n const events: StreamEvent[] = [];\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens = 0;\n let reasoningTokens = 0;\n let requests = 0;\n let compactions = 0;\n let parseSuccess = true;\n if (!raw || !raw.trim()) {\n return { events, usage: {}, compactions: 0, parseSuccess: true };\n }\n // 配对状态:已 started 的 callId(命令类工具的 started/completed 收口),\n // 以及无显式 call_id 时的 FIFO 兜底队列(老式 function_call_output 配对)。\n const startedCallIds = new Set<string>();\n const pendingCallIds: string[] = [];\n let synth = 0;\n const nextSynthId = (prefix: string): string => `${prefix}_${++synth}`;\n const addUsageFrom = (data: unknown): void => {\n const u = readUsage(pickUsage(data));\n if (!u)\n return;\n inputTokens += u.input;\n outputTokens += u.output;\n cacheReadTokens += u.cacheRead;\n reasoningTokens += u.reasoning;\n requests += 1;\n };\n const emitCall = (callId: string, name: string, input: JsonValue, tool: ToolName, command: CommandProjection): void => {\n startedCallIds.add(callId);\n events.push({ type: \"operation.started\", operationId: callId, operation: { kind: \"tool\", name, input, tool, command } });\n };\n const emitResult = (callId: string, output: JsonValue | undefined, status: \"completed\" | \"failed\" | \"rejected\"): void => {\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output, status });\n };\n // 处理 item.started / item.completed 里的 item。\n const handleItem = (item: unknown, isCompleted: boolean): void => {\n if (!item || typeof item !== \"object\")\n return;\n const itemType = get(item, \"type\");\n const idRaw = get(item, \"id\");\n const baseId = typeof idRaw === \"string\" || typeof idRaw === \"number\" ? String(idRaw) : \"\";\n switch (itemType) {\n case \"reasoning\":\n case \"thinking\": {\n // 思考只在 completed 落一次,避免 started/completed 重复。\n if (!isCompleted)\n return;\n const text = extractReasoning(item);\n if (text)\n events.push({ type: \"thinking\", text });\n return;\n }\n case \"agent_message\":\n case \"assistant_message\":\n case \"message\": {\n if (!isCompleted)\n return;\n const text = extractText(get(item, \"text\") ?? get(item, \"content\") ?? get(item, \"message\"));\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n return;\n }\n case \"command_execution\":\n case \"local_shell_call\": {\n const callId = baseId || nextSynthId(\"cmd\");\n const command = get(item, \"command\") ?? get(get(item, \"action\"), \"command\");\n if (!isCompleted) {\n emitCall(callId, \"command_execution\", { command } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, \"command_execution\", { command } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n }\n const exit = get(item, \"exit_code\");\n const statusStr = get(item, \"status\");\n const success = exit === 0 || (exit == null && statusStr !== \"failed\" && statusStr !== \"error\");\n emitResult(callId, {\n output: (get(item, \"aggregated_output\") ?? get(item, \"output\") ?? null) as JsonValue,\n exit_code: (exit ?? null) as JsonValue,\n }, success ? \"completed\" : \"failed\");\n return;\n }\n case \"mcp_tool_call\": {\n const callId = baseId || nextSynthId(\"mcp\");\n const server = get(item, \"server\");\n const toolRaw = get(item, \"tool\") ?? get(item, \"name\") ?? \"unknown\";\n const originalName = typeof server === \"string\" ? `${server}.${String(toolRaw)}` : String(toolRaw);\n const input = coerceArgs(get(item, \"arguments\") ?? get(item, \"input\"));\n if (!isCompleted) {\n emitCall(callId, originalName, input, normalizeToolName(String(toolRaw)), notCommandProjection());\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, originalName, input, normalizeToolName(String(toolRaw)), notCommandProjection());\n }\n const statusStr = get(item, \"status\");\n const success = !get(item, \"error\") && statusStr !== \"failed\";\n emitResult(callId, (get(item, \"result\") ?? null) as JsonValue, success ? \"completed\" : \"failed\");\n return;\n }\n case \"web_search\": {\n const callId = baseId || nextSynthId(\"web\");\n const query = get(item, \"query\") ?? get(item, \"search\");\n if (!isCompleted) {\n emitCall(callId, \"web_search\", { query } as JsonValue, \"web_search\", notCommandProjection());\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, \"web_search\", { query } as JsonValue, \"web_search\", notCommandProjection());\n }\n emitResult(callId, (get(item, \"results\") ?? get(item, \"result\") ?? null) as JsonValue, \"completed\");\n return;\n }\n case \"file_change\":\n case \"patch\":\n case \"file_patch\": {\n if (!isCompleted)\n return;\n const changes = get(item, \"changes\");\n const list = Array.isArray(changes) ? changes : [{ path: get(item, \"path\") }];\n list.forEach((ch, i) => {\n const path = get(ch, \"path\") ?? get(ch, \"file\");\n const kindRaw = get(ch, \"kind\") ?? get(ch, \"type\") ?? get(item, \"kind\");\n const kind = typeof kindRaw === \"string\" ? kindRaw.toLowerCase() : \"update\";\n const tool: ToolName = kind === \"add\" || kind === \"delete\" ? \"file_write\" : \"file_edit\";\n const callId = `${baseId || \"patch\"}#${i}`;\n emitCall(callId, \"file_change\", { path, kind } as JsonValue, tool, notCommandProjection());\n emitResult(callId, { path, kind } as JsonValue, \"completed\");\n });\n return;\n }\n case \"error\": {\n const msg = get(item, \"message\") ?? get(item, \"text\") ?? \"error\";\n events.push({ type: \"error\", message: String(msg) });\n return;\n }\n default:\n return; // todo_list / 其它 item 类型暂不映射\n }\n };\n const lines = raw.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed)\n continue;\n let data: unknown;\n try {\n data = JSON.parse(trimmed);\n }\n catch {\n parseSuccess = false;\n continue;\n }\n try {\n addUsageFrom(data);\n const eventType = (get(data, \"type\") ?? get(data, \"event\") ?? get(data, \"kind\")) as unknown;\n if (isCompactionMarker(eventType, data)) {\n events.push({ type: \"compaction\" });\n compactions += 1;\n continue;\n }\n switch (eventType) {\n // ── 控制流:仅在失败时落 error ──\n case \"thread.started\":\n case \"thread.completed\":\n case \"turn.started\":\n case \"turn.completed\":\n case \"response.created\":\n case \"response.completed\":\n case \"response.cancelled\":\n break;\n case \"turn.failed\":\n case \"response.failed\": {\n const err = get(data, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? \"turn failed\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n // ── 主路径:item.* ──\n case \"item.started\":\n handleItem(get(data, \"item\"), false);\n break;\n case \"item.updated\":\n // 中间态忽略,等 completed\n break;\n case \"item.completed\":\n handleItem(get(data, \"item\"), true);\n break;\n // ── 老式 / session rollout ResponseItem ──\n case \"message\":\n case \"chat\": {\n const roleRaw = get(data, \"role\") ?? (get(data, \"from\") === \"assistant\" ? \"assistant\" : \"user\");\n const role = roleRaw === \"user\" ? \"user\" : \"assistant\";\n const text = extractText(get(data, \"content\") ?? get(data, \"text\") ?? get(data, \"message\"));\n if (text)\n events.push({ type: \"message\", role, text });\n break;\n }\n case \"reasoning\":\n case \"thinking\":\n case \"thought\": {\n const text = extractReasoning(data);\n if (text)\n events.push({ type: \"thinking\", text });\n break;\n }\n case \"function_call\":\n case \"tool_call\":\n case \"tool_use\":\n case \"custom_tool_call\":\n case \"action\":\n case \"local_shell_call\": {\n const isShell = eventType === \"local_shell_call\";\n const nameRaw = isShell\n ? \"shell\"\n : (get(data, \"name\") ?? get(get(data, \"function\"), \"name\") ?? get(data, \"tool\") ?? get(data, \"action\") ?? \"unknown\");\n const name = String(nameRaw);\n const rawArgs = isShell\n ? (get(data, \"action\") ?? get(data, \"input\"))\n : (get(get(data, \"function\"), \"arguments\") ?? get(data, \"arguments\") ?? get(data, \"input\") ?? get(data, \"params\"));\n const input = coerceArgs(rawArgs);\n const explicit = get(data, \"call_id\") ?? get(data, \"id\") ?? get(data, \"tool_call_id\");\n const callId = explicit != null ? String(explicit) : nextSynthId(\"call\");\n if (explicit == null)\n pendingCallIds.push(callId);\n emitCall(callId, name, input, normalizeToolName(name), isShell ? opaqueCommandProjection(\"unsupported-protocol\") : notCommandProjection());\n break;\n }\n case \"function_call_output\":\n case \"tool_result\":\n case \"tool_response\":\n case \"action_result\":\n case \"local_shell_call_output\": {\n const explicit = get(data, \"call_id\") ?? get(data, \"tool_call_id\") ?? get(data, \"id\");\n const callId = explicit != null ? String(explicit) : pendingCallIds.shift() ?? nextSynthId(\"result\");\n const rawOut = get(data, \"output\") ?? get(data, \"result\") ?? get(data, \"content\");\n const { output, status } = interpretOutput(rawOut, data);\n emitResult(callId, output, status);\n break;\n }\n case \"error\": {\n const err = get(data, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? get(data, \"content\") ?? \"error\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n // output_text.delta / output_text.done 是同一条 assistant 文本的流式分片,\n // 最终文本会经 agent_message item / message ResponseItem 落地,这里直接丢弃避免重复。\n case \"output_text.delta\":\n case \"output_text.done\":\n break;\n default: {\n // 兜底:按结构猜。\n const role = get(data, \"role\");\n if (role === \"assistant\" || role === \"user\") {\n const text = extractText(get(data, \"content\") ?? get(data, \"text\"));\n if (text)\n events.push({ type: \"message\", role, text });\n }\n }\n }\n }\n catch {\n // 单行处理异常不应拖垮整条 transcript。\n parseSuccess = false;\n }\n }\n // requests > 0 意味着至少一行真的带回了 usage;整份 transcript 没有任何 usage 行时\n // input/output 也不该垫成 0(见 docs/feature/record/architecture.md#usage)。\n const usage: Usage = requests > 0 ? { inputTokens, outputTokens } : {};\n if (cacheReadTokens > 0)\n usage.cacheReadTokens = cacheReadTokens;\n if (reasoningTokens > 0)\n usage.reasoningTokens = reasoningTokens;\n if (requests > 0)\n usage.requests = requests;\n return { events, usage, compactions, parseSuccess };\n}\n/**\n * 解读一条工具结果输出:显式 success/error → status 字符串 → exit_code,层层找成败证据。\n * 都没有才默认 completed —— 这是乐观兜底:codex 不带任何成败字段的结果会被记成成功,\n * noFailedActions() 这类负断言可能因此假通过。所以证据检查要尽量全,别轻易走到兜底。\n */\nfunction interpretOutput(rawOut: unknown, data: unknown): {\n output: JsonValue | undefined;\n status: \"completed\" | \"failed\" | \"rejected\";\n} {\n // 显式 success / error 优先。\n const explicitSuccess = get(data, \"success\");\n if (explicitSuccess === false)\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n if (get(data, \"error\"))\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n // 事件自带 status 字符串(item/data 两层都看)。\n const statusStr = get(data, \"status\") ?? get(get(data, \"item\"), \"status\");\n if (statusStr === \"failed\" || statusStr === \"error\") {\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n }\n if (statusStr === \"rejected\" || statusStr === \"declined\") {\n return { output: (rawOut ?? null) as JsonValue, status: \"rejected\" };\n }\n // 字符串输出尝试解析 exit_code(codex shell 结果常见)。\n let parsed: unknown = rawOut;\n if (typeof rawOut === \"string\") {\n try {\n parsed = JSON.parse(rawOut);\n }\n catch {\n parsed = rawOut;\n }\n }\n const exit = get(parsed, \"exit_code\") ?? get(parsed, \"exitCode\") ?? get(get(parsed, \"metadata\"), \"exit_code\");\n if (typeof exit === \"number\") {\n return { output: (parsed ?? null) as JsonValue, status: exit === 0 ? \"completed\" : \"failed\" };\n }\n return { output: (parsed ?? null) as JsonValue, status: \"completed\" };\n}\n/** 便捷形态:只要 StreamEvent[]。 */\nexport function parseCodex(raw: string | undefined): StreamEvent[] {\n return parseCodexTranscript(raw).events;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["codex.ts"],"names":[],"mappings":"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","sourcesContent":["// OpenAI Codex CLI transcript 解析器(关键路径)。\n// 两类输入都吃:\n// 1. `codex exec --json` 打到 stdout 的事件 JSONL(thread.* / turn.* / item.* / response.*);\n// 2. 磁盘上 session rollout JSONL(ResponseItem:message / function_call / reasoning ...)。\n// 唯一硬活:把这堆五花八门的原始事件归一成 niceeval 的 StreamEvent[]。\nimport type { CommandProjection, StreamEvent, Usage, ToolName, JsonValue } from \"../../types.ts\";\nimport type { ParsedTranscript } from \"./index.ts\";\nimport { GENERIC_VERB_ALIASES, normalizeToolName as normalizeShared } from \"../tool-names.ts\";\nimport { normalizeJsonValue } from \"../../shared/json-value.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../command-projection.ts\";\n// ───────────────────────── 工具名归一 ─────────────────────────\n/** Codex 特有别名 + 裸动词(codex transcript 的工具名由 CLI 控制,裸动词安全);通用别名走基表。 */\nexport const CODEX_TOOL_ALIASES: globalThis.Record<string, ToolName> = {\n ...GENERIC_VERB_ALIASES,\n file_change: \"file_edit\",\n update_plan: \"agent_task\",\n};\nfunction normalizeToolName(name: string): ToolName {\n return normalizeShared(name, CODEX_TOOL_ALIASES);\n}\n// ───────────────────────── 小工具 ─────────────────────────\n/** 宽松取一个对象字段(原始 JSON 尚未验证,这里只做存在性收口)。 */\nfunction get(obj: unknown, key: string): unknown {\n return obj && typeof obj === \"object\" ? (obj as globalThis.Record<string, unknown>)[key] : undefined;\n}\n/** 字符串则尝试 JSON.parse,失败原样返回;对象原样返回。 */\nfunction coerceArgs(value: unknown): JsonValue {\n if (typeof value === \"string\") {\n try {\n const parsed: unknown = JSON.parse(value);\n return normalizeJsonValue(parsed, value);\n }\n catch {\n return value;\n }\n }\n return normalizeJsonValue(value, {});\n}\n/** 从 content(string | block[])里抠出纯文本。 */\nfunction extractText(content: unknown): string {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === \"string\") {\n parts.push(block);\n continue;\n }\n const t = get(block, \"text\") ?? get(block, \"content\") ?? get(block, \"thinking\");\n if (typeof t === \"string\")\n parts.push(t);\n }\n return parts.join(\"\\n\");\n }\n return \"\";\n}\n/** 从 reasoning item 抠文本(text / content / summary[].text)。 */\nfunction extractReasoning(item: unknown): string {\n const direct = get(item, \"text\") ?? get(item, \"content\");\n if (typeof direct === \"string\" && direct)\n return direct;\n const summary = get(item, \"summary\");\n if (Array.isArray(summary))\n return extractText(summary);\n return extractText(direct);\n}\n// ───────────────────────── usage 聚合 ─────────────────────────\n/** 从一个 usage-like 对象读出增量(支持 input/output_tokens 与 prompt/completion_tokens 两套命名)。 */\nfunction readUsage(u: unknown): {\n input: number;\n output: number;\n cacheRead: number;\n reasoning: number;\n} | null {\n if (!u || typeof u !== \"object\")\n return null;\n const o = u as globalThis.Record<string, unknown>;\n const num = (...keys: string[]): number => {\n for (const k of keys) {\n const v = o[k];\n if (typeof v === \"number\" && Number.isFinite(v))\n return v;\n }\n return 0;\n };\n const rawInput = num(\"input_tokens\", \"prompt_tokens\", \"inputTokens\", \"promptTokens\");\n const cacheRead = num(\"cached_input_tokens\", \"cache_read_input_tokens\", \"cache_read_tokens\", \"cacheReadTokens\");\n // codex-rs TokenUsage 的 cached_input_tokens 是 input_tokens 的子集,落互斥桶前扣掉\n // (docs/feature/adapters/sdk/codex-cli/cost.md)\n const input = Math.max(0, rawInput - cacheRead);\n const output = num(\"output_tokens\", \"completion_tokens\", \"outputTokens\", \"completionTokens\");\n // codex-rs TokenUsage 结构体与 Responses API usage.output_tokens_details 都拆出这项:\n // 推理模型(o-series/gpt-5 系列)的思考 token,已计入 output 但值得单列展示。\n const reasoning = num(\"reasoning_output_tokens\", \"reasoning_tokens\", \"reasoningOutputTokens\", \"reasoningTokens\");\n if (input === 0 && output === 0 && cacheRead === 0 && reasoning === 0)\n return null;\n return { input, output, cacheRead, reasoning };\n}\n/** 防御式地从一行事件里找到第一处 usage(优先级顺序,每行至多取一次,避免重复计数)。 */\nfunction pickUsage(data: unknown): unknown {\n return (get(data, \"usage\") ??\n get(get(data, \"payload\"), \"usage\") ??\n get(get(data, \"item\"), \"usage\") ??\n get(get(data, \"turn\"), \"usage\") ??\n get(get(data, \"response\"), \"usage\") ??\n null);\n}\n// ───────────────────────── compaction 标记 ─────────────────────────\n/**\n * 仅在出现可信压缩标记时才认(保守):type / item.type / subtype 含 compact 或 context_truncat。\n * 不再匹配 \"summariz\"——任何名字带 summarize 的工具 / item(如 summarization_tool)都会被\n * 误判成压缩边界并整条吞掉,污染计数且丢事件。命中即吞整条事件,匹配面必须窄。\n */\nfunction isCompactionMarker(eventType: unknown, data: unknown): boolean {\n const candidates = [eventType, get(get(data, \"item\"), \"type\"), get(data, \"subtype\")];\n for (const c of candidates) {\n if (typeof c !== \"string\")\n continue;\n const s = c.toLowerCase();\n if (s.includes(\"compact\") || s.includes(\"context_truncat\"))\n return true;\n }\n return false;\n}\n// ───────────────────────── 主解析 ─────────────────────────\nexport function parseCodexTranscript(raw: string | undefined): ParsedTranscript {\n const events: StreamEvent[] = [];\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens = 0;\n let reasoningTokens = 0;\n let requests = 0;\n let compactions = 0;\n let parseSuccess = true;\n if (!raw || !raw.trim()) {\n return { events, usage: {}, compactions: 0, parseSuccess: true };\n }\n // 配对状态:已 started 的 callId(命令类工具的 started/completed 收口),\n // 以及无显式 call_id 时的 FIFO 兜底队列(老式 function_call_output 配对)。\n const startedCallIds = new Set<string>();\n const pendingCallIds: string[] = [];\n let synth = 0;\n const nextSynthId = (prefix: string): string => `${prefix}_${++synth}`;\n const addUsageFrom = (data: unknown): void => {\n const u = readUsage(pickUsage(data));\n if (!u)\n return;\n inputTokens += u.input;\n outputTokens += u.output;\n cacheReadTokens += u.cacheRead;\n reasoningTokens += u.reasoning;\n requests += 1;\n };\n const emitCall = (callId: string, name: string, input: JsonValue, tool: ToolName, command: CommandProjection): void => {\n startedCallIds.add(callId);\n events.push({ type: \"operation.started\", operationId: callId, operation: { kind: \"tool\", name, input, tool, command } });\n };\n const emitResult = (callId: string, output: JsonValue | undefined, status: \"completed\" | \"failed\" | \"rejected\"): void => {\n events.push({ type: \"operation.finished\", operationId: callId, kind: \"tool\", output, status });\n };\n // 处理 item.started / item.completed 里的 item。\n const handleItem = (item: unknown, isCompleted: boolean): void => {\n if (!item || typeof item !== \"object\")\n return;\n const itemType = get(item, \"type\");\n const idRaw = get(item, \"id\");\n const baseId = typeof idRaw === \"string\" || typeof idRaw === \"number\" ? String(idRaw) : \"\";\n switch (itemType) {\n case \"reasoning\":\n case \"thinking\": {\n // 思考只在 completed 落一次,避免 started/completed 重复。\n if (!isCompleted)\n return;\n const text = extractReasoning(item);\n if (text)\n events.push({ type: \"thinking\", text });\n return;\n }\n case \"agent_message\":\n case \"assistant_message\":\n case \"message\": {\n if (!isCompleted)\n return;\n const text = extractText(get(item, \"text\") ?? get(item, \"content\") ?? get(item, \"message\"));\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n return;\n }\n case \"command_execution\":\n case \"local_shell_call\": {\n const callId = baseId || nextSynthId(\"cmd\");\n const command = get(item, \"command\") ?? get(get(item, \"action\"), \"command\");\n if (!isCompleted) {\n emitCall(callId, \"command_execution\", { command } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, \"command_execution\", { command } as JsonValue, \"shell\", opaqueCommandProjection(\"unsupported-protocol\"));\n }\n // `codex exec --json` uses snake_case while app-server v2 keeps the\n // protocol's camelCase fields after normalizeItem() rewrites only the\n // tagged-union type. Both are public Codex transports and must close\n // to the same provider-neutral result.\n const exit = get(item, \"exit_code\") ?? get(item, \"exitCode\");\n const output = get(item, \"aggregated_output\") ??\n get(item, \"aggregatedOutput\") ??\n get(item, \"output\");\n const statusStr = get(item, \"status\");\n const status = statusStr === \"declined\" || statusStr === \"rejected\"\n ? \"rejected\" as const\n : exit === 0 || (exit == null && statusStr !== \"failed\" && statusStr !== \"error\")\n ? \"completed\" as const\n : \"failed\" as const;\n const result = output === undefined && exit === undefined\n ? undefined\n : {\n output: (output ?? null) as JsonValue,\n exit_code: (exit ?? null) as JsonValue,\n };\n emitResult(callId, result, status);\n return;\n }\n case \"mcp_tool_call\": {\n const callId = baseId || nextSynthId(\"mcp\");\n const server = get(item, \"server\");\n const toolRaw = get(item, \"tool\") ?? get(item, \"name\") ?? \"unknown\";\n const originalName = typeof server === \"string\" ? `${server}.${String(toolRaw)}` : String(toolRaw);\n const input = coerceArgs(get(item, \"arguments\") ?? get(item, \"input\"));\n if (!isCompleted) {\n emitCall(callId, originalName, input, normalizeToolName(String(toolRaw)), notCommandProjection());\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, originalName, input, normalizeToolName(String(toolRaw)), notCommandProjection());\n }\n const statusStr = get(item, \"status\");\n const success = !get(item, \"error\") && statusStr !== \"failed\";\n emitResult(callId, (get(item, \"result\") ?? null) as JsonValue, success ? \"completed\" : \"failed\");\n return;\n }\n case \"web_search\": {\n const callId = baseId || nextSynthId(\"web\");\n const query = get(item, \"query\") ?? get(item, \"search\");\n if (!isCompleted) {\n emitCall(callId, \"web_search\", { query } as JsonValue, \"web_search\", notCommandProjection());\n return;\n }\n if (!startedCallIds.has(callId)) {\n emitCall(callId, \"web_search\", { query } as JsonValue, \"web_search\", notCommandProjection());\n }\n emitResult(callId, (get(item, \"results\") ?? get(item, \"result\") ?? null) as JsonValue, \"completed\");\n return;\n }\n case \"file_change\":\n case \"patch\":\n case \"file_patch\": {\n if (!isCompleted)\n return;\n const changes = get(item, \"changes\");\n const list = Array.isArray(changes) ? changes : [{ path: get(item, \"path\") }];\n list.forEach((ch, i) => {\n const path = get(ch, \"path\") ?? get(ch, \"file\");\n const kindRaw = get(ch, \"kind\") ?? get(ch, \"type\") ?? get(item, \"kind\");\n const kind = typeof kindRaw === \"string\" ? kindRaw.toLowerCase() : \"update\";\n const tool: ToolName = kind === \"add\" || kind === \"delete\" ? \"file_write\" : \"file_edit\";\n const callId = `${baseId || \"patch\"}#${i}`;\n emitCall(callId, \"file_change\", { path, kind } as JsonValue, tool, notCommandProjection());\n emitResult(callId, { path, kind } as JsonValue, \"completed\");\n });\n return;\n }\n case \"error\": {\n const msg = get(item, \"message\") ?? get(item, \"text\") ?? \"error\";\n events.push({ type: \"error\", message: String(msg) });\n return;\n }\n default:\n return; // todo_list / 其它 item 类型暂不映射\n }\n };\n const lines = raw.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed)\n continue;\n let data: unknown;\n try {\n data = JSON.parse(trimmed);\n }\n catch {\n parseSuccess = false;\n continue;\n }\n try {\n addUsageFrom(data);\n const eventType = (get(data, \"type\") ?? get(data, \"event\") ?? get(data, \"kind\")) as unknown;\n if (isCompactionMarker(eventType, data)) {\n events.push({ type: \"compaction\" });\n compactions += 1;\n continue;\n }\n switch (eventType) {\n // ── 控制流:仅在失败时落 error ──\n case \"thread.started\":\n case \"thread.completed\":\n case \"turn.started\":\n case \"response.created\":\n case \"response.completed\":\n case \"response.cancelled\":\n break;\n case \"turn.completed\": {\n const turn = get(data, \"turn\");\n if (get(turn, \"status\") !== \"failed\")\n break;\n const err = get(turn, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? \"turn failed\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n case \"turn.failed\":\n case \"response.failed\": {\n const err = get(data, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? \"turn failed\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n // ── 主路径:item.* ──\n case \"item.started\":\n handleItem(get(data, \"item\"), false);\n break;\n case \"item.updated\":\n // 中间态忽略,等 completed\n break;\n case \"item.completed\":\n handleItem(get(data, \"item\"), true);\n break;\n // ── 老式 / session rollout ResponseItem ──\n case \"message\":\n case \"chat\": {\n const roleRaw = get(data, \"role\") ?? (get(data, \"from\") === \"assistant\" ? \"assistant\" : \"user\");\n const role = roleRaw === \"user\" ? \"user\" : \"assistant\";\n const text = extractText(get(data, \"content\") ?? get(data, \"text\") ?? get(data, \"message\"));\n if (text)\n events.push({ type: \"message\", role, text });\n break;\n }\n case \"reasoning\":\n case \"thinking\":\n case \"thought\": {\n const text = extractReasoning(data);\n if (text)\n events.push({ type: \"thinking\", text });\n break;\n }\n case \"function_call\":\n case \"tool_call\":\n case \"tool_use\":\n case \"custom_tool_call\":\n case \"action\":\n case \"local_shell_call\": {\n const isShell = eventType === \"local_shell_call\";\n const nameRaw = isShell\n ? \"shell\"\n : (get(data, \"name\") ?? get(get(data, \"function\"), \"name\") ?? get(data, \"tool\") ?? get(data, \"action\") ?? \"unknown\");\n const name = String(nameRaw);\n const rawArgs = isShell\n ? (get(data, \"action\") ?? get(data, \"input\"))\n : (get(get(data, \"function\"), \"arguments\") ?? get(data, \"arguments\") ?? get(data, \"input\") ?? get(data, \"params\"));\n const input = coerceArgs(rawArgs);\n const explicit = get(data, \"call_id\") ?? get(data, \"id\") ?? get(data, \"tool_call_id\");\n const callId = explicit != null ? String(explicit) : nextSynthId(\"call\");\n if (explicit == null)\n pendingCallIds.push(callId);\n emitCall(callId, name, input, normalizeToolName(name), isShell ? opaqueCommandProjection(\"unsupported-protocol\") : notCommandProjection());\n break;\n }\n case \"function_call_output\":\n case \"tool_result\":\n case \"tool_response\":\n case \"action_result\":\n case \"local_shell_call_output\": {\n const explicit = get(data, \"call_id\") ?? get(data, \"tool_call_id\") ?? get(data, \"id\");\n const callId = explicit != null ? String(explicit) : pendingCallIds.shift() ?? nextSynthId(\"result\");\n const rawOut = get(data, \"output\") ?? get(data, \"result\") ?? get(data, \"content\");\n const { output, status } = interpretOutput(rawOut, data);\n emitResult(callId, output, status);\n break;\n }\n case \"error\": {\n const err = get(data, \"error\");\n const msg = get(err, \"message\") ?? get(data, \"message\") ?? get(data, \"content\") ?? \"error\";\n events.push({ type: \"error\", message: String(msg) });\n break;\n }\n // output_text.delta / output_text.done 是同一条 assistant 文本的流式分片,\n // 最终文本会经 agent_message item / message ResponseItem 落地,这里直接丢弃避免重复。\n case \"output_text.delta\":\n case \"output_text.done\":\n break;\n default: {\n // 兜底:按结构猜。\n const role = get(data, \"role\");\n if (role === \"assistant\" || role === \"user\") {\n const text = extractText(get(data, \"content\") ?? get(data, \"text\"));\n if (text)\n events.push({ type: \"message\", role, text });\n }\n }\n }\n }\n catch {\n // 单行处理异常不应拖垮整条 transcript。\n parseSuccess = false;\n }\n }\n // requests > 0 意味着至少一行真的带回了 usage;整份 transcript 没有任何 usage 行时\n // input/output 也不该垫成 0(见 docs/feature/record/architecture.md#usage)。\n const usage: Usage = requests > 0 ? { inputTokens, outputTokens } : {};\n if (cacheReadTokens > 0)\n usage.cacheReadTokens = cacheReadTokens;\n if (reasoningTokens > 0)\n usage.reasoningTokens = reasoningTokens;\n if (requests > 0)\n usage.requests = requests;\n return { events, usage, compactions, parseSuccess };\n}\n/**\n * 解读一条工具结果输出:显式 success/error → status 字符串 → exit_code,层层找成败证据。\n * 都没有才默认 completed —— 这是乐观兜底:codex 不带任何成败字段的结果会被记成成功,\n * noFailedActions() 这类负断言可能因此假通过。所以证据检查要尽量全,别轻易走到兜底。\n */\nfunction interpretOutput(rawOut: unknown, data: unknown): {\n output: JsonValue | undefined;\n status: \"completed\" | \"failed\" | \"rejected\";\n} {\n // 显式 success / error 优先。\n const explicitSuccess = get(data, \"success\");\n if (explicitSuccess === false)\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n if (get(data, \"error\"))\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n // 事件自带 status 字符串(item/data 两层都看)。\n const statusStr = get(data, \"status\") ?? get(get(data, \"item\"), \"status\");\n if (statusStr === \"failed\" || statusStr === \"error\") {\n return { output: (rawOut ?? null) as JsonValue, status: \"failed\" };\n }\n if (statusStr === \"rejected\" || statusStr === \"declined\") {\n return { output: (rawOut ?? null) as JsonValue, status: \"rejected\" };\n }\n // 字符串输出尝试解析 exit_code(codex shell 结果常见)。\n let parsed: unknown = rawOut;\n if (typeof rawOut === \"string\") {\n try {\n parsed = JSON.parse(rawOut);\n }\n catch {\n parsed = rawOut;\n }\n }\n const exit = get(parsed, \"exit_code\") ?? get(parsed, \"exitCode\") ?? get(get(parsed, \"metadata\"), \"exit_code\");\n if (typeof exit === \"number\") {\n return { output: (parsed ?? null) as JsonValue, status: exit === 0 ? \"completed\" : \"failed\" };\n }\n return { output: (parsed ?? null) as JsonValue, status: \"completed\" };\n}\n/** 便捷形态:只要 StreamEvent[]。 */\nexport function parseCodex(raw: string | undefined): StreamEvent[] {\n return parseCodexTranscript(raw).events;\n}\n"]}
|