niceeval 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INDEX.md +4 -2
- package/dist/adapter-usage.cjs.map +1 -1
- package/dist/adapter-usage.d.cts +1 -1
- package/dist/adapter-usage.d.mts +1 -1
- package/dist/adapter-usage.d.ts +1 -1
- package/dist/adapter.cjs +8 -7
- package/dist/adapter.cjs.map +1 -1
- package/dist/adapter.d.cts +21 -21
- package/dist/adapter.d.mts +21 -21
- package/dist/adapter.d.ts +21 -21
- package/dist/agents/{effect-runtime.cjs → agent-effects.cjs} +12 -18
- package/dist/agents/agent-effects.cjs.map +1 -0
- package/dist/agents/agent-effects.d.cts +23 -0
- package/dist/agents/agent-effects.d.mts +23 -0
- package/dist/agents/agent-effects.d.ts +23 -0
- package/dist/agents/agent-effects.js +16 -0
- package/dist/agents/agent-effects.js.map +1 -0
- package/dist/agents/ai-sdk.cjs +1 -1
- package/dist/agents/ai-sdk.cjs.map +1 -1
- package/dist/agents/bub.cjs +31 -18
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +9 -12
- package/dist/agents/bub.d.mts +9 -12
- package/dist/agents/bub.d.ts +9 -12
- package/dist/agents/claude-code-native.cjs +2 -2
- package/dist/agents/claude-code-native.cjs.map +1 -1
- package/dist/agents/claude-code.cjs +17 -11
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/claude-code.d.cts +11 -11
- package/dist/agents/claude-code.d.mts +11 -11
- package/dist/agents/claude-code.d.ts +11 -11
- package/dist/agents/codex-app-server.cjs +2 -2
- package/dist/agents/codex-app-server.cjs.map +1 -1
- package/dist/agents/codex.cjs +18 -12
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +12 -12
- package/dist/agents/codex.d.mts +12 -12
- package/dist/agents/codex.d.ts +12 -12
- package/dist/agents/deepseek-harness.cjs +2 -2
- package/dist/agents/deepseek-harness.cjs.map +1 -1
- package/dist/agents/hermes.cjs +3 -3
- package/dist/agents/hermes.cjs.map +1 -1
- package/dist/agents/index.cjs +3 -3
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +3 -3
- package/dist/agents/index.d.mts +3 -3
- package/dist/agents/index.d.ts +3 -3
- package/dist/agents/index.js +2 -2
- package/dist/agents/index.mjs +2 -2
- package/dist/agents/mcp.cjs.map +1 -1
- package/dist/agents/mcp.d.cts +2 -2
- package/dist/agents/mcp.d.mts +2 -2
- package/dist/agents/mcp.d.ts +2 -2
- package/dist/agents/omp.cjs +2 -2
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/openai-compat.cjs +2 -2
- package/dist/agents/openai-compat.cjs.map +1 -1
- package/dist/agents/openclaw.cjs +3 -3
- package/dist/agents/openclaw.cjs.map +1 -1
- package/dist/agents/opencode.cjs +16 -4
- package/dist/agents/opencode.cjs.map +1 -1
- package/dist/agents/plugin-extensions.cjs +71 -0
- package/dist/agents/plugin-extensions.cjs.map +1 -0
- package/dist/agents/plugin-extensions.d.cts +26 -0
- package/dist/agents/plugin-extensions.d.mts +26 -0
- package/dist/agents/plugin-extensions.d.ts +26 -0
- package/dist/agents/plugin-extensions.js +8 -0
- package/dist/agents/plugin-extensions.js.map +1 -0
- package/dist/agents/post-setup.cjs +14 -3
- package/dist/agents/post-setup.cjs.map +1 -1
- package/dist/agents/post-setup.d.cts +4 -2
- package/dist/agents/post-setup.d.mts +4 -2
- package/dist/agents/post-setup.d.ts +4 -2
- package/dist/agents/post-setup.js +8 -6
- package/dist/agents/sdk-streams.cjs +3 -3
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/{session-slot.cjs → session-key.cjs} +4 -4
- package/dist/agents/session-key.cjs.map +1 -0
- package/dist/agents/session-key.d.cts +12 -0
- package/dist/agents/session-key.d.mts +12 -0
- package/dist/agents/session-key.d.ts +12 -0
- package/dist/agents/session-key.js +6 -0
- package/dist/agents/session-key.js.map +1 -0
- package/dist/agents/shared.cjs +2 -2
- package/dist/agents/shared.cjs.map +1 -1
- package/dist/agents/shared.d.cts +4 -4
- package/dist/agents/shared.d.mts +4 -4
- package/dist/agents/shared.d.ts +4 -4
- package/dist/agents/skills.cjs.map +1 -1
- package/dist/agents/skills.d.cts +3 -3
- package/dist/agents/skills.d.mts +3 -3
- package/dist/agents/skills.d.ts +3 -3
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +55 -54
- package/dist/agents/types.d.mts +55 -54
- package/dist/agents/types.d.ts +55 -54
- package/dist/agents/ui-message-stream.cjs +4 -4
- package/dist/agents/ui-message-stream.cjs.map +1 -1
- package/dist/agents/unrecognized-events.cjs +32 -0
- package/dist/agents/unrecognized-events.cjs.map +1 -0
- package/dist/agents/unrecognized-events.d.cts +8 -0
- package/dist/agents/unrecognized-events.d.mts +8 -0
- package/dist/agents/unrecognized-events.d.ts +8 -0
- package/dist/agents/unrecognized-events.js +6 -0
- package/dist/agents/unrecognized-events.js.map +1 -0
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +3 -0
- package/dist/assertions/api.d.mts +3 -0
- package/dist/assertions/api.d.ts +3 -0
- package/dist/assertions/collection.cjs +1 -1
- package/dist/assertions/collection.cjs.map +1 -1
- package/dist/assertions/judge.cjs +1 -1
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +52 -21
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +16 -5
- package/dist/assertions/match.d.mts +16 -5
- package/dist/assertions/match.d.ts +16 -5
- package/dist/assertions/match.js +96 -94
- package/dist/assertions/measurements.cjs +22 -6
- package/dist/assertions/measurements.cjs.map +1 -1
- package/dist/assertions/measurements.d.cts +8 -1
- package/dist/assertions/measurements.d.mts +8 -1
- package/dist/assertions/measurements.d.ts +8 -1
- package/dist/assertions/numeric.cjs +2 -0
- package/dist/assertions/numeric.cjs.map +1 -1
- package/dist/assertions/numeric.d.cts +1 -1
- package/dist/assertions/numeric.d.mts +1 -1
- package/dist/assertions/numeric.d.ts +1 -1
- package/dist/assertions/quantity.cjs +42 -0
- package/dist/assertions/quantity.cjs.map +1 -0
- package/dist/assertions/quantity.d.cts +18 -0
- package/dist/assertions/quantity.d.mts +18 -0
- package/dist/assertions/quantity.d.ts +18 -0
- package/dist/assertions/quantity.js +22 -0
- package/dist/assertions/quantity.js.map +1 -0
- package/dist/assertions/record/attachment.cjs +2 -0
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/codec.cjs +5 -1
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +3 -1
- package/dist/assertions/record/model.d.mts +3 -1
- package/dist/assertions/record/model.d.ts +3 -1
- package/dist/assertions/runtime.cjs +11 -6
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/program.cjs +3 -0
- package/dist/cli/program.cjs.map +1 -1
- package/dist/context/assert-first.cjs +6 -4
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +9 -3
- package/dist/context/assert-first.d.mts +9 -3
- package/dist/context/assert-first.d.ts +9 -3
- package/dist/context/notes.cjs +47 -0
- package/dist/context/notes.cjs.map +1 -0
- package/dist/context/notes.d.cts +10 -0
- package/dist/context/notes.d.mts +10 -0
- package/dist/context/notes.d.ts +10 -0
- package/dist/context/notes.js +6 -0
- package/dist/context/notes.js.map +1 -0
- package/dist/context/send-failures.cjs +1 -7
- package/dist/context/send-failures.cjs.map +1 -1
- package/dist/context/send-failures.d.cts +2 -3
- package/dist/context/send-failures.d.mts +2 -3
- package/dist/context/send-failures.d.ts +2 -3
- package/dist/context/send-retry.cjs +0 -1
- package/dist/context/send-retry.cjs.map +1 -1
- package/dist/context/send-retry.d.cts +1 -2
- package/dist/context/send-retry.d.mts +1 -2
- package/dist/context/send-retry.d.ts +1 -2
- package/dist/context/session.cjs +10 -17
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +4 -10
- package/dist/context/session.d.mts +4 -10
- package/dist/context/session.d.ts +4 -10
- package/dist/define.cjs +88 -65
- package/dist/define.cjs.map +1 -1
- package/dist/define.d.cts +3 -3
- package/dist/define.d.mts +3 -3
- package/dist/define.d.ts +3 -3
- package/dist/eval/cli/contribution.cjs +1 -1
- package/dist/eval/cli/contribution.cjs.map +1 -1
- package/dist/eval/host/index.cjs +1 -1
- package/dist/eval/host/index.cjs.map +1 -1
- package/dist/eval/record/evaluation.cjs +1 -1
- package/dist/eval/record/evaluation.cjs.map +1 -1
- package/dist/eval/record/membership-provenance.d.cts +3 -3
- package/dist/eval/record/membership-provenance.d.mts +3 -3
- package/dist/eval/record/membership-provenance.d.ts +3 -3
- package/dist/eval/record/score.cjs +2 -2
- package/dist/eval/record/score.cjs.map +1 -1
- package/dist/eval/record/sealed-assertion.cjs +1 -1
- package/dist/eval/record/sealed-assertion.cjs.map +1 -1
- package/dist/eval/record/verdict.cjs +2 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/expect/index.cjs +10 -1
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +3 -1
- package/dist/expect/index.d.mts +3 -1
- package/dist/expect/index.d.ts +3 -1
- package/dist/expect/index.js +92 -76
- package/dist/expect/index.mjs +92 -76
- package/dist/experiment/host/cli/contribution.cjs +52 -39
- package/dist/experiment/host/cli/contribution.cjs.map +1 -1
- package/dist/experiment/host/cli/contribution.d.cts +18 -4
- package/dist/experiment/host/cli/contribution.d.mts +18 -4
- package/dist/experiment/host/cli/contribution.d.ts +18 -4
- package/dist/experiment/host/cli/contribution.js +2 -2
- package/dist/experiment/host/cli/debug-protocol.cjs +2 -2
- package/dist/experiment/host/cli/debug-protocol.cjs.map +1 -1
- package/dist/experiment/host/cli/debug-protocol.d.cts +2 -2
- package/dist/experiment/host/cli/debug-protocol.d.mts +2 -2
- package/dist/experiment/host/cli/debug-protocol.d.ts +2 -2
- package/dist/experiment/host/cli/output-protocol.cjs +1 -1
- package/dist/experiment/host/cli/output-protocol.cjs.map +1 -1
- package/dist/experiment/host/cli/output-protocol.d.cts +2 -2
- package/dist/experiment/host/cli/output-protocol.d.mts +2 -2
- package/dist/experiment/host/cli/output-protocol.d.ts +2 -2
- package/dist/experiment/host/current.cjs +2 -2
- package/dist/experiment/host/current.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -1
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/operations.cjs +21 -22
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/runtime.cjs +8 -9
- package/dist/experiment/host/runtime.cjs.map +1 -1
- package/dist/experiment/host/runtime.d.cts +3 -3
- package/dist/experiment/host/runtime.d.mts +3 -3
- package/dist/experiment/host/runtime.d.ts +3 -3
- package/dist/experiment/host/teardown.cjs +3 -3
- package/dist/experiment/host/teardown.cjs.map +1 -1
- package/dist/experiment/host/teardown.d.cts +3 -3
- package/dist/experiment/host/teardown.d.mts +3 -3
- package/dist/experiment/host/teardown.d.ts +3 -3
- package/dist/experiment/host/types.cjs.map +1 -1
- package/dist/experiment/host/types.d.cts +19 -19
- package/dist/experiment/host/types.d.mts +19 -19
- package/dist/experiment/host/types.d.ts +19 -19
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/inspection/assertions.cjs +1 -1
- package/dist/inspection/assertions.cjs.map +1 -1
- package/dist/inspection/cli/contribution.cjs +8 -7
- package/dist/inspection/cli/contribution.cjs.map +1 -1
- package/dist/inspection/facts.cjs +4 -4
- package/dist/inspection/facts.cjs.map +1 -1
- package/dist/inspection/index.cjs +1 -5
- package/dist/inspection/index.cjs.map +1 -1
- package/dist/inspection/index.d.cts +1 -2
- package/dist/inspection/index.d.mts +1 -2
- package/dist/inspection/index.d.ts +1 -2
- package/dist/inspection/index.js +20 -26
- package/dist/inspection/lifecycle.cjs +7 -0
- package/dist/inspection/lifecycle.cjs.map +1 -0
- package/dist/inspection/lifecycle.d.cts +4 -0
- package/dist/inspection/lifecycle.d.mts +4 -0
- package/dist/inspection/lifecycle.d.ts +4 -0
- package/dist/inspection/lifecycle.js +6 -0
- package/dist/inspection/lifecycle.js.map +1 -0
- package/dist/inspection/notes.cjs +40 -0
- package/dist/inspection/notes.cjs.map +1 -0
- package/dist/inspection/notes.d.cts +12 -0
- package/dist/inspection/notes.d.mts +12 -0
- package/dist/inspection/notes.d.ts +12 -0
- package/dist/inspection/notes.js +8 -0
- package/dist/inspection/notes.js.map +1 -0
- package/dist/inspection/overview.cjs +12 -15
- package/dist/inspection/overview.cjs.map +1 -1
- package/dist/inspection/overview.d.cts +8 -6
- package/dist/inspection/overview.d.mts +8 -6
- package/dist/inspection/overview.d.ts +8 -6
- package/dist/inspection/planned-attempt.cjs +45 -0
- package/dist/inspection/planned-attempt.cjs.map +1 -0
- package/dist/inspection/planned-attempt.d.cts +109 -0
- package/dist/inspection/planned-attempt.d.mts +109 -0
- package/dist/inspection/planned-attempt.d.ts +109 -0
- package/dist/inspection/planned-attempt.js +24 -0
- package/dist/inspection/planned-attempt.js.map +1 -0
- package/dist/inspection/project-result.cjs +5 -5
- package/dist/inspection/project-result.cjs.map +1 -1
- package/dist/inspection/project-result.d.cts +58 -57
- package/dist/inspection/project-result.d.mts +58 -57
- package/dist/inspection/project-result.d.ts +58 -57
- package/dist/inspection/project-result.js +4 -4
- package/dist/inspection/project.cjs +3 -3
- package/dist/inspection/project.cjs.map +1 -1
- package/dist/inspection/protocol-values.cjs +1 -1
- package/dist/inspection/protocol-values.cjs.map +1 -1
- package/dist/inspection/protocol-values.d.cts +1 -1
- package/dist/inspection/protocol-values.d.mts +1 -1
- package/dist/inspection/protocol-values.d.ts +1 -1
- package/dist/inspection/protocol.cjs +8 -8
- package/dist/inspection/protocol.cjs.map +1 -1
- package/dist/inspection/protocol.d.cts +237 -219
- package/dist/inspection/protocol.d.mts +237 -219
- package/dist/inspection/protocol.d.ts +237 -219
- package/dist/inspection/public.cjs +1 -5
- package/dist/inspection/public.cjs.map +1 -1
- package/dist/inspection/public.d.cts +1 -2
- package/dist/inspection/public.d.mts +1 -2
- package/dist/inspection/public.d.ts +1 -2
- package/dist/inspection/public.js +14 -20
- package/dist/inspection/public.mjs +166 -129
- package/dist/inspection/query.cjs +1 -1
- package/dist/inspection/query.cjs.map +1 -1
- package/dist/inspection/results.cjs +61 -52
- package/dist/inspection/results.cjs.map +1 -1
- package/dist/inspection/results.d.cts +157 -140
- package/dist/inspection/results.d.mts +157 -140
- package/dist/inspection/results.d.ts +157 -140
- package/dist/inspection/select.cjs +33 -28
- package/dist/inspection/select.cjs.map +1 -1
- package/dist/inspection/source.cjs +1 -1
- package/dist/inspection/source.cjs.map +1 -1
- package/dist/inspection/sources.cjs +2 -2
- package/dist/inspection/sources.cjs.map +1 -1
- package/dist/inspection/trace.cjs +9 -8
- package/dist/inspection/trace.cjs.map +1 -1
- package/dist/inspection/trace.d.cts +4 -4
- package/dist/inspection/trace.d.mts +4 -4
- package/dist/inspection/trace.d.ts +4 -4
- package/dist/loaders/index.cjs +7 -279
- package/dist/loaders/index.cjs.map +1 -1
- package/dist/loaders/index.d.cts +2 -95
- package/dist/loaders/index.d.mts +2 -95
- package/dist/loaders/index.d.ts +2 -95
- package/dist/loaders/index.js +10 -12
- package/dist/loaders/index.mjs +10 -12
- package/dist/loaders/runtime.cjs +283 -0
- package/dist/loaders/runtime.cjs.map +1 -0
- package/dist/loaders/runtime.d.cts +95 -0
- package/dist/loaders/runtime.d.mts +95 -0
- package/dist/loaders/runtime.d.ts +95 -0
- package/dist/loaders/runtime.js +16 -0
- package/dist/loaders/runtime.js.map +1 -0
- package/dist/migrations/judge-provider.md +6 -6
- package/dist/{model-slots.cjs → model-roles.cjs} +12 -12
- package/dist/{model-slots.cjs.map → model-roles.cjs.map} +1 -1
- package/dist/{model-slots.d.cts → model-roles.d.cts} +10 -10
- package/dist/{model-slots.d.mts → model-roles.d.mts} +10 -10
- package/dist/{model-slots.d.ts → model-roles.d.ts} +10 -10
- package/dist/model-roles.js +14 -0
- package/dist/model-roles.js.map +1 -0
- package/dist/o11y/adapter-usage-projection.cjs +9 -8
- package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
- package/dist/o11y/adapter-usage-projection.d.cts +23 -15
- package/dist/o11y/adapter-usage-projection.d.mts +23 -15
- package/dist/o11y/adapter-usage-projection.d.ts +23 -15
- package/dist/o11y/cache-read.cjs +14 -14
- package/dist/o11y/cache-read.cjs.map +1 -1
- package/dist/o11y/cache-read.d.cts +5 -5
- package/dist/o11y/cache-read.d.mts +5 -5
- package/dist/o11y/cache-read.d.ts +5 -5
- package/dist/o11y/derive.cjs.map +1 -1
- package/dist/o11y/derive.d.cts +2 -2
- package/dist/o11y/derive.d.mts +2 -2
- package/dist/o11y/derive.d.ts +2 -2
- package/dist/o11y/eval-usage.cjs +9 -9
- package/dist/o11y/eval-usage.cjs.map +1 -1
- package/dist/o11y/eval-usage.d.cts +7 -7
- package/dist/o11y/eval-usage.d.mts +7 -7
- package/dist/o11y/eval-usage.d.ts +7 -7
- package/dist/o11y/parsers/bub.cjs +57 -81
- package/dist/o11y/parsers/bub.cjs.map +1 -1
- package/dist/o11y/parsers/index.cjs.map +1 -1
- package/dist/o11y/parsers/index.d.cts +2 -0
- package/dist/o11y/parsers/index.d.mts +2 -0
- package/dist/o11y/parsers/index.d.ts +2 -0
- package/dist/o11y/parsers/opencode.cjs +129 -217
- package/dist/o11y/parsers/opencode.cjs.map +1 -1
- package/dist/o11y/parsers/opencode.d.cts +2 -5
- package/dist/o11y/parsers/opencode.d.mts +2 -5
- package/dist/o11y/parsers/opencode.d.ts +2 -5
- package/dist/o11y/types.cjs.map +1 -1
- package/dist/o11y/types.d.cts +1 -1
- package/dist/o11y/types.d.mts +1 -1
- package/dist/o11y/types.d.ts +1 -1
- package/dist/plugin/contracts.cjs +170 -120
- package/dist/plugin/contracts.cjs.map +1 -1
- package/dist/plugin/contracts.d.cts +102 -90
- package/dist/plugin/contracts.d.mts +102 -90
- package/dist/plugin/contracts.d.ts +102 -90
- package/dist/plugin/contracts.js +16 -12
- package/dist/plugin/index.cjs.map +1 -1
- package/dist/plugin/index.d.cts +1 -1
- package/dist/plugin/index.d.mts +1 -1
- package/dist/plugin/index.d.ts +1 -1
- package/dist/plugin/link.cjs +69 -64
- package/dist/plugin/link.cjs.map +1 -1
- package/dist/plugin/link.d.cts +5 -3
- package/dist/plugin/link.d.mts +5 -3
- package/dist/plugin/link.d.ts +5 -3
- package/dist/plugin/link.js +12 -8
- package/dist/record/codec/seal-manifest.d.cts +3 -3
- package/dist/record/codec/seal-manifest.d.mts +3 -3
- package/dist/record/codec/seal-manifest.d.ts +3 -3
- package/dist/record/family/attempt-note/definition.cjs +12 -0
- package/dist/record/family/attempt-note/definition.cjs.map +1 -0
- package/dist/record/family/attempt-note/definition.d.cts +6 -0
- package/dist/record/family/attempt-note/definition.d.mts +6 -0
- package/dist/record/family/attempt-note/definition.d.ts +6 -0
- package/dist/record/family/attempt-note/definition.js +6 -0
- package/dist/record/family/attempt-note/definition.js.map +1 -0
- package/dist/record/family/attempt-note/persistence.cjs +10 -0
- package/dist/record/family/attempt-note/persistence.cjs.map +1 -0
- package/dist/record/family/attempt-note/persistence.d.cts +6 -0
- package/dist/record/family/attempt-note/persistence.d.mts +6 -0
- package/dist/record/family/attempt-note/persistence.d.ts +6 -0
- package/dist/record/family/attempt-note/persistence.js +6 -0
- package/dist/record/family/attempt-note/persistence.js.map +1 -0
- package/dist/record/family/attempt-note/schema.cjs +20 -0
- package/dist/record/family/attempt-note/schema.cjs.map +1 -0
- package/dist/record/family/attempt-note/schema.d.cts +21 -0
- package/dist/record/family/attempt-note/schema.d.mts +21 -0
- package/dist/record/family/attempt-note/schema.d.ts +21 -0
- package/dist/record/family/attempt-note/schema.js +10 -0
- package/dist/record/family/attempt-note/schema.js.map +1 -0
- package/dist/record/family/catalog.cjs +32 -29
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +7 -2
- package/dist/record/family/catalog.d.mts +7 -2
- package/dist/record/family/catalog.d.ts +7 -2
- package/dist/record/family/current.cjs +48 -45
- package/dist/record/family/current.cjs.map +1 -1
- package/dist/record/family/current.d.cts +15 -0
- package/dist/record/family/current.d.mts +15 -0
- package/dist/record/family/current.d.ts +15 -0
- package/dist/record/model/index.js +66 -64
- package/dist/record/model/run-context.cjs +9 -3
- package/dist/record/model/run-context.cjs.map +1 -1
- package/dist/record/model/run-context.d.cts +9 -2
- package/dist/record/model/run-context.d.mts +9 -2
- package/dist/record/model/run-context.d.ts +9 -2
- package/dist/record/model/run-context.js +8 -6
- package/dist/record/model/seal-manifest.d.cts +1 -1
- package/dist/record/model/seal-manifest.d.mts +1 -1
- package/dist/record/model/seal-manifest.d.ts +1 -1
- package/dist/run/cli/contribution.cjs +6 -32
- package/dist/run/cli/contribution.cjs.map +1 -1
- package/dist/run/host/runtime.cjs +1 -1
- package/dist/run/host/runtime.cjs.map +1 -1
- package/dist/run/storage/sqlite.cjs +7 -7
- package/dist/run/storage/sqlite.cjs.map +1 -1
- package/dist/runner/adapter-usage.cjs +5 -3
- package/dist/runner/adapter-usage.cjs.map +1 -1
- package/dist/runner/adapter-usage.d.cts +2 -2
- package/dist/runner/adapter-usage.d.mts +2 -2
- package/dist/runner/adapter-usage.d.ts +2 -2
- package/dist/runner/adoption.cjs +9 -12
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-notes.cjs +8 -0
- package/dist/runner/attempt-notes.cjs.map +1 -0
- package/dist/runner/attempt-notes.d.cts +4 -0
- package/dist/runner/attempt-notes.d.mts +4 -0
- package/dist/runner/attempt-notes.d.ts +4 -0
- package/dist/runner/attempt-notes.js +8 -0
- package/dist/runner/attempt-notes.js.map +1 -0
- package/dist/runner/attempt.cjs +61 -73
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/attempt.d.cts +3 -3
- package/dist/runner/attempt.d.mts +3 -3
- package/dist/runner/attempt.d.ts +3 -3
- package/dist/runner/command-plan.cjs +21 -26
- package/dist/runner/command-plan.cjs.map +1 -1
- package/dist/runner/command-plan.d.cts +4 -4
- package/dist/runner/command-plan.d.mts +4 -4
- package/dist/runner/command-plan.d.ts +4 -4
- package/dist/runner/command-plan.js +4 -4
- package/dist/runner/config-identity.cjs.map +1 -1
- package/dist/runner/config-identity.d.cts +2 -2
- package/dist/runner/config-identity.d.mts +2 -2
- package/dist/runner/config-identity.d.ts +2 -2
- package/dist/runner/discover.cjs +6 -6
- package/dist/runner/discover.cjs.map +1 -1
- package/dist/runner/eval-selection.cjs +2 -2
- package/dist/runner/eval-selection.cjs.map +1 -1
- package/dist/runner/eval-selection.d.cts +2 -2
- package/dist/runner/eval-selection.d.mts +2 -2
- package/dist/runner/eval-selection.d.ts +2 -2
- package/dist/runner/feedback/human.cjs +1 -1
- package/dist/runner/feedback/human.cjs.map +1 -1
- package/dist/runner/feedback/json.cjs +4 -2
- package/dist/runner/feedback/json.cjs.map +1 -1
- package/dist/runner/feedback/json.d.cts +1 -1
- package/dist/runner/feedback/json.d.mts +1 -1
- package/dist/runner/feedback/json.d.ts +1 -1
- package/dist/runner/feedback/sink.cjs +1 -1
- package/dist/runner/feedback/sink.cjs.map +1 -1
- package/dist/runner/feedback/sink.d.cts +1 -1
- package/dist/runner/feedback/sink.d.mts +1 -1
- package/dist/runner/feedback/sink.d.ts +1 -1
- package/dist/runner/fingerprint.cjs +1 -1
- package/dist/runner/fingerprint.cjs.map +1 -1
- package/dist/runner/project-target.cjs.map +1 -1
- package/dist/runner/project-target.d.cts +2 -2
- package/dist/runner/project-target.d.mts +2 -2
- package/dist/runner/project-target.d.ts +2 -2
- package/dist/runner/record/attachments.cjs +2 -2
- package/dist/runner/record/attachments.cjs.map +1 -1
- package/dist/runner/record/planning.cjs +8 -2
- package/dist/runner/record/planning.cjs.map +1 -1
- package/dist/runner/record.cjs +2 -0
- package/dist/runner/record.cjs.map +1 -1
- package/dist/runner/report.cjs +3 -3
- package/dist/runner/report.cjs.map +1 -1
- package/dist/runner/report.d.cts +1 -1
- package/dist/runner/report.d.mts +1 -1
- package/dist/runner/report.d.ts +1 -1
- package/dist/runner/reuse-plan.cjs +2 -2
- package/dist/runner/reuse-plan.cjs.map +1 -1
- package/dist/runner/run.cjs +10 -45
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/sandbox-pool.cjs +1 -2
- package/dist/runner/sandbox-pool.cjs.map +1 -1
- package/dist/runner/setup-prefix-preparation.cjs +1 -1
- package/dist/runner/setup-prefix-preparation.cjs.map +1 -1
- package/dist/runner/teardown-registry.cjs +2 -2
- package/dist/runner/teardown-registry.cjs.map +1 -1
- package/dist/runner/teardown-registry.d.cts +1 -1
- package/dist/runner/teardown-registry.d.mts +1 -1
- package/dist/runner/teardown-registry.d.ts +1 -1
- package/dist/runner/types.cjs +4 -4
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +64 -93
- package/dist/runner/types.d.mts +64 -93
- package/dist/runner/types.d.ts +64 -93
- package/dist/runner/types.js +2 -2
- package/dist/sandbox/action.cjs +1 -1
- package/dist/sandbox/action.cjs.map +1 -1
- package/dist/sandbox/cli/contribution.cjs +17 -14
- package/dist/sandbox/cli/contribution.cjs.map +1 -1
- package/dist/sandbox/cli/contribution.d.cts +1 -1
- package/dist/sandbox/cli/contribution.d.mts +1 -1
- package/dist/sandbox/cli/contribution.d.ts +1 -1
- package/dist/sandbox/commands.cjs +1 -1
- package/dist/sandbox/commands.cjs.map +1 -1
- package/dist/sandbox/commands.d.cts +1 -1
- package/dist/sandbox/commands.d.mts +1 -1
- package/dist/sandbox/commands.d.ts +1 -1
- package/dist/sandbox/compose.cjs +2 -2
- package/dist/sandbox/compose.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.cjs +5 -9
- package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.d.cts +0 -3
- package/dist/sandbox/docker-profile/registry.d.mts +0 -3
- package/dist/sandbox/docker-profile/registry.d.ts +0 -3
- package/dist/sandbox/docker-profile/registry.js +6 -12
- package/dist/sandbox/docker-profile/runtime.cjs +1 -1
- package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.cjs +12 -16
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.d.cts +2 -6
- package/dist/sandbox/docker-profile/schema.d.mts +2 -6
- package/dist/sandbox/docker-profile/schema.d.ts +2 -6
- package/dist/sandbox/docker-profile/schema.js +24 -32
- package/dist/sandbox/incus.cjs +2 -2
- package/dist/sandbox/incus.cjs.map +1 -1
- package/dist/sandbox/index.cjs +4 -35
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +4 -8
- package/dist/sandbox/index.d.mts +4 -8
- package/dist/sandbox/index.d.ts +4 -8
- package/dist/sandbox/index.js +116 -172
- package/dist/sandbox/index.mjs +116 -172
- package/dist/sandbox/layer.cjs +3 -3
- package/dist/sandbox/layer.cjs.map +1 -1
- package/dist/sandbox/link.cjs +5 -0
- package/dist/sandbox/link.cjs.map +1 -1
- package/dist/sandbox/link.d.cts +3 -0
- package/dist/sandbox/link.d.mts +3 -0
- package/dist/sandbox/link.d.ts +3 -0
- package/dist/sandbox/runtime.cjs +9 -4
- package/dist/sandbox/runtime.cjs.map +1 -1
- package/dist/shared/failure-class.cjs +5 -5
- package/dist/shared/failure-class.cjs.map +1 -1
- package/dist/shared/failure-class.d.cts +4 -10
- package/dist/shared/failure-class.d.mts +4 -10
- package/dist/shared/failure-class.d.ts +4 -10
- package/dist/shared/types.cjs.map +1 -1
- package/dist/shared/types.d.cts +1 -1
- package/dist/shared/types.d.mts +1 -1
- package/dist/shared/types.d.ts +1 -1
- package/dist/show/contribution.cjs +17 -2
- package/dist/show/contribution.cjs.map +1 -1
- package/dist/show/contribution.d.cts +14 -0
- package/dist/show/contribution.d.mts +14 -0
- package/dist/show/contribution.d.ts +14 -0
- package/dist/show/model.cjs +8 -5
- package/dist/show/model.cjs.map +1 -1
- package/dist/show/model.d.cts +11 -8
- package/dist/show/model.d.mts +11 -8
- package/dist/show/model.d.ts +11 -8
- package/dist/show/render.cjs +34 -22
- package/dist/show/render.cjs.map +1 -1
- package/dist/sources/projector.cjs +1 -1
- package/dist/sources/projector.cjs.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +2 -2
- package/dist/view/app-dist/.vite/manifest.json +2 -2
- package/dist/view/app-dist/assets/{index-B3ijZRph.js → index-CxrOUvHC.js} +17 -17
- package/dist/view/app-dist/assets/{quality-cost-scatter-B--DfJ9s.js → quality-cost-scatter-B6Aiss7x.js} +1 -1
- package/dist/view/app-dist/index.html +1 -1
- package/dist/view/cli/contribution.cjs +1 -1
- package/dist/view/cli/contribution.cjs.map +1 -1
- package/dist/view/function-runtime.mjs +318 -121
- package/dist/view/http-protocol.d.cts +1 -1
- package/dist/view/http-protocol.d.mts +1 -1
- package/dist/view/http-protocol.d.ts +1 -1
- package/dist/view/inspection-host.cjs +2 -2
- package/dist/view/inspection-host.cjs.map +1 -1
- package/dist/view/inspection-host.d.cts +349 -331
- package/dist/view/inspection-host.d.mts +349 -331
- package/dist/view/inspection-host.d.ts +349 -331
- package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +6 -6
- package/docs-site/zh/examples/integrations/claude-sdk.mdx +5 -5
- package/docs-site/zh/examples/integrations/codex-sdk.mdx +4 -4
- package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
- package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
- package/docs-site/zh/explanation/adapter.mdx +6 -6
- package/docs-site/zh/explanation/assert.mdx +7 -7
- package/docs-site/zh/explanation/drive.mdx +4 -4
- package/docs-site/zh/explanation/hitl.mdx +2 -2
- package/docs-site/zh/explanation/judge.mdx +2 -2
- package/docs-site/zh/introduction.mdx +2 -2
- package/docs-site/zh/reference/builtin-agents.mdx +46 -49
- package/docs-site/zh/reference/cli.mdx +16 -14
- package/docs-site/zh/reference/define-agent.mdx +19 -19
- package/docs-site/zh/reference/define-config.mdx +7 -15
- package/docs-site/zh/reference/define-eval.mdx +20 -14
- package/docs-site/zh/reference/define-experiment.mdx +18 -39
- package/docs-site/zh/reference/events.mdx +1 -1
- package/docs-site/zh/reference/expect.mdx +21 -0
- package/docs-site/zh/reference/official-adapters.mdx +12 -5
- package/docs-site/zh/troubleshooting/debugging.mdx +2 -2
- package/docs-site/zh/troubleshooting/recover-after-kill.mdx +1 -1
- package/docs-site/zh/tutorials/agent-onboarding.mdx +2 -2
- package/docs-site/zh/tutorials/authoring.mdx +2 -2
- package/docs-site/zh/tutorials/compare-runs.mdx +1 -1
- package/docs-site/zh/tutorials/concurrency.mdx +8 -8
- package/docs-site/zh/tutorials/configuration.mdx +5 -5
- package/docs-site/zh/tutorials/control-run-cost.mdx +19 -19
- package/docs-site/zh/tutorials/eval-groups.mdx +1 -1
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +5 -5
- package/docs-site/zh/tutorials/experiment-services.mdx +32 -32
- package/docs-site/zh/tutorials/handle-execution-failures.mdx +2 -28
- package/docs-site/zh/tutorials/plugins.mdx +49 -143
- package/docs-site/zh/tutorials/sandbox-agent.mdx +1 -1
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +7 -7
- package/docs-site/zh/tutorials/upgrade-0-18.mdx +1 -1
- package/docs-site/zh/tutorials/upgrade-0-19.mdx +121 -0
- package/docs-site/zh/tutorials/upgrade-0-20.mdx +12 -0
- package/docs-site/zh/tutorials/verify-judge.mdx +2 -2
- package/docs-site/zh/tutorials/viewing-results.mdx +2 -2
- package/docs-site/zh/tutorials/write-experiment.mdx +1 -1
- package/docs-site/zh/tutorials/write-send.mdx +13 -13
- package/package.json +1 -1
- package/dist/agents/effect-runtime.cjs.map +0 -1
- package/dist/agents/effect-runtime.d.cts +0 -29
- package/dist/agents/effect-runtime.d.mts +0 -29
- package/dist/agents/effect-runtime.d.ts +0 -29
- package/dist/agents/effect-runtime.js +0 -16
- package/dist/agents/effect-runtime.js.map +0 -1
- package/dist/agents/session-slot.cjs.map +0 -1
- package/dist/agents/session-slot.d.cts +0 -12
- package/dist/agents/session-slot.d.mts +0 -12
- package/dist/agents/session-slot.d.ts +0 -12
- package/dist/agents/session-slot.js +0 -6
- package/dist/agents/session-slot.js.map +0 -1
- package/dist/model-slots.js +0 -14
- package/dist/model-slots.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ResolvedModelRoles } from "../model-roles.cjs";
|
|
3
3
|
import type { ReadableAdapterUsageAttachment } from "../record/family/adapter-usage/schema.cjs";
|
|
4
4
|
declare const Summary: Schema.Struct<{
|
|
5
5
|
rate: Schema.Union<readonly [Schema.Struct<{
|
|
@@ -36,7 +36,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
36
36
|
collectionComplete: Schema.Boolean;
|
|
37
37
|
reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
38
38
|
}>;
|
|
39
|
-
readonly
|
|
39
|
+
readonly roles: Schema.$Array<Schema.Struct<{
|
|
40
40
|
readonly rate: Schema.Union<readonly [Schema.Struct<{
|
|
41
41
|
readonly state: Schema.Literal<"exact">;
|
|
42
42
|
readonly value: Schema.Number;
|
|
@@ -51,7 +51,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
51
51
|
readonly unknownStatusCalls: Schema.Number;
|
|
52
52
|
readonly collectionComplete: Schema.Boolean;
|
|
53
53
|
readonly reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
54
|
-
readonly
|
|
54
|
+
readonly modelRole: Schema.NullOr<Schema.String>;
|
|
55
55
|
}>>;
|
|
56
56
|
readonly models: Schema.$Array<Schema.Struct<{
|
|
57
57
|
readonly rate: Schema.Union<readonly [Schema.Struct<{
|
|
@@ -68,7 +68,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
68
68
|
readonly unknownStatusCalls: Schema.Number;
|
|
69
69
|
readonly collectionComplete: Schema.Boolean;
|
|
70
70
|
readonly reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
71
|
-
readonly
|
|
71
|
+
readonly modelRole: Schema.NullOr<Schema.String>;
|
|
72
72
|
readonly provider: Schema.NullOr<Schema.String>;
|
|
73
73
|
readonly model: Schema.NullOr<Schema.String>;
|
|
74
74
|
}>>;
|
|
@@ -76,5 +76,5 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
76
76
|
/** Complete per-Attempt report; unknown model identities remain null. */
|
|
77
77
|
export type CacheReadReport = typeof CacheReadReportSchema.Type;
|
|
78
78
|
/** A historical collection marked complete is not proof of an explicit producer seal. */
|
|
79
|
-
export declare function projectCacheRead(usage: ReadableAdapterUsageAttachment | null,
|
|
79
|
+
export declare function projectCacheRead(usage: ReadableAdapterUsageAttachment | null, roles: ResolvedModelRoles | undefined, producerCompletenessKnown: boolean, absent?: "usage-not-recorded" | "source-invalid" | "adapter-usage-required"): CacheReadReport;
|
|
80
80
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ResolvedModelRoles } from "../model-roles.mjs";
|
|
3
3
|
import type { ReadableAdapterUsageAttachment } from "../record/family/adapter-usage/schema.mjs";
|
|
4
4
|
declare const Summary: Schema.Struct<{
|
|
5
5
|
rate: Schema.Union<readonly [Schema.Struct<{
|
|
@@ -36,7 +36,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
36
36
|
collectionComplete: Schema.Boolean;
|
|
37
37
|
reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
38
38
|
}>;
|
|
39
|
-
readonly
|
|
39
|
+
readonly roles: Schema.$Array<Schema.Struct<{
|
|
40
40
|
readonly rate: Schema.Union<readonly [Schema.Struct<{
|
|
41
41
|
readonly state: Schema.Literal<"exact">;
|
|
42
42
|
readonly value: Schema.Number;
|
|
@@ -51,7 +51,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
51
51
|
readonly unknownStatusCalls: Schema.Number;
|
|
52
52
|
readonly collectionComplete: Schema.Boolean;
|
|
53
53
|
readonly reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
54
|
-
readonly
|
|
54
|
+
readonly modelRole: Schema.NullOr<Schema.String>;
|
|
55
55
|
}>>;
|
|
56
56
|
readonly models: Schema.$Array<Schema.Struct<{
|
|
57
57
|
readonly rate: Schema.Union<readonly [Schema.Struct<{
|
|
@@ -68,7 +68,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
68
68
|
readonly unknownStatusCalls: Schema.Number;
|
|
69
69
|
readonly collectionComplete: Schema.Boolean;
|
|
70
70
|
readonly reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
71
|
-
readonly
|
|
71
|
+
readonly modelRole: Schema.NullOr<Schema.String>;
|
|
72
72
|
readonly provider: Schema.NullOr<Schema.String>;
|
|
73
73
|
readonly model: Schema.NullOr<Schema.String>;
|
|
74
74
|
}>>;
|
|
@@ -76,5 +76,5 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
76
76
|
/** Complete per-Attempt report; unknown model identities remain null. */
|
|
77
77
|
export type CacheReadReport = typeof CacheReadReportSchema.Type;
|
|
78
78
|
/** A historical collection marked complete is not proof of an explicit producer seal. */
|
|
79
|
-
export declare function projectCacheRead(usage: ReadableAdapterUsageAttachment | null,
|
|
79
|
+
export declare function projectCacheRead(usage: ReadableAdapterUsageAttachment | null, roles: ResolvedModelRoles | undefined, producerCompletenessKnown: boolean, absent?: "usage-not-recorded" | "source-invalid" | "adapter-usage-required"): CacheReadReport;
|
|
80
80
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ResolvedModelRoles } from "../model-roles.js";
|
|
3
3
|
import type { ReadableAdapterUsageAttachment } from "../record/family/adapter-usage/schema.js";
|
|
4
4
|
declare const Summary: Schema.Struct<{
|
|
5
5
|
rate: Schema.Union<readonly [Schema.Struct<{
|
|
@@ -36,7 +36,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
36
36
|
collectionComplete: Schema.Boolean;
|
|
37
37
|
reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
38
38
|
}>;
|
|
39
|
-
readonly
|
|
39
|
+
readonly roles: Schema.$Array<Schema.Struct<{
|
|
40
40
|
readonly rate: Schema.Union<readonly [Schema.Struct<{
|
|
41
41
|
readonly state: Schema.Literal<"exact">;
|
|
42
42
|
readonly value: Schema.Number;
|
|
@@ -51,7 +51,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
51
51
|
readonly unknownStatusCalls: Schema.Number;
|
|
52
52
|
readonly collectionComplete: Schema.Boolean;
|
|
53
53
|
readonly reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
54
|
-
readonly
|
|
54
|
+
readonly modelRole: Schema.NullOr<Schema.String>;
|
|
55
55
|
}>>;
|
|
56
56
|
readonly models: Schema.$Array<Schema.Struct<{
|
|
57
57
|
readonly rate: Schema.Union<readonly [Schema.Struct<{
|
|
@@ -68,7 +68,7 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
68
68
|
readonly unknownStatusCalls: Schema.Number;
|
|
69
69
|
readonly collectionComplete: Schema.Boolean;
|
|
70
70
|
readonly reasons: Schema.$Array<Schema.Literals<readonly ["usage-not-recorded", "source-invalid", "adapter-usage-required", "collection-incomplete", "call-status-unknown", "no-calls", "cache-read-missing", "input-total-missing", "zero-input-total", "unsafe-token-total"]>>;
|
|
71
|
-
readonly
|
|
71
|
+
readonly modelRole: Schema.NullOr<Schema.String>;
|
|
72
72
|
readonly provider: Schema.NullOr<Schema.String>;
|
|
73
73
|
readonly model: Schema.NullOr<Schema.String>;
|
|
74
74
|
}>>;
|
|
@@ -76,5 +76,5 @@ export declare const CacheReadReportSchema: Schema.Struct<{
|
|
|
76
76
|
/** Complete per-Attempt report; unknown model identities remain null. */
|
|
77
77
|
export type CacheReadReport = typeof CacheReadReportSchema.Type;
|
|
78
78
|
/** A historical collection marked complete is not proof of an explicit producer seal. */
|
|
79
|
-
export declare function projectCacheRead(usage: ReadableAdapterUsageAttachment | null,
|
|
79
|
+
export declare function projectCacheRead(usage: ReadableAdapterUsageAttachment | null, roles: ResolvedModelRoles | undefined, producerCompletenessKnown: boolean, absent?: "usage-not-recorded" | "source-invalid" | "adapter-usage-required"): CacheReadReport;
|
|
80
80
|
export {};
|
package/dist/o11y/derive.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive.js","sourceRoot":"","sources":["derive.ts"],"names":[],"mappings":"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","sourcesContent":["// 从归一化的 StreamEvent[] 折叠出结构化事实。\n// - deriveRunFacts:既有断言面消费的 legacy DerivedFacts(按 operationId 把 started+finished 折成 ToolCall);\n// 它不承载新的 logical occurrence / lifecycle 契约;新的 Fact 路径必须调用\n// deriveLogicalToolOccurrences。\n// - buildO11ySummary:给人看的 o11y 摘要,同时是宿主侧 `t.o11y` 与落盘 o11y.json 的同一份算法。\n// 一旦事件流归一好了,这两个折叠对所有 agent 通用。\nimport type { StreamEvent, DerivedFacts, ToolCall, SubagentCall, InputRequest, O11ySummary, TraceSpan, Usage, ToolName, JsonValue, EventPosition, LogicalToolLifecycle, LogicalToolOccurrence, LogicalToolOccurrenceDerivation, LogicalToolOccurrenceDeriveOptions, LogicalToolOccurrenceScopeTurn, OrphanToolOperationFinish, } from \"../types.ts\";\nimport type { EventId, ItemId, PositiveSafeInteger, SessionScopeId, ToolOccurrenceId, TurnId, } from \"../record/family/source-receipt/model.ts\";\nimport type { ObservedSourceEvent, ToolOccurrenceRelation, } from \"./observed.ts\";\nexport interface ObservedSourceProjectionSegment {\n readonly sessionId: SessionScopeId;\n readonly turnId: TurnId;\n readonly items: readonly ObservedSourceEvent[];\n}\nexport interface ObservedEventLedgerRow {\n readonly eventId: EventId;\n readonly itemId: ItemId;\n readonly sessionId: SessionScopeId;\n readonly turnId: TurnId;\n readonly sessionSequence: PositiveSafeInteger;\n readonly event: ObservedSourceEvent;\n}\nexport interface ObservedToolOccurrenceLedgerRow {\n readonly toolOccurrenceId: ToolOccurrenceId;\n readonly sessionId: SessionScopeId;\n /** Logical Turn membership belongs only to the start event. */\n readonly homeTurnId: TurnId;\n readonly startEventId: EventId;\n readonly startSessionSequence: PositiveSafeInteger;\n readonly finish: null | {\n readonly eventId: EventId;\n /** The finish retains its actual physical Turn. */\n readonly turnId: TurnId;\n readonly sessionSequence: PositiveSafeInteger;\n };\n}\nexport type ObservedSourceProjectionIssue = \"duplicate-event-id\" | \"duplicate-item-id\" | \"duplicate-session-sequence\" | \"non-increasing-segment-sequence\" | \"duplicate-tool-start\" | \"exact-finish-without-start\" | \"cross-session-tool-finish\" | \"non-later-tool-finish\" | \"duplicate-exact-tool-finish\";\nexport type ObservedSourceProjection = {\n readonly state: \"available\";\n readonly events: readonly ObservedEventLedgerRow[];\n readonly toolOccurrences: readonly ObservedToolOccurrenceLedgerRow[];\n} | {\n readonly state: \"invalid\";\n readonly issues: readonly ObservedSourceProjectionIssue[];\n};\ninterface MutableObservedToolOccurrence {\n readonly toolOccurrenceId: ToolOccurrenceId;\n readonly sessionId: SessionScopeId;\n readonly homeTurnId: TurnId;\n readonly startEventId: EventId;\n readonly startSessionSequence: PositiveSafeInteger;\n finish: ObservedToolOccurrenceLedgerRow[\"finish\"];\n}\n/**\n * The sole pure projector for current observed source rows. It validates\n * source-owned identity and lifecycle without access to Adapter operation IDs.\n */\nexport function projectObservedSourceEvents(segments: readonly ObservedSourceProjectionSegment[]): ObservedSourceProjection {\n const issues = new Set<ObservedSourceProjectionIssue>();\n const eventIds = new Set<EventId>();\n const itemIds = new Set<ItemId>();\n const sequenceBySession = new Map<SessionScopeId, Set<number>>();\n const sessionOrder = new Map<SessionScopeId, number>();\n const events: ObservedEventLedgerRow[] = [];\n for (const segment of segments) {\n if (!sessionOrder.has(segment.sessionId)) {\n sessionOrder.set(segment.sessionId, sessionOrder.size);\n }\n let previousSequence = 0;\n const sessionSequences = sequenceBySession.get(segment.sessionId) ?? new Set<number>();\n sequenceBySession.set(segment.sessionId, sessionSequences);\n for (const event of segment.items) {\n if (eventIds.has(event.eventId))\n issues.add(\"duplicate-event-id\");\n if (itemIds.has(event.itemId))\n issues.add(\"duplicate-item-id\");\n if (sessionSequences.has(event.sessionSequence))\n issues.add(\"duplicate-session-sequence\");\n if (event.sessionSequence <= previousSequence)\n issues.add(\"non-increasing-segment-sequence\");\n eventIds.add(event.eventId);\n itemIds.add(event.itemId);\n sessionSequences.add(event.sessionSequence);\n previousSequence = event.sessionSequence;\n events.push(Object.freeze({\n eventId: event.eventId,\n itemId: event.itemId,\n sessionId: segment.sessionId,\n turnId: segment.turnId,\n sessionSequence: event.sessionSequence,\n event,\n }));\n }\n }\n const orderedEvents = [...events].sort((left, right) => (sessionOrder.get(left.sessionId) ?? Number.MAX_SAFE_INTEGER) -\n (sessionOrder.get(right.sessionId) ?? Number.MAX_SAFE_INTEGER) ||\n left.sessionSequence - right.sessionSequence);\n const occurrences = new Map<ToolOccurrenceId, MutableObservedToolOccurrence>();\n for (const row of orderedEvents) {\n if (row.event.kind === \"tool-start\") {\n if (occurrences.has(row.event.toolOccurrenceId)) {\n issues.add(\"duplicate-tool-start\");\n continue;\n }\n occurrences.set(row.event.toolOccurrenceId, {\n toolOccurrenceId: row.event.toolOccurrenceId,\n sessionId: row.sessionId,\n homeTurnId: row.turnId,\n startEventId: row.eventId,\n startSessionSequence: row.sessionSequence,\n finish: null,\n });\n continue;\n }\n if (row.event.kind !== \"tool-finish\" || row.event.occurrence.state !== \"exact\")\n continue;\n applyExactFinish(occurrences, row, row.event.occurrence, issues);\n }\n if (issues.size > 0) {\n return Object.freeze({ state: \"invalid\" as const, issues: Object.freeze([...issues].sort()) });\n }\n return Object.freeze({\n state: \"available\" as const,\n events: Object.freeze(orderedEvents),\n toolOccurrences: Object.freeze([...occurrences.values()]\n .map((occurrence) => Object.freeze({ ...occurrence }))),\n });\n}\nfunction applyExactFinish(occurrences: Map<ToolOccurrenceId, MutableObservedToolOccurrence>, row: ObservedEventLedgerRow, relation: Extract<ToolOccurrenceRelation, {\n readonly state: \"exact\";\n}>, issues: Set<ObservedSourceProjectionIssue>): void {\n const occurrence = occurrences.get(relation.toolOccurrenceId);\n if (occurrence === undefined) {\n issues.add(\"exact-finish-without-start\");\n return;\n }\n if (occurrence.sessionId !== row.sessionId) {\n issues.add(\"cross-session-tool-finish\");\n return;\n }\n if (occurrence.startSessionSequence >= row.sessionSequence) {\n issues.add(\"non-later-tool-finish\");\n return;\n }\n if (occurrence.finish !== null) {\n issues.add(\"duplicate-exact-tool-finish\");\n return;\n }\n occurrence.finish = Object.freeze({\n eventId: row.eventId,\n turnId: row.turnId,\n sessionSequence: row.sessionSequence,\n });\n}\n// ───────────────────────── 小工具 ─────────────────────────\n/** 把 JsonValue 当对象取字段;非对象返回 undefined。 */\nfunction field(input: JsonValue | undefined, key: string): JsonValue | undefined {\n if (input && typeof input === \"object\" && !Array.isArray(input)) {\n return (input as globalThis.Record<string, JsonValue>)[key];\n }\n return undefined;\n}\n/** 按候选 key 顺序取第一个字符串。 */\nfunction pickString(input: JsonValue | undefined, keys: string[]): string | undefined {\n for (const k of keys) {\n const v = field(input, k);\n if (typeof v === \"string\" && v)\n return v;\n }\n return undefined;\n}\n/** command 可能是 string 或 string[],归一成一行命令文本。 */\nfunction pickCommand(input: JsonValue | undefined): string | undefined {\n const cmd = field(input, \"command\") ?? field(input, \"cmd\");\n if (typeof cmd === \"string\")\n return cmd;\n if (Array.isArray(cmd))\n return cmd.filter((p) => typeof p === \"string\").join(\" \");\n const program = field(input, \"program\");\n const args = field(input, \"args\");\n if (typeof program === \"string\" && Array.isArray(args)) {\n return `${program} ${args.filter((p) => typeof p === \"string\").join(\" \")}`;\n }\n return undefined;\n}\n/** 从工具结果 output 里抠 exit_code(codex shell 结果常嵌在 output / metadata 里)。 */\nfunction pickExitCode(output: JsonValue | undefined): number | undefined {\n const direct = field(output, \"exit_code\") ?? field(output, \"exitCode\");\n if (typeof direct === \"number\")\n return direct;\n const meta = field(output, \"metadata\");\n const nested = field(meta, \"exit_code\") ?? field(meta, \"exitCode\");\n if (typeof nested === \"number\")\n return nested;\n return undefined;\n}\n// ───────────────────────── deriveRunFacts ─────────────────────────\nexport function deriveRunFacts(events: readonly StreamEvent[]): DerivedFacts {\n // 折叠是逐条按发生顺序进行的:started 追加一条新操作,finished 回填「当前还没配上 finished 的\n // 同 operationId 操作」。operationId 只在一个 started→finished 配对内保证稳定,不保证跨轮唯一。\n // 同一个 id 在 finished 后再次 started 是一条新操作,不覆盖前一轮记录。\n const toolCalls: ToolCall[] = [];\n const openToolByOperationId = new Map<string, number>();\n const subagentCalls: SubagentCall[] = [];\n const openSubagentByOperationId = new Map<string, number>();\n const inputRequests: InputRequest[] = [];\n let messageCount = 0;\n let compactions = 0;\n let contextInjections = 0;\n for (const ev of events) {\n switch (ev.type) {\n case \"message\":\n messageCount += 1;\n break;\n case \"context.injected\":\n contextInjections += 1;\n break;\n case \"operation.started\": {\n if (ev.operation.kind === \"tool\") {\n openToolByOperationId.set(ev.operationId, toolCalls.length);\n toolCalls.push({\n operationId: ev.operationId,\n name: ev.operation.tool ?? \"unknown\",\n originalName: ev.operation.name,\n input: ev.operation.input,\n status: \"pending\",\n });\n }\n else {\n openSubagentByOperationId.set(ev.operationId, subagentCalls.length);\n subagentCalls.push({\n operationId: ev.operationId,\n name: ev.operation.name,\n remoteUrl: ev.operation.remoteUrl,\n status: \"pending\",\n });\n }\n break;\n }\n case \"operation.finished\": {\n if (ev.kind === \"tool\") {\n const idx = openToolByOperationId.get(ev.operationId);\n if (idx !== undefined) {\n toolCalls[idx].output = ev.output;\n toolCalls[idx].status = ev.status;\n openToolByOperationId.delete(ev.operationId);\n }\n else {\n toolCalls.push({\n operationId: ev.operationId,\n name: \"unknown\",\n input: null,\n output: ev.output,\n status: ev.status,\n });\n }\n }\n else {\n const idx = openSubagentByOperationId.get(ev.operationId);\n if (idx !== undefined) {\n subagentCalls[idx].output = ev.output;\n subagentCalls[idx].status = ev.status;\n openSubagentByOperationId.delete(ev.operationId);\n }\n else {\n subagentCalls.push({\n operationId: ev.operationId,\n name: \"unknown\",\n output: ev.output,\n status: ev.status,\n });\n }\n }\n break;\n }\n case \"input.requested\":\n inputRequests.push(ev.request);\n break;\n case \"compaction\":\n compactions += 1;\n break;\n default:\n break;\n }\n }\n // parked:最后一条「有意义」的事件是 input.requested(忽略 thinking / compaction 这类尾随噪声)。\n let parked = false;\n for (let i = events.length - 1; i >= 0; i--) {\n const t = events[i].type;\n if (t === \"thinking\" || t === \"compaction\")\n continue;\n parked = t === \"input.requested\";\n break;\n }\n return {\n toolCalls,\n subagentCalls,\n inputRequests,\n parked,\n messageCount,\n compactions,\n contextInjections,\n };\n}\n// ───────────────────────── logical tool occurrences ─────────────────────────\ninterface PendingLogicalToolOccurrence {\n readonly occurrence: Omit<LogicalToolOccurrence, \"lifecycle\">;\n finished?: ToolOperationFinish;\n /** 同一 operationId 在前一笔未结束时再次 started,无法可靠把后续 finish 交给任一笔。 */\n ambiguous?: boolean;\n}\ninterface ToolOperationFinish {\n readonly status: \"completed\" | \"failed\" | \"rejected\";\n readonly position: EventPosition;\n readonly output: LogicalToolOccurrence[\"output\"];\n}\n/**\n * 从一条 Turn 的有序事件流关联 logical tool occurrence。\n *\n * occurrence identity 锚定在 started 的 session/turn/event position;operationId 只在一笔\n * 未结束 operation 的 started → finished 配对期间使用。orphan finished 因而只作为协议诊断\n * 返回,不能伪造 input、command 或可匹配的 occurrence。\n */\nexport function deriveLogicalToolOccurrences(events: readonly StreamEvent[], options: LogicalToolOccurrenceDeriveOptions): LogicalToolOccurrenceDerivation {\n assertOccurrenceScope(options);\n const firstEventOrdinal = options.firstEventOrdinal ?? 0;\n assertNonNegativeSafeInteger(firstEventOrdinal, \"firstEventOrdinal\");\n const pending: PendingLogicalToolOccurrence[] = [];\n const openByOperationId = new Map<string, PendingLogicalToolOccurrence>();\n const ambiguousOperationIds = new Set<string>();\n const orphanFinishes: OrphanToolOperationFinish[] = [];\n for (let eventIndex = 0; eventIndex < events.length; eventIndex += 1) {\n const event = events[eventIndex]!;\n const position = eventPosition(options.turnOrdinal, firstEventOrdinal + eventIndex);\n if (event.type === \"operation.started\" && event.operation.kind === \"tool\") {\n const occurrence: PendingLogicalToolOccurrence = {\n occurrence: {\n id: logicalOccurrenceId(options, position),\n session: options.session,\n turn: options.turn,\n name: event.operation.tool === undefined\n ? { original: event.operation.name }\n : { original: event.operation.name, canonical: event.operation.tool },\n input: evidenceForEventValue(event, \"input\", event.operation.input),\n output: { state: \"unavailable\", reason: \"tool-output-not-finished\" },\n ...(event.operation.command === undefined ? {} : { command: event.operation.command }),\n start: position,\n },\n };\n const alreadyOpen = openByOperationId.get(event.operationId);\n if (ambiguousOperationIds.has(event.operationId)) {\n occurrence.ambiguous = true;\n }\n else if (alreadyOpen !== undefined) {\n // operationId 只允许在前一笔结束后复用。重叠复用时不能可靠配对,宁可让 lifecycle\n // unavailable,也不把一个 finish 错写给另一笔 occurrence。\n alreadyOpen.ambiguous = true;\n occurrence.ambiguous = true;\n openByOperationId.delete(event.operationId);\n ambiguousOperationIds.add(event.operationId);\n }\n else {\n openByOperationId.set(event.operationId, occurrence);\n }\n pending.push(occurrence);\n continue;\n }\n if (event.type === \"operation.finished\" && event.kind === \"tool\") {\n const finished: ToolOperationFinish = {\n status: event.status,\n position,\n output: event.output === undefined\n ? { state: \"unavailable\", reason: \"tool-output-absent\" }\n : evidenceForEventValue(event, \"output\", event.output),\n };\n const started = openByOperationId.get(event.operationId);\n if (started === undefined || ambiguousOperationIds.has(event.operationId)) {\n orphanFinishes.push({\n session: options.session,\n turn: options.turn,\n operationId: event.operationId,\n status: finished.status,\n position: finished.position,\n });\n }\n else {\n started.finished = finished;\n openByOperationId.delete(event.operationId);\n }\n }\n }\n return {\n occurrences: pending.map((item) => ({\n ...item.occurrence,\n output: outputFor(item, options.outcome),\n lifecycle: lifecycleFor(item, options.outcome),\n })),\n orphanFinishes,\n };\n}\nfunction evidenceForEventValue(event: StreamEvent, field: string, value: JsonValue): LogicalToolOccurrence[\"input\"] {\n const redacted = opaquePointersFor(event.redacted, field);\n if (redacted.length > 0) {\n return Object.freeze({\n state: \"partial\" as const,\n value,\n opaquePointers: redacted,\n reason: \"redacted\" as const,\n });\n }\n const truncated = opaquePointersFor(event.truncated?.map((entry) => entry.path), field);\n if (truncated.length > 0) {\n return Object.freeze({\n state: \"partial\" as const,\n value,\n opaquePointers: truncated,\n reason: \"truncated\" as const,\n });\n }\n return Object.freeze({ state: \"complete\" as const, value });\n}\n/**\n * Event truncation paths begin with the event field (`input`, `output`) and\n * use dots for nested JSON segments. Project them into the field-relative\n * JSON-pointer form that Match diagnostics can retain. Accepting an already\n * pointer-shaped producer path makes redaction declarations equally precise.\n */\nfunction opaquePointersFor(paths: readonly string[] | undefined, field: string): readonly string[] {\n if (paths === undefined || paths.length === 0)\n return Object.freeze([]);\n const pointers = new Set<string>();\n for (const path of paths) {\n const pointer = fieldRelativePointer(path, field);\n if (pointer !== undefined)\n pointers.add(pointer);\n }\n return Object.freeze([...pointers]);\n}\nfunction fieldRelativePointer(path: string, field: string): string | undefined {\n const dotPath = path.startsWith(\"operation.\") ? path.slice(\"operation.\".length) : path;\n if (dotPath === field)\n return \"/\";\n if (dotPath.startsWith(`${field}.`)) {\n return `/${dotPath.slice(field.length + 1).split(\".\").map(escapeJsonPointer).join(\"/\")}`;\n }\n if (!path.startsWith(\"/\"))\n return undefined;\n const segments = path.slice(1).split(\"/\");\n if (segments[0] !== field)\n return undefined;\n return segments.length === 1 ? \"/\" : `/${segments.slice(1).join(\"/\")}`;\n}\nfunction escapeJsonPointer(segment: string): string {\n return segment.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nfunction outputFor(occurrence: PendingLogicalToolOccurrence, outcome: LogicalToolOccurrenceDeriveOptions[\"outcome\"]): LogicalToolOccurrence[\"output\"] {\n if (occurrence.finished !== undefined && !occurrence.ambiguous)\n return occurrence.finished.output;\n if (outcome !== undefined && !occurrence.ambiguous) {\n return Object.freeze({ state: \"unavailable\" as const, reason: \"tool-output-pending\" });\n }\n return Object.freeze({ state: \"unavailable\" as const, reason: \"tool-output-missing-lifecycle-evidence\" });\n}\nfunction lifecycleFor(occurrence: PendingLogicalToolOccurrence, outcome: LogicalToolOccurrenceDeriveOptions[\"outcome\"]): LogicalToolLifecycle {\n if (occurrence.finished !== undefined && !occurrence.ambiguous) {\n return {\n state: \"available\",\n status: occurrence.finished.status,\n finish: occurrence.finished.position,\n };\n }\n // A trustworthy Turn outcome closes the response boundary, not every external tool call.\n // A visible, unambiguous start without a finish is therefore a pending call. Only a\n // genuinely partial stream (no outcome) or an ambiguous pairing remains opaque.\n if (outcome !== undefined && !occurrence.ambiguous) {\n return { state: \"available\", status: \"pending\" };\n }\n return {\n state: \"opaque\",\n reason: outcome === undefined ? \"partial-stream\" : \"missing-lifecycle-evidence\",\n };\n}\nfunction assertOccurrenceScope(options: LogicalToolOccurrenceDeriveOptions): void {\n if (options.session.length === 0)\n throw new Error(\"Logical tool occurrence session must not be empty.\");\n if (options.turn.length === 0)\n throw new Error(\"Logical tool occurrence turn must not be empty.\");\n assertNonNegativeSafeInteger(options.turnOrdinal, \"turnOrdinal\");\n}\nfunction assertNonNegativeSafeInteger(value: number, name: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`Logical tool occurrence ${name} must be a non-negative safe integer.`);\n }\n}\nfunction eventPosition(turnOrdinal: number, eventOrdinal: number): EventPosition {\n assertNonNegativeSafeInteger(eventOrdinal, \"eventOrdinal\");\n return { turnOrdinal, eventOrdinal };\n}\nfunction logicalOccurrenceId(options: LogicalToolOccurrenceDeriveOptions, start: EventPosition): string {\n // JSON array encoding avoids delimiter collision when adapter-provided session / turn IDs contain punctuation.\n return JSON.stringify([\"niceeval.logical-tool-occurrence/1\", options.session, options.turn, start.turnOrdinal, start.eventOrdinal]);\n}\n/**\n * Projects a frozen scope into logical tool occurrences. Pairing is scoped\n * per Session, never across sessions, because operationId is only stable for\n * one started → finished lifecycle in one session. A finish in a later Turn\n * therefore closes an earlier open start in that same session.\n */\nexport function deriveScopedLogicalToolOccurrences(turns: readonly LogicalToolOccurrenceScopeTurn[]): LogicalToolOccurrenceDerivation {\n const occurrences: LogicalToolOccurrence[] = [];\n const orphanFinishes: OrphanToolOperationFinish[] = [];\n const bySession = new Map<string, LogicalToolOccurrenceScopeTurn[]>();\n for (const turn of turns) {\n const prior = bySession.get(turn.session);\n if (prior === undefined)\n bySession.set(turn.session, [turn]);\n else\n prior.push(turn);\n }\n for (const sessionTurns of bySession.values()) {\n const ordered = [...sessionTurns].sort((left, right) => left.turnOrdinal - right.turnOrdinal);\n const pending: PendingScopedOccurrence[] = [];\n const openByOperationId = new Map<string, PendingScopedOccurrence>();\n const ambiguousOperationIds = new Set<string>();\n for (const turn of ordered) {\n assertOccurrenceScope(turn);\n const firstEventOrdinal = turn.firstEventOrdinal ?? 0;\n assertNonNegativeSafeInteger(firstEventOrdinal, \"firstEventOrdinal\");\n for (let eventIndex = 0; eventIndex < turn.events.length; eventIndex += 1) {\n const event = turn.events[eventIndex]!;\n const position = eventPosition(turn.turnOrdinal, firstEventOrdinal + eventIndex);\n if (event.type === \"operation.started\" && event.operation.kind === \"tool\") {\n const occurrence: PendingScopedOccurrence = {\n occurrence: {\n id: logicalOccurrenceId(turn, position),\n session: turn.session,\n turn: turn.turn,\n name: event.operation.tool === undefined\n ? { original: event.operation.name }\n : { original: event.operation.name, canonical: event.operation.tool },\n input: evidenceForEventValue(event, \"input\", event.operation.input),\n output: { state: \"unavailable\", reason: \"tool-output-not-finished\" },\n ...(event.operation.command === undefined ? {} : { command: event.operation.command }),\n start: position,\n },\n lastOutcome: turn.outcome,\n };\n const alreadyOpen = openByOperationId.get(event.operationId);\n if (ambiguousOperationIds.has(event.operationId)) {\n occurrence.ambiguous = true;\n }\n else if (alreadyOpen !== undefined) {\n alreadyOpen.ambiguous = true;\n occurrence.ambiguous = true;\n openByOperationId.delete(event.operationId);\n ambiguousOperationIds.add(event.operationId);\n }\n else {\n openByOperationId.set(event.operationId, occurrence);\n }\n pending.push(occurrence);\n continue;\n }\n if (event.type === \"operation.finished\" && event.kind === \"tool\") {\n const finished: ToolOperationFinish = {\n status: event.status,\n position,\n output: event.output === undefined\n ? { state: \"unavailable\", reason: \"tool-output-absent\" }\n : evidenceForEventValue(event, \"output\", event.output),\n };\n const started = openByOperationId.get(event.operationId);\n if (started === undefined || ambiguousOperationIds.has(event.operationId)) {\n orphanFinishes.push({\n session: turn.session,\n turn: turn.turn,\n operationId: event.operationId,\n status: finished.status,\n position: finished.position,\n });\n }\n else {\n started.finished = finished;\n openByOperationId.delete(event.operationId);\n }\n }\n }\n for (const open of openByOperationId.values())\n open.lastOutcome = turn.outcome;\n }\n for (const item of pending) {\n occurrences.push(Object.freeze({\n ...item.occurrence,\n output: outputFor(item, item.lastOutcome),\n lifecycle: lifecycleFor(item, item.lastOutcome),\n }));\n }\n }\n return Object.freeze({\n occurrences: Object.freeze(occurrences),\n orphanFinishes: Object.freeze(orphanFinishes),\n });\n}\ninterface PendingScopedOccurrence extends PendingLogicalToolOccurrence {\n lastOutcome: LogicalToolOccurrenceDeriveOptions[\"outcome\"];\n}\n// ───────────────────────── extractUsageFromSpans ─────────────────────────\n/**\n * adapter 未报 usage 时的兜底:从 OTLP span 属性里提取 token 用量。\n * 按 OpenTelemetry GenAI 语义约定累加所有模型调用 span 的用量字段。\n * 返回 undefined 表示 span 里也没有用量信息。\n */\nexport function extractUsageFromSpans(spans: readonly TraceSpan[]): Usage | undefined {\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens = 0;\n let cacheCreationTokens = 0;\n for (const span of spans) {\n const a = span.attributes ?? {};\n // OpenTelemetry GenAI 语义约定(新旧两套 key 都认);cache_read/cache_creation 是\n // 常见 vendor instrumentation(如 Anthropic OTel 插桩)对同一约定族的扩展属性。\n inputTokens += numAttr(a, \"gen_ai.usage.input_tokens\", \"gen_ai.usage.prompt_tokens\");\n outputTokens += numAttr(a, \"gen_ai.usage.output_tokens\", \"gen_ai.usage.completion_tokens\");\n cacheReadTokens += numAttr(a, \"gen_ai.usage.cache_read_input_tokens\");\n cacheCreationTokens += numAttr(a, \"gen_ai.usage.cache_creation_input_tokens\");\n }\n if (inputTokens === 0 && outputTokens === 0)\n return undefined;\n const u: Usage = { inputTokens, outputTokens };\n if (cacheReadTokens > 0)\n u.cacheReadTokens = cacheReadTokens;\n if (cacheCreationTokens > 0)\n u.cacheCreationTokens = cacheCreationTokens;\n return u;\n}\nfunction numAttr(attrs: globalThis.Record<string, JsonValue>, ...keys: string[]): number {\n for (const k of keys) {\n const v = attrs[k];\n if (typeof v === \"number\" && v > 0)\n return v;\n }\n return 0;\n}\n// ───────────────────────── buildO11ySummary ─────────────────────────\nexport function buildO11ySummary(events: readonly StreamEvent[]): O11ySummary {\n const toolCalls: Partial<globalThis.Record<ToolName, number>> = {};\n let totalToolCalls = 0;\n const filesRead = new Set<string>();\n const filesModified = new Set<string>();\n const shellCommands: {\n command: string;\n exitCode?: number;\n success?: boolean;\n }[] = [];\n const webFetches: {\n url: string;\n status?: number;\n success?: boolean;\n }[] = [];\n const errors: string[] = [];\n let thinkingBlocks = 0;\n let compactions = 0;\n let totalTurns = 0;\n for (const ev of events) {\n switch (ev.type) {\n case \"message\":\n if (ev.role === \"assistant\")\n totalTurns += 1;\n break;\n case \"thinking\":\n thinkingBlocks += 1;\n break;\n case \"compaction\":\n compactions += 1;\n break;\n case \"error\":\n if (ev.message)\n errors.push(ev.message);\n break;\n default:\n break;\n }\n }\n // 人读摘要直接消费同一份严格配对后的 ToolCall,避免按 operationId 全局索引时把跨轮复用\n // 或 finished-before-started 容错事件错配给另一条操作。没有 originalName 的是孤儿 finished 占位。\n for (const call of deriveRunFacts(events).toolCalls) {\n if (call.originalName === undefined)\n continue;\n const canonical: ToolName = call.name;\n toolCalls[canonical] = (toolCalls[canonical] ?? 0) + 1;\n totalToolCalls += 1;\n if (canonical === \"file_read\") {\n const path = pickString(call.input, [\"path\", \"file\", \"file_path\", \"filename\"]);\n if (path)\n filesRead.add(path);\n }\n else if (canonical === \"file_write\" || canonical === \"file_edit\") {\n const path = pickString(call.input, [\"path\", \"file\", \"file_path\", \"filename\"]);\n if (path)\n filesModified.add(path);\n }\n else if (canonical === \"shell\") {\n const command = pickCommand(call.input);\n if (command) {\n const entry: {\n command: string;\n exitCode?: number;\n success?: boolean;\n } = { command };\n if (call.status !== \"pending\") {\n entry.success = call.status === \"completed\";\n const exit = pickExitCode(call.output);\n if (exit !== undefined)\n entry.exitCode = exit;\n }\n shellCommands.push(entry);\n }\n }\n else if (canonical === \"web_fetch\") {\n const url = pickString(call.input, [\"url\", \"uri\", \"endpoint\", \"href\"]);\n if (url) {\n const entry: {\n url: string;\n status?: number;\n success?: boolean;\n } = { url };\n if (call.status !== \"pending\") {\n entry.success = call.status === \"completed\";\n const status = field(call.output, \"status\");\n if (typeof status === \"number\")\n entry.status = status;\n }\n webFetches.push(entry);\n }\n }\n }\n return {\n totalTurns,\n toolCalls,\n totalToolCalls,\n filesRead: Array.from(filesRead),\n filesModified: Array.from(filesModified),\n shellCommands,\n webFetches,\n errors,\n thinkingBlocks,\n compactions,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["derive.ts"],"names":[],"mappings":"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","sourcesContent":["// 从归一化的 StreamEvent[] 折叠出结构化事实。\n// - deriveRunFacts:既有断言面消费的 legacy DerivedFacts(按 operationId 把 started+finished 折成 ToolCall);\n// 它不承载新的 logical occurrence / lifecycle 契约;新的 Fact 路径必须调用\n// deriveLogicalToolOccurrences。\n// - buildO11ySummary:给人看的 o11y 摘要,同时是宿主侧 `t.o11y` 与落盘 o11y.json 的同一份算法。\n// 一旦事件流归一好了,这两个折叠对所有 agent 通用。\nimport type { StreamEvent, DerivedFacts, ToolCall, SubagentCall, InputRequest, ObservabilitySummary, TraceSpan, Usage, ToolName, JsonValue, EventPosition, LogicalToolLifecycle, LogicalToolOccurrence, LogicalToolOccurrenceDerivation, LogicalToolOccurrenceDeriveOptions, LogicalToolOccurrenceScopeTurn, OrphanToolOperationFinish, } from \"../types.ts\";\nimport type { EventId, ItemId, PositiveSafeInteger, SessionScopeId, ToolOccurrenceId, TurnId, } from \"../record/family/source-receipt/model.ts\";\nimport type { ObservedSourceEvent, ToolOccurrenceRelation, } from \"./observed.ts\";\nexport interface ObservedSourceProjectionSegment {\n readonly sessionId: SessionScopeId;\n readonly turnId: TurnId;\n readonly items: readonly ObservedSourceEvent[];\n}\nexport interface ObservedEventLedgerRow {\n readonly eventId: EventId;\n readonly itemId: ItemId;\n readonly sessionId: SessionScopeId;\n readonly turnId: TurnId;\n readonly sessionSequence: PositiveSafeInteger;\n readonly event: ObservedSourceEvent;\n}\nexport interface ObservedToolOccurrenceLedgerRow {\n readonly toolOccurrenceId: ToolOccurrenceId;\n readonly sessionId: SessionScopeId;\n /** Logical Turn membership belongs only to the start event. */\n readonly homeTurnId: TurnId;\n readonly startEventId: EventId;\n readonly startSessionSequence: PositiveSafeInteger;\n readonly finish: null | {\n readonly eventId: EventId;\n /** The finish retains its actual physical Turn. */\n readonly turnId: TurnId;\n readonly sessionSequence: PositiveSafeInteger;\n };\n}\nexport type ObservedSourceProjectionIssue = \"duplicate-event-id\" | \"duplicate-item-id\" | \"duplicate-session-sequence\" | \"non-increasing-segment-sequence\" | \"duplicate-tool-start\" | \"exact-finish-without-start\" | \"cross-session-tool-finish\" | \"non-later-tool-finish\" | \"duplicate-exact-tool-finish\";\nexport type ObservedSourceProjection = {\n readonly state: \"available\";\n readonly events: readonly ObservedEventLedgerRow[];\n readonly toolOccurrences: readonly ObservedToolOccurrenceLedgerRow[];\n} | {\n readonly state: \"invalid\";\n readonly issues: readonly ObservedSourceProjectionIssue[];\n};\ninterface MutableObservedToolOccurrence {\n readonly toolOccurrenceId: ToolOccurrenceId;\n readonly sessionId: SessionScopeId;\n readonly homeTurnId: TurnId;\n readonly startEventId: EventId;\n readonly startSessionSequence: PositiveSafeInteger;\n finish: ObservedToolOccurrenceLedgerRow[\"finish\"];\n}\n/**\n * The sole pure projector for current observed source rows. It validates\n * source-owned identity and lifecycle without access to Adapter operation IDs.\n */\nexport function projectObservedSourceEvents(segments: readonly ObservedSourceProjectionSegment[]): ObservedSourceProjection {\n const issues = new Set<ObservedSourceProjectionIssue>();\n const eventIds = new Set<EventId>();\n const itemIds = new Set<ItemId>();\n const sequenceBySession = new Map<SessionScopeId, Set<number>>();\n const sessionOrder = new Map<SessionScopeId, number>();\n const events: ObservedEventLedgerRow[] = [];\n for (const segment of segments) {\n if (!sessionOrder.has(segment.sessionId)) {\n sessionOrder.set(segment.sessionId, sessionOrder.size);\n }\n let previousSequence = 0;\n const sessionSequences = sequenceBySession.get(segment.sessionId) ?? new Set<number>();\n sequenceBySession.set(segment.sessionId, sessionSequences);\n for (const event of segment.items) {\n if (eventIds.has(event.eventId))\n issues.add(\"duplicate-event-id\");\n if (itemIds.has(event.itemId))\n issues.add(\"duplicate-item-id\");\n if (sessionSequences.has(event.sessionSequence))\n issues.add(\"duplicate-session-sequence\");\n if (event.sessionSequence <= previousSequence)\n issues.add(\"non-increasing-segment-sequence\");\n eventIds.add(event.eventId);\n itemIds.add(event.itemId);\n sessionSequences.add(event.sessionSequence);\n previousSequence = event.sessionSequence;\n events.push(Object.freeze({\n eventId: event.eventId,\n itemId: event.itemId,\n sessionId: segment.sessionId,\n turnId: segment.turnId,\n sessionSequence: event.sessionSequence,\n event,\n }));\n }\n }\n const orderedEvents = [...events].sort((left, right) => (sessionOrder.get(left.sessionId) ?? Number.MAX_SAFE_INTEGER) -\n (sessionOrder.get(right.sessionId) ?? Number.MAX_SAFE_INTEGER) ||\n left.sessionSequence - right.sessionSequence);\n const occurrences = new Map<ToolOccurrenceId, MutableObservedToolOccurrence>();\n for (const row of orderedEvents) {\n if (row.event.kind === \"tool-start\") {\n if (occurrences.has(row.event.toolOccurrenceId)) {\n issues.add(\"duplicate-tool-start\");\n continue;\n }\n occurrences.set(row.event.toolOccurrenceId, {\n toolOccurrenceId: row.event.toolOccurrenceId,\n sessionId: row.sessionId,\n homeTurnId: row.turnId,\n startEventId: row.eventId,\n startSessionSequence: row.sessionSequence,\n finish: null,\n });\n continue;\n }\n if (row.event.kind !== \"tool-finish\" || row.event.occurrence.state !== \"exact\")\n continue;\n applyExactFinish(occurrences, row, row.event.occurrence, issues);\n }\n if (issues.size > 0) {\n return Object.freeze({ state: \"invalid\" as const, issues: Object.freeze([...issues].sort()) });\n }\n return Object.freeze({\n state: \"available\" as const,\n events: Object.freeze(orderedEvents),\n toolOccurrences: Object.freeze([...occurrences.values()]\n .map((occurrence) => Object.freeze({ ...occurrence }))),\n });\n}\nfunction applyExactFinish(occurrences: Map<ToolOccurrenceId, MutableObservedToolOccurrence>, row: ObservedEventLedgerRow, relation: Extract<ToolOccurrenceRelation, {\n readonly state: \"exact\";\n}>, issues: Set<ObservedSourceProjectionIssue>): void {\n const occurrence = occurrences.get(relation.toolOccurrenceId);\n if (occurrence === undefined) {\n issues.add(\"exact-finish-without-start\");\n return;\n }\n if (occurrence.sessionId !== row.sessionId) {\n issues.add(\"cross-session-tool-finish\");\n return;\n }\n if (occurrence.startSessionSequence >= row.sessionSequence) {\n issues.add(\"non-later-tool-finish\");\n return;\n }\n if (occurrence.finish !== null) {\n issues.add(\"duplicate-exact-tool-finish\");\n return;\n }\n occurrence.finish = Object.freeze({\n eventId: row.eventId,\n turnId: row.turnId,\n sessionSequence: row.sessionSequence,\n });\n}\n// ───────────────────────── 小工具 ─────────────────────────\n/** 把 JsonValue 当对象取字段;非对象返回 undefined。 */\nfunction field(input: JsonValue | undefined, key: string): JsonValue | undefined {\n if (input && typeof input === \"object\" && !Array.isArray(input)) {\n return (input as globalThis.Record<string, JsonValue>)[key];\n }\n return undefined;\n}\n/** 按候选 key 顺序取第一个字符串。 */\nfunction pickString(input: JsonValue | undefined, keys: string[]): string | undefined {\n for (const k of keys) {\n const v = field(input, k);\n if (typeof v === \"string\" && v)\n return v;\n }\n return undefined;\n}\n/** command 可能是 string 或 string[],归一成一行命令文本。 */\nfunction pickCommand(input: JsonValue | undefined): string | undefined {\n const cmd = field(input, \"command\") ?? field(input, \"cmd\");\n if (typeof cmd === \"string\")\n return cmd;\n if (Array.isArray(cmd))\n return cmd.filter((p) => typeof p === \"string\").join(\" \");\n const program = field(input, \"program\");\n const args = field(input, \"args\");\n if (typeof program === \"string\" && Array.isArray(args)) {\n return `${program} ${args.filter((p) => typeof p === \"string\").join(\" \")}`;\n }\n return undefined;\n}\n/** 从工具结果 output 里抠 exit_code(codex shell 结果常嵌在 output / metadata 里)。 */\nfunction pickExitCode(output: JsonValue | undefined): number | undefined {\n const direct = field(output, \"exit_code\") ?? field(output, \"exitCode\");\n if (typeof direct === \"number\")\n return direct;\n const meta = field(output, \"metadata\");\n const nested = field(meta, \"exit_code\") ?? field(meta, \"exitCode\");\n if (typeof nested === \"number\")\n return nested;\n return undefined;\n}\n// ───────────────────────── deriveRunFacts ─────────────────────────\nexport function deriveRunFacts(events: readonly StreamEvent[]): DerivedFacts {\n // 折叠是逐条按发生顺序进行的:started 追加一条新操作,finished 回填「当前还没配上 finished 的\n // 同 operationId 操作」。operationId 只在一个 started→finished 配对内保证稳定,不保证跨轮唯一。\n // 同一个 id 在 finished 后再次 started 是一条新操作,不覆盖前一轮记录。\n const toolCalls: ToolCall[] = [];\n const openToolByOperationId = new Map<string, number>();\n const subagentCalls: SubagentCall[] = [];\n const openSubagentByOperationId = new Map<string, number>();\n const inputRequests: InputRequest[] = [];\n let messageCount = 0;\n let compactions = 0;\n let contextInjections = 0;\n for (const ev of events) {\n switch (ev.type) {\n case \"message\":\n messageCount += 1;\n break;\n case \"context.injected\":\n contextInjections += 1;\n break;\n case \"operation.started\": {\n if (ev.operation.kind === \"tool\") {\n openToolByOperationId.set(ev.operationId, toolCalls.length);\n toolCalls.push({\n operationId: ev.operationId,\n name: ev.operation.tool ?? \"unknown\",\n originalName: ev.operation.name,\n input: ev.operation.input,\n status: \"pending\",\n });\n }\n else {\n openSubagentByOperationId.set(ev.operationId, subagentCalls.length);\n subagentCalls.push({\n operationId: ev.operationId,\n name: ev.operation.name,\n remoteUrl: ev.operation.remoteUrl,\n status: \"pending\",\n });\n }\n break;\n }\n case \"operation.finished\": {\n if (ev.kind === \"tool\") {\n const idx = openToolByOperationId.get(ev.operationId);\n if (idx !== undefined) {\n toolCalls[idx].output = ev.output;\n toolCalls[idx].status = ev.status;\n openToolByOperationId.delete(ev.operationId);\n }\n else {\n toolCalls.push({\n operationId: ev.operationId,\n name: \"unknown\",\n input: null,\n output: ev.output,\n status: ev.status,\n });\n }\n }\n else {\n const idx = openSubagentByOperationId.get(ev.operationId);\n if (idx !== undefined) {\n subagentCalls[idx].output = ev.output;\n subagentCalls[idx].status = ev.status;\n openSubagentByOperationId.delete(ev.operationId);\n }\n else {\n subagentCalls.push({\n operationId: ev.operationId,\n name: \"unknown\",\n output: ev.output,\n status: ev.status,\n });\n }\n }\n break;\n }\n case \"input.requested\":\n inputRequests.push(ev.request);\n break;\n case \"compaction\":\n compactions += 1;\n break;\n default:\n break;\n }\n }\n // parked:最后一条「有意义」的事件是 input.requested(忽略 thinking / compaction 这类尾随噪声)。\n let parked = false;\n for (let i = events.length - 1; i >= 0; i--) {\n const t = events[i].type;\n if (t === \"thinking\" || t === \"compaction\")\n continue;\n parked = t === \"input.requested\";\n break;\n }\n return {\n toolCalls,\n subagentCalls,\n inputRequests,\n parked,\n messageCount,\n compactions,\n contextInjections,\n };\n}\n// ───────────────────────── logical tool occurrences ─────────────────────────\ninterface PendingLogicalToolOccurrence {\n readonly occurrence: Omit<LogicalToolOccurrence, \"lifecycle\">;\n finished?: ToolOperationFinish;\n /** 同一 operationId 在前一笔未结束时再次 started,无法可靠把后续 finish 交给任一笔。 */\n ambiguous?: boolean;\n}\ninterface ToolOperationFinish {\n readonly status: \"completed\" | \"failed\" | \"rejected\";\n readonly position: EventPosition;\n readonly output: LogicalToolOccurrence[\"output\"];\n}\n/**\n * 从一条 Turn 的有序事件流关联 logical tool occurrence。\n *\n * occurrence identity 锚定在 started 的 session/turn/event position;operationId 只在一笔\n * 未结束 operation 的 started → finished 配对期间使用。orphan finished 因而只作为协议诊断\n * 返回,不能伪造 input、command 或可匹配的 occurrence。\n */\nexport function deriveLogicalToolOccurrences(events: readonly StreamEvent[], options: LogicalToolOccurrenceDeriveOptions): LogicalToolOccurrenceDerivation {\n assertOccurrenceScope(options);\n const firstEventOrdinal = options.firstEventOrdinal ?? 0;\n assertNonNegativeSafeInteger(firstEventOrdinal, \"firstEventOrdinal\");\n const pending: PendingLogicalToolOccurrence[] = [];\n const openByOperationId = new Map<string, PendingLogicalToolOccurrence>();\n const ambiguousOperationIds = new Set<string>();\n const orphanFinishes: OrphanToolOperationFinish[] = [];\n for (let eventIndex = 0; eventIndex < events.length; eventIndex += 1) {\n const event = events[eventIndex]!;\n const position = eventPosition(options.turnOrdinal, firstEventOrdinal + eventIndex);\n if (event.type === \"operation.started\" && event.operation.kind === \"tool\") {\n const occurrence: PendingLogicalToolOccurrence = {\n occurrence: {\n id: logicalOccurrenceId(options, position),\n session: options.session,\n turn: options.turn,\n name: event.operation.tool === undefined\n ? { original: event.operation.name }\n : { original: event.operation.name, canonical: event.operation.tool },\n input: evidenceForEventValue(event, \"input\", event.operation.input),\n output: { state: \"unavailable\", reason: \"tool-output-not-finished\" },\n ...(event.operation.command === undefined ? {} : { command: event.operation.command }),\n start: position,\n },\n };\n const alreadyOpen = openByOperationId.get(event.operationId);\n if (ambiguousOperationIds.has(event.operationId)) {\n occurrence.ambiguous = true;\n }\n else if (alreadyOpen !== undefined) {\n // operationId 只允许在前一笔结束后复用。重叠复用时不能可靠配对,宁可让 lifecycle\n // unavailable,也不把一个 finish 错写给另一笔 occurrence。\n alreadyOpen.ambiguous = true;\n occurrence.ambiguous = true;\n openByOperationId.delete(event.operationId);\n ambiguousOperationIds.add(event.operationId);\n }\n else {\n openByOperationId.set(event.operationId, occurrence);\n }\n pending.push(occurrence);\n continue;\n }\n if (event.type === \"operation.finished\" && event.kind === \"tool\") {\n const finished: ToolOperationFinish = {\n status: event.status,\n position,\n output: event.output === undefined\n ? { state: \"unavailable\", reason: \"tool-output-absent\" }\n : evidenceForEventValue(event, \"output\", event.output),\n };\n const started = openByOperationId.get(event.operationId);\n if (started === undefined || ambiguousOperationIds.has(event.operationId)) {\n orphanFinishes.push({\n session: options.session,\n turn: options.turn,\n operationId: event.operationId,\n status: finished.status,\n position: finished.position,\n });\n }\n else {\n started.finished = finished;\n openByOperationId.delete(event.operationId);\n }\n }\n }\n return {\n occurrences: pending.map((item) => ({\n ...item.occurrence,\n output: outputFor(item, options.outcome),\n lifecycle: lifecycleFor(item, options.outcome),\n })),\n orphanFinishes,\n };\n}\nfunction evidenceForEventValue(event: StreamEvent, field: string, value: JsonValue): LogicalToolOccurrence[\"input\"] {\n const redacted = opaquePointersFor(event.redacted, field);\n if (redacted.length > 0) {\n return Object.freeze({\n state: \"partial\" as const,\n value,\n opaquePointers: redacted,\n reason: \"redacted\" as const,\n });\n }\n const truncated = opaquePointersFor(event.truncated?.map((entry) => entry.path), field);\n if (truncated.length > 0) {\n return Object.freeze({\n state: \"partial\" as const,\n value,\n opaquePointers: truncated,\n reason: \"truncated\" as const,\n });\n }\n return Object.freeze({ state: \"complete\" as const, value });\n}\n/**\n * Event truncation paths begin with the event field (`input`, `output`) and\n * use dots for nested JSON segments. Project them into the field-relative\n * JSON-pointer form that Match diagnostics can retain. Accepting an already\n * pointer-shaped producer path makes redaction declarations equally precise.\n */\nfunction opaquePointersFor(paths: readonly string[] | undefined, field: string): readonly string[] {\n if (paths === undefined || paths.length === 0)\n return Object.freeze([]);\n const pointers = new Set<string>();\n for (const path of paths) {\n const pointer = fieldRelativePointer(path, field);\n if (pointer !== undefined)\n pointers.add(pointer);\n }\n return Object.freeze([...pointers]);\n}\nfunction fieldRelativePointer(path: string, field: string): string | undefined {\n const dotPath = path.startsWith(\"operation.\") ? path.slice(\"operation.\".length) : path;\n if (dotPath === field)\n return \"/\";\n if (dotPath.startsWith(`${field}.`)) {\n return `/${dotPath.slice(field.length + 1).split(\".\").map(escapeJsonPointer).join(\"/\")}`;\n }\n if (!path.startsWith(\"/\"))\n return undefined;\n const segments = path.slice(1).split(\"/\");\n if (segments[0] !== field)\n return undefined;\n return segments.length === 1 ? \"/\" : `/${segments.slice(1).join(\"/\")}`;\n}\nfunction escapeJsonPointer(segment: string): string {\n return segment.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nfunction outputFor(occurrence: PendingLogicalToolOccurrence, outcome: LogicalToolOccurrenceDeriveOptions[\"outcome\"]): LogicalToolOccurrence[\"output\"] {\n if (occurrence.finished !== undefined && !occurrence.ambiguous)\n return occurrence.finished.output;\n if (outcome !== undefined && !occurrence.ambiguous) {\n return Object.freeze({ state: \"unavailable\" as const, reason: \"tool-output-pending\" });\n }\n return Object.freeze({ state: \"unavailable\" as const, reason: \"tool-output-missing-lifecycle-evidence\" });\n}\nfunction lifecycleFor(occurrence: PendingLogicalToolOccurrence, outcome: LogicalToolOccurrenceDeriveOptions[\"outcome\"]): LogicalToolLifecycle {\n if (occurrence.finished !== undefined && !occurrence.ambiguous) {\n return {\n state: \"available\",\n status: occurrence.finished.status,\n finish: occurrence.finished.position,\n };\n }\n // A trustworthy Turn outcome closes the response boundary, not every external tool call.\n // A visible, unambiguous start without a finish is therefore a pending call. Only a\n // genuinely partial stream (no outcome) or an ambiguous pairing remains opaque.\n if (outcome !== undefined && !occurrence.ambiguous) {\n return { state: \"available\", status: \"pending\" };\n }\n return {\n state: \"opaque\",\n reason: outcome === undefined ? \"partial-stream\" : \"missing-lifecycle-evidence\",\n };\n}\nfunction assertOccurrenceScope(options: LogicalToolOccurrenceDeriveOptions): void {\n if (options.session.length === 0)\n throw new Error(\"Logical tool occurrence session must not be empty.\");\n if (options.turn.length === 0)\n throw new Error(\"Logical tool occurrence turn must not be empty.\");\n assertNonNegativeSafeInteger(options.turnOrdinal, \"turnOrdinal\");\n}\nfunction assertNonNegativeSafeInteger(value: number, name: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`Logical tool occurrence ${name} must be a non-negative safe integer.`);\n }\n}\nfunction eventPosition(turnOrdinal: number, eventOrdinal: number): EventPosition {\n assertNonNegativeSafeInteger(eventOrdinal, \"eventOrdinal\");\n return { turnOrdinal, eventOrdinal };\n}\nfunction logicalOccurrenceId(options: LogicalToolOccurrenceDeriveOptions, start: EventPosition): string {\n // JSON array encoding avoids delimiter collision when adapter-provided session / turn IDs contain punctuation.\n return JSON.stringify([\"niceeval.logical-tool-occurrence/1\", options.session, options.turn, start.turnOrdinal, start.eventOrdinal]);\n}\n/**\n * Projects a frozen scope into logical tool occurrences. Pairing is scoped\n * per Session, never across sessions, because operationId is only stable for\n * one started → finished lifecycle in one session. A finish in a later Turn\n * therefore closes an earlier open start in that same session.\n */\nexport function deriveScopedLogicalToolOccurrences(turns: readonly LogicalToolOccurrenceScopeTurn[]): LogicalToolOccurrenceDerivation {\n const occurrences: LogicalToolOccurrence[] = [];\n const orphanFinishes: OrphanToolOperationFinish[] = [];\n const bySession = new Map<string, LogicalToolOccurrenceScopeTurn[]>();\n for (const turn of turns) {\n const prior = bySession.get(turn.session);\n if (prior === undefined)\n bySession.set(turn.session, [turn]);\n else\n prior.push(turn);\n }\n for (const sessionTurns of bySession.values()) {\n const ordered = [...sessionTurns].sort((left, right) => left.turnOrdinal - right.turnOrdinal);\n const pending: PendingScopedOccurrence[] = [];\n const openByOperationId = new Map<string, PendingScopedOccurrence>();\n const ambiguousOperationIds = new Set<string>();\n for (const turn of ordered) {\n assertOccurrenceScope(turn);\n const firstEventOrdinal = turn.firstEventOrdinal ?? 0;\n assertNonNegativeSafeInteger(firstEventOrdinal, \"firstEventOrdinal\");\n for (let eventIndex = 0; eventIndex < turn.events.length; eventIndex += 1) {\n const event = turn.events[eventIndex]!;\n const position = eventPosition(turn.turnOrdinal, firstEventOrdinal + eventIndex);\n if (event.type === \"operation.started\" && event.operation.kind === \"tool\") {\n const occurrence: PendingScopedOccurrence = {\n occurrence: {\n id: logicalOccurrenceId(turn, position),\n session: turn.session,\n turn: turn.turn,\n name: event.operation.tool === undefined\n ? { original: event.operation.name }\n : { original: event.operation.name, canonical: event.operation.tool },\n input: evidenceForEventValue(event, \"input\", event.operation.input),\n output: { state: \"unavailable\", reason: \"tool-output-not-finished\" },\n ...(event.operation.command === undefined ? {} : { command: event.operation.command }),\n start: position,\n },\n lastOutcome: turn.outcome,\n };\n const alreadyOpen = openByOperationId.get(event.operationId);\n if (ambiguousOperationIds.has(event.operationId)) {\n occurrence.ambiguous = true;\n }\n else if (alreadyOpen !== undefined) {\n alreadyOpen.ambiguous = true;\n occurrence.ambiguous = true;\n openByOperationId.delete(event.operationId);\n ambiguousOperationIds.add(event.operationId);\n }\n else {\n openByOperationId.set(event.operationId, occurrence);\n }\n pending.push(occurrence);\n continue;\n }\n if (event.type === \"operation.finished\" && event.kind === \"tool\") {\n const finished: ToolOperationFinish = {\n status: event.status,\n position,\n output: event.output === undefined\n ? { state: \"unavailable\", reason: \"tool-output-absent\" }\n : evidenceForEventValue(event, \"output\", event.output),\n };\n const started = openByOperationId.get(event.operationId);\n if (started === undefined || ambiguousOperationIds.has(event.operationId)) {\n orphanFinishes.push({\n session: turn.session,\n turn: turn.turn,\n operationId: event.operationId,\n status: finished.status,\n position: finished.position,\n });\n }\n else {\n started.finished = finished;\n openByOperationId.delete(event.operationId);\n }\n }\n }\n for (const open of openByOperationId.values())\n open.lastOutcome = turn.outcome;\n }\n for (const item of pending) {\n occurrences.push(Object.freeze({\n ...item.occurrence,\n output: outputFor(item, item.lastOutcome),\n lifecycle: lifecycleFor(item, item.lastOutcome),\n }));\n }\n }\n return Object.freeze({\n occurrences: Object.freeze(occurrences),\n orphanFinishes: Object.freeze(orphanFinishes),\n });\n}\ninterface PendingScopedOccurrence extends PendingLogicalToolOccurrence {\n lastOutcome: LogicalToolOccurrenceDeriveOptions[\"outcome\"];\n}\n// ───────────────────────── extractUsageFromSpans ─────────────────────────\n/**\n * adapter 未报 usage 时的兜底:从 OTLP span 属性里提取 token 用量。\n * 按 OpenTelemetry GenAI 语义约定累加所有模型调用 span 的用量字段。\n * 返回 undefined 表示 span 里也没有用量信息。\n */\nexport function extractUsageFromSpans(spans: readonly TraceSpan[]): Usage | undefined {\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens = 0;\n let cacheCreationTokens = 0;\n for (const span of spans) {\n const a = span.attributes ?? {};\n // OpenTelemetry GenAI 语义约定(新旧两套 key 都认);cache_read/cache_creation 是\n // 常见 vendor instrumentation(如 Anthropic OTel 插桩)对同一约定族的扩展属性。\n inputTokens += numAttr(a, \"gen_ai.usage.input_tokens\", \"gen_ai.usage.prompt_tokens\");\n outputTokens += numAttr(a, \"gen_ai.usage.output_tokens\", \"gen_ai.usage.completion_tokens\");\n cacheReadTokens += numAttr(a, \"gen_ai.usage.cache_read_input_tokens\");\n cacheCreationTokens += numAttr(a, \"gen_ai.usage.cache_creation_input_tokens\");\n }\n if (inputTokens === 0 && outputTokens === 0)\n return undefined;\n const u: Usage = { inputTokens, outputTokens };\n if (cacheReadTokens > 0)\n u.cacheReadTokens = cacheReadTokens;\n if (cacheCreationTokens > 0)\n u.cacheCreationTokens = cacheCreationTokens;\n return u;\n}\nfunction numAttr(attrs: globalThis.Record<string, JsonValue>, ...keys: string[]): number {\n for (const k of keys) {\n const v = attrs[k];\n if (typeof v === \"number\" && v > 0)\n return v;\n }\n return 0;\n}\n// ───────────────────────── buildO11ySummary ─────────────────────────\nexport function buildO11ySummary(events: readonly StreamEvent[]): ObservabilitySummary {\n const toolCalls: Partial<globalThis.Record<ToolName, number>> = {};\n let totalToolCalls = 0;\n const filesRead = new Set<string>();\n const filesModified = new Set<string>();\n const shellCommands: {\n command: string;\n exitCode?: number;\n success?: boolean;\n }[] = [];\n const webFetches: {\n url: string;\n status?: number;\n success?: boolean;\n }[] = [];\n const errors: string[] = [];\n let thinkingBlocks = 0;\n let compactions = 0;\n let totalTurns = 0;\n for (const ev of events) {\n switch (ev.type) {\n case \"message\":\n if (ev.role === \"assistant\")\n totalTurns += 1;\n break;\n case \"thinking\":\n thinkingBlocks += 1;\n break;\n case \"compaction\":\n compactions += 1;\n break;\n case \"error\":\n if (ev.message)\n errors.push(ev.message);\n break;\n default:\n break;\n }\n }\n // 人读摘要直接消费同一份严格配对后的 ToolCall,避免按 operationId 全局索引时把跨轮复用\n // 或 finished-before-started 容错事件错配给另一条操作。没有 originalName 的是孤儿 finished 占位。\n for (const call of deriveRunFacts(events).toolCalls) {\n if (call.originalName === undefined)\n continue;\n const canonical: ToolName = call.name;\n toolCalls[canonical] = (toolCalls[canonical] ?? 0) + 1;\n totalToolCalls += 1;\n if (canonical === \"file_read\") {\n const path = pickString(call.input, [\"path\", \"file\", \"file_path\", \"filename\"]);\n if (path)\n filesRead.add(path);\n }\n else if (canonical === \"file_write\" || canonical === \"file_edit\") {\n const path = pickString(call.input, [\"path\", \"file\", \"file_path\", \"filename\"]);\n if (path)\n filesModified.add(path);\n }\n else if (canonical === \"shell\") {\n const command = pickCommand(call.input);\n if (command) {\n const entry: {\n command: string;\n exitCode?: number;\n success?: boolean;\n } = { command };\n if (call.status !== \"pending\") {\n entry.success = call.status === \"completed\";\n const exit = pickExitCode(call.output);\n if (exit !== undefined)\n entry.exitCode = exit;\n }\n shellCommands.push(entry);\n }\n }\n else if (canonical === \"web_fetch\") {\n const url = pickString(call.input, [\"url\", \"uri\", \"endpoint\", \"href\"]);\n if (url) {\n const entry: {\n url: string;\n status?: number;\n success?: boolean;\n } = { url };\n if (call.status !== \"pending\") {\n entry.success = call.status === \"completed\";\n const status = field(call.output, \"status\");\n if (typeof status === \"number\")\n entry.status = status;\n }\n webFetches.push(entry);\n }\n }\n }\n return {\n totalTurns,\n toolCalls,\n totalToolCalls,\n filesRead: Array.from(filesRead),\n filesModified: Array.from(filesModified),\n shellCommands,\n webFetches,\n errors,\n thinkingBlocks,\n compactions,\n };\n}\n"]}
|
package/dist/o11y/derive.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StreamEvent, DerivedFacts,
|
|
1
|
+
import type { StreamEvent, DerivedFacts, ObservabilitySummary, TraceSpan, Usage, LogicalToolOccurrenceDerivation, LogicalToolOccurrenceDeriveOptions, LogicalToolOccurrenceScopeTurn } from "../types.cjs";
|
|
2
2
|
import type { EventId, ItemId, PositiveSafeInteger, SessionScopeId, ToolOccurrenceId, TurnId } from "../record/family/source-receipt/model.cjs";
|
|
3
3
|
import type { ObservedSourceEvent } from "./observed.cjs";
|
|
4
4
|
export interface ObservedSourceProjectionSegment {
|
|
@@ -64,4 +64,4 @@ export declare function deriveScopedLogicalToolOccurrences(turns: readonly Logic
|
|
|
64
64
|
* 返回 undefined 表示 span 里也没有用量信息。
|
|
65
65
|
*/
|
|
66
66
|
export declare function extractUsageFromSpans(spans: readonly TraceSpan[]): Usage | undefined;
|
|
67
|
-
export declare function buildO11ySummary(events: readonly StreamEvent[]):
|
|
67
|
+
export declare function buildO11ySummary(events: readonly StreamEvent[]): ObservabilitySummary;
|
package/dist/o11y/derive.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StreamEvent, DerivedFacts,
|
|
1
|
+
import type { StreamEvent, DerivedFacts, ObservabilitySummary, TraceSpan, Usage, LogicalToolOccurrenceDerivation, LogicalToolOccurrenceDeriveOptions, LogicalToolOccurrenceScopeTurn } from "../types.mjs";
|
|
2
2
|
import type { EventId, ItemId, PositiveSafeInteger, SessionScopeId, ToolOccurrenceId, TurnId } from "../record/family/source-receipt/model.mjs";
|
|
3
3
|
import type { ObservedSourceEvent } from "./observed.mjs";
|
|
4
4
|
export interface ObservedSourceProjectionSegment {
|
|
@@ -64,4 +64,4 @@ export declare function deriveScopedLogicalToolOccurrences(turns: readonly Logic
|
|
|
64
64
|
* 返回 undefined 表示 span 里也没有用量信息。
|
|
65
65
|
*/
|
|
66
66
|
export declare function extractUsageFromSpans(spans: readonly TraceSpan[]): Usage | undefined;
|
|
67
|
-
export declare function buildO11ySummary(events: readonly StreamEvent[]):
|
|
67
|
+
export declare function buildO11ySummary(events: readonly StreamEvent[]): ObservabilitySummary;
|
package/dist/o11y/derive.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StreamEvent, DerivedFacts,
|
|
1
|
+
import type { StreamEvent, DerivedFacts, ObservabilitySummary, TraceSpan, Usage, LogicalToolOccurrenceDerivation, LogicalToolOccurrenceDeriveOptions, LogicalToolOccurrenceScopeTurn } from "../types.js";
|
|
2
2
|
import type { EventId, ItemId, PositiveSafeInteger, SessionScopeId, ToolOccurrenceId, TurnId } from "../record/family/source-receipt/model.js";
|
|
3
3
|
import type { ObservedSourceEvent } from "./observed.js";
|
|
4
4
|
export interface ObservedSourceProjectionSegment {
|
|
@@ -64,4 +64,4 @@ export declare function deriveScopedLogicalToolOccurrences(turns: readonly Logic
|
|
|
64
64
|
* 返回 undefined 表示 span 里也没有用量信息。
|
|
65
65
|
*/
|
|
66
66
|
export declare function extractUsageFromSpans(spans: readonly TraceSpan[]): Usage | undefined;
|
|
67
|
-
export declare function buildO11ySummary(events: readonly StreamEvent[]):
|
|
67
|
+
export declare function buildO11ySummary(events: readonly StreamEvent[]): ObservabilitySummary;
|
package/dist/o11y/eval-usage.cjs
CHANGED
|
@@ -7,19 +7,19 @@ const pricing_ts_1 = require("../record/family/adapter-usage/pricing.cjs");
|
|
|
7
7
|
const adapter_usage_projection_ts_1 = require("./adapter-usage-projection.cjs");
|
|
8
8
|
function authorCacheRead(report, models) {
|
|
9
9
|
const declared = new Set(Object.keys(models ?? {}));
|
|
10
|
-
const rates = new Map(report.
|
|
10
|
+
const rates = new Map(report.roles.map((group) => [group.modelRole, group.rate]));
|
|
11
11
|
return Object.freeze({
|
|
12
12
|
...report,
|
|
13
|
-
rate: (
|
|
14
|
-
if (
|
|
15
|
-
return report.total.rate;
|
|
16
|
-
if (!declared.has(
|
|
17
|
-
throw new TypeError(`Undeclared model
|
|
13
|
+
rate: (role) => {
|
|
14
|
+
if (role === undefined)
|
|
15
|
+
return Object.freeze({ ...report.total.rate, unit: "ratio" });
|
|
16
|
+
if (!declared.has(role)) {
|
|
17
|
+
throw new TypeError(`Undeclared model role ${JSON.stringify(role)}; declared roles: ${[...declared].join(", ") || "(none)"}.`);
|
|
18
18
|
}
|
|
19
|
-
const rate = rates.get(
|
|
19
|
+
const rate = rates.get(role);
|
|
20
20
|
if (rate !== undefined && !(rate.state === "unavailable" && rate.reason === "no-calls"))
|
|
21
|
-
return rate;
|
|
22
|
-
return Object.freeze({ state: "unavailable", reason: "
|
|
21
|
+
return Object.freeze({ ...rate, unit: "ratio" });
|
|
22
|
+
return Object.freeze({ state: "unavailable", reason: "role-has-no-calls", unit: "ratio" });
|
|
23
23
|
},
|
|
24
24
|
});
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval-usage.js","sourceRoot":"","sources":["eval-usage.ts"],"names":[],"mappings":"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","sourcesContent":["import { projectCacheRead, type CacheReadReport } from \"./cache-read.ts\";\nimport type { ResolvedModelSlots } from \"../model-slots.ts\";\nimport type { NumericMaterial } from \"../assertions/match.ts\";\nimport type { ResolvedEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport type { PriceOverride, Usage } from \"../types.ts\";\nimport type { ReadableAdapterUsageAttachment } from \"../record/family/adapter-usage/schema.ts\";\nimport { addCanonicalDecimals, canonicalDecimalFromNumber, multiplyCanonicalDecimalPerMillion, } from \"../record/family/adapter-usage/pricing.ts\";\nimport { adapterTokenMaterial, effectiveCostTotals, effectiveUsageCalls, type EffectiveCallCost, } from \"./adapter-usage-projection.ts\";\n/** Frozen cache report with author-facing selection by Experiment model purpose. */\nexport interface EvalCacheRead<ModelSlot extends string = string> extends CacheReadReport {\n /** Omit the slot for the total. An undeclared slot throws; missing observations remain unavailable. */\n rate(modelSlot?: ModelSlot): NumericMaterial;\n}\nfunction authorCacheRead(report: CacheReadReport, models?: ResolvedModelSlots): EvalCacheRead {\n const declared = new Set(Object.keys(models ?? {}));\n const rates = new Map(report.modelSlots.map((group) => [group.modelSlot, group.rate]));\n return Object.freeze({\n ...report,\n rate: (modelSlot?: string): NumericMaterial => {\n if (modelSlot === undefined)\n return report.total.rate;\n if (!declared.has(modelSlot)) {\n throw new TypeError(`Undeclared model slot ${JSON.stringify(modelSlot)}; declared slots: ${[...declared].join(\", \") || \"(none)\"}.`);\n }\n const rate = rates.get(modelSlot);\n if (rate !== undefined && !(rate.state === \"unavailable\" && rate.reason === \"no-calls\"))\n return rate;\n return Object.freeze({ state: \"unavailable\", reason: \"slot-has-no-calls\" });\n },\n });\n}\n/** Internal source-owned shape; package-root exposure belongs to the author facade. */\nexport interface EvalUsage<ModelSlot extends string = string> {\n readonly source: \"agent\" | \"adapter\" | \"unavailable\";\n readonly scope: \"turn\" | \"session\" | \"attempt\";\n readonly basis: \"reported-sends\" | \"recorded-calls\" | \"unbound\";\n readonly cut: \"call-time\";\n readonly cacheRead: EvalCacheRead<ModelSlot>;\n readonly inputTokens: NumericMaterial;\n readonly inputTotalTokens: NumericMaterial;\n readonly outputTokens: NumericMaterial;\n readonly cacheReadTokens: NumericMaterial;\n readonly cacheWriteTokens: NumericMaterial;\n readonly totalTokens: NumericMaterial;\n readonly costs: {\n readonly state: \"complete\" | \"partial\" | \"unavailable\";\n readonly values: readonly {\n readonly currency: string;\n readonly value: string;\n readonly source: \"reported\" | \"estimated\" | \"mixed\";\n readonly coveredContributions: number;\n readonly reportedContributions: number;\n readonly estimatedContributions: number;\n }[];\n readonly totalContributions: number;\n };\n}\nexport interface AgentUsageContribution {\n readonly sessionScopeId: string;\n readonly turnId: string;\n readonly sendAttempt: number;\n readonly state: \"pending\" | \"terminal\";\n readonly outcome: \"completed\" | \"failed\" | \"interrupted\" | null;\n readonly model: string | null;\n readonly usage: Readonly<Usage> | null;\n readonly coverage: ResolvedEvidenceCoverage[\"usage\"];\n}\ntype TokenMetric = \"inputTokens\" | \"inputTotalTokens\" | \"outputTokens\" | \"cacheReadTokens\" | \"cacheWriteTokens\" | \"totalTokens\";\nfunction contributionCosts(calls: readonly {\n readonly effectiveCost: EffectiveCallCost | null;\n}[], complete: boolean): EvalUsage[\"costs\"] {\n const totals = effectiveCostTotals(calls, complete ? \"complete\" : \"partial\");\n return Object.freeze({\n state: totals.state,\n values: Object.freeze(totals.values.map((value) => Object.freeze({\n currency: value.currency,\n value: value.value,\n source: value.source,\n coveredContributions: value.coveredCalls,\n reportedContributions: value.reportedCalls,\n estimatedContributions: value.estimatedCalls,\n }))),\n totalContributions: totals.totalCalls,\n });\n}\nexport function projectAdapterEvalUsage(usage: ReadableAdapterUsageAttachment, models?: ResolvedModelSlots): EvalUsage {\n return Object.freeze({\n source: \"adapter\",\n scope: \"attempt\",\n basis: \"recorded-calls\",\n cut: \"call-time\",\n cacheRead: authorCacheRead(projectCacheRead(usage, models, true), models),\n inputTokens: adapterTokenMaterial(usage, \"inputTokens\"),\n inputTotalTokens: adapterTokenMaterial(usage, \"inputTotalTokens\"),\n outputTokens: adapterTokenMaterial(usage, \"outputTokens\"),\n cacheReadTokens: adapterTokenMaterial(usage, \"cacheReadTokens\"),\n cacheWriteTokens: adapterTokenMaterial(usage, \"cacheWriteTokens\"),\n totalTokens: adapterTokenMaterial(usage, \"totalTokens\"),\n costs: contributionCosts(effectiveUsageCalls(usage), usage.collection.state === \"complete\"),\n });\n}\nfunction tokenBuckets(contribution: AgentUsageContribution, metric: TokenMetric): readonly (number | undefined)[] {\n // Some producers have an independent total. Missing totals retain the mutually exclusive bucket fallback.\n const usage: (Readonly<Usage> & {\n readonly inputTotalTokens?: number;\n }) | null = contribution.usage;\n if (contribution.state === \"pending\" || usage === null)\n return [undefined];\n const input = usage.inputTotalTokens !== undefined\n ? [usage.inputTotalTokens]\n : [usage.inputTokens, usage.cacheReadTokens, usage.cacheCreationTokens];\n switch (metric) {\n case \"inputTotalTokens\": return input;\n case \"totalTokens\": return [...input, usage.outputTokens];\n case \"cacheWriteTokens\": return [usage.cacheCreationTokens];\n default: return [usage[metric]];\n }\n}\nfunction agentTokenMaterial(contributions: readonly AgentUsageContribution[], metric: TokenMetric, scope: EvalUsage[\"scope\"]): NumericMaterial {\n const provenance = Object.freeze({ source: \"agent\", scope, unit: \"tokens\", cut: \"call-time\" });\n let value = 0;\n let observed = false;\n let complete = contributions.length > 0;\n for (const contribution of contributions) {\n if (contribution.state !== \"terminal\" || contribution.coverage.status !== \"complete\")\n complete = false;\n for (const bucket of tokenBuckets(contribution, metric)) {\n if (bucket === undefined) {\n complete = false;\n continue;\n }\n if (!Number.isSafeInteger(bucket) || bucket < 0) {\n return Object.freeze({ state: \"unavailable\", reason: \"usage-invalid-token-value\", provenance });\n }\n value += bucket;\n observed = true;\n if (!Number.isSafeInteger(value)) {\n return Object.freeze({ state: \"unavailable\", reason: \"usage-exceeds-safe-integer\", provenance });\n }\n }\n }\n return Object.freeze(!observed\n ? { state: \"unavailable\", reason: \"usage-not-reported\", provenance }\n : { state: complete ? \"exact\" : \"lower-bound\", value, provenance });\n}\nfunction agentCost(contribution: AgentUsageContribution, pricing: Record<string, PriceOverride> | undefined): EffectiveCallCost | null {\n const usage = contribution.usage;\n if (contribution.state === \"pending\" || usage === null)\n return null;\n const coverageComplete = contribution.coverage.status === \"complete\";\n if (usage.costUSD !== undefined) {\n const amount = canonicalDecimalFromNumber(usage.costUSD);\n return amount === undefined ? null : Object.freeze({\n amount, currency: \"USD\", source: Object.freeze({ kind: \"reported\", id: \"agent-send\" }),\n state: coverageComplete ? \"complete\" : \"partial\",\n });\n }\n const model = contribution.model;\n if (model === null || pricing === undefined)\n return null;\n const wildcard = model.includes(\"/\") ? `${model.slice(0, model.indexOf(\"/\"))}/*` : undefined;\n const profile = Object.hasOwn(pricing, model) ? pricing[model]\n : wildcard !== undefined && Object.hasOwn(pricing, wildcard) ? pricing[wildcard] : undefined;\n if (profile === undefined || profile.currency !== undefined && profile.currency !== \"USD\" ||\n profile.basis !== undefined && profile.basis !== \"catalog-reference\")\n return null;\n const buckets = [\n [usage.inputTokens, profile.inputPerMTok],\n [usage.outputTokens, profile.outputPerMTok],\n [usage.cacheReadTokens, profile.cacheReadPerMTok],\n [usage.cacheCreationTokens, profile.cacheWritePerMTok],\n ] as const;\n const charges: string[] = [];\n let complete = coverageComplete;\n for (const [tokens, price] of buckets) {\n if (tokens === undefined || !Number.isSafeInteger(tokens) || tokens < 0) {\n complete = false;\n continue;\n }\n if (tokens === 0) {\n charges.push(\"0\");\n continue;\n }\n const rate = price === undefined ? undefined : canonicalDecimalFromNumber(price);\n if (rate === undefined) {\n complete = false;\n continue;\n }\n charges.push(multiplyCanonicalDecimalPerMillion(rate, tokens));\n }\n return charges.length === 0 ? null : Object.freeze({\n amount: addCanonicalDecimals(charges),\n currency: \"USD\",\n source: Object.freeze({ kind: \"estimated\", id: profile.source?.id ?? \"niceeval.config.pricing\" }),\n state: complete ? \"complete\" : \"partial\",\n });\n}\n/** The receiver selects scope membership before calling this pure projection. */\nexport function projectAgentEvalUsage(input: {\n contributions: readonly AgentUsageContribution[];\n scope: \"turn\" | \"session\" | \"attempt\";\n pricing?: Record<string, PriceOverride>;\n}): EvalUsage {\n return Object.freeze({\n source: \"agent\",\n scope: input.scope,\n basis: \"reported-sends\",\n cut: \"call-time\",\n cacheRead: authorCacheRead(projectCacheRead(null, undefined, false, \"adapter-usage-required\")),\n inputTokens: agentTokenMaterial(input.contributions, \"inputTokens\", input.scope),\n inputTotalTokens: agentTokenMaterial(input.contributions, \"inputTotalTokens\", input.scope),\n outputTokens: agentTokenMaterial(input.contributions, \"outputTokens\", input.scope),\n cacheReadTokens: agentTokenMaterial(input.contributions, \"cacheReadTokens\", input.scope),\n cacheWriteTokens: agentTokenMaterial(input.contributions, \"cacheWriteTokens\", input.scope),\n totalTokens: agentTokenMaterial(input.contributions, \"totalTokens\", input.scope),\n costs: contributionCosts(input.contributions.map((contribution) => ({\n effectiveCost: agentCost(contribution, input.pricing),\n })), input.contributions.every((contribution) => contribution.state === \"terminal\" && contribution.coverage.status === \"complete\")),\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"eval-usage.js","sourceRoot":"","sources":["eval-usage.ts"],"names":[],"mappings":"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","sourcesContent":["import { projectCacheRead, type CacheReadReport } from \"./cache-read.ts\";\nimport type { ResolvedModelRoles } from \"../model-roles.ts\";\nimport type { NumericMaterial } from \"../assertions/match.ts\";\nimport type { ResolvedEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport type { PriceOverride, Usage } from \"../types.ts\";\nimport type { ReadableAdapterUsageAttachment } from \"../record/family/adapter-usage/schema.ts\";\nimport { addCanonicalDecimals, canonicalDecimalFromNumber, multiplyCanonicalDecimalPerMillion, } from \"../record/family/adapter-usage/pricing.ts\";\nimport { adapterTokenMaterial, effectiveCostTotals, effectiveUsageCalls, type EffectiveCallCost, } from \"./adapter-usage-projection.ts\";\n/** Frozen cache report with author-facing selection by Experiment model purpose. */\nexport interface EvalCacheRead<ModelRole extends string = string> extends CacheReadReport {\n /** Omit the role for the total. An undeclared role throws; missing observations remain unavailable. */\n rate(role?: ModelRole): NumericMaterial<\"ratio\">;\n}\nfunction authorCacheRead(report: CacheReadReport, models?: ResolvedModelRoles): EvalCacheRead {\n const declared = new Set(Object.keys(models ?? {}));\n const rates = new Map(report.roles.map((group) => [group.modelRole, group.rate]));\n return Object.freeze({\n ...report,\n rate: (role?: string): NumericMaterial<\"ratio\"> => {\n if (role === undefined)\n return Object.freeze({ ...report.total.rate, unit: \"ratio\" });\n if (!declared.has(role)) {\n throw new TypeError(`Undeclared model role ${JSON.stringify(role)}; declared roles: ${[...declared].join(\", \") || \"(none)\"}.`);\n }\n const rate = rates.get(role);\n if (rate !== undefined && !(rate.state === \"unavailable\" && rate.reason === \"no-calls\"))\n return Object.freeze({ ...rate, unit: \"ratio\" });\n return Object.freeze({ state: \"unavailable\", reason: \"role-has-no-calls\", unit: \"ratio\" });\n },\n });\n}\n/** Internal source-owned shape; package-root exposure belongs to the author facade. */\nexport interface EvalUsage<ModelRole extends string = string> {\n readonly source: \"agent\" | \"adapter\" | \"unavailable\";\n readonly scope: \"turn\" | \"session\" | \"attempt\";\n readonly basis: \"reported-sends\" | \"recorded-calls\" | \"unbound\";\n readonly cut: \"call-time\";\n readonly cacheRead: EvalCacheRead<ModelRole>;\n readonly inputTokens: NumericMaterial;\n readonly inputTotalTokens: NumericMaterial;\n readonly outputTokens: NumericMaterial;\n readonly cacheReadTokens: NumericMaterial;\n readonly cacheWriteTokens: NumericMaterial;\n readonly totalTokens: NumericMaterial;\n readonly costs: {\n readonly state: \"complete\" | \"partial\" | \"unavailable\";\n readonly values: readonly {\n readonly currency: string;\n readonly value: string;\n readonly source: \"reported\" | \"estimated\" | \"mixed\";\n readonly coveredContributions: number;\n readonly reportedContributions: number;\n readonly estimatedContributions: number;\n }[];\n readonly totalContributions: number;\n };\n}\nexport interface AgentUsageContribution {\n readonly sessionScopeId: string;\n readonly turnId: string;\n readonly sendAttempt: number;\n readonly state: \"pending\" | \"terminal\";\n readonly outcome: \"completed\" | \"failed\" | \"interrupted\" | null;\n readonly model: string | null;\n readonly usage: Readonly<Usage> | null;\n readonly coverage: ResolvedEvidenceCoverage[\"usage\"];\n}\ntype TokenMetric = \"inputTokens\" | \"inputTotalTokens\" | \"outputTokens\" | \"cacheReadTokens\" | \"cacheWriteTokens\" | \"totalTokens\";\nfunction contributionCosts(calls: readonly {\n readonly effectiveCost: EffectiveCallCost | null;\n}[], complete: boolean): EvalUsage[\"costs\"] {\n const totals = effectiveCostTotals(calls, complete ? \"complete\" : \"partial\");\n return Object.freeze({\n state: totals.state,\n values: Object.freeze(totals.values.map((value) => Object.freeze({\n currency: value.currency,\n value: value.value,\n source: value.source,\n coveredContributions: value.coveredCalls,\n reportedContributions: value.reportedCalls,\n estimatedContributions: value.estimatedCalls,\n }))),\n totalContributions: totals.totalCalls,\n });\n}\nexport function projectAdapterEvalUsage(usage: ReadableAdapterUsageAttachment, models?: ResolvedModelRoles): EvalUsage {\n return Object.freeze({\n source: \"adapter\",\n scope: \"attempt\",\n basis: \"recorded-calls\",\n cut: \"call-time\",\n cacheRead: authorCacheRead(projectCacheRead(usage, models, true), models),\n inputTokens: adapterTokenMaterial(usage, \"inputTokens\"),\n inputTotalTokens: adapterTokenMaterial(usage, \"inputTotalTokens\"),\n outputTokens: adapterTokenMaterial(usage, \"outputTokens\"),\n cacheReadTokens: adapterTokenMaterial(usage, \"cacheReadTokens\"),\n cacheWriteTokens: adapterTokenMaterial(usage, \"cacheWriteTokens\"),\n totalTokens: adapterTokenMaterial(usage, \"totalTokens\"),\n costs: contributionCosts(effectiveUsageCalls(usage), usage.collection.state === \"complete\"),\n });\n}\nfunction tokenBuckets(contribution: AgentUsageContribution, metric: TokenMetric): readonly (number | undefined)[] {\n // Some producers have an independent total. Missing totals retain the mutually exclusive bucket fallback.\n const usage: (Readonly<Usage> & {\n readonly inputTotalTokens?: number;\n }) | null = contribution.usage;\n if (contribution.state === \"pending\" || usage === null)\n return [undefined];\n const input = usage.inputTotalTokens !== undefined\n ? [usage.inputTotalTokens]\n : [usage.inputTokens, usage.cacheReadTokens, usage.cacheCreationTokens];\n switch (metric) {\n case \"inputTotalTokens\": return input;\n case \"totalTokens\": return [...input, usage.outputTokens];\n case \"cacheWriteTokens\": return [usage.cacheCreationTokens];\n default: return [usage[metric]];\n }\n}\nfunction agentTokenMaterial(contributions: readonly AgentUsageContribution[], metric: TokenMetric, scope: EvalUsage[\"scope\"]): NumericMaterial {\n const provenance = Object.freeze({ source: \"agent\", scope, unit: \"tokens\", cut: \"call-time\" });\n let value = 0;\n let observed = false;\n let complete = contributions.length > 0;\n for (const contribution of contributions) {\n if (contribution.state !== \"terminal\" || contribution.coverage.status !== \"complete\")\n complete = false;\n for (const bucket of tokenBuckets(contribution, metric)) {\n if (bucket === undefined) {\n complete = false;\n continue;\n }\n if (!Number.isSafeInteger(bucket) || bucket < 0) {\n return Object.freeze({ state: \"unavailable\", reason: \"usage-invalid-token-value\", provenance });\n }\n value += bucket;\n observed = true;\n if (!Number.isSafeInteger(value)) {\n return Object.freeze({ state: \"unavailable\", reason: \"usage-exceeds-safe-integer\", provenance });\n }\n }\n }\n return Object.freeze(!observed\n ? { state: \"unavailable\", reason: \"usage-not-reported\", provenance }\n : { state: complete ? \"exact\" : \"lower-bound\", value, provenance });\n}\nfunction agentCost(contribution: AgentUsageContribution, pricing: Record<string, PriceOverride> | undefined): EffectiveCallCost | null {\n const usage = contribution.usage;\n if (contribution.state === \"pending\" || usage === null)\n return null;\n const coverageComplete = contribution.coverage.status === \"complete\";\n if (usage.costUSD !== undefined) {\n const amount = canonicalDecimalFromNumber(usage.costUSD);\n return amount === undefined ? null : Object.freeze({\n amount, currency: \"USD\", source: Object.freeze({ kind: \"reported\", id: \"agent-send\" }),\n state: coverageComplete ? \"complete\" : \"partial\",\n });\n }\n const model = contribution.model;\n if (model === null || pricing === undefined)\n return null;\n const wildcard = model.includes(\"/\") ? `${model.slice(0, model.indexOf(\"/\"))}/*` : undefined;\n const profile = Object.hasOwn(pricing, model) ? pricing[model]\n : wildcard !== undefined && Object.hasOwn(pricing, wildcard) ? pricing[wildcard] : undefined;\n if (profile === undefined || profile.currency !== undefined && profile.currency !== \"USD\" ||\n profile.basis !== undefined && profile.basis !== \"catalog-reference\")\n return null;\n const buckets = [\n [usage.inputTokens, profile.inputPerMTok],\n [usage.outputTokens, profile.outputPerMTok],\n [usage.cacheReadTokens, profile.cacheReadPerMTok],\n [usage.cacheCreationTokens, profile.cacheWritePerMTok],\n ] as const;\n const charges: string[] = [];\n let complete = coverageComplete;\n for (const [tokens, price] of buckets) {\n if (tokens === undefined || !Number.isSafeInteger(tokens) || tokens < 0) {\n complete = false;\n continue;\n }\n if (tokens === 0) {\n charges.push(\"0\");\n continue;\n }\n const rate = price === undefined ? undefined : canonicalDecimalFromNumber(price);\n if (rate === undefined) {\n complete = false;\n continue;\n }\n charges.push(multiplyCanonicalDecimalPerMillion(rate, tokens));\n }\n return charges.length === 0 ? null : Object.freeze({\n amount: addCanonicalDecimals(charges),\n currency: \"USD\",\n source: Object.freeze({ kind: \"estimated\", id: profile.source?.id ?? \"niceeval.config.pricing\" }),\n state: complete ? \"complete\" : \"partial\",\n });\n}\n/** The receiver selects scope membership before calling this pure projection. */\nexport function projectAgentEvalUsage(input: {\n contributions: readonly AgentUsageContribution[];\n scope: \"turn\" | \"session\" | \"attempt\";\n pricing?: Record<string, PriceOverride>;\n}): EvalUsage {\n return Object.freeze({\n source: \"agent\",\n scope: input.scope,\n basis: \"reported-sends\",\n cut: \"call-time\",\n cacheRead: authorCacheRead(projectCacheRead(null, undefined, false, \"adapter-usage-required\")),\n inputTokens: agentTokenMaterial(input.contributions, \"inputTokens\", input.scope),\n inputTotalTokens: agentTokenMaterial(input.contributions, \"inputTotalTokens\", input.scope),\n outputTokens: agentTokenMaterial(input.contributions, \"outputTokens\", input.scope),\n cacheReadTokens: agentTokenMaterial(input.contributions, \"cacheReadTokens\", input.scope),\n cacheWriteTokens: agentTokenMaterial(input.contributions, \"cacheWriteTokens\", input.scope),\n totalTokens: agentTokenMaterial(input.contributions, \"totalTokens\", input.scope),\n costs: contributionCosts(input.contributions.map((contribution) => ({\n effectiveCost: agentCost(contribution, input.pricing),\n })), input.contributions.every((contribution) => contribution.state === \"terminal\" && contribution.coverage.status === \"complete\")),\n });\n}\n"]}
|