niceeval 0.17.1 → 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 +5 -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 -3
- package/dist/adapter.cjs.map +1 -1
- package/dist/adapter.d.cts +26 -15
- package/dist/adapter.d.mts +26 -15
- package/dist/adapter.d.ts +26 -15
- 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 +61 -0
- package/dist/assertions/measurements.cjs.map +1 -0
- package/dist/assertions/measurements.d.cts +24 -0
- package/dist/assertions/measurements.d.mts +24 -0
- package/dist/assertions/measurements.d.ts +24 -0
- package/dist/assertions/measurements.js +8 -0
- package/dist/assertions/measurements.js.map +1 -0
- 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 +89 -64
- 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 +13 -1
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +5 -1
- package/dist/expect/index.d.mts +5 -1
- package/dist/expect/index.d.ts +5 -1
- package/dist/expect/index.js +92 -72
- package/dist/expect/index.mjs +92 -72
- 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 +24 -23
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/runtime.cjs +11 -10
- 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 +4 -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 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -8
- package/dist/index.d.mts +4 -8
- package/dist/index.d.ts +4 -8
- package/dist/index.js +12 -34
- package/dist/index.mjs +12 -34
- 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} +26 -7
- package/dist/model-roles.cjs.map +1 -0
- package/dist/model-roles.d.cts +26 -0
- package/dist/model-roles.d.mts +26 -0
- package/dist/model-roles.d.ts +26 -0
- 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 +10 -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 +15 -1
- package/dist/runner/eval-selection.cjs.map +1 -1
- package/dist/runner/eval-selection.d.cts +4 -0
- package/dist/runner/eval-selection.d.mts +4 -0
- package/dist/runner/eval-selection.d.ts +4 -0
- 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/lock.cjs +1 -3
- package/dist/runner/lock.cjs.map +1 -1
- package/dist/runner/lock.d.cts +0 -2
- package/dist/runner/lock.d.mts +0 -2
- package/dist/runner/lock.d.ts +0 -2
- package/dist/runner/lock.js +14 -16
- 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 -92
- package/dist/runner/types.d.mts +64 -92
- package/dist/runner/types.d.ts +64 -92
- 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 -10
- package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.d.cts +0 -4
- package/dist/sandbox/docker-profile/registry.d.mts +0 -4
- package/dist/sandbox/docker-profile/registry.d.ts +0 -4
- package/dist/sandbox/docker-profile/registry.js +6 -14
- 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 -36
- 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 -174
- package/dist/sandbox/index.mjs +116 -174
- 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 +9 -9
- package/docs-site/zh/examples/integrations/claude-sdk.mdx +8 -8
- package/docs-site/zh/examples/integrations/codex-sdk.mdx +4 -4
- package/docs-site/zh/examples/integrations/langgraph.mdx +6 -6
- package/docs-site/zh/examples/integrations/pi-sdk.mdx +8 -8
- 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 +3 -3
- package/docs-site/zh/index.mdx +18 -0
- package/docs-site/zh/introduction.mdx +4 -3
- 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 +4 -3
- 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 +49 -9
- 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 +64 -0
- 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 +4 -3
- 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.cjs.map +0 -1
- package/dist/model-slots.d.cts +0 -19
- package/dist/model-slots.d.mts +0 -19
- package/dist/model-slots.d.ts +0 -19
- package/dist/model-slots.js +0 -8
- package/dist/model-slots.js.map +0 -1
package/dist/agents/bub.cjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.bubAgent = bubAgent;
|
|
4
|
+
const unrecognized_events_ts_1 = require("./unrecognized-events.cjs");
|
|
5
|
+
const plugin_extensions_ts_1 = require("./plugin-extensions.cjs");
|
|
4
6
|
const effect_1 = require("effect");
|
|
5
7
|
const coverage_ts_1 = require("../assertions/coverage.cjs");
|
|
6
8
|
const define_ts_1 = require("../define.cjs");
|
|
@@ -26,13 +28,10 @@ const SKILL_DIR = ".agents/skills";
|
|
|
26
28
|
// 安装都会去拉 Bub 主干,版本失控。所以安装前总是先把 `bub==<version>` 写进这个文件。
|
|
27
29
|
const BUB_OVERRIDE_FILE = "/tmp/bub-override.txt";
|
|
28
30
|
function resolvePin(config) {
|
|
29
|
-
const version = config?.version ?? coding_cli_versions_ts_1.DEFAULT_BUB_VERSION;
|
|
30
31
|
return {
|
|
31
|
-
requirement:
|
|
32
|
+
requirement: bub_install_spec_ts_1.DEFAULT_BUB_REQUIREMENT,
|
|
32
33
|
otelPlugin: config?.otelPlugin ?? bub_install_spec_ts_1.DEFAULT_BUB_OTEL_PLUGIN,
|
|
33
|
-
|
|
34
|
-
// historical Bub version owns a different closure, so do not silently apply the default pins.
|
|
35
|
-
dependencyOverrides: version === coding_cli_versions_ts_1.DEFAULT_BUB_VERSION ? bub_install_spec_ts_1.DEFAULT_BUB_DEPENDENCY_OVERRIDES : [],
|
|
34
|
+
dependencyOverrides: bub_install_spec_ts_1.DEFAULT_BUB_DEPENDENCY_OVERRIDES,
|
|
36
35
|
};
|
|
37
36
|
}
|
|
38
37
|
// NiceEval 的预制配方与运行时安装都写到 $HOME/.local;显式使用该路径,避免 PATH 上
|
|
@@ -50,12 +49,19 @@ function tapePath(workspace, sessionId, bubHome) {
|
|
|
50
49
|
const s = (0, node_crypto_1.createHash)("md5").update(sessionId).digest("hex").slice(0, 16);
|
|
51
50
|
return `${bubHome}/tapes/${w}__${s}.jsonl`;
|
|
52
51
|
}
|
|
53
|
-
// @concord-code
|
|
52
|
+
// @concord-code
|
|
54
53
|
// @concord-implements docs/feature/adapters/README.md
|
|
55
54
|
// @concord-implements docs/feature/adapters/sdk/bub/README.md
|
|
56
55
|
function bubAgent(config) {
|
|
56
|
+
if (config !== undefined && Object.hasOwn(config, "apiBase")) {
|
|
57
|
+
throw new TypeError("bubAgent() apiBase is no longer supported. Use baseUrl.");
|
|
58
|
+
}
|
|
59
|
+
if (config?.version !== undefined && config.version !== coding_cli_versions_ts_1.DEFAULT_BUB_VERSION) {
|
|
60
|
+
throw new TypeError(`bubAgent() only supports Bub ${coding_cli_versions_ts_1.DEFAULT_BUB_VERSION}; remove version or set version: "${coding_cli_versions_ts_1.DEFAULT_BUB_VERSION}".`);
|
|
61
|
+
}
|
|
62
|
+
(0, post_setup_ts_1.assertAgentLifecycleNames)(config, "bubAgent");
|
|
57
63
|
const getApiKey = () => config?.apiKey ?? (0, util_ts_1.requireEnv)("BUB_API_KEY");
|
|
58
|
-
const getApiBase = () => config?.
|
|
64
|
+
const getApiBase = () => config?.baseUrl ?? (0, util_ts_1.requireEnv)("BUB_API_BASE");
|
|
59
65
|
const packages = normalizePackages(config?.pythonPlugins);
|
|
60
66
|
const pin = resolvePin(config);
|
|
61
67
|
const identity = {
|
|
@@ -69,7 +75,7 @@ function bubAgent(config) {
|
|
|
69
75
|
});
|
|
70
76
|
// sandboxId → { home, workspace }; persists values detected in setup() so send() can use them.
|
|
71
77
|
const sessionInfo = new Map();
|
|
72
|
-
return (0, post_setup_ts_1.registerAgentLifecycleHookCommands)((0, define_ts_1.makeSandboxAgent)({
|
|
78
|
+
return (0, plugin_extensions_ts_1.attachCodingAgentExtensions)((0, post_setup_ts_1.registerAgentLifecycleHookCommands)((0, define_ts_1.makeSandboxAgent)({
|
|
73
79
|
name: "bub",
|
|
74
80
|
ensure: { identity, probe },
|
|
75
81
|
installers: [{
|
|
@@ -103,7 +109,7 @@ ${last}`);
|
|
|
103
109
|
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: "http/protobuf",
|
|
104
110
|
}),
|
|
105
111
|
},
|
|
106
|
-
|
|
112
|
+
before: (sb, ctx) => effect_1.Effect.tryPromise({
|
|
107
113
|
try: async () => {
|
|
108
114
|
// home 必须来自运行时探测:各 sandbox provider 不同(/home/node、/home/vercel-sandbox…),
|
|
109
115
|
// 兜一个 provider 专属常量会静默走错路径(tape 读不到 → 空事件流 → 负断言假通过)。
|
|
@@ -111,7 +117,7 @@ ${last}`);
|
|
|
111
117
|
if (!home)
|
|
112
118
|
throw new Error(`Failed to detect sandbox $HOME (empty output from \`printf $HOME\`). Refusing to fall back to a provider-specific path; check the sandbox provider.`);
|
|
113
119
|
const workspace = sb.workdir;
|
|
114
|
-
sessionInfo.set(sb.sandboxId, { home, workspace });
|
|
120
|
+
sessionInfo.set(sb.sandboxId, { home, workspace, unknown: new unrecognized_events_ts_1.UnrecognizedAgentEvents() });
|
|
115
121
|
// Agent CLI 已由 runner 的 agent.ensure 循环完成安装与复检。
|
|
116
122
|
// adapter setup 只写本 Attempt 的 runtime config。
|
|
117
123
|
if (!(await sb.pathExists(`${workspace}/AGENTS.md`))) {
|
|
@@ -136,19 +142,25 @@ ${last}`);
|
|
|
136
142
|
if (packages.length)
|
|
137
143
|
manifest.pythonPlugins = packages.map((pkg) => ({ package: pkg }));
|
|
138
144
|
if (manifest.skills.length || manifest.pythonPlugins?.length) {
|
|
139
|
-
ctx.
|
|
145
|
+
ctx.reportInstallation(manifest);
|
|
140
146
|
}
|
|
141
|
-
// 安装后钩子(
|
|
147
|
+
// 安装后钩子(before):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,
|
|
142
148
|
// 钩子失败不该丢掉这份证据。
|
|
143
|
-
await (0, post_setup_ts_1.runPostSetupHooks)(sb, ctx, "bub", config?.
|
|
149
|
+
await (0, post_setup_ts_1.runPostSetupHooks)(sb, ctx, "bub", config?.before);
|
|
144
150
|
},
|
|
145
151
|
catch: (cause) => cause,
|
|
146
152
|
}),
|
|
147
|
-
|
|
153
|
+
after: (sb, ctx) => effect_1.Effect.tryPromise({
|
|
148
154
|
try: async () => {
|
|
149
|
-
//
|
|
155
|
+
// after 与 before 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。
|
|
150
156
|
// bub 目前没有其它收尾步骤,这段就是整个 teardown。
|
|
151
|
-
|
|
157
|
+
try {
|
|
158
|
+
await (0, post_setup_ts_1.runPreTeardownHooks)(sb, ctx, "bub", config?.after);
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
sessionInfo.get(sb.sandboxId)?.unknown.report((diagnostic) => ctx.diagnostic(diagnostic));
|
|
162
|
+
sessionInfo.delete(sb.sandboxId);
|
|
163
|
+
}
|
|
152
164
|
},
|
|
153
165
|
catch: (cause) => cause,
|
|
154
166
|
}),
|
|
@@ -177,6 +189,7 @@ ${last}`);
|
|
|
177
189
|
const res = await sb.runShell(`${BUB} --workspace ${workspace} run ${shared_ts_1.shared.shellQuote(input.text)} --session-id ${sessionId}`, { env, sensitiveValues: [apiKey], stream: true });
|
|
178
190
|
const raw = await sb.readText(tapePath(workspace, sessionId, bubHome)).catch(() => undefined);
|
|
179
191
|
const parsed = shared_ts_1.shared.parseBub(raw);
|
|
192
|
+
info.unknown.observe(parsed.unrecognizedEvents, sessionId);
|
|
180
193
|
const events = [...parsed.events];
|
|
181
194
|
let turnEvidenceCoverage;
|
|
182
195
|
if (!raw?.trim()) {
|
|
@@ -187,7 +200,7 @@ ${last}`);
|
|
|
187
200
|
usage: { status: "unavailable", reason },
|
|
188
201
|
};
|
|
189
202
|
}
|
|
190
|
-
else if (!parsed.parseSuccess) {
|
|
203
|
+
else if (!parsed.parseSuccess || Object.keys(parsed.unrecognizedEvents ?? {}).length > 0) {
|
|
191
204
|
const reason = "Some Bub tape lines could not be parsed.";
|
|
192
205
|
turnEvidenceCoverage = {
|
|
193
206
|
events: { status: "partial", reason },
|
|
@@ -215,7 +228,7 @@ ${last}`);
|
|
|
215
228
|
},
|
|
216
229
|
catch: (cause) => cause,
|
|
217
230
|
}),
|
|
218
|
-
}), config?.
|
|
231
|
+
}), config?.before, config?.after), "bub", config, bubAgent);
|
|
219
232
|
}
|
|
220
233
|
exports.default = bubAgent();
|
|
221
234
|
//# sourceMappingURL=bub.cjs.map
|
package/dist/agents/bub.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bub.js","sourceRoot":"","sources":["bub.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { makeSandboxAgent } from \"../define.ts\";\nimport { requireEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapBubSpans } from \"../o11y/otlp/mappers/bub.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { registerAgentLifecycleHookCommands, runPostSetupHooks, runPreTeardownHooks, } from \"./post-setup.ts\";\nimport type { Agent, AgentSetupManifest, SkillSpec, TurnEvidenceCoverage } from \"../types.ts\";\nimport type { SandboxCommand } from \"../sandbox/commands.ts\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { BUB_INSTALL_MARKER, DEFAULT_BUB_DEPENDENCY_OVERRIDES, DEFAULT_BUB_OTEL_PLUGIN, DEFAULT_BUB_REQUIREMENT, bubInstallHash, bubRequirement, normalizeBubPackages, } from \"./bub-install-spec.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { defineSandboxCommand } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport { DEFAULT_BUB_VERSION } from \"./coding-cli-versions.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// bub 的 agent adapter(沙箱型)。\n//\n// ⚠️ 现实校正:bub 是 PyPI 上的 `bub`(alpha,Python 3.12),不是 npm 包。\n// · 安装:uv tool install bub(uv 自带 python 3.12,免 root)。\n// · 调用:bub run \"<prompt>\" --session-id <id> --workspace <path>\n// · 模型 + 代理:BUB_MODEL=openai:<model>、BUB_API_BASE、BUB_API_KEY。\n// · 记忆:tape(总是开),落盘在 ~/.bub/tapes/<md5(ws)[:16]>__<md5(sess)[:16]>.jsonl。\n// ───────────────────────────────────────────────────────────────────────────\n/**\n * Bub 的扩展单元 —— **只属于 Bub**:Bub 的插件是运行环境里的 Python Package,\n * 与 Claude Code / Codex 的 native plugin 没有共同的安装协议,不共用类型。\n */\nexport interface PythonPluginSpec {\n /** PyPI Package、Version Specifier 或 Git URL(如 `bub-plugin-memory==1.3.0`、`git+https://…@8f3c1a2`)。 */\n package: string;\n}\nexport interface BubConfig {\n /** OpenAI 兼容代理的 API key。省略时读 BUB_API_KEY env。 */\n apiKey?: string;\n /** OpenAI 兼容代理的 base URL。省略时读 BUB_API_BASE env。 */\n apiBase?: string;\n /**\n * 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md(bub 没有原生 Skill 加载机制)。\n */\n skills?: SkillSpec[];\n /**\n * 装哪一版 Bub(PyPI 版本号,如 `\"0.5.1\"`)。省略时用 NiceEval 钉的默认版本;\n * 永远是确定版本,不装 latest —— 被测对象的版本要能从实验配置读出来。\n */\n version?: string;\n /**\n * OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval 钉的默认 pin。\n *\n * 插件与 Bub 的 tape 协议同代:默认 pin 从 `bub.tape` 取类型,要求 Bub ≥ 0.3.10;更早的\n * 插件 commit 按 republic 的类型校验,配 Bub ≤ 0.3.9。配错代不会安装失败,而是 span 全被拒、\n * 时间轨静默为空 —— 所以往回钉 `version` 时必须同批钉配套的插件 commit。\n */\n otelPlugin?: string;\n /**\n * 额外装进 bub tool 环境的 Python Package,每个 Sandbox setup 时进 `uv tool install … --with <pkg>`。\n * 规范化后的 package 列表进安装 checkpoint key:plugin 集合不同的两个 agent 变体不会复用同一个\n * 安装 checkpoint(否则第二个变体会静默拿到第一个变体的环境)。\n */\n pythonPlugins?: PythonPluginSpec[];\n /**\n * 安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在装 bub、装 Skills /\n * Python package、写 manifest 全部完成后执行。抛错按基础设施错误计(attempt errored)。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n postSetup?: SandboxCommand[];\n /**\n * 与 `postSetup` 成对的收尾 Hook:按 `postSetup` 的逆序语义,在 agent 自己的 teardown 步骤\n * 之前执行(LIFO 镜像 —— `postSetup` 跑在 agent 安装之后,`preTeardown` 就跑在 agent 收尾\n * 之前),当且仅当 `postSetup` 的时点走到过才触发。抛错按基础设施错误计,由 teardown 段\n * 按 teardown-failed 诊断收束。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n preTeardown?: SandboxCommand[];\n}\nconst UV = \"$HOME/.local/bin/uv\";\n/** bub 的 skill 目录(`skills` 生态的「通用」目录);bub 不原生扫描它,靠 AGENTS.md 的发现指引。 */\nconst SKILL_DIR = \".agents/skills\";\n// bub 与 OTel 插件的 pin 都从 config 来(缺省用源码里的默认 pin)——不设环境变量后门:\n// 装哪个包是配置,配置的家是代码(边界见 docs/architecture.md「配置从代码来,凭据从环境来」)。\n//\n// override 文件不是历史包袱:插件所在 workspace 把 `bub` 声明成 git 依赖,不覆盖的话每次\n// 安装都会去拉 Bub 主干,版本失控。所以安装前总是先把 `bub==<version>` 写进这个文件。\nconst BUB_OVERRIDE_FILE = \"/tmp/bub-override.txt\";\n/** 一个 agent 变体装的那套 bub:requirement + OTel 插件,两者都进安装指纹。 */\ninterface BubInstallPin {\n requirement: string;\n otelPlugin: string;\n dependencyOverrides: readonly string[];\n}\nfunction resolvePin(config?: BubConfig): BubInstallPin {\n const version = config?.version ?? DEFAULT_BUB_VERSION;\n return {\n requirement: config?.version ? bubRequirement(config.version) : DEFAULT_BUB_REQUIREMENT,\n otelPlugin: config?.otelPlugin ?? DEFAULT_BUB_OTEL_PLUGIN,\n // NiceEval can reproduce the default release's upstream lock exactly. A caller-selected\n // historical Bub version owns a different closure, so do not silently apply the default pins.\n dependencyOverrides: version === DEFAULT_BUB_VERSION ? DEFAULT_BUB_DEPENDENCY_OVERRIDES : [],\n };\n}\n// NiceEval 的预制配方与运行时安装都写到 $HOME/.local;显式使用该路径,避免 PATH 上\n// 另一个未知版本的 bub 抢先命中。\nconst BUB = \"$HOME/.local/bin/bub\";\n/** 规范化 python plugin:去空白、丢空串、去重 —— 安装命令与 checkpoint key 用同一份列表。 */\nfunction normalizePackages(plugins?: readonly PythonPluginSpec[]): string[] {\n return normalizeBubPackages((plugins ?? []).map((plugin) => plugin.package));\n}\nfunction installHashOf(packages: readonly string[], pin: BubInstallPin): string {\n return bubInstallHash(packages, pin.requirement, pin.otelPlugin, pin.dependencyOverrides);\n}\nfunction tapePath(workspace: string, sessionId: string, bubHome: string): string {\n const w = createHash(\"md5\").update(workspace).digest(\"hex\").slice(0, 16);\n const s = createHash(\"md5\").update(sessionId).digest(\"hex\").slice(0, 16);\n return `${bubHome}/tapes/${w}__${s}.jsonl`;\n}\n// @concord-code ne-adapter-bub-agent\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/bub/README.md\nexport function bubAgent(config?: BubConfig): Agent {\n const getApiKey = () => config?.apiKey ?? requireEnv(\"BUB_API_KEY\");\n const getApiBase = () => config?.apiBase ?? requireEnv(\"BUB_API_BASE\");\n const packages = normalizePackages(config?.pythonPlugins);\n const pin = resolvePin(config);\n const identity = {\n agent: \"bub\",\n version: config?.version ?? DEFAULT_BUB_VERSION,\n revision: installHashOf(packages, pin),\n } as const;\n const marker = `$HOME/${BUB_INSTALL_MARKER}`;\n const probe = defineSandboxCommand({ id: \"niceeval.agent.probe.bub\", revision: identity.revision, inputs: identity }, async (sandbox) => {\n await sandbox.runShellOrThrow(`test -x ${BUB} && test \"$(cat ${marker} 2>/dev/null)\" = ${shellQuote(identity.revision)}`);\n });\n // sandboxId → { home, workspace }; persists values detected in setup() so send() can use them.\n const sessionInfo = new Map<string, {\n home: string;\n workspace: string;\n }>();\n return registerAgentLifecycleHookCommands(makeSandboxAgent({\n name: \"bub\",\n ensure: { identity, probe },\n installers: [{\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox) => {\n await sandbox.runShellOrThrow(`test -x ${UV} || (curl -LsSf https://astral.sh/uv/install.sh | sh)`);\n await sandbox.writeText(BUB_OVERRIDE_FILE, `${[pin.requirement, ...pin.dependencyOverrides].join(\"\\n\")}\\n`);\n const withPlugins = packages.map((pkg) => `--with ${shellQuote(pkg)}`).join(\" \");\n let last = \"\";\n for (let attempt = 1; attempt <= 3; attempt += 1) {\n const result = await sandbox.runShell(`${UV} tool install --reinstall --python 3.12 --prerelease allow 'bub' --overrides ${BUB_OVERRIDE_FILE} --with ${shellQuote(pin.otelPlugin)}${withPlugins ? ` ${withPlugins}` : \"\"}`);\n if (result.exitCode === 0) {\n await sandbox.runShellOrThrow(`mkdir -p \"$(dirname ${marker})\" && printf '%s' ${shellQuote(identity.revision)} > ${marker}`);\n return;\n }\n last = (result.stdout + result.stderr).split(\"\\n\").slice(-15).join(\"\\n\");\n }\n throw new Error(`bub install failed after ${3} attempts:\n${last}`);\n },\n }],\n // 官方 adapter:transcript 经生命周期 fixture 验证,全通道 complete。\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapBubSpans,\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n BUB_TAPESTORE_OTEL_ENABLED: \"true\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n setup: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n // home 必须来自运行时探测:各 sandbox provider 不同(/home/node、/home/vercel-sandbox…),\n // 兜一个 provider 专属常量会静默走错路径(tape 读不到 → 空事件流 → 负断言假通过)。\n const home = (await sb.runShell(\"printf '%s' $HOME\")).stdout.trim();\n if (!home)\n throw new Error(`Failed to detect sandbox $HOME (empty output from \\`printf $HOME\\`). Refusing to fall back to a provider-specific path; check the sandbox provider.`);\n const workspace = sb.workdir;\n sessionInfo.set(sb.sandboxId, { home, workspace });\n // Agent CLI 已由 runner 的 agent.ensure 循环完成安装与复检。\n // adapter setup 只写本 Attempt 的 runtime config。\n if (!(await sb.pathExists(`${workspace}/AGENTS.md`))) {\n await shared.writeFile(sb, `${workspace}/AGENTS.md`, [\n `You are a coding agent working in a Next.js project at ${workspace}.`,\n ``,\n `Implement the requested feature by writing files directly to disk with the available tools:`,\n `- fs_write(path, content): create or overwrite a file`,\n `- fs_edit(path, old, new): edit an existing file`,\n `- bash(cmd): run shell commands`,\n ``,\n `Do NOT respond with only a text explanation — write the actual code files.`,\n `After writing, verify with bash(\"cd ${workspace} && npm run build\").`,\n ].join(\"\\n\"));\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // bub 没有原生 Skill 加载机制:装进目录不等于会被读到,发现指引跟着一起写。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (packages.length)\n manifest.pythonPlugins = packages.map((pkg) => ({ package: pkg }));\n if (manifest.skills.length || manifest.pythonPlugins?.length) {\n ctx.reportSetup(manifest);\n }\n // 安装后钩子(postSetup):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,\n // 钩子失败不该丢掉这份证据。\n await runPostSetupHooks(sb, ctx, \"bub\", config?.postSetup);\n },\n catch: (cause) => cause,\n }),\n teardown: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n // preTeardown 与 postSetup 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。\n // bub 目前没有其它收尾步骤,这段就是整个 teardown。\n await runPreTeardownHooks(sb, ctx, \"bub\", config?.preTeardown);\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.tryPromise({\n try: async () => {\n const sb = ctx.sandbox;\n const info = sessionInfo.get(sb.sandboxId);\n if (!info)\n throw new Error(`bub adapter setup() has not run in this sandbox (missing home/workspace info). The runner must call setup before send.`);\n const { home, workspace } = info;\n const bubHome = `${home}/.bub`;\n // 会话契约:ctx.session.id 未记录时开新 tape(新 sessionId),否则 resume 传入的 id。\n // tape 路径由 md5(workspace)+md5(sessionId) 决定,同沙箱多会话靠 sessionId 区分。\n const sessionId = ctx.session.id ?? `fe-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const apiKey = getApiKey();\n const env: globalThis.Record<string, string> = {\n BUB_API_KEY: apiKey,\n BUB_API_BASE: getApiBase(),\n BUB_HOME: bubHome,\n ...ctx.telemetry?.env,\n };\n // model 归属:实验决定(ctx.model),省略时交给 bub 原生默认 / 用户环境,不硬编码。\n if (ctx.model)\n env.BUB_MODEL = `openai:${ctx.model}`;\n const res = await sb.runShell(`${BUB} --workspace ${workspace} run ${shared.shellQuote(input.text)} --session-id ${sessionId}`, { env, sensitiveValues: [apiKey], stream: true });\n const raw = await sb.readText(tapePath(workspace, sessionId, bubHome)).catch(() => undefined);\n const parsed = shared.parseBub(raw);\n const events = [...parsed.events];\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"Bub tape was unavailable; tool trajectory was not observed.\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n }\n else if (!parsed.parseSuccess) {\n const reason = \"Some Bub tape lines could not be parsed.\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: \"completed\",\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n catch: (cause) => cause,\n }),\n }), config?.postSetup, config?.preTeardown);\n}\nexport default bubAgent();\n"]}
|
|
1
|
+
{"version":3,"file":"bub.js","sourceRoot":"","sources":["bub.ts"],"names":[],"mappings":"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","sourcesContent":["import { UnrecognizedAgentEvents } from \"./unrecognized-events.ts\";\nimport { attachCodingAgentExtensions } from \"./plugin-extensions.ts\";\nimport { Effect } from \"effect\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { makeSandboxAgent } from \"../define.ts\";\nimport { requireEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapBubSpans } from \"../o11y/otlp/mappers/bub.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { assertAgentLifecycleNames, registerAgentLifecycleHookCommands, runPostSetupHooks, runPreTeardownHooks, } from \"./post-setup.ts\";\nimport type { Agent, AgentInstallationManifest, SkillSpec, TurnEvidenceCoverage } from \"../types.ts\";\nimport type { SandboxCommand } from \"../sandbox/commands.ts\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { BUB_INSTALL_MARKER, DEFAULT_BUB_DEPENDENCY_OVERRIDES, DEFAULT_BUB_OTEL_PLUGIN, DEFAULT_BUB_REQUIREMENT, bubInstallHash, normalizeBubPackages, } from \"./bub-install-spec.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { defineSandboxCommand } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport { DEFAULT_BUB_VERSION } from \"./coding-cli-versions.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// bub 的 agent adapter(沙箱型)。\n//\n// ⚠️ 现实校正:bub 是 PyPI 上的 `bub`(alpha,Python 3.12),不是 npm 包。\n// · 安装:uv tool install bub(uv 自带 python 3.12,免 root)。\n// · 调用:bub run \"<prompt>\" --session-id <id> --workspace <path>\n// · 模型 + 代理:BUB_MODEL=openai:<model>、BUB_API_BASE、BUB_API_KEY。\n// · 记忆:tape(总是开),落盘在 ~/.bub/tapes/<md5(ws)[:16]>__<md5(sess)[:16]>.jsonl。\n// ───────────────────────────────────────────────────────────────────────────\n/**\n * Bub 的扩展单元 —— **只属于 Bub**:Bub 的插件是运行环境里的 Python Package,\n * 与 Claude Code / Codex 的 native plugin 没有共同的安装协议,不共用类型。\n */\nexport interface PythonPluginSpec {\n /** PyPI Package、Version Specifier 或 Git URL(如 `bub-plugin-memory==1.3.0`、`git+https://…@8f3c1a2`)。 */\n package: string;\n}\nexport interface BubConfig {\n /** OpenAI 兼容代理的 API key。省略时读 BUB_API_KEY env。 */\n apiKey?: string;\n /** OpenAI 兼容代理的 base URL。省略时读 BUB_API_BASE env。 */\n baseUrl?: string;\n /**\n * 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md(bub 没有原生 Skill 加载机制)。\n */\n skills?: SkillSpec[];\n /**\n * 固定 Bub 0.5.1 协议。省略或填写 \"0.5.1\";其它版本在定义期抛出 TypeError。\n */\n version?: string;\n /**\n * OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval 钉的默认 pin。\n *\n * 自定义插件必须支持固定版本 Bub 0.5.1 的 tape 协议。\n */\n otelPlugin?: string;\n /**\n * 额外装进 bub tool 环境的 Python Package,每个 Sandbox before 时进 `uv tool install … --with <pkg>`。\n * 规范化后的 package 列表进安装 checkpoint key:plugin 集合不同的两个 agent 变体不会复用同一个\n * 安装 checkpoint(否则第二个变体会静默拿到第一个变体的环境)。\n */\n pythonPlugins?: PythonPluginSpec[];\n /**\n * 安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在装 bub、装 Skills /\n * Python package、写 manifest 全部完成后执行。抛错按基础设施错误计(attempt errored)。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n before?: SandboxCommand[];\n /**\n * 与 `before` 成对的收尾 Hook:按 `before` 的逆序语义,在 agent 自己的 after 步骤\n * 之前执行(LIFO 镜像 —— `before` 跑在 agent 安装之后,`after` 就跑在 agent 收尾\n * 之前),当且仅当 `before` 的时点走到过才触发。抛错按基础设施错误计,由 after 段\n * 按 teardown-failed 诊断收束。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n after?: SandboxCommand[];\n}\nconst UV = \"$HOME/.local/bin/uv\";\n/** bub 的 skill 目录(`skills` 生态的「通用」目录);bub 不原生扫描它,靠 AGENTS.md 的发现指引。 */\nconst SKILL_DIR = \".agents/skills\";\n// bub 与 OTel 插件的 pin 都从 config 来(缺省用源码里的默认 pin)——不设环境变量后门:\n// 装哪个包是配置,配置的家是代码(边界见 docs/architecture.md「配置从代码来,凭据从环境来」)。\n//\n// override 文件不是历史包袱:插件所在 workspace 把 `bub` 声明成 git 依赖,不覆盖的话每次\n// 安装都会去拉 Bub 主干,版本失控。所以安装前总是先把 `bub==<version>` 写进这个文件。\nconst BUB_OVERRIDE_FILE = \"/tmp/bub-override.txt\";\n/** 一个 agent 变体装的那套 bub:requirement + OTel 插件,两者都进安装指纹。 */\ninterface BubInstallPin {\n requirement: string;\n otelPlugin: string;\n dependencyOverrides: readonly string[];\n}\nfunction resolvePin(config?: BubConfig): BubInstallPin {\n return {\n requirement: DEFAULT_BUB_REQUIREMENT,\n otelPlugin: config?.otelPlugin ?? DEFAULT_BUB_OTEL_PLUGIN,\n dependencyOverrides: DEFAULT_BUB_DEPENDENCY_OVERRIDES,\n };\n}\n// NiceEval 的预制配方与运行时安装都写到 $HOME/.local;显式使用该路径,避免 PATH 上\n// 另一个未知版本的 bub 抢先命中。\nconst BUB = \"$HOME/.local/bin/bub\";\n/** 规范化 python plugin:去空白、丢空串、去重 —— 安装命令与 checkpoint key 用同一份列表。 */\nfunction normalizePackages(plugins?: readonly PythonPluginSpec[]): string[] {\n return normalizeBubPackages((plugins ?? []).map((plugin) => plugin.package));\n}\nfunction installHashOf(packages: readonly string[], pin: BubInstallPin): string {\n return bubInstallHash(packages, pin.requirement, pin.otelPlugin, pin.dependencyOverrides);\n}\nfunction tapePath(workspace: string, sessionId: string, bubHome: string): string {\n const w = createHash(\"md5\").update(workspace).digest(\"hex\").slice(0, 16);\n const s = createHash(\"md5\").update(sessionId).digest(\"hex\").slice(0, 16);\n return `${bubHome}/tapes/${w}__${s}.jsonl`;\n}\n// @concord-code\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/bub/README.md\nexport function bubAgent(config?: BubConfig): Agent {\n if (config !== undefined && Object.hasOwn(config, \"apiBase\")) {\n throw new TypeError(\"bubAgent() apiBase is no longer supported. Use baseUrl.\");\n }\n if (config?.version !== undefined && config.version !== DEFAULT_BUB_VERSION) {\n throw new TypeError(`bubAgent() only supports Bub ${DEFAULT_BUB_VERSION}; remove version or set version: \"${DEFAULT_BUB_VERSION}\".`);\n }\n assertAgentLifecycleNames(config, \"bubAgent\");\n const getApiKey = () => config?.apiKey ?? requireEnv(\"BUB_API_KEY\");\n const getApiBase = () => config?.baseUrl ?? requireEnv(\"BUB_API_BASE\");\n const packages = normalizePackages(config?.pythonPlugins);\n const pin = resolvePin(config);\n const identity = {\n agent: \"bub\",\n version: config?.version ?? DEFAULT_BUB_VERSION,\n revision: installHashOf(packages, pin),\n } as const;\n const marker = `$HOME/${BUB_INSTALL_MARKER}`;\n const probe = defineSandboxCommand({ id: \"niceeval.agent.probe.bub\", revision: identity.revision, inputs: identity }, async (sandbox) => {\n await sandbox.runShellOrThrow(`test -x ${BUB} && test \"$(cat ${marker} 2>/dev/null)\" = ${shellQuote(identity.revision)}`);\n });\n // sandboxId → { home, workspace }; persists values detected in setup() so send() can use them.\n const sessionInfo = new Map<string, {\n home: string;\n workspace: string;\n unknown: UnrecognizedAgentEvents;\n }>();\n return attachCodingAgentExtensions(registerAgentLifecycleHookCommands(makeSandboxAgent({\n name: \"bub\",\n ensure: { identity, probe },\n installers: [{\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox) => {\n await sandbox.runShellOrThrow(`test -x ${UV} || (curl -LsSf https://astral.sh/uv/install.sh | sh)`);\n await sandbox.writeText(BUB_OVERRIDE_FILE, `${[pin.requirement, ...pin.dependencyOverrides].join(\"\\n\")}\\n`);\n const withPlugins = packages.map((pkg) => `--with ${shellQuote(pkg)}`).join(\" \");\n let last = \"\";\n for (let attempt = 1; attempt <= 3; attempt += 1) {\n const result = await sandbox.runShell(`${UV} tool install --reinstall --python 3.12 --prerelease allow 'bub' --overrides ${BUB_OVERRIDE_FILE} --with ${shellQuote(pin.otelPlugin)}${withPlugins ? ` ${withPlugins}` : \"\"}`);\n if (result.exitCode === 0) {\n await sandbox.runShellOrThrow(`mkdir -p \"$(dirname ${marker})\" && printf '%s' ${shellQuote(identity.revision)} > ${marker}`);\n return;\n }\n last = (result.stdout + result.stderr).split(\"\\n\").slice(-15).join(\"\\n\");\n }\n throw new Error(`bub install failed after ${3} attempts:\n${last}`);\n },\n }],\n // 官方 adapter:transcript 经生命周期 fixture 验证,全通道 complete。\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapBubSpans,\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n BUB_TAPESTORE_OTEL_ENABLED: \"true\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n before: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n // home 必须来自运行时探测:各 sandbox provider 不同(/home/node、/home/vercel-sandbox…),\n // 兜一个 provider 专属常量会静默走错路径(tape 读不到 → 空事件流 → 负断言假通过)。\n const home = (await sb.runShell(\"printf '%s' $HOME\")).stdout.trim();\n if (!home)\n throw new Error(`Failed to detect sandbox $HOME (empty output from \\`printf $HOME\\`). Refusing to fall back to a provider-specific path; check the sandbox provider.`);\n const workspace = sb.workdir;\n sessionInfo.set(sb.sandboxId, { home, workspace, unknown: new UnrecognizedAgentEvents() });\n // Agent CLI 已由 runner 的 agent.ensure 循环完成安装与复检。\n // adapter setup 只写本 Attempt 的 runtime config。\n if (!(await sb.pathExists(`${workspace}/AGENTS.md`))) {\n await shared.writeFile(sb, `${workspace}/AGENTS.md`, [\n `You are a coding agent working in a Next.js project at ${workspace}.`,\n ``,\n `Implement the requested feature by writing files directly to disk with the available tools:`,\n `- fs_write(path, content): create or overwrite a file`,\n `- fs_edit(path, old, new): edit an existing file`,\n `- bash(cmd): run shell commands`,\n ``,\n `Do NOT respond with only a text explanation — write the actual code files.`,\n `After writing, verify with bash(\"cd ${workspace} && npm run build\").`,\n ].join(\"\\n\"));\n }\n const manifest: AgentInstallationManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // bub 没有原生 Skill 加载机制:装进目录不等于会被读到,发现指引跟着一起写。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (packages.length)\n manifest.pythonPlugins = packages.map((pkg) => ({ package: pkg }));\n if (manifest.skills.length || manifest.pythonPlugins?.length) {\n ctx.reportInstallation(manifest);\n }\n // 安装后钩子(before):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,\n // 钩子失败不该丢掉这份证据。\n await runPostSetupHooks(sb, ctx, \"bub\", config?.before);\n },\n catch: (cause) => cause,\n }),\n after: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n // after 与 before 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。\n // bub 目前没有其它收尾步骤,这段就是整个 teardown。\n try {\n await runPreTeardownHooks(sb, ctx, \"bub\", config?.after);\n }\n finally {\n sessionInfo.get(sb.sandboxId)?.unknown.report((diagnostic) => ctx.diagnostic(diagnostic));\n sessionInfo.delete(sb.sandboxId);\n }\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.tryPromise({\n try: async () => {\n const sb = ctx.sandbox;\n const info = sessionInfo.get(sb.sandboxId);\n if (!info)\n throw new Error(`bub adapter setup() has not run in this sandbox (missing home/workspace info). The runner must call setup before send.`);\n const { home, workspace } = info;\n const bubHome = `${home}/.bub`;\n // 会话契约:ctx.session.id 未记录时开新 tape(新 sessionId),否则 resume 传入的 id。\n // tape 路径由 md5(workspace)+md5(sessionId) 决定,同沙箱多会话靠 sessionId 区分。\n const sessionId = ctx.session.id ?? `fe-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const apiKey = getApiKey();\n const env: globalThis.Record<string, string> = {\n BUB_API_KEY: apiKey,\n BUB_API_BASE: getApiBase(),\n BUB_HOME: bubHome,\n ...ctx.telemetry?.env,\n };\n // model 归属:实验决定(ctx.model),省略时交给 bub 原生默认 / 用户环境,不硬编码。\n if (ctx.model)\n env.BUB_MODEL = `openai:${ctx.model}`;\n const res = await sb.runShell(`${BUB} --workspace ${workspace} run ${shared.shellQuote(input.text)} --session-id ${sessionId}`, { env, sensitiveValues: [apiKey], stream: true });\n const raw = await sb.readText(tapePath(workspace, sessionId, bubHome)).catch(() => undefined);\n const parsed = shared.parseBub(raw);\n info.unknown.observe(parsed.unrecognizedEvents, sessionId);\n const events = [...parsed.events];\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"Bub tape was unavailable; tool trajectory was not observed.\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n }\n else if (!parsed.parseSuccess || Object.keys(parsed.unrecognizedEvents ?? {}).length > 0) {\n const reason = \"Some Bub tape lines could not be parsed.\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: \"completed\",\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n catch: (cause) => cause,\n }),\n }), config?.before, config?.after), \"bub\", config, bubAgent);\n}\nexport default bubAgent();\n"]}
|
package/dist/agents/bub.d.cts
CHANGED
|
@@ -12,27 +12,24 @@ export interface BubConfig {
|
|
|
12
12
|
/** OpenAI 兼容代理的 API key。省略时读 BUB_API_KEY env。 */
|
|
13
13
|
apiKey?: string;
|
|
14
14
|
/** OpenAI 兼容代理的 base URL。省略时读 BUB_API_BASE env。 */
|
|
15
|
-
|
|
15
|
+
baseUrl?: string;
|
|
16
16
|
/**
|
|
17
17
|
* 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。
|
|
18
18
|
* 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md(bub 没有原生 Skill 加载机制)。
|
|
19
19
|
*/
|
|
20
20
|
skills?: SkillSpec[];
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
* 永远是确定版本,不装 latest —— 被测对象的版本要能从实验配置读出来。
|
|
22
|
+
* 固定 Bub 0.5.1 协议。省略或填写 "0.5.1";其它版本在定义期抛出 TypeError。
|
|
24
23
|
*/
|
|
25
24
|
version?: string;
|
|
26
25
|
/**
|
|
27
26
|
* OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval 钉的默认 pin。
|
|
28
27
|
*
|
|
29
|
-
*
|
|
30
|
-
* 插件 commit 按 republic 的类型校验,配 Bub ≤ 0.3.9。配错代不会安装失败,而是 span 全被拒、
|
|
31
|
-
* 时间轨静默为空 —— 所以往回钉 `version` 时必须同批钉配套的插件 commit。
|
|
28
|
+
* 自定义插件必须支持固定版本 Bub 0.5.1 的 tape 协议。
|
|
32
29
|
*/
|
|
33
30
|
otelPlugin?: string;
|
|
34
31
|
/**
|
|
35
|
-
* 额外装进 bub tool 环境的 Python Package,每个 Sandbox
|
|
32
|
+
* 额外装进 bub tool 环境的 Python Package,每个 Sandbox before 时进 `uv tool install … --with <pkg>`。
|
|
36
33
|
* 规范化后的 package 列表进安装 checkpoint key:plugin 集合不同的两个 agent 变体不会复用同一个
|
|
37
34
|
* 安装 checkpoint(否则第二个变体会静默拿到第一个变体的环境)。
|
|
38
35
|
*/
|
|
@@ -42,15 +39,15 @@ export interface BubConfig {
|
|
|
42
39
|
* Python package、写 manifest 全部完成后执行。抛错按基础设施错误计(attempt errored)。
|
|
43
40
|
* 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
44
41
|
*/
|
|
45
|
-
|
|
42
|
+
before?: SandboxCommand[];
|
|
46
43
|
/**
|
|
47
|
-
* 与 `
|
|
48
|
-
* 之前执行(LIFO 镜像 —— `
|
|
49
|
-
* 之前),当且仅当 `
|
|
44
|
+
* 与 `before` 成对的收尾 Hook:按 `before` 的逆序语义,在 agent 自己的 after 步骤
|
|
45
|
+
* 之前执行(LIFO 镜像 —— `before` 跑在 agent 安装之后,`after` 就跑在 agent 收尾
|
|
46
|
+
* 之前),当且仅当 `before` 的时点走到过才触发。抛错按基础设施错误计,由 after 段
|
|
50
47
|
* 按 teardown-failed 诊断收束。
|
|
51
48
|
* 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
52
49
|
*/
|
|
53
|
-
|
|
50
|
+
after?: SandboxCommand[];
|
|
54
51
|
}
|
|
55
52
|
export declare function bubAgent(config?: BubConfig): Agent;
|
|
56
53
|
declare const _default: Agent;
|
package/dist/agents/bub.d.mts
CHANGED
|
@@ -12,27 +12,24 @@ export interface BubConfig {
|
|
|
12
12
|
/** OpenAI 兼容代理的 API key。省略时读 BUB_API_KEY env。 */
|
|
13
13
|
apiKey?: string;
|
|
14
14
|
/** OpenAI 兼容代理的 base URL。省略时读 BUB_API_BASE env。 */
|
|
15
|
-
|
|
15
|
+
baseUrl?: string;
|
|
16
16
|
/**
|
|
17
17
|
* 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。
|
|
18
18
|
* 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md(bub 没有原生 Skill 加载机制)。
|
|
19
19
|
*/
|
|
20
20
|
skills?: SkillSpec[];
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
* 永远是确定版本,不装 latest —— 被测对象的版本要能从实验配置读出来。
|
|
22
|
+
* 固定 Bub 0.5.1 协议。省略或填写 "0.5.1";其它版本在定义期抛出 TypeError。
|
|
24
23
|
*/
|
|
25
24
|
version?: string;
|
|
26
25
|
/**
|
|
27
26
|
* OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval 钉的默认 pin。
|
|
28
27
|
*
|
|
29
|
-
*
|
|
30
|
-
* 插件 commit 按 republic 的类型校验,配 Bub ≤ 0.3.9。配错代不会安装失败,而是 span 全被拒、
|
|
31
|
-
* 时间轨静默为空 —— 所以往回钉 `version` 时必须同批钉配套的插件 commit。
|
|
28
|
+
* 自定义插件必须支持固定版本 Bub 0.5.1 的 tape 协议。
|
|
32
29
|
*/
|
|
33
30
|
otelPlugin?: string;
|
|
34
31
|
/**
|
|
35
|
-
* 额外装进 bub tool 环境的 Python Package,每个 Sandbox
|
|
32
|
+
* 额外装进 bub tool 环境的 Python Package,每个 Sandbox before 时进 `uv tool install … --with <pkg>`。
|
|
36
33
|
* 规范化后的 package 列表进安装 checkpoint key:plugin 集合不同的两个 agent 变体不会复用同一个
|
|
37
34
|
* 安装 checkpoint(否则第二个变体会静默拿到第一个变体的环境)。
|
|
38
35
|
*/
|
|
@@ -42,15 +39,15 @@ export interface BubConfig {
|
|
|
42
39
|
* Python package、写 manifest 全部完成后执行。抛错按基础设施错误计(attempt errored)。
|
|
43
40
|
* 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
44
41
|
*/
|
|
45
|
-
|
|
42
|
+
before?: SandboxCommand[];
|
|
46
43
|
/**
|
|
47
|
-
* 与 `
|
|
48
|
-
* 之前执行(LIFO 镜像 —— `
|
|
49
|
-
* 之前),当且仅当 `
|
|
44
|
+
* 与 `before` 成对的收尾 Hook:按 `before` 的逆序语义,在 agent 自己的 after 步骤
|
|
45
|
+
* 之前执行(LIFO 镜像 —— `before` 跑在 agent 安装之后,`after` 就跑在 agent 收尾
|
|
46
|
+
* 之前),当且仅当 `before` 的时点走到过才触发。抛错按基础设施错误计,由 after 段
|
|
50
47
|
* 按 teardown-failed 诊断收束。
|
|
51
48
|
* 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
52
49
|
*/
|
|
53
|
-
|
|
50
|
+
after?: SandboxCommand[];
|
|
54
51
|
}
|
|
55
52
|
export declare function bubAgent(config?: BubConfig): Agent;
|
|
56
53
|
declare const _default: Agent;
|
package/dist/agents/bub.d.ts
CHANGED
|
@@ -12,27 +12,24 @@ export interface BubConfig {
|
|
|
12
12
|
/** OpenAI 兼容代理的 API key。省略时读 BUB_API_KEY env。 */
|
|
13
13
|
apiKey?: string;
|
|
14
14
|
/** OpenAI 兼容代理的 base URL。省略时读 BUB_API_BASE env。 */
|
|
15
|
-
|
|
15
|
+
baseUrl?: string;
|
|
16
16
|
/**
|
|
17
17
|
* 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。
|
|
18
18
|
* 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md(bub 没有原生 Skill 加载机制)。
|
|
19
19
|
*/
|
|
20
20
|
skills?: SkillSpec[];
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
* 永远是确定版本,不装 latest —— 被测对象的版本要能从实验配置读出来。
|
|
22
|
+
* 固定 Bub 0.5.1 协议。省略或填写 "0.5.1";其它版本在定义期抛出 TypeError。
|
|
24
23
|
*/
|
|
25
24
|
version?: string;
|
|
26
25
|
/**
|
|
27
26
|
* OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval 钉的默认 pin。
|
|
28
27
|
*
|
|
29
|
-
*
|
|
30
|
-
* 插件 commit 按 republic 的类型校验,配 Bub ≤ 0.3.9。配错代不会安装失败,而是 span 全被拒、
|
|
31
|
-
* 时间轨静默为空 —— 所以往回钉 `version` 时必须同批钉配套的插件 commit。
|
|
28
|
+
* 自定义插件必须支持固定版本 Bub 0.5.1 的 tape 协议。
|
|
32
29
|
*/
|
|
33
30
|
otelPlugin?: string;
|
|
34
31
|
/**
|
|
35
|
-
* 额外装进 bub tool 环境的 Python Package,每个 Sandbox
|
|
32
|
+
* 额外装进 bub tool 环境的 Python Package,每个 Sandbox before 时进 `uv tool install … --with <pkg>`。
|
|
36
33
|
* 规范化后的 package 列表进安装 checkpoint key:plugin 集合不同的两个 agent 变体不会复用同一个
|
|
37
34
|
* 安装 checkpoint(否则第二个变体会静默拿到第一个变体的环境)。
|
|
38
35
|
*/
|
|
@@ -42,15 +39,15 @@ export interface BubConfig {
|
|
|
42
39
|
* Python package、写 manifest 全部完成后执行。抛错按基础设施错误计(attempt errored)。
|
|
43
40
|
* 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
44
41
|
*/
|
|
45
|
-
|
|
42
|
+
before?: SandboxCommand[];
|
|
46
43
|
/**
|
|
47
|
-
* 与 `
|
|
48
|
-
* 之前执行(LIFO 镜像 —— `
|
|
49
|
-
* 之前),当且仅当 `
|
|
44
|
+
* 与 `before` 成对的收尾 Hook:按 `before` 的逆序语义,在 agent 自己的 after 步骤
|
|
45
|
+
* 之前执行(LIFO 镜像 —— `before` 跑在 agent 安装之后,`after` 就跑在 agent 收尾
|
|
46
|
+
* 之前),当且仅当 `before` 的时点走到过才触发。抛错按基础设施错误计,由 after 段
|
|
50
47
|
* 按 teardown-failed 诊断收束。
|
|
51
48
|
* 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。
|
|
52
49
|
*/
|
|
53
|
-
|
|
50
|
+
after?: SandboxCommand[];
|
|
54
51
|
}
|
|
55
52
|
export declare function bubAgent(config?: BubConfig): Agent;
|
|
56
53
|
declare const _default: Agent;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sendClaudeCodeNative = sendClaudeCodeNative;
|
|
4
|
-
const
|
|
4
|
+
const session_key_ts_1 = require("./session-key.cjs");
|
|
5
5
|
const managed_jsonl_ts_1 = require("./managed-jsonl.cjs");
|
|
6
6
|
const shared_ts_1 = require("./shared.cjs");
|
|
7
7
|
const command_projection_ts_1 = require("../o11y/command-projection.cjs");
|
|
8
8
|
const send_failures_ts_1 = require("../context/send-failures.cjs");
|
|
9
9
|
const external_cause_ts_1 = require("../shared/external-cause.cjs");
|
|
10
10
|
const attempt_resources_ts_1 = require("../context/attempt-resources.cjs");
|
|
11
|
-
const slot = (0,
|
|
11
|
+
const slot = (0, session_key_ts_1.createSessionKey)("claude-code/stream-json-native");
|
|
12
12
|
function record(value) {
|
|
13
13
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-native.js","sourceRoot":"","sources":["claude-code-native.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InputResponse, SandboxAgentContext, StreamEvent, Turn, TurnEvidenceCoverage, Usage } from \"../types.ts\";\nimport { createSessionSlot } from \"./session-slot.ts\";\nimport { ManagedJsonlDriver } from \"./managed-jsonl.ts\";\nimport { shared } from \"./shared.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { normalizeExternalCause } from \"../shared/external-cause.ts\";\nimport { attemptResources } from \"../context/attempt-resources.ts\";\ntype RecordValue = globalThis.Record<string, unknown>;\ntype PendingQuestion = {\n readonly requestId: string;\n readonly index: number;\n readonly question: string;\n readonly options: readonly string[];\n};\ntype Pending = {\n readonly controlRequestId: string;\n readonly toolUseId: string;\n readonly input: RecordValue;\n readonly questions: readonly PendingQuestion[];\n};\ntype ClaudeState = {\n readonly driver: ManagedJsonlDriver;\n cursor: number;\n pending?: Pending;\n sessionId?: string;\n readonly reported: Set<string>;\n readonly reportedToolProgress: Set<string>;\n};\nconst slot = createSessionSlot<ClaudeState>(\"claude-code/stream-json-native\");\nfunction record(value: unknown): RecordValue | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) ? value as RecordValue : undefined;\n}\nasync function resolveBin(ctx: SandboxAgentContext): Promise<string> {\n const result = await ctx.sandbox.runShell('if [ -x \"$HOME/.local/bin/claude\" ]; then printf %s \"$HOME/.local/bin/claude\"; else command -v claude; fi');\n const value = result.stdout.trim();\n if (result.exitCode !== 0 || !value)\n throw new Error(`Claude Code CLI path resolution failed: ${result.stderr}`);\n return value;\n}\nfunction eventKey(event: StreamEvent): string | undefined {\n return event.type === \"operation.started\" || event.type === \"operation.finished\"\n ? `${event.type}:${event.operationId}`\n : undefined;\n}\nfunction parseFrames(frames: readonly unknown[], reported: Set<string>): {\n events: StreamEvent[];\n usage: Usage;\n parseSuccess: boolean;\n} {\n const parsed = shared.parseClaudeCode(frames.map((frame) => JSON.stringify(frame)).join(\"\\n\"));\n // The terminal result owns aggregate usage for this send. Some native\n // versions omit usage from assistant messages; adding both would double count.\n const terminal = frames.map(record).findLast((frame) => frame?.type === \"result\");\n const resultUsage = record(terminal?.usage);\n const token = (name: string): number | undefined => {\n const value = resultUsage?.[name];\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : undefined;\n };\n const usage: Usage = resultUsage === undefined ? parsed.usage : {\n inputTokens: token(\"input_tokens\"),\n outputTokens: token(\"output_tokens\"),\n cacheReadTokens: token(\"cache_read_input_tokens\"),\n cacheCreationTokens: token(\"cache_creation_input_tokens\"),\n requests: typeof terminal?.num_turns === \"number\" && Number.isSafeInteger(terminal.num_turns) && terminal.num_turns >= 0\n ? terminal.num_turns : parsed.usage.requests,\n };\n return {\n usage,\n parseSuccess: parsed.parseSuccess,\n events: parsed.events.filter((event) => {\n const key = eventKey(event);\n if (key === undefined)\n return true;\n if (reported.has(key))\n return false;\n reported.add(key);\n return true;\n }),\n };\n}\nfunction coverage(frames: readonly unknown[], parsed: ReturnType<typeof parseFrames>): TurnEvidenceCoverage {\n if (frames.length === 0) {\n const reason = \"Claude Code stream-json output was unavailable; tool trajectory was not observed.\";\n return { events: { status: \"unavailable\", reason }, actions: { status: \"unavailable\", reason }, usage: { status: \"unavailable\", reason } };\n }\n if (!parsed.parseSuccess) {\n const reason = \"Some Claude Code stream-json frames could not be parsed.\";\n return { events: { status: \"partial\", reason }, actions: { status: \"partial\", reason } };\n }\n return unclassifiedToolActionsCoverage(parsed.events) ?? {};\n}\nfunction captureSession(state: ClaudeState, frame: RecordValue, ctx: SandboxAgentContext): void {\n const id = frame.session_id;\n if (typeof id !== \"string\" || id === \"\")\n return;\n if (state.sessionId !== undefined && state.sessionId !== id) {\n throw new Error(`Claude Code changed native session identity from ${state.sessionId} to ${id}`);\n }\n state.sessionId = id;\n ctx.session.capture(id);\n}\nfunction toolUseProgress(frame: unknown, reported: Set<string>): readonly string[] {\n const root = record(frame);\n if (root?.type !== \"assistant\")\n return [];\n const content = record(root.message)?.content;\n if (!Array.isArray(content))\n return [];\n const details: string[] = [];\n for (const value of content) {\n const block = record(value);\n if (block?.type !== \"tool_use\" ||\n typeof block.id !== \"string\" || block.id === \"\" ||\n typeof block.name !== \"string\" || block.name === \"\" ||\n !Object.prototype.hasOwnProperty.call(block, \"input\") ||\n reported.has(block.id))\n continue;\n let input: string | undefined;\n try {\n input = JSON.stringify(block.input);\n }\n catch {\n continue;\n }\n if (input === undefined)\n continue;\n reported.add(block.id);\n details.push(`tool: ${block.name} ${input}`);\n }\n return details;\n}\nfunction reportToolUseProgress(frame: unknown, state: ClaudeState, ctx: SandboxAgentContext): void {\n for (const detail of toolUseProgress(frame, state.reportedToolProgress)) {\n ctx.progress({ message: detail });\n }\n}\nfunction validate(pending: Pending, responses: readonly InputResponse[] | undefined): Record<string, string> {\n if (responses === undefined)\n throw new Error(\"Claude Code is waiting for a structured input response\");\n const byId = new Map(responses.map((response) => [response.requestId, response]));\n if (byId.size !== responses.length)\n throw new Error(\"Claude Code input responses contain duplicate request ids\");\n const expected = new Set(pending.questions.map((question) => question.requestId));\n for (const requestId of byId.keys())\n if (!expected.has(requestId))\n throw new Error(`Unknown Claude Code input request ${requestId}`);\n if (byId.size !== expected.size)\n throw new Error(\"Claude Code input responses must answer the complete native question batch\");\n const answers: Record<string, string> = {};\n for (const question of pending.questions) {\n const response = byId.get(question.requestId)!;\n const answer = \"optionId\" in response ? response.optionId : response.text;\n if (answer === undefined)\n throw new Error(`Claude Code input request ${question.requestId} has no answer`);\n if (\"optionId\" in response && response.optionId !== undefined && !question.options.includes(response.optionId)) {\n throw new Error(`Option ${response.optionId} is not available for Claude Code input request ${question.requestId}`);\n }\n answers[question.question] = answer;\n }\n return answers;\n}\nasync function createState(ctx: SandboxAgentContext, args: readonly string[], env: Readonly<Record<string, string>>): Promise<ClaudeState> {\n const resources = attemptResources(ctx);\n if (!resources)\n throw new Error(\"Claude Code structured transport requires an Attempt resource registry\");\n const driver = await ManagedJsonlDriver.start(ctx.sandbox, \"claude-code\", resources, {\n argv: [await resolveBin(ctx), \"--output-format\", \"stream-json\", \"--verbose\", \"--input-format\", \"stream-json\", \"--permission-prompt-tool\", \"stdio\", \"--permission-mode\", \"default\", ...args],\n cwd: ctx.sandbox.workdir,\n env: { ...env, CLAUDE_CODE_ENTRYPOINT: \"sdk-ts\", CLAUDE_AGENT_SDK_VERSION: \"0.3.226\" },\n });\n const requestId = \"niceeval-initialize\";\n await driver.write({ type: \"control_request\", request_id: requestId, request: { subtype: \"initialize\" } });\n const initialized = await driver.waitFor(0, (value) => {\n const frame = record(value);\n return frame?.type === \"control_response\" && record(frame.response)?.request_id === requestId;\n }, ctx.signal);\n const response = record(record(initialized.frame)?.response);\n if (response?.subtype !== \"success\") {\n throw new Error(`Claude Code initialization failed: ${String(response?.error ?? \"invalid control response\")}`);\n }\n return { driver, cursor: initialized.cursor, reported: new Set(), reportedToolProgress: new Set() };\n}\nfunction pendingFrom(frame: RecordValue, sessionId: string): Pending | undefined {\n if (frame.type !== \"control_request\" || typeof frame.request_id !== \"string\")\n return undefined;\n const request = record(frame.request);\n if (request?.subtype !== \"can_use_tool\" || request.tool_name !== \"AskUserQuestion\")\n return undefined;\n if (typeof request.tool_use_id !== \"string\")\n throw new Error(\"Claude Code AskUserQuestion request has no native tool_use_id\");\n const input = record(request.input) ?? {};\n const questions = Array.isArray(input.questions) ? input.questions : [];\n if (questions.length === 0)\n throw new Error(\"Claude Code AskUserQuestion request contained no questions\");\n return {\n controlRequestId: frame.request_id,\n toolUseId: request.tool_use_id,\n input,\n questions: questions.map((value, index) => {\n const question = record(value) ?? {};\n const options = Array.isArray(question.options)\n ? question.options.map((option) => String(record(option)?.label ?? \"\")).filter(Boolean)\n : [];\n return {\n requestId: `${sessionId}:${request.tool_use_id}:${index}`,\n index,\n question: String(question.question ?? \"\"),\n options,\n };\n }),\n };\n}\nasync function drive(state: ClaudeState, from: number, ctx: SandboxAgentContext): Promise<Turn> {\n for (;;) {\n const scanFrom = state.cursor;\n const receipt = await state.driver.waitFor(state.cursor, (value) => {\n const frame = record(value);\n return frame?.type === \"control_request\" || frame?.type === \"result\";\n }, ctx.signal);\n state.cursor = receipt.cursor;\n const frame = record(receipt.frame)!;\n for (const value of state.driver.framesSince(scanFrom).slice(0, receipt.cursor - scanFrom)) {\n const candidate = record(value);\n if (candidate)\n captureSession(state, candidate, ctx);\n }\n if (frame.type === \"control_request\") {\n const request = record(frame.request);\n if (state.sessionId === undefined)\n throw new Error(\"Claude Code control request arrived before native session identity\");\n const pending = pendingFrom(frame, state.sessionId);\n if (pending) {\n state.pending = pending;\n const frames = state.driver.framesSince(from).slice(0, receipt.cursor - from);\n const parsed = parseFrames(frames, state.reported);\n return {\n status: \"waiting\",\n events: [...parsed.events, ...pending.questions.map((question): StreamEvent => ({ type: \"input.requested\", request: { id: question.requestId, action: \"AskUserQuestion\", prompt: question.question, options: question.options.map((id) => ({ id })) } }))],\n usage: parsed.usage,\n evidenceCoverage: coverage(frames, parsed),\n };\n }\n if (request?.subtype === \"can_use_tool\" && typeof frame.request_id === \"string\") {\n await state.driver.write({ type: \"control_response\", response: { subtype: \"success\", request_id: frame.request_id, response: { behavior: \"allow\", updatedInput: record(request.input) ?? {} } } });\n }\n continue;\n }\n const frames = state.driver.framesSince(from).slice(0, receipt.cursor - from);\n const parsed = parseFrames(frames, state.reported);\n for (const value of frames) {\n const candidate = record(value);\n if (candidate)\n captureSession(state, candidate, ctx);\n }\n if (frame.is_error === true) {\n throw makeSendFailure({ acceptance: sendAcceptanceFromEvents(parsed.events), message: String(frame.result ?? frame.subtype ?? \"Claude Code turn failed\"), cause: normalizeExternalCause(frame), events: parsed.events, usage: parsed.usage, process: state.driver.processReceipt() });\n }\n return { status: \"completed\", events: parsed.events, usage: parsed.usage, evidenceCoverage: coverage(frames, parsed) };\n }\n}\nexport async function sendClaudeCodeNative(input: {\n readonly text: string;\n readonly responses?: readonly InputResponse[];\n}, ctx: SandboxAgentContext, args: readonly string[], env: Readonly<Record<string, string>>): Promise<Turn> {\n let state = ctx.session.get(slot);\n if (!state) {\n state = await createState(ctx, args, env);\n ctx.session.set(slot, state);\n }\n const from = state.cursor;\n let progressArmed = false;\n const bufferedProgress: unknown[] = [];\n const unsubscribe = state.driver.subscribeFrames((frame) => {\n if (progressArmed)\n reportToolUseProgress(frame, state, ctx);\n else\n bufferedProgress.push(frame);\n });\n try {\n if (state.driver.framesSince(state.cursor).length !== 0) {\n throw makeSendFailure({\n acceptance: state.pending === undefined ? \"rejected\" : \"started\",\n message: \"Claude Code produced frames after the prior result/control barrier; refusing an ambiguous send\",\n process: state.driver.processReceipt(),\n });\n }\n if (state.pending) {\n const pending = state.pending;\n const answers = validate(pending, input.responses);\n await state.driver.write({\n type: \"control_response\",\n response: { subtype: \"success\", request_id: pending.controlRequestId, response: { behavior: \"allow\", updatedInput: { ...pending.input, answers } } },\n });\n state.pending = undefined;\n }\n else {\n if (input.responses?.length)\n throw new Error(\"Claude Code received responses while no native request was pending\");\n await state.driver.write({ type: \"user\", session_id: state.sessionId ?? \"\", message: { role: \"user\", content: [{ type: \"text\", text: input.text }] }, parent_tool_use_id: null });\n }\n progressArmed = true;\n for (const frame of bufferedProgress)\n reportToolUseProgress(frame, state, ctx);\n return await drive(state, from, ctx);\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && (cause as {\n type?: unknown;\n }).type === \"agent-send-failed\")\n throw cause;\n throw makeSendFailure({ acceptance: state.pending ? \"started\" : \"unknown\", message: `Claude Code structured transport failed: ${cause instanceof Error ? cause.message : String(cause)} (frames=${state.driver.frameKinds() || \"none\"})`, cause: normalizeExternalCause(cause), process: state.driver.processReceipt() });\n }\n finally {\n unsubscribe();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"claude-code-native.js","sourceRoot":"","sources":["claude-code-native.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InputResponse, SandboxAgentContext, StreamEvent, Turn, TurnEvidenceCoverage, Usage } from \"../types.ts\";\nimport { createSessionKey } from \"./session-key.ts\";\nimport { ManagedJsonlDriver } from \"./managed-jsonl.ts\";\nimport { shared } from \"./shared.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { normalizeExternalCause } from \"../shared/external-cause.ts\";\nimport { attemptResources } from \"../context/attempt-resources.ts\";\ntype RecordValue = globalThis.Record<string, unknown>;\ntype PendingQuestion = {\n readonly requestId: string;\n readonly index: number;\n readonly question: string;\n readonly options: readonly string[];\n};\ntype Pending = {\n readonly controlRequestId: string;\n readonly toolUseId: string;\n readonly input: RecordValue;\n readonly questions: readonly PendingQuestion[];\n};\ntype ClaudeState = {\n readonly driver: ManagedJsonlDriver;\n cursor: number;\n pending?: Pending;\n sessionId?: string;\n readonly reported: Set<string>;\n readonly reportedToolProgress: Set<string>;\n};\nconst slot = createSessionKey<ClaudeState>(\"claude-code/stream-json-native\");\nfunction record(value: unknown): RecordValue | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) ? value as RecordValue : undefined;\n}\nasync function resolveBin(ctx: SandboxAgentContext): Promise<string> {\n const result = await ctx.sandbox.runShell('if [ -x \"$HOME/.local/bin/claude\" ]; then printf %s \"$HOME/.local/bin/claude\"; else command -v claude; fi');\n const value = result.stdout.trim();\n if (result.exitCode !== 0 || !value)\n throw new Error(`Claude Code CLI path resolution failed: ${result.stderr}`);\n return value;\n}\nfunction eventKey(event: StreamEvent): string | undefined {\n return event.type === \"operation.started\" || event.type === \"operation.finished\"\n ? `${event.type}:${event.operationId}`\n : undefined;\n}\nfunction parseFrames(frames: readonly unknown[], reported: Set<string>): {\n events: StreamEvent[];\n usage: Usage;\n parseSuccess: boolean;\n} {\n const parsed = shared.parseClaudeCode(frames.map((frame) => JSON.stringify(frame)).join(\"\\n\"));\n // The terminal result owns aggregate usage for this send. Some native\n // versions omit usage from assistant messages; adding both would double count.\n const terminal = frames.map(record).findLast((frame) => frame?.type === \"result\");\n const resultUsage = record(terminal?.usage);\n const token = (name: string): number | undefined => {\n const value = resultUsage?.[name];\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : undefined;\n };\n const usage: Usage = resultUsage === undefined ? parsed.usage : {\n inputTokens: token(\"input_tokens\"),\n outputTokens: token(\"output_tokens\"),\n cacheReadTokens: token(\"cache_read_input_tokens\"),\n cacheCreationTokens: token(\"cache_creation_input_tokens\"),\n requests: typeof terminal?.num_turns === \"number\" && Number.isSafeInteger(terminal.num_turns) && terminal.num_turns >= 0\n ? terminal.num_turns : parsed.usage.requests,\n };\n return {\n usage,\n parseSuccess: parsed.parseSuccess,\n events: parsed.events.filter((event) => {\n const key = eventKey(event);\n if (key === undefined)\n return true;\n if (reported.has(key))\n return false;\n reported.add(key);\n return true;\n }),\n };\n}\nfunction coverage(frames: readonly unknown[], parsed: ReturnType<typeof parseFrames>): TurnEvidenceCoverage {\n if (frames.length === 0) {\n const reason = \"Claude Code stream-json output was unavailable; tool trajectory was not observed.\";\n return { events: { status: \"unavailable\", reason }, actions: { status: \"unavailable\", reason }, usage: { status: \"unavailable\", reason } };\n }\n if (!parsed.parseSuccess) {\n const reason = \"Some Claude Code stream-json frames could not be parsed.\";\n return { events: { status: \"partial\", reason }, actions: { status: \"partial\", reason } };\n }\n return unclassifiedToolActionsCoverage(parsed.events) ?? {};\n}\nfunction captureSession(state: ClaudeState, frame: RecordValue, ctx: SandboxAgentContext): void {\n const id = frame.session_id;\n if (typeof id !== \"string\" || id === \"\")\n return;\n if (state.sessionId !== undefined && state.sessionId !== id) {\n throw new Error(`Claude Code changed native session identity from ${state.sessionId} to ${id}`);\n }\n state.sessionId = id;\n ctx.session.capture(id);\n}\nfunction toolUseProgress(frame: unknown, reported: Set<string>): readonly string[] {\n const root = record(frame);\n if (root?.type !== \"assistant\")\n return [];\n const content = record(root.message)?.content;\n if (!Array.isArray(content))\n return [];\n const details: string[] = [];\n for (const value of content) {\n const block = record(value);\n if (block?.type !== \"tool_use\" ||\n typeof block.id !== \"string\" || block.id === \"\" ||\n typeof block.name !== \"string\" || block.name === \"\" ||\n !Object.prototype.hasOwnProperty.call(block, \"input\") ||\n reported.has(block.id))\n continue;\n let input: string | undefined;\n try {\n input = JSON.stringify(block.input);\n }\n catch {\n continue;\n }\n if (input === undefined)\n continue;\n reported.add(block.id);\n details.push(`tool: ${block.name} ${input}`);\n }\n return details;\n}\nfunction reportToolUseProgress(frame: unknown, state: ClaudeState, ctx: SandboxAgentContext): void {\n for (const detail of toolUseProgress(frame, state.reportedToolProgress)) {\n ctx.progress({ message: detail });\n }\n}\nfunction validate(pending: Pending, responses: readonly InputResponse[] | undefined): Record<string, string> {\n if (responses === undefined)\n throw new Error(\"Claude Code is waiting for a structured input response\");\n const byId = new Map(responses.map((response) => [response.requestId, response]));\n if (byId.size !== responses.length)\n throw new Error(\"Claude Code input responses contain duplicate request ids\");\n const expected = new Set(pending.questions.map((question) => question.requestId));\n for (const requestId of byId.keys())\n if (!expected.has(requestId))\n throw new Error(`Unknown Claude Code input request ${requestId}`);\n if (byId.size !== expected.size)\n throw new Error(\"Claude Code input responses must answer the complete native question batch\");\n const answers: Record<string, string> = {};\n for (const question of pending.questions) {\n const response = byId.get(question.requestId)!;\n const answer = \"optionId\" in response ? response.optionId : response.text;\n if (answer === undefined)\n throw new Error(`Claude Code input request ${question.requestId} has no answer`);\n if (\"optionId\" in response && response.optionId !== undefined && !question.options.includes(response.optionId)) {\n throw new Error(`Option ${response.optionId} is not available for Claude Code input request ${question.requestId}`);\n }\n answers[question.question] = answer;\n }\n return answers;\n}\nasync function createState(ctx: SandboxAgentContext, args: readonly string[], env: Readonly<Record<string, string>>): Promise<ClaudeState> {\n const resources = attemptResources(ctx);\n if (!resources)\n throw new Error(\"Claude Code structured transport requires an Attempt resource registry\");\n const driver = await ManagedJsonlDriver.start(ctx.sandbox, \"claude-code\", resources, {\n argv: [await resolveBin(ctx), \"--output-format\", \"stream-json\", \"--verbose\", \"--input-format\", \"stream-json\", \"--permission-prompt-tool\", \"stdio\", \"--permission-mode\", \"default\", ...args],\n cwd: ctx.sandbox.workdir,\n env: { ...env, CLAUDE_CODE_ENTRYPOINT: \"sdk-ts\", CLAUDE_AGENT_SDK_VERSION: \"0.3.226\" },\n });\n const requestId = \"niceeval-initialize\";\n await driver.write({ type: \"control_request\", request_id: requestId, request: { subtype: \"initialize\" } });\n const initialized = await driver.waitFor(0, (value) => {\n const frame = record(value);\n return frame?.type === \"control_response\" && record(frame.response)?.request_id === requestId;\n }, ctx.signal);\n const response = record(record(initialized.frame)?.response);\n if (response?.subtype !== \"success\") {\n throw new Error(`Claude Code initialization failed: ${String(response?.error ?? \"invalid control response\")}`);\n }\n return { driver, cursor: initialized.cursor, reported: new Set(), reportedToolProgress: new Set() };\n}\nfunction pendingFrom(frame: RecordValue, sessionId: string): Pending | undefined {\n if (frame.type !== \"control_request\" || typeof frame.request_id !== \"string\")\n return undefined;\n const request = record(frame.request);\n if (request?.subtype !== \"can_use_tool\" || request.tool_name !== \"AskUserQuestion\")\n return undefined;\n if (typeof request.tool_use_id !== \"string\")\n throw new Error(\"Claude Code AskUserQuestion request has no native tool_use_id\");\n const input = record(request.input) ?? {};\n const questions = Array.isArray(input.questions) ? input.questions : [];\n if (questions.length === 0)\n throw new Error(\"Claude Code AskUserQuestion request contained no questions\");\n return {\n controlRequestId: frame.request_id,\n toolUseId: request.tool_use_id,\n input,\n questions: questions.map((value, index) => {\n const question = record(value) ?? {};\n const options = Array.isArray(question.options)\n ? question.options.map((option) => String(record(option)?.label ?? \"\")).filter(Boolean)\n : [];\n return {\n requestId: `${sessionId}:${request.tool_use_id}:${index}`,\n index,\n question: String(question.question ?? \"\"),\n options,\n };\n }),\n };\n}\nasync function drive(state: ClaudeState, from: number, ctx: SandboxAgentContext): Promise<Turn> {\n for (;;) {\n const scanFrom = state.cursor;\n const receipt = await state.driver.waitFor(state.cursor, (value) => {\n const frame = record(value);\n return frame?.type === \"control_request\" || frame?.type === \"result\";\n }, ctx.signal);\n state.cursor = receipt.cursor;\n const frame = record(receipt.frame)!;\n for (const value of state.driver.framesSince(scanFrom).slice(0, receipt.cursor - scanFrom)) {\n const candidate = record(value);\n if (candidate)\n captureSession(state, candidate, ctx);\n }\n if (frame.type === \"control_request\") {\n const request = record(frame.request);\n if (state.sessionId === undefined)\n throw new Error(\"Claude Code control request arrived before native session identity\");\n const pending = pendingFrom(frame, state.sessionId);\n if (pending) {\n state.pending = pending;\n const frames = state.driver.framesSince(from).slice(0, receipt.cursor - from);\n const parsed = parseFrames(frames, state.reported);\n return {\n status: \"waiting\",\n events: [...parsed.events, ...pending.questions.map((question): StreamEvent => ({ type: \"input.requested\", request: { id: question.requestId, action: \"AskUserQuestion\", prompt: question.question, options: question.options.map((id) => ({ id })) } }))],\n usage: parsed.usage,\n evidenceCoverage: coverage(frames, parsed),\n };\n }\n if (request?.subtype === \"can_use_tool\" && typeof frame.request_id === \"string\") {\n await state.driver.write({ type: \"control_response\", response: { subtype: \"success\", request_id: frame.request_id, response: { behavior: \"allow\", updatedInput: record(request.input) ?? {} } } });\n }\n continue;\n }\n const frames = state.driver.framesSince(from).slice(0, receipt.cursor - from);\n const parsed = parseFrames(frames, state.reported);\n for (const value of frames) {\n const candidate = record(value);\n if (candidate)\n captureSession(state, candidate, ctx);\n }\n if (frame.is_error === true) {\n throw makeSendFailure({ acceptance: sendAcceptanceFromEvents(parsed.events), message: String(frame.result ?? frame.subtype ?? \"Claude Code turn failed\"), cause: normalizeExternalCause(frame), events: parsed.events, usage: parsed.usage, process: state.driver.processReceipt() });\n }\n return { status: \"completed\", events: parsed.events, usage: parsed.usage, evidenceCoverage: coverage(frames, parsed) };\n }\n}\nexport async function sendClaudeCodeNative(input: {\n readonly text: string;\n readonly responses?: readonly InputResponse[];\n}, ctx: SandboxAgentContext, args: readonly string[], env: Readonly<Record<string, string>>): Promise<Turn> {\n let state = ctx.session.get(slot);\n if (!state) {\n state = await createState(ctx, args, env);\n ctx.session.set(slot, state);\n }\n const from = state.cursor;\n let progressArmed = false;\n const bufferedProgress: unknown[] = [];\n const unsubscribe = state.driver.subscribeFrames((frame) => {\n if (progressArmed)\n reportToolUseProgress(frame, state, ctx);\n else\n bufferedProgress.push(frame);\n });\n try {\n if (state.driver.framesSince(state.cursor).length !== 0) {\n throw makeSendFailure({\n acceptance: state.pending === undefined ? \"rejected\" : \"started\",\n message: \"Claude Code produced frames after the prior result/control barrier; refusing an ambiguous send\",\n process: state.driver.processReceipt(),\n });\n }\n if (state.pending) {\n const pending = state.pending;\n const answers = validate(pending, input.responses);\n await state.driver.write({\n type: \"control_response\",\n response: { subtype: \"success\", request_id: pending.controlRequestId, response: { behavior: \"allow\", updatedInput: { ...pending.input, answers } } },\n });\n state.pending = undefined;\n }\n else {\n if (input.responses?.length)\n throw new Error(\"Claude Code received responses while no native request was pending\");\n await state.driver.write({ type: \"user\", session_id: state.sessionId ?? \"\", message: { role: \"user\", content: [{ type: \"text\", text: input.text }] }, parent_tool_use_id: null });\n }\n progressArmed = true;\n for (const frame of bufferedProgress)\n reportToolUseProgress(frame, state, ctx);\n return await drive(state, from, ctx);\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && (cause as {\n type?: unknown;\n }).type === \"agent-send-failed\")\n throw cause;\n throw makeSendFailure({ acceptance: state.pending ? \"started\" : \"unknown\", message: `Claude Code structured transport failed: ${cause instanceof Error ? cause.message : String(cause)} (frames=${state.driver.frameKinds() || \"none\"})`, cause: normalizeExternalCause(cause), process: state.driver.processReceipt() });\n }\n finally {\n unsubscribe();\n }\n}\n"]}
|