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,21 +1,21 @@
|
|
|
1
1
|
import { type CacheReadReport } from "./cache-read.cjs";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ResolvedModelRoles } from "../model-roles.cjs";
|
|
3
3
|
import type { NumericMaterial } from "../assertions/match.cjs";
|
|
4
4
|
import type { ResolvedEvidenceCoverage } from "../assertions/coverage.cjs";
|
|
5
5
|
import type { PriceOverride, Usage } from "../types.cjs";
|
|
6
6
|
import type { ReadableAdapterUsageAttachment } from "../record/family/adapter-usage/schema.cjs";
|
|
7
7
|
/** Frozen cache report with author-facing selection by Experiment model purpose. */
|
|
8
|
-
export interface EvalCacheRead<
|
|
9
|
-
/** Omit the
|
|
10
|
-
rate(
|
|
8
|
+
export interface EvalCacheRead<ModelRole extends string = string> extends CacheReadReport {
|
|
9
|
+
/** Omit the role for the total. An undeclared role throws; missing observations remain unavailable. */
|
|
10
|
+
rate(role?: ModelRole): NumericMaterial<"ratio">;
|
|
11
11
|
}
|
|
12
12
|
/** Internal source-owned shape; package-root exposure belongs to the author facade. */
|
|
13
|
-
export interface EvalUsage<
|
|
13
|
+
export interface EvalUsage<ModelRole extends string = string> {
|
|
14
14
|
readonly source: "agent" | "adapter" | "unavailable";
|
|
15
15
|
readonly scope: "turn" | "session" | "attempt";
|
|
16
16
|
readonly basis: "reported-sends" | "recorded-calls" | "unbound";
|
|
17
17
|
readonly cut: "call-time";
|
|
18
|
-
readonly cacheRead: EvalCacheRead<
|
|
18
|
+
readonly cacheRead: EvalCacheRead<ModelRole>;
|
|
19
19
|
readonly inputTokens: NumericMaterial;
|
|
20
20
|
readonly inputTotalTokens: NumericMaterial;
|
|
21
21
|
readonly outputTokens: NumericMaterial;
|
|
@@ -45,7 +45,7 @@ export interface AgentUsageContribution {
|
|
|
45
45
|
readonly usage: Readonly<Usage> | null;
|
|
46
46
|
readonly coverage: ResolvedEvidenceCoverage["usage"];
|
|
47
47
|
}
|
|
48
|
-
export declare function projectAdapterEvalUsage(usage: ReadableAdapterUsageAttachment, models?:
|
|
48
|
+
export declare function projectAdapterEvalUsage(usage: ReadableAdapterUsageAttachment, models?: ResolvedModelRoles): EvalUsage;
|
|
49
49
|
/** The receiver selects scope membership before calling this pure projection. */
|
|
50
50
|
export declare function projectAgentEvalUsage(input: {
|
|
51
51
|
contributions: readonly AgentUsageContribution[];
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { type CacheReadReport } from "./cache-read.mjs";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ResolvedModelRoles } from "../model-roles.mjs";
|
|
3
3
|
import type { NumericMaterial } from "../assertions/match.mjs";
|
|
4
4
|
import type { ResolvedEvidenceCoverage } from "../assertions/coverage.mjs";
|
|
5
5
|
import type { PriceOverride, Usage } from "../types.mjs";
|
|
6
6
|
import type { ReadableAdapterUsageAttachment } from "../record/family/adapter-usage/schema.mjs";
|
|
7
7
|
/** Frozen cache report with author-facing selection by Experiment model purpose. */
|
|
8
|
-
export interface EvalCacheRead<
|
|
9
|
-
/** Omit the
|
|
10
|
-
rate(
|
|
8
|
+
export interface EvalCacheRead<ModelRole extends string = string> extends CacheReadReport {
|
|
9
|
+
/** Omit the role for the total. An undeclared role throws; missing observations remain unavailable. */
|
|
10
|
+
rate(role?: ModelRole): NumericMaterial<"ratio">;
|
|
11
11
|
}
|
|
12
12
|
/** Internal source-owned shape; package-root exposure belongs to the author facade. */
|
|
13
|
-
export interface EvalUsage<
|
|
13
|
+
export interface EvalUsage<ModelRole extends string = string> {
|
|
14
14
|
readonly source: "agent" | "adapter" | "unavailable";
|
|
15
15
|
readonly scope: "turn" | "session" | "attempt";
|
|
16
16
|
readonly basis: "reported-sends" | "recorded-calls" | "unbound";
|
|
17
17
|
readonly cut: "call-time";
|
|
18
|
-
readonly cacheRead: EvalCacheRead<
|
|
18
|
+
readonly cacheRead: EvalCacheRead<ModelRole>;
|
|
19
19
|
readonly inputTokens: NumericMaterial;
|
|
20
20
|
readonly inputTotalTokens: NumericMaterial;
|
|
21
21
|
readonly outputTokens: NumericMaterial;
|
|
@@ -45,7 +45,7 @@ export interface AgentUsageContribution {
|
|
|
45
45
|
readonly usage: Readonly<Usage> | null;
|
|
46
46
|
readonly coverage: ResolvedEvidenceCoverage["usage"];
|
|
47
47
|
}
|
|
48
|
-
export declare function projectAdapterEvalUsage(usage: ReadableAdapterUsageAttachment, models?:
|
|
48
|
+
export declare function projectAdapterEvalUsage(usage: ReadableAdapterUsageAttachment, models?: ResolvedModelRoles): EvalUsage;
|
|
49
49
|
/** The receiver selects scope membership before calling this pure projection. */
|
|
50
50
|
export declare function projectAgentEvalUsage(input: {
|
|
51
51
|
contributions: readonly AgentUsageContribution[];
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { type CacheReadReport } from "./cache-read.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ResolvedModelRoles } from "../model-roles.js";
|
|
3
3
|
import type { NumericMaterial } from "../assertions/match.js";
|
|
4
4
|
import type { ResolvedEvidenceCoverage } from "../assertions/coverage.js";
|
|
5
5
|
import type { PriceOverride, Usage } from "../types.js";
|
|
6
6
|
import type { ReadableAdapterUsageAttachment } from "../record/family/adapter-usage/schema.js";
|
|
7
7
|
/** Frozen cache report with author-facing selection by Experiment model purpose. */
|
|
8
|
-
export interface EvalCacheRead<
|
|
9
|
-
/** Omit the
|
|
10
|
-
rate(
|
|
8
|
+
export interface EvalCacheRead<ModelRole extends string = string> extends CacheReadReport {
|
|
9
|
+
/** Omit the role for the total. An undeclared role throws; missing observations remain unavailable. */
|
|
10
|
+
rate(role?: ModelRole): NumericMaterial<"ratio">;
|
|
11
11
|
}
|
|
12
12
|
/** Internal source-owned shape; package-root exposure belongs to the author facade. */
|
|
13
|
-
export interface EvalUsage<
|
|
13
|
+
export interface EvalUsage<ModelRole extends string = string> {
|
|
14
14
|
readonly source: "agent" | "adapter" | "unavailable";
|
|
15
15
|
readonly scope: "turn" | "session" | "attempt";
|
|
16
16
|
readonly basis: "reported-sends" | "recorded-calls" | "unbound";
|
|
17
17
|
readonly cut: "call-time";
|
|
18
|
-
readonly cacheRead: EvalCacheRead<
|
|
18
|
+
readonly cacheRead: EvalCacheRead<ModelRole>;
|
|
19
19
|
readonly inputTokens: NumericMaterial;
|
|
20
20
|
readonly inputTotalTokens: NumericMaterial;
|
|
21
21
|
readonly outputTokens: NumericMaterial;
|
|
@@ -45,7 +45,7 @@ export interface AgentUsageContribution {
|
|
|
45
45
|
readonly usage: Readonly<Usage> | null;
|
|
46
46
|
readonly coverage: ResolvedEvidenceCoverage["usage"];
|
|
47
47
|
}
|
|
48
|
-
export declare function projectAdapterEvalUsage(usage: ReadableAdapterUsageAttachment, models?:
|
|
48
|
+
export declare function projectAdapterEvalUsage(usage: ReadableAdapterUsageAttachment, models?: ResolvedModelRoles): EvalUsage;
|
|
49
49
|
/** The receiver selects scope membership before calling this pure projection. */
|
|
50
50
|
export declare function projectAgentEvalUsage(input: {
|
|
51
51
|
contributions: readonly AgentUsageContribution[];
|
|
@@ -62,10 +62,8 @@ function extractText(content) {
|
|
|
62
62
|
if (Array.isArray(content)) {
|
|
63
63
|
const parts = [];
|
|
64
64
|
for (const b of content) {
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
else {
|
|
68
|
-
const t = get(b, "text") ?? get(b, "content");
|
|
65
|
+
if (get(b, "type") === "text") {
|
|
66
|
+
const t = get(b, "text");
|
|
69
67
|
if (typeof t === "string")
|
|
70
68
|
parts.push(t);
|
|
71
69
|
}
|
|
@@ -84,24 +82,22 @@ function parseBubTranscript(raw) {
|
|
|
84
82
|
let requests = 0;
|
|
85
83
|
let compactions = 0;
|
|
86
84
|
let parseSuccess = true;
|
|
85
|
+
const unrecognizedEvents = Object.create(null);
|
|
86
|
+
const unrecognized = (type) => {
|
|
87
|
+
unrecognizedEvents[type] = (unrecognizedEvents[type] ?? 0) + 1;
|
|
88
|
+
};
|
|
87
89
|
if (!raw || !raw.trim()) {
|
|
88
90
|
return { events, usage: {}, compactions: 0, parseSuccess: true };
|
|
89
91
|
}
|
|
90
92
|
// tape 的 tool_result 与上一条 tool_call 按位对齐;记下上一批 callId。
|
|
91
93
|
let lastCallIds = [];
|
|
92
|
-
//
|
|
93
|
-
const pendingCallIds = [];
|
|
94
|
-
let synth = 0;
|
|
95
|
-
const nextSynthId = () => `bub_${++synth}`;
|
|
96
|
-
// 从 event/run 的 data.usage(或 legacy 顶层 usage)累加用量。
|
|
94
|
+
// 从 event/run 的 data.usage 累加用量。
|
|
97
95
|
const addUsage = (usage) => {
|
|
98
96
|
if (!usage || typeof usage !== "object")
|
|
99
97
|
return;
|
|
100
|
-
const rawInput = num(usage, "
|
|
101
|
-
const output = num(usage, "
|
|
102
|
-
|
|
103
|
-
if (cache === 0)
|
|
104
|
-
cache = num(get(usage, "prompt_tokens_details"), "cached_tokens");
|
|
98
|
+
const rawInput = num(usage, "prompt_tokens");
|
|
99
|
+
const output = num(usage, "completion_tokens");
|
|
100
|
+
const cache = num(get(usage, "prompt_tokens_details"), "cached_tokens");
|
|
105
101
|
const cost = optionalNum(usage, "cost");
|
|
106
102
|
if (rawInput === 0 && output === 0 && cache === 0 && cost === undefined)
|
|
107
103
|
return;
|
|
@@ -117,10 +113,7 @@ function parseBubTranscript(raw) {
|
|
|
117
113
|
}
|
|
118
114
|
requests += 1;
|
|
119
115
|
};
|
|
120
|
-
const emitCall = (originalName, input,
|
|
121
|
-
const callId = explicitId != null ? String(explicitId) : nextSynthId();
|
|
122
|
-
if (explicitId == null)
|
|
123
|
-
pendingCallIds.push(callId);
|
|
116
|
+
const emitCall = (originalName, input, callId) => {
|
|
124
117
|
events.push({
|
|
125
118
|
type: "operation.started",
|
|
126
119
|
operationId: callId,
|
|
@@ -134,8 +127,7 @@ function parseBubTranscript(raw) {
|
|
|
134
127
|
});
|
|
135
128
|
return callId;
|
|
136
129
|
};
|
|
137
|
-
const emitResult = (output, success,
|
|
138
|
-
const callId = explicitId != null ? String(explicitId) : pendingCallIds.shift() ?? nextSynthId();
|
|
130
|
+
const emitResult = (output, success, callId) => {
|
|
139
131
|
events.push({
|
|
140
132
|
type: "operation.finished",
|
|
141
133
|
operationId: callId,
|
|
@@ -159,38 +151,16 @@ function parseBubTranscript(raw) {
|
|
|
159
151
|
try {
|
|
160
152
|
const type = get(entry, "type");
|
|
161
153
|
const kind = get(entry, "kind");
|
|
162
|
-
// ── legacy: 顶层 type ──
|
|
163
|
-
if (typeof type === "string") {
|
|
164
|
-
addUsage(get(entry, "usage"));
|
|
165
|
-
if (type === "message") {
|
|
166
|
-
const role = get(entry, "role") === "user" ? "user" : "assistant";
|
|
167
|
-
const text = extractText(get(entry, "content") ?? get(entry, "text"));
|
|
168
|
-
if (text)
|
|
169
|
-
events.push({ type: "message", role, text });
|
|
170
|
-
}
|
|
171
|
-
else if (type === "tool_call") {
|
|
172
|
-
const name = String(get(entry, "tool_name") ?? get(entry, "name") ?? get(entry, "tool") ?? "unknown");
|
|
173
|
-
emitCall(name, coerceArgs(get(entry, "args") ?? get(entry, "input")), get(entry, "call_id") ?? get(entry, "id"));
|
|
174
|
-
}
|
|
175
|
-
else if (type === "tool_result") {
|
|
176
|
-
emitResult(get(entry, "result") ?? get(entry, "output") ?? get(entry, "content"), get(entry, "success") !== false && !get(entry, "error"), get(entry, "call_id") ?? get(entry, "tool_call_id") ?? get(entry, "id"));
|
|
177
|
-
}
|
|
178
|
-
else if (type === "thinking" || type === "reasoning") {
|
|
179
|
-
const text = extractText(get(entry, "content") ?? get(entry, "text"));
|
|
180
|
-
if (text)
|
|
181
|
-
events.push({ type: "thinking", text });
|
|
182
|
-
}
|
|
183
|
-
else if (type === "error") {
|
|
184
|
-
events.push({ type: "error", message: String(get(entry, "message") ?? get(entry, "error") ?? "error") });
|
|
185
|
-
}
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
188
154
|
// ── republic tape: kind + payload ──
|
|
189
155
|
if (typeof kind === "string") {
|
|
190
156
|
const payload = get(entry, "payload");
|
|
191
157
|
if (kind === "message") {
|
|
192
|
-
const role = get(payload, "role")
|
|
193
|
-
|
|
158
|
+
const role = get(payload, "role");
|
|
159
|
+
if (role !== "user" && role !== "assistant") {
|
|
160
|
+
parseSuccess = false;
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const text = extractText(get(payload, "content"));
|
|
194
164
|
if (text)
|
|
195
165
|
events.push({ type: "message", role, text });
|
|
196
166
|
}
|
|
@@ -202,30 +172,45 @@ function parseBubTranscript(raw) {
|
|
|
202
172
|
if (accompanying)
|
|
203
173
|
events.push({ type: "message", role: "assistant", text: accompanying });
|
|
204
174
|
const calls = get(payload, "calls");
|
|
205
|
-
const list = Array.isArray(calls) ? calls : [
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
|
|
175
|
+
const list = Array.isArray(calls) ? calls : [];
|
|
176
|
+
if (!Array.isArray(calls))
|
|
177
|
+
parseSuccess = false;
|
|
178
|
+
lastCallIds = list.map((call) => {
|
|
179
|
+
const fn = get(call, "function");
|
|
180
|
+
const name = get(fn, "name");
|
|
181
|
+
const id = get(call, "id");
|
|
182
|
+
if (typeof name !== "string" || typeof id !== "string") {
|
|
183
|
+
parseSuccess = false;
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
return emitCall(name, coerceArgs(get(fn, "arguments")), id);
|
|
187
|
+
});
|
|
213
188
|
}
|
|
214
189
|
else if (kind === "tool_result") {
|
|
215
190
|
const results = get(payload, "results");
|
|
216
|
-
const list = Array.isArray(results) ? results : [
|
|
191
|
+
const list = Array.isArray(results) ? results : [];
|
|
192
|
+
if (!Array.isArray(results))
|
|
193
|
+
parseSuccess = false;
|
|
217
194
|
// republic:results 与上一条 tool_call.calls 按位对齐。
|
|
218
195
|
list.forEach((r, i) => {
|
|
219
196
|
const isError = typeof r === "object" && r !== null && "error" in r;
|
|
220
|
-
const explicitId =
|
|
221
|
-
|
|
197
|
+
const explicitId = lastCallIds[i];
|
|
198
|
+
if (explicitId === undefined) {
|
|
199
|
+
parseSuccess = false;
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
emitResult(r, !isError, explicitId);
|
|
222
203
|
});
|
|
223
204
|
}
|
|
224
205
|
else if (kind === "event") {
|
|
206
|
+
const name = get(payload, "name");
|
|
207
|
+
if (typeof name !== "string" || !["run", "handoff", "loop.start", "loop.step.start", "loop.step"].includes(name)) {
|
|
208
|
+
unrecognized(`event:${String(name ?? "<missing-name>")}`);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
225
211
|
const data = get(payload, "data");
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
addUsage(get(data, "usage"));
|
|
212
|
+
if (name === "run")
|
|
213
|
+
addUsage(get(data, "usage"));
|
|
229
214
|
// 仅在「真失败」时记 error:有 error 字段,或 status 命中失败词。
|
|
230
215
|
// loop.step 这类控制事件 status=="continue"/"running" 不是错误 —— 别再当 error 刷屏。
|
|
231
216
|
const status = get(data, "status");
|
|
@@ -245,27 +230,18 @@ function parseBubTranscript(raw) {
|
|
|
245
230
|
}
|
|
246
231
|
}
|
|
247
232
|
else if (kind === "error") {
|
|
248
|
-
|
|
233
|
+
const message = get(payload, "message");
|
|
234
|
+
if (typeof message === "string")
|
|
235
|
+
events.push({ type: "error", message });
|
|
236
|
+
else
|
|
237
|
+
parseSuccess = false;
|
|
249
238
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
// ── 通用兜底:既无 type 也无 kind ──
|
|
253
|
-
addUsage(get(entry, "usage"));
|
|
254
|
-
const role = get(entry, "role");
|
|
255
|
-
const name = get(entry, "tool") ?? get(entry, "name");
|
|
256
|
-
if (role === "assistant" || role === "user") {
|
|
257
|
-
const text = extractText(get(entry, "content") ?? get(entry, "text"));
|
|
258
|
-
if (text)
|
|
259
|
-
events.push({ type: "message", role, text });
|
|
260
|
-
}
|
|
261
|
-
else if (typeof name === "string") {
|
|
262
|
-
if (get(entry, "result") !== undefined || get(entry, "output") !== undefined) {
|
|
263
|
-
emitResult(get(entry, "result") ?? get(entry, "output"), !get(entry, "error"), get(entry, "call_id") ?? get(entry, "id"));
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
emitCall(name, coerceArgs(get(entry, "args") ?? get(entry, "arguments") ?? get(entry, "input")), get(entry, "call_id") ?? get(entry, "id"));
|
|
239
|
+
else if (kind !== "system") {
|
|
240
|
+
unrecognized(kind);
|
|
267
241
|
}
|
|
242
|
+
continue;
|
|
268
243
|
}
|
|
244
|
+
unrecognized(typeof type === "string" ? `type:${type}` : "<missing-kind>");
|
|
269
245
|
}
|
|
270
246
|
catch {
|
|
271
247
|
parseSuccess = false;
|
|
@@ -280,7 +256,7 @@ function parseBubTranscript(raw) {
|
|
|
280
256
|
usage.requests = requests;
|
|
281
257
|
if (hasObservedCostUSD)
|
|
282
258
|
usage.costUSD = costUSD;
|
|
283
|
-
return { events, usage, compactions, parseSuccess };
|
|
259
|
+
return { events, usage, compactions, parseSuccess, unrecognizedEvents };
|
|
284
260
|
}
|
|
285
261
|
/** 便捷形态:只要 StreamEvent[]。 */
|
|
286
262
|
function parseBub(raw) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bub.js","sourceRoot":"","sources":["bub.ts"],"names":[],"mappings":"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","sourcesContent":["// Bub(republic tape)transcript 解析器,同时充当「通用 JSONL」兜底解析器。\n//\n// 真实 tape 格式(~/.bub/tapes/<md5(ws)__md5(sess)>.jsonl,按 id 升序逐行):\n// - kind=message payload={role, content} → 对话\n// - kind=tool_call payload={calls:[{id,function:{name,arguments}}]}\n// - kind=tool_result payload={results:[...]} ← 与上一条 tool_call.calls 按位对齐\n// - kind=event payload={name, data} name==\"run\" → data.usage 是该次模型调用用量\n// - kind=anchor payload={name, state:{summary?}} name!=\"session/start\" = tape.handoff(压缩检查点)\n// - kind=system/error\n// 用量路径(已对真实 tape 校验):payload.data.usage.{prompt_tokens,completion_tokens,total_tokens,\n// prompt_tokens_details.cached_tokens, cost}。compaction = 非 bootstrap 的 anchor(handoff)条数。\n// 也保留 legacy {type:...} 与无 type/kind 的通用兜底。\nimport type { StreamEvent, Usage, ToolName, JsonValue } from \"../../types.ts\";\nimport type { ParsedTranscript } from \"./index.ts\";\nimport { GENERIC_VERB_ALIASES, normalizeToolName as normalizeShared } from \"../tool-names.ts\";\nimport { normalizeJsonValue } from \"../../shared/json-value.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../command-projection.ts\";\n/** Bub 特有别名(fs.* / web.* 命名空间与裸 read/write/edit)+ 裸动词;通用别名走基表。 */\nexport const BUB_TOOL_ALIASES: globalThis.Record<string, ToolName> = {\n ...GENERIC_VERB_ALIASES,\n \"fs.read\": \"file_read\", fs_read: \"file_read\", read: \"file_read\",\n \"fs.write\": \"file_write\", fs_write: \"file_write\", write: \"file_write\",\n \"fs.edit\": \"file_edit\", fs_edit: \"file_edit\", edit: \"file_edit\",\n \"web.fetch\": \"web_fetch\",\n \"web.search\": \"web_search\",\n update_todos: \"agent_task\",\n};\nfunction normalizeToolName(name: string): ToolName {\n return normalizeShared(name, BUB_TOOL_ALIASES);\n}\n/** Bub tape 的 `bash` 是原生 shell action;tape 只保留 source,不能证明 argv。 */\nfunction commandProjectionForBubTool(name: string) {\n return name.toLowerCase() === \"bash\"\n ? opaqueCommandProjection(\"unsupported-protocol\")\n : notCommandProjection();\n}\nfunction get(obj: unknown, key: string): unknown {\n return obj && typeof obj === \"object\" ? (obj as globalThis.Record<string, unknown>)[key] : undefined;\n}\nfunction num(obj: unknown, ...keys: string[]): number {\n for (const k of keys) {\n const v = get(obj, k);\n if (typeof v === \"number\" && Number.isFinite(v))\n return v;\n }\n return 0;\n}\nfunction optionalNum(obj: unknown, ...keys: string[]): number | undefined {\n for (const key of keys) {\n const value = get(obj, key);\n if (typeof value === \"number\" && Number.isFinite(value))\n return value;\n }\n return undefined;\n}\nfunction coerceArgs(value: unknown): JsonValue {\n if (typeof value === \"string\") {\n try {\n const parsed: unknown = JSON.parse(value);\n return normalizeJsonValue(parsed, value);\n }\n catch {\n return value;\n }\n }\n return normalizeJsonValue(value, {});\n}\nfunction extractText(content: unknown): string {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const b of content) {\n if (typeof b === \"string\")\n parts.push(b);\n else {\n const t = get(b, \"text\") ?? get(b, \"content\");\n if (typeof t === \"string\")\n parts.push(t);\n }\n }\n return parts.join(\"\\n\");\n }\n return \"\";\n}\nexport function parseBubTranscript(raw: string | undefined): ParsedTranscript {\n const events: StreamEvent[] = [];\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens = 0;\n let costUSD = 0;\n let hasObservedCostUSD = false;\n let requests = 0;\n let compactions = 0;\n let parseSuccess = true;\n if (!raw || !raw.trim()) {\n return { events, usage: {}, compactions: 0, parseSuccess: true };\n }\n // tape 的 tool_result 与上一条 tool_call 按位对齐;记下上一批 callId。\n let lastCallIds: string[] = [];\n // 无显式 id 的兜底配对。\n const pendingCallIds: string[] = [];\n let synth = 0;\n const nextSynthId = (): string => `bub_${++synth}`;\n // 从 event/run 的 data.usage(或 legacy 顶层 usage)累加用量。\n const addUsage = (usage: unknown): void => {\n if (!usage || typeof usage !== \"object\")\n return;\n const rawInput = num(usage, \"input_tokens\", \"prompt_tokens\", \"inputTokens\");\n const output = num(usage, \"output_tokens\", \"completion_tokens\", \"outputTokens\");\n let cache = num(usage, \"cached_input_tokens\", \"cache_read_input_tokens\", \"cacheReadTokens\");\n if (cache === 0)\n cache = num(get(usage, \"prompt_tokens_details\"), \"cached_tokens\");\n const cost = optionalNum(usage, \"cost\");\n if (rawInput === 0 && output === 0 && cache === 0 && cost === undefined)\n return;\n // Chat Completions 口径的 prompt_tokens 含缓存命中,cached_tokens 是其子集;\n // 落互斥桶前扣掉(docs/feature/adapters/sdk/bub/cost.md)\n const input = Math.max(0, rawInput - cache);\n inputTokens += input;\n outputTokens += output;\n cacheReadTokens += cache;\n if (cost !== undefined) {\n costUSD += cost;\n hasObservedCostUSD = true;\n }\n requests += 1;\n };\n const emitCall = (originalName: string, input: JsonValue, explicitId: unknown): string => {\n const callId = explicitId != null ? String(explicitId) : nextSynthId();\n if (explicitId == null)\n pendingCallIds.push(callId);\n events.push({\n type: \"operation.started\",\n operationId: callId,\n operation: {\n kind: \"tool\",\n name: originalName,\n input,\n tool: normalizeToolName(originalName),\n command: commandProjectionForBubTool(originalName),\n },\n });\n return callId;\n };\n const emitResult = (output: unknown, success: boolean, explicitId: unknown): void => {\n const callId = explicitId != null ? String(explicitId) : pendingCallIds.shift() ?? nextSynthId();\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: (output ?? null) as JsonValue,\n status: success ? \"completed\" : \"failed\",\n });\n };\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed)\n continue;\n let entry: unknown;\n try {\n entry = JSON.parse(trimmed);\n }\n catch {\n parseSuccess = false;\n continue;\n }\n try {\n const type = get(entry, \"type\");\n const kind = get(entry, \"kind\");\n // ── legacy: 顶层 type ──\n if (typeof type === \"string\") {\n addUsage(get(entry, \"usage\"));\n if (type === \"message\") {\n const role = get(entry, \"role\") === \"user\" ? \"user\" : \"assistant\";\n const text = extractText(get(entry, \"content\") ?? get(entry, \"text\"));\n if (text)\n events.push({ type: \"message\", role, text });\n }\n else if (type === \"tool_call\") {\n const name = String(get(entry, \"tool_name\") ?? get(entry, \"name\") ?? get(entry, \"tool\") ?? \"unknown\");\n emitCall(name, coerceArgs(get(entry, \"args\") ?? get(entry, \"input\")), get(entry, \"call_id\") ?? get(entry, \"id\"));\n }\n else if (type === \"tool_result\") {\n emitResult(get(entry, \"result\") ?? get(entry, \"output\") ?? get(entry, \"content\"), get(entry, \"success\") !== false && !get(entry, \"error\"), get(entry, \"call_id\") ?? get(entry, \"tool_call_id\") ?? get(entry, \"id\"));\n }\n else if (type === \"thinking\" || type === \"reasoning\") {\n const text = extractText(get(entry, \"content\") ?? get(entry, \"text\"));\n if (text)\n events.push({ type: \"thinking\", text });\n }\n else if (type === \"error\") {\n events.push({ type: \"error\", message: String(get(entry, \"message\") ?? get(entry, \"error\") ?? \"error\") });\n }\n continue;\n }\n // ── republic tape: kind + payload ──\n if (typeof kind === \"string\") {\n const payload = get(entry, \"payload\");\n if (kind === \"message\") {\n const role = get(payload, \"role\") === \"user\" ? \"user\" : \"assistant\";\n const text = extractText(get(payload, \"content\") ?? get(payload, \"text\"));\n if (text)\n events.push({ type: \"message\", role, text });\n }\n else if (kind === \"tool_call\") {\n // 模型「先说话再调工具」:伴随文本记在 tool_call 的 payload.content 上\n // (bub 不给它单独的 message 条目)。先还原成 assistant message,再吐 calls,\n // 否则 transcript 里每次 send 后面都看不到 AI 回复。\n const accompanying = extractText(get(payload, \"content\"));\n if (accompanying)\n events.push({ type: \"message\", role: \"assistant\", text: accompanying });\n const calls = get(payload, \"calls\");\n const list = Array.isArray(calls) ? calls : [payload];\n lastCallIds = [];\n for (const call of list) {\n const fn = get(call, \"function\") ?? call;\n const name = String(get(fn, \"name\") ?? get(call, \"name\") ?? \"unknown\");\n const id = emitCall(name, coerceArgs(get(fn, \"arguments\") ?? get(call, \"args\") ?? get(call, \"input\")), get(call, \"id\") ?? get(call, \"call_id\"));\n lastCallIds.push(id);\n }\n }\n else if (kind === \"tool_result\") {\n const results = get(payload, \"results\");\n const list = Array.isArray(results) ? results : [get(payload, \"result\") ?? payload];\n // republic:results 与上一条 tool_call.calls 按位对齐。\n list.forEach((r, i) => {\n const isError = typeof r === \"object\" && r !== null && \"error\" in (r as globalThis.Record<string, unknown>);\n const explicitId = get(r, \"tool_call_id\") ?? get(r, \"id\") ?? lastCallIds[i];\n emitResult(get(r, \"output\") ?? get(r, \"result\") ?? get(r, \"content\") ?? r, !isError, explicitId);\n });\n }\n else if (kind === \"event\") {\n const data = get(payload, \"data\");\n // 用量:run 事件首选 data.usage;但新版 bub.tape 不一定每轮都发 run/usage,\n // 所以任何 event 上挂的 usage 也兜底累加(addUsage 自带去重式全零跳过)。\n addUsage(get(data, \"usage\"));\n // 仅在「真失败」时记 error:有 error 字段,或 status 命中失败词。\n // loop.step 这类控制事件 status==\"continue\"/\"running\" 不是错误 —— 别再当 error 刷屏。\n const status = get(data, \"status\");\n const errVal = get(data, \"error\");\n const failed = (errVal != null && errVal !== false && errVal !== \"\") ||\n (typeof status === \"string\" && /^(error|failed|aborted|cancell?ed|timeout)$/i.test(status));\n if (failed) {\n events.push({ type: \"error\", message: typeof errVal === \"string\" && errVal ? errVal : `${String(get(payload, \"name\"))}: ${String(status)}` });\n }\n }\n else if (kind === \"anchor\") {\n // 非 bootstrap 的 anchor = tape.handoff = 一次压缩检查点(供 t.transcript.compactions() 守卫)。\n const name = String(get(payload, \"name\") ?? \"\");\n if (name && name !== \"session/start\") {\n compactions += 1;\n events.push({ type: \"compaction\", reason: name });\n }\n }\n else if (kind === \"error\") {\n events.push({ type: \"error\", message: String(get(payload, \"message\") ?? get(payload, \"kind\") ?? \"error\") });\n }\n continue;\n }\n // ── 通用兜底:既无 type 也无 kind ──\n addUsage(get(entry, \"usage\"));\n const role = get(entry, \"role\");\n const name = get(entry, \"tool\") ?? get(entry, \"name\");\n if (role === \"assistant\" || role === \"user\") {\n const text = extractText(get(entry, \"content\") ?? get(entry, \"text\"));\n if (text)\n events.push({ type: \"message\", role, text });\n }\n else if (typeof name === \"string\") {\n if (get(entry, \"result\") !== undefined || get(entry, \"output\") !== undefined) {\n emitResult(get(entry, \"result\") ?? get(entry, \"output\"), !get(entry, \"error\"), get(entry, \"call_id\") ?? get(entry, \"id\"));\n }\n else {\n emitCall(name, coerceArgs(get(entry, \"args\") ?? get(entry, \"arguments\") ?? get(entry, \"input\")), get(entry, \"call_id\") ?? get(entry, \"id\"));\n }\n }\n }\n catch {\n parseSuccess = false;\n }\n }\n // requests > 0 意味着至少一次 addUsage 真的读到了非零字段;整份 tape 没有任何 usage 时\n // input/output 也不该垫成 0(见 docs/feature/record/architecture.md#usage)。\n const usage: Usage = requests > 0 ? { inputTokens, outputTokens } : {};\n if (cacheReadTokens > 0)\n usage.cacheReadTokens = cacheReadTokens;\n if (requests > 0)\n usage.requests = requests;\n if (hasObservedCostUSD)\n usage.costUSD = costUSD;\n return { events, usage, compactions, parseSuccess };\n}\n/** 便捷形态:只要 StreamEvent[]。 */\nexport function parseBub(raw: string | undefined): StreamEvent[] {\n return parseBubTranscript(raw).events;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bub.js","sourceRoot":"","sources":["bub.ts"],"names":[],"mappings":"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","sourcesContent":["// Bub 0.5.1 tape transcript 解析器。\n//\n// 真实 tape 格式(~/.bub/tapes/<md5(ws)__md5(sess)>.jsonl,按 id 升序逐行):\n// - kind=message payload={role, content} → 对话\n// - kind=tool_call payload={calls:[{id,function:{name,arguments}}]}\n// - kind=tool_result payload={results:[...]} ← 与上一条 tool_call.calls 按位对齐\n// - kind=event payload={name, data} name==\"run\" → data.usage 是该次模型调用用量\n// - kind=anchor payload={name, state:{summary?}} name!=\"session/start\" = tape.handoff(压缩检查点)\n// - kind=system/error\n// 用量路径(已对真实 tape 校验):payload.data.usage.{prompt_tokens,completion_tokens,total_tokens,\n// prompt_tokens_details.cached_tokens, cost}。compaction = 非 bootstrap 的 anchor(handoff)条数。\n// 只读取固定版本的 kind + payload 协议。\nimport type { StreamEvent, Usage, ToolName, JsonValue } from \"../../types.ts\";\nimport type { ParsedTranscript } from \"./index.ts\";\nimport { GENERIC_VERB_ALIASES, normalizeToolName as normalizeShared } from \"../tool-names.ts\";\nimport { normalizeJsonValue } from \"../../shared/json-value.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../command-projection.ts\";\n/** Bub 特有别名(fs.* / web.* 命名空间与裸 read/write/edit)+ 裸动词;通用别名走基表。 */\nexport const BUB_TOOL_ALIASES: globalThis.Record<string, ToolName> = {\n ...GENERIC_VERB_ALIASES,\n \"fs.read\": \"file_read\", fs_read: \"file_read\", read: \"file_read\",\n \"fs.write\": \"file_write\", fs_write: \"file_write\", write: \"file_write\",\n \"fs.edit\": \"file_edit\", fs_edit: \"file_edit\", edit: \"file_edit\",\n \"web.fetch\": \"web_fetch\",\n \"web.search\": \"web_search\",\n update_todos: \"agent_task\",\n};\nfunction normalizeToolName(name: string): ToolName {\n return normalizeShared(name, BUB_TOOL_ALIASES);\n}\n/** Bub tape 的 `bash` 是原生 shell action;tape 只保留 source,不能证明 argv。 */\nfunction commandProjectionForBubTool(name: string) {\n return name.toLowerCase() === \"bash\"\n ? opaqueCommandProjection(\"unsupported-protocol\")\n : notCommandProjection();\n}\nfunction get(obj: unknown, key: string): unknown {\n return obj && typeof obj === \"object\" ? (obj as globalThis.Record<string, unknown>)[key] : undefined;\n}\nfunction num(obj: unknown, ...keys: string[]): number {\n for (const k of keys) {\n const v = get(obj, k);\n if (typeof v === \"number\" && Number.isFinite(v))\n return v;\n }\n return 0;\n}\nfunction optionalNum(obj: unknown, ...keys: string[]): number | undefined {\n for (const key of keys) {\n const value = get(obj, key);\n if (typeof value === \"number\" && Number.isFinite(value))\n return value;\n }\n return undefined;\n}\nfunction coerceArgs(value: unknown): JsonValue {\n if (typeof value === \"string\") {\n try {\n const parsed: unknown = JSON.parse(value);\n return normalizeJsonValue(parsed, value);\n }\n catch {\n return value;\n }\n }\n return normalizeJsonValue(value, {});\n}\nfunction extractText(content: unknown): string {\n if (typeof content === \"string\")\n return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const b of content) {\n if (get(b, \"type\") === \"text\") {\n const t = get(b, \"text\");\n if (typeof t === \"string\")\n parts.push(t);\n }\n }\n return parts.join(\"\\n\");\n }\n return \"\";\n}\nexport function parseBubTranscript(raw: string | undefined): ParsedTranscript {\n const events: StreamEvent[] = [];\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadTokens = 0;\n let costUSD = 0;\n let hasObservedCostUSD = false;\n let requests = 0;\n let compactions = 0;\n let parseSuccess = true;\n const unrecognizedEvents: Record<string, number> = Object.create(null);\n const unrecognized = (type: string): void => {\n unrecognizedEvents[type] = (unrecognizedEvents[type] ?? 0) + 1;\n };\n if (!raw || !raw.trim()) {\n return { events, usage: {}, compactions: 0, parseSuccess: true };\n }\n // tape 的 tool_result 与上一条 tool_call 按位对齐;记下上一批 callId。\n let lastCallIds: (string | undefined)[] = [];\n // 从 event/run 的 data.usage 累加用量。\n const addUsage = (usage: unknown): void => {\n if (!usage || typeof usage !== \"object\")\n return;\n const rawInput = num(usage, \"prompt_tokens\");\n const output = num(usage, \"completion_tokens\");\n const cache = num(get(usage, \"prompt_tokens_details\"), \"cached_tokens\");\n const cost = optionalNum(usage, \"cost\");\n if (rawInput === 0 && output === 0 && cache === 0 && cost === undefined)\n return;\n // Chat Completions 口径的 prompt_tokens 含缓存命中,cached_tokens 是其子集;\n // 落互斥桶前扣掉(docs/feature/adapters/sdk/bub/cost.md)\n const input = Math.max(0, rawInput - cache);\n inputTokens += input;\n outputTokens += output;\n cacheReadTokens += cache;\n if (cost !== undefined) {\n costUSD += cost;\n hasObservedCostUSD = true;\n }\n requests += 1;\n };\n const emitCall = (originalName: string, input: JsonValue, callId: string): string => {\n events.push({\n type: \"operation.started\",\n operationId: callId,\n operation: {\n kind: \"tool\",\n name: originalName,\n input,\n tool: normalizeToolName(originalName),\n command: commandProjectionForBubTool(originalName),\n },\n });\n return callId;\n };\n const emitResult = (output: unknown, success: boolean, callId: string): void => {\n events.push({\n type: \"operation.finished\",\n operationId: callId,\n kind: \"tool\",\n output: (output ?? null) as JsonValue,\n status: success ? \"completed\" : \"failed\",\n });\n };\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed)\n continue;\n let entry: unknown;\n try {\n entry = JSON.parse(trimmed);\n }\n catch {\n parseSuccess = false;\n continue;\n }\n try {\n const type = get(entry, \"type\");\n const kind = get(entry, \"kind\");\n // ── republic tape: kind + payload ──\n if (typeof kind === \"string\") {\n const payload = get(entry, \"payload\");\n if (kind === \"message\") {\n const role = get(payload, \"role\");\n if (role !== \"user\" && role !== \"assistant\") {\n parseSuccess = false;\n continue;\n }\n const text = extractText(get(payload, \"content\"));\n if (text)\n events.push({ type: \"message\", role, text });\n }\n else if (kind === \"tool_call\") {\n // 模型「先说话再调工具」:伴随文本记在 tool_call 的 payload.content 上\n // (bub 不给它单独的 message 条目)。先还原成 assistant message,再吐 calls,\n // 否则 transcript 里每次 send 后面都看不到 AI 回复。\n const accompanying = extractText(get(payload, \"content\"));\n if (accompanying)\n events.push({ type: \"message\", role: \"assistant\", text: accompanying });\n const calls = get(payload, \"calls\");\n const list = Array.isArray(calls) ? calls : [];\n if (!Array.isArray(calls))\n parseSuccess = false;\n lastCallIds = list.map((call) => {\n const fn = get(call, \"function\");\n const name = get(fn, \"name\");\n const id = get(call, \"id\");\n if (typeof name !== \"string\" || typeof id !== \"string\") {\n parseSuccess = false;\n return undefined;\n }\n return emitCall(name, coerceArgs(get(fn, \"arguments\")), id);\n });\n }\n else if (kind === \"tool_result\") {\n const results = get(payload, \"results\");\n const list = Array.isArray(results) ? results : [];\n if (!Array.isArray(results))\n parseSuccess = false;\n // republic:results 与上一条 tool_call.calls 按位对齐。\n list.forEach((r, i) => {\n const isError = typeof r === \"object\" && r !== null && \"error\" in (r as globalThis.Record<string, unknown>);\n const explicitId = lastCallIds[i];\n if (explicitId === undefined) {\n parseSuccess = false;\n return;\n }\n emitResult(r, !isError, explicitId);\n });\n }\n else if (kind === \"event\") {\n const name = get(payload, \"name\");\n if (typeof name !== \"string\" || ![\"run\", \"handoff\", \"loop.start\", \"loop.step.start\", \"loop.step\"].includes(name)) {\n unrecognized(`event:${String(name ?? \"<missing-name>\")}`);\n continue;\n }\n const data = get(payload, \"data\");\n if (name === \"run\")\n addUsage(get(data, \"usage\"));\n // 仅在「真失败」时记 error:有 error 字段,或 status 命中失败词。\n // loop.step 这类控制事件 status==\"continue\"/\"running\" 不是错误 —— 别再当 error 刷屏。\n const status = get(data, \"status\");\n const errVal = get(data, \"error\");\n const failed = (errVal != null && errVal !== false && errVal !== \"\") ||\n (typeof status === \"string\" && /^(error|failed|aborted|cancell?ed|timeout)$/i.test(status));\n if (failed) {\n events.push({ type: \"error\", message: typeof errVal === \"string\" && errVal ? errVal : `${String(get(payload, \"name\"))}: ${String(status)}` });\n }\n }\n else if (kind === \"anchor\") {\n // 非 bootstrap 的 anchor = tape.handoff = 一次压缩检查点(供 t.transcript.compactions() 守卫)。\n const name = String(get(payload, \"name\") ?? \"\");\n if (name && name !== \"session/start\") {\n compactions += 1;\n events.push({ type: \"compaction\", reason: name });\n }\n }\n else if (kind === \"error\") {\n const message = get(payload, \"message\");\n if (typeof message === \"string\")\n events.push({ type: \"error\", message });\n else\n parseSuccess = false;\n }\n else if (kind !== \"system\") {\n unrecognized(kind);\n }\n continue;\n }\n unrecognized(typeof type === \"string\" ? `type:${type}` : \"<missing-kind>\");\n }\n catch {\n parseSuccess = false;\n }\n }\n // requests > 0 意味着至少一次 addUsage 真的读到了非零字段;整份 tape 没有任何 usage 时\n // input/output 也不该垫成 0(见 docs/feature/record/architecture.md#usage)。\n const usage: Usage = requests > 0 ? { inputTokens, outputTokens } : {};\n if (cacheReadTokens > 0)\n usage.cacheReadTokens = cacheReadTokens;\n if (requests > 0)\n usage.requests = requests;\n if (hasObservedCostUSD)\n usage.costUSD = costUSD;\n return { events, usage, compactions, parseSuccess, unrecognizedEvents };\n}\n/** 便捷形态:只要 StreamEvent[]。 */\nexport function parseBub(raw: string | undefined): StreamEvent[] {\n return parseBubTranscript(raw).events;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAOA,yCAA8D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAOA,yCAA8D;AAYrD,qGAZA,+BAAoB,OAYA;AAAE,2FAZA,qBAAU,OAYA;AAXzC,qDAA8E;AAWnC,0GAXlC,0CAAyB,OAWkC;AAAE,gGAXlC,gCAAe,OAWkC;AAVrF,qCAAwD;AAU+B,mGAV9E,2BAAkB,OAU8E;AAAE,yFAV9E,iBAAQ,OAU8E","sourcesContent":["// o11y 解析器入口:把各 agent 的原始 transcript 归一成 niceeval StreamEvent[]。\n// 每个解析器都返回同一个 ParsedTranscript 形状。\n//\n// 这里没有「按 agent 名分派」的入口:解析器由 adapter 直连(shared.parseCodex /\n// parseClaudeCode / parseBub),core 不按名字分支。接新 agent = 写新解析器 + adapter\n// 里直接调,不改本文件的任何分派逻辑。\nimport type { StreamEvent, Usage } from \"../../types.ts\";\nimport { parseCodexTranscript, parseCodex } from \"./codex.ts\";\nimport { parseClaudeCodeTranscript, parseClaudeCode } from \"./claude-code.ts\";\nimport { parseBubTranscript, parseBub } from \"./bub.ts\";\n/** 解析结果:事件流为核心,外加 usage / 压缩次数 / 是否全程解析成功。 */\nexport interface ParsedTranscript {\n events: StreamEvent[];\n usage: Usage;\n compactions: number;\n parseSuccess: boolean;\n /** Unknown upstream event types, excluded from the normalized event stream. */\n unrecognizedEvents?: Readonly<Record<string, number>>;\n}\nexport { parseCodexTranscript, parseCodex, parseClaudeCodeTranscript, parseClaudeCode, parseBubTranscript, parseBub, };\n"]}
|
|
@@ -8,5 +8,7 @@ export interface ParsedTranscript {
|
|
|
8
8
|
usage: Usage;
|
|
9
9
|
compactions: number;
|
|
10
10
|
parseSuccess: boolean;
|
|
11
|
+
/** Unknown upstream event types, excluded from the normalized event stream. */
|
|
12
|
+
unrecognizedEvents?: Readonly<Record<string, number>>;
|
|
11
13
|
}
|
|
12
14
|
export { parseCodexTranscript, parseCodex, parseClaudeCodeTranscript, parseClaudeCode, parseBubTranscript, parseBub, };
|
|
@@ -8,5 +8,7 @@ export interface ParsedTranscript {
|
|
|
8
8
|
usage: Usage;
|
|
9
9
|
compactions: number;
|
|
10
10
|
parseSuccess: boolean;
|
|
11
|
+
/** Unknown upstream event types, excluded from the normalized event stream. */
|
|
12
|
+
unrecognizedEvents?: Readonly<Record<string, number>>;
|
|
11
13
|
}
|
|
12
14
|
export { parseCodexTranscript, parseCodex, parseClaudeCodeTranscript, parseClaudeCode, parseBubTranscript, parseBub, };
|
|
@@ -8,5 +8,7 @@ export interface ParsedTranscript {
|
|
|
8
8
|
usage: Usage;
|
|
9
9
|
compactions: number;
|
|
10
10
|
parseSuccess: boolean;
|
|
11
|
+
/** Unknown upstream event types, excluded from the normalized event stream. */
|
|
12
|
+
unrecognizedEvents?: Readonly<Record<string, number>>;
|
|
11
13
|
}
|
|
12
14
|
export { parseCodexTranscript, parseCodex, parseClaudeCodeTranscript, parseClaudeCode, parseBubTranscript, parseBub, };
|