niceeval 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INDEX.md +4 -2
- package/dist/adapter-usage.cjs.map +1 -1
- package/dist/adapter-usage.d.cts +1 -1
- package/dist/adapter-usage.d.mts +1 -1
- package/dist/adapter-usage.d.ts +1 -1
- package/dist/adapter.cjs +8 -7
- package/dist/adapter.cjs.map +1 -1
- package/dist/adapter.d.cts +21 -21
- package/dist/adapter.d.mts +21 -21
- package/dist/adapter.d.ts +21 -21
- package/dist/agents/{effect-runtime.cjs → agent-effects.cjs} +12 -18
- package/dist/agents/agent-effects.cjs.map +1 -0
- package/dist/agents/agent-effects.d.cts +23 -0
- package/dist/agents/agent-effects.d.mts +23 -0
- package/dist/agents/agent-effects.d.ts +23 -0
- package/dist/agents/agent-effects.js +16 -0
- package/dist/agents/agent-effects.js.map +1 -0
- package/dist/agents/ai-sdk.cjs +1 -1
- package/dist/agents/ai-sdk.cjs.map +1 -1
- package/dist/agents/bub.cjs +31 -18
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +9 -12
- package/dist/agents/bub.d.mts +9 -12
- package/dist/agents/bub.d.ts +9 -12
- package/dist/agents/claude-code-native.cjs +2 -2
- package/dist/agents/claude-code-native.cjs.map +1 -1
- package/dist/agents/claude-code.cjs +17 -11
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/claude-code.d.cts +11 -11
- package/dist/agents/claude-code.d.mts +11 -11
- package/dist/agents/claude-code.d.ts +11 -11
- package/dist/agents/codex-app-server.cjs +2 -2
- package/dist/agents/codex-app-server.cjs.map +1 -1
- package/dist/agents/codex.cjs +18 -12
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +12 -12
- package/dist/agents/codex.d.mts +12 -12
- package/dist/agents/codex.d.ts +12 -12
- package/dist/agents/deepseek-harness.cjs +2 -2
- package/dist/agents/deepseek-harness.cjs.map +1 -1
- package/dist/agents/hermes.cjs +3 -3
- package/dist/agents/hermes.cjs.map +1 -1
- package/dist/agents/index.cjs +3 -3
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +3 -3
- package/dist/agents/index.d.mts +3 -3
- package/dist/agents/index.d.ts +3 -3
- package/dist/agents/index.js +2 -2
- package/dist/agents/index.mjs +2 -2
- package/dist/agents/mcp.cjs.map +1 -1
- package/dist/agents/mcp.d.cts +2 -2
- package/dist/agents/mcp.d.mts +2 -2
- package/dist/agents/mcp.d.ts +2 -2
- package/dist/agents/omp.cjs +2 -2
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/openai-compat.cjs +2 -2
- package/dist/agents/openai-compat.cjs.map +1 -1
- package/dist/agents/openclaw.cjs +3 -3
- package/dist/agents/openclaw.cjs.map +1 -1
- package/dist/agents/opencode.cjs +16 -4
- package/dist/agents/opencode.cjs.map +1 -1
- package/dist/agents/plugin-extensions.cjs +71 -0
- package/dist/agents/plugin-extensions.cjs.map +1 -0
- package/dist/agents/plugin-extensions.d.cts +26 -0
- package/dist/agents/plugin-extensions.d.mts +26 -0
- package/dist/agents/plugin-extensions.d.ts +26 -0
- package/dist/agents/plugin-extensions.js +8 -0
- package/dist/agents/plugin-extensions.js.map +1 -0
- package/dist/agents/post-setup.cjs +14 -3
- package/dist/agents/post-setup.cjs.map +1 -1
- package/dist/agents/post-setup.d.cts +4 -2
- package/dist/agents/post-setup.d.mts +4 -2
- package/dist/agents/post-setup.d.ts +4 -2
- package/dist/agents/post-setup.js +8 -6
- package/dist/agents/sdk-streams.cjs +3 -3
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/{session-slot.cjs → session-key.cjs} +4 -4
- package/dist/agents/session-key.cjs.map +1 -0
- package/dist/agents/session-key.d.cts +12 -0
- package/dist/agents/session-key.d.mts +12 -0
- package/dist/agents/session-key.d.ts +12 -0
- package/dist/agents/session-key.js +6 -0
- package/dist/agents/session-key.js.map +1 -0
- package/dist/agents/shared.cjs +2 -2
- package/dist/agents/shared.cjs.map +1 -1
- package/dist/agents/shared.d.cts +4 -4
- package/dist/agents/shared.d.mts +4 -4
- package/dist/agents/shared.d.ts +4 -4
- package/dist/agents/skills.cjs.map +1 -1
- package/dist/agents/skills.d.cts +3 -3
- package/dist/agents/skills.d.mts +3 -3
- package/dist/agents/skills.d.ts +3 -3
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +55 -54
- package/dist/agents/types.d.mts +55 -54
- package/dist/agents/types.d.ts +55 -54
- package/dist/agents/ui-message-stream.cjs +4 -4
- package/dist/agents/ui-message-stream.cjs.map +1 -1
- package/dist/agents/unrecognized-events.cjs +32 -0
- package/dist/agents/unrecognized-events.cjs.map +1 -0
- package/dist/agents/unrecognized-events.d.cts +8 -0
- package/dist/agents/unrecognized-events.d.mts +8 -0
- package/dist/agents/unrecognized-events.d.ts +8 -0
- package/dist/agents/unrecognized-events.js +6 -0
- package/dist/agents/unrecognized-events.js.map +1 -0
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +3 -0
- package/dist/assertions/api.d.mts +3 -0
- package/dist/assertions/api.d.ts +3 -0
- package/dist/assertions/collection.cjs +1 -1
- package/dist/assertions/collection.cjs.map +1 -1
- package/dist/assertions/judge.cjs +1 -1
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +52 -21
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +16 -5
- package/dist/assertions/match.d.mts +16 -5
- package/dist/assertions/match.d.ts +16 -5
- package/dist/assertions/match.js +96 -94
- package/dist/assertions/measurements.cjs +22 -6
- package/dist/assertions/measurements.cjs.map +1 -1
- package/dist/assertions/measurements.d.cts +8 -1
- package/dist/assertions/measurements.d.mts +8 -1
- package/dist/assertions/measurements.d.ts +8 -1
- package/dist/assertions/numeric.cjs +2 -0
- package/dist/assertions/numeric.cjs.map +1 -1
- package/dist/assertions/numeric.d.cts +1 -1
- package/dist/assertions/numeric.d.mts +1 -1
- package/dist/assertions/numeric.d.ts +1 -1
- package/dist/assertions/quantity.cjs +42 -0
- package/dist/assertions/quantity.cjs.map +1 -0
- package/dist/assertions/quantity.d.cts +18 -0
- package/dist/assertions/quantity.d.mts +18 -0
- package/dist/assertions/quantity.d.ts +18 -0
- package/dist/assertions/quantity.js +22 -0
- package/dist/assertions/quantity.js.map +1 -0
- package/dist/assertions/record/attachment.cjs +2 -0
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/codec.cjs +5 -1
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +3 -1
- package/dist/assertions/record/model.d.mts +3 -1
- package/dist/assertions/record/model.d.ts +3 -1
- package/dist/assertions/runtime.cjs +11 -6
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/program.cjs +3 -0
- package/dist/cli/program.cjs.map +1 -1
- package/dist/context/assert-first.cjs +6 -4
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +9 -3
- package/dist/context/assert-first.d.mts +9 -3
- package/dist/context/assert-first.d.ts +9 -3
- package/dist/context/notes.cjs +47 -0
- package/dist/context/notes.cjs.map +1 -0
- package/dist/context/notes.d.cts +10 -0
- package/dist/context/notes.d.mts +10 -0
- package/dist/context/notes.d.ts +10 -0
- package/dist/context/notes.js +6 -0
- package/dist/context/notes.js.map +1 -0
- package/dist/context/send-failures.cjs +1 -7
- package/dist/context/send-failures.cjs.map +1 -1
- package/dist/context/send-failures.d.cts +2 -3
- package/dist/context/send-failures.d.mts +2 -3
- package/dist/context/send-failures.d.ts +2 -3
- package/dist/context/send-retry.cjs +0 -1
- package/dist/context/send-retry.cjs.map +1 -1
- package/dist/context/send-retry.d.cts +1 -2
- package/dist/context/send-retry.d.mts +1 -2
- package/dist/context/send-retry.d.ts +1 -2
- package/dist/context/session.cjs +10 -17
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +4 -10
- package/dist/context/session.d.mts +4 -10
- package/dist/context/session.d.ts +4 -10
- package/dist/define.cjs +88 -65
- package/dist/define.cjs.map +1 -1
- package/dist/define.d.cts +3 -3
- package/dist/define.d.mts +3 -3
- package/dist/define.d.ts +3 -3
- package/dist/eval/cli/contribution.cjs +1 -1
- package/dist/eval/cli/contribution.cjs.map +1 -1
- package/dist/eval/host/index.cjs +1 -1
- package/dist/eval/host/index.cjs.map +1 -1
- package/dist/eval/record/evaluation.cjs +1 -1
- package/dist/eval/record/evaluation.cjs.map +1 -1
- package/dist/eval/record/membership-provenance.d.cts +3 -3
- package/dist/eval/record/membership-provenance.d.mts +3 -3
- package/dist/eval/record/membership-provenance.d.ts +3 -3
- package/dist/eval/record/score.cjs +2 -2
- package/dist/eval/record/score.cjs.map +1 -1
- package/dist/eval/record/sealed-assertion.cjs +1 -1
- package/dist/eval/record/sealed-assertion.cjs.map +1 -1
- package/dist/eval/record/verdict.cjs +2 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/expect/index.cjs +10 -1
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +3 -1
- package/dist/expect/index.d.mts +3 -1
- package/dist/expect/index.d.ts +3 -1
- package/dist/expect/index.js +92 -76
- package/dist/expect/index.mjs +92 -76
- package/dist/experiment/host/cli/contribution.cjs +52 -39
- package/dist/experiment/host/cli/contribution.cjs.map +1 -1
- package/dist/experiment/host/cli/contribution.d.cts +18 -4
- package/dist/experiment/host/cli/contribution.d.mts +18 -4
- package/dist/experiment/host/cli/contribution.d.ts +18 -4
- package/dist/experiment/host/cli/contribution.js +2 -2
- package/dist/experiment/host/cli/debug-protocol.cjs +2 -2
- package/dist/experiment/host/cli/debug-protocol.cjs.map +1 -1
- package/dist/experiment/host/cli/debug-protocol.d.cts +2 -2
- package/dist/experiment/host/cli/debug-protocol.d.mts +2 -2
- package/dist/experiment/host/cli/debug-protocol.d.ts +2 -2
- package/dist/experiment/host/cli/output-protocol.cjs +1 -1
- package/dist/experiment/host/cli/output-protocol.cjs.map +1 -1
- package/dist/experiment/host/cli/output-protocol.d.cts +2 -2
- package/dist/experiment/host/cli/output-protocol.d.mts +2 -2
- package/dist/experiment/host/cli/output-protocol.d.ts +2 -2
- package/dist/experiment/host/current.cjs +2 -2
- package/dist/experiment/host/current.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -1
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/operations.cjs +21 -22
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/runtime.cjs +8 -9
- package/dist/experiment/host/runtime.cjs.map +1 -1
- package/dist/experiment/host/runtime.d.cts +3 -3
- package/dist/experiment/host/runtime.d.mts +3 -3
- package/dist/experiment/host/runtime.d.ts +3 -3
- package/dist/experiment/host/teardown.cjs +3 -3
- package/dist/experiment/host/teardown.cjs.map +1 -1
- package/dist/experiment/host/teardown.d.cts +3 -3
- package/dist/experiment/host/teardown.d.mts +3 -3
- package/dist/experiment/host/teardown.d.ts +3 -3
- package/dist/experiment/host/types.cjs.map +1 -1
- package/dist/experiment/host/types.d.cts +19 -19
- package/dist/experiment/host/types.d.mts +19 -19
- package/dist/experiment/host/types.d.ts +19 -19
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/inspection/assertions.cjs +1 -1
- package/dist/inspection/assertions.cjs.map +1 -1
- package/dist/inspection/cli/contribution.cjs +8 -7
- package/dist/inspection/cli/contribution.cjs.map +1 -1
- package/dist/inspection/facts.cjs +4 -4
- package/dist/inspection/facts.cjs.map +1 -1
- package/dist/inspection/index.cjs +1 -5
- package/dist/inspection/index.cjs.map +1 -1
- package/dist/inspection/index.d.cts +1 -2
- package/dist/inspection/index.d.mts +1 -2
- package/dist/inspection/index.d.ts +1 -2
- package/dist/inspection/index.js +20 -26
- package/dist/inspection/lifecycle.cjs +7 -0
- package/dist/inspection/lifecycle.cjs.map +1 -0
- package/dist/inspection/lifecycle.d.cts +4 -0
- package/dist/inspection/lifecycle.d.mts +4 -0
- package/dist/inspection/lifecycle.d.ts +4 -0
- package/dist/inspection/lifecycle.js +6 -0
- package/dist/inspection/lifecycle.js.map +1 -0
- package/dist/inspection/notes.cjs +40 -0
- package/dist/inspection/notes.cjs.map +1 -0
- package/dist/inspection/notes.d.cts +12 -0
- package/dist/inspection/notes.d.mts +12 -0
- package/dist/inspection/notes.d.ts +12 -0
- package/dist/inspection/notes.js +8 -0
- package/dist/inspection/notes.js.map +1 -0
- package/dist/inspection/overview.cjs +12 -15
- package/dist/inspection/overview.cjs.map +1 -1
- package/dist/inspection/overview.d.cts +8 -6
- package/dist/inspection/overview.d.mts +8 -6
- package/dist/inspection/overview.d.ts +8 -6
- package/dist/inspection/planned-attempt.cjs +45 -0
- package/dist/inspection/planned-attempt.cjs.map +1 -0
- package/dist/inspection/planned-attempt.d.cts +109 -0
- package/dist/inspection/planned-attempt.d.mts +109 -0
- package/dist/inspection/planned-attempt.d.ts +109 -0
- package/dist/inspection/planned-attempt.js +24 -0
- package/dist/inspection/planned-attempt.js.map +1 -0
- package/dist/inspection/project-result.cjs +5 -5
- package/dist/inspection/project-result.cjs.map +1 -1
- package/dist/inspection/project-result.d.cts +58 -57
- package/dist/inspection/project-result.d.mts +58 -57
- package/dist/inspection/project-result.d.ts +58 -57
- package/dist/inspection/project-result.js +4 -4
- package/dist/inspection/project.cjs +3 -3
- package/dist/inspection/project.cjs.map +1 -1
- package/dist/inspection/protocol-values.cjs +1 -1
- package/dist/inspection/protocol-values.cjs.map +1 -1
- package/dist/inspection/protocol-values.d.cts +1 -1
- package/dist/inspection/protocol-values.d.mts +1 -1
- package/dist/inspection/protocol-values.d.ts +1 -1
- package/dist/inspection/protocol.cjs +8 -8
- package/dist/inspection/protocol.cjs.map +1 -1
- package/dist/inspection/protocol.d.cts +237 -219
- package/dist/inspection/protocol.d.mts +237 -219
- package/dist/inspection/protocol.d.ts +237 -219
- package/dist/inspection/public.cjs +1 -5
- package/dist/inspection/public.cjs.map +1 -1
- package/dist/inspection/public.d.cts +1 -2
- package/dist/inspection/public.d.mts +1 -2
- package/dist/inspection/public.d.ts +1 -2
- package/dist/inspection/public.js +14 -20
- package/dist/inspection/public.mjs +166 -129
- package/dist/inspection/query.cjs +1 -1
- package/dist/inspection/query.cjs.map +1 -1
- package/dist/inspection/results.cjs +61 -52
- package/dist/inspection/results.cjs.map +1 -1
- package/dist/inspection/results.d.cts +157 -140
- package/dist/inspection/results.d.mts +157 -140
- package/dist/inspection/results.d.ts +157 -140
- package/dist/inspection/select.cjs +33 -28
- package/dist/inspection/select.cjs.map +1 -1
- package/dist/inspection/source.cjs +1 -1
- package/dist/inspection/source.cjs.map +1 -1
- package/dist/inspection/sources.cjs +2 -2
- package/dist/inspection/sources.cjs.map +1 -1
- package/dist/inspection/trace.cjs +9 -8
- package/dist/inspection/trace.cjs.map +1 -1
- package/dist/inspection/trace.d.cts +4 -4
- package/dist/inspection/trace.d.mts +4 -4
- package/dist/inspection/trace.d.ts +4 -4
- package/dist/loaders/index.cjs +7 -279
- package/dist/loaders/index.cjs.map +1 -1
- package/dist/loaders/index.d.cts +2 -95
- package/dist/loaders/index.d.mts +2 -95
- package/dist/loaders/index.d.ts +2 -95
- package/dist/loaders/index.js +10 -12
- package/dist/loaders/index.mjs +10 -12
- package/dist/loaders/runtime.cjs +283 -0
- package/dist/loaders/runtime.cjs.map +1 -0
- package/dist/loaders/runtime.d.cts +95 -0
- package/dist/loaders/runtime.d.mts +95 -0
- package/dist/loaders/runtime.d.ts +95 -0
- package/dist/loaders/runtime.js +16 -0
- package/dist/loaders/runtime.js.map +1 -0
- package/dist/migrations/judge-provider.md +6 -6
- package/dist/{model-slots.cjs → model-roles.cjs} +12 -12
- package/dist/{model-slots.cjs.map → model-roles.cjs.map} +1 -1
- package/dist/{model-slots.d.cts → model-roles.d.cts} +10 -10
- package/dist/{model-slots.d.mts → model-roles.d.mts} +10 -10
- package/dist/{model-slots.d.ts → model-roles.d.ts} +10 -10
- package/dist/model-roles.js +14 -0
- package/dist/model-roles.js.map +1 -0
- package/dist/o11y/adapter-usage-projection.cjs +9 -8
- package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
- package/dist/o11y/adapter-usage-projection.d.cts +23 -15
- package/dist/o11y/adapter-usage-projection.d.mts +23 -15
- package/dist/o11y/adapter-usage-projection.d.ts +23 -15
- package/dist/o11y/cache-read.cjs +14 -14
- package/dist/o11y/cache-read.cjs.map +1 -1
- package/dist/o11y/cache-read.d.cts +5 -5
- package/dist/o11y/cache-read.d.mts +5 -5
- package/dist/o11y/cache-read.d.ts +5 -5
- package/dist/o11y/derive.cjs.map +1 -1
- package/dist/o11y/derive.d.cts +2 -2
- package/dist/o11y/derive.d.mts +2 -2
- package/dist/o11y/derive.d.ts +2 -2
- package/dist/o11y/eval-usage.cjs +9 -9
- package/dist/o11y/eval-usage.cjs.map +1 -1
- package/dist/o11y/eval-usage.d.cts +7 -7
- package/dist/o11y/eval-usage.d.mts +7 -7
- package/dist/o11y/eval-usage.d.ts +7 -7
- package/dist/o11y/parsers/bub.cjs +57 -81
- package/dist/o11y/parsers/bub.cjs.map +1 -1
- package/dist/o11y/parsers/index.cjs.map +1 -1
- package/dist/o11y/parsers/index.d.cts +2 -0
- package/dist/o11y/parsers/index.d.mts +2 -0
- package/dist/o11y/parsers/index.d.ts +2 -0
- package/dist/o11y/parsers/opencode.cjs +129 -217
- package/dist/o11y/parsers/opencode.cjs.map +1 -1
- package/dist/o11y/parsers/opencode.d.cts +2 -5
- package/dist/o11y/parsers/opencode.d.mts +2 -5
- package/dist/o11y/parsers/opencode.d.ts +2 -5
- package/dist/o11y/types.cjs.map +1 -1
- package/dist/o11y/types.d.cts +1 -1
- package/dist/o11y/types.d.mts +1 -1
- package/dist/o11y/types.d.ts +1 -1
- package/dist/plugin/contracts.cjs +170 -120
- package/dist/plugin/contracts.cjs.map +1 -1
- package/dist/plugin/contracts.d.cts +102 -90
- package/dist/plugin/contracts.d.mts +102 -90
- package/dist/plugin/contracts.d.ts +102 -90
- package/dist/plugin/contracts.js +16 -12
- package/dist/plugin/index.cjs.map +1 -1
- package/dist/plugin/index.d.cts +1 -1
- package/dist/plugin/index.d.mts +1 -1
- package/dist/plugin/index.d.ts +1 -1
- package/dist/plugin/link.cjs +69 -64
- package/dist/plugin/link.cjs.map +1 -1
- package/dist/plugin/link.d.cts +5 -3
- package/dist/plugin/link.d.mts +5 -3
- package/dist/plugin/link.d.ts +5 -3
- package/dist/plugin/link.js +12 -8
- package/dist/record/codec/seal-manifest.d.cts +3 -3
- package/dist/record/codec/seal-manifest.d.mts +3 -3
- package/dist/record/codec/seal-manifest.d.ts +3 -3
- package/dist/record/family/attempt-note/definition.cjs +12 -0
- package/dist/record/family/attempt-note/definition.cjs.map +1 -0
- package/dist/record/family/attempt-note/definition.d.cts +6 -0
- package/dist/record/family/attempt-note/definition.d.mts +6 -0
- package/dist/record/family/attempt-note/definition.d.ts +6 -0
- package/dist/record/family/attempt-note/definition.js +6 -0
- package/dist/record/family/attempt-note/definition.js.map +1 -0
- package/dist/record/family/attempt-note/persistence.cjs +10 -0
- package/dist/record/family/attempt-note/persistence.cjs.map +1 -0
- package/dist/record/family/attempt-note/persistence.d.cts +6 -0
- package/dist/record/family/attempt-note/persistence.d.mts +6 -0
- package/dist/record/family/attempt-note/persistence.d.ts +6 -0
- package/dist/record/family/attempt-note/persistence.js +6 -0
- package/dist/record/family/attempt-note/persistence.js.map +1 -0
- package/dist/record/family/attempt-note/schema.cjs +20 -0
- package/dist/record/family/attempt-note/schema.cjs.map +1 -0
- package/dist/record/family/attempt-note/schema.d.cts +21 -0
- package/dist/record/family/attempt-note/schema.d.mts +21 -0
- package/dist/record/family/attempt-note/schema.d.ts +21 -0
- package/dist/record/family/attempt-note/schema.js +10 -0
- package/dist/record/family/attempt-note/schema.js.map +1 -0
- package/dist/record/family/catalog.cjs +32 -29
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +7 -2
- package/dist/record/family/catalog.d.mts +7 -2
- package/dist/record/family/catalog.d.ts +7 -2
- package/dist/record/family/current.cjs +48 -45
- package/dist/record/family/current.cjs.map +1 -1
- package/dist/record/family/current.d.cts +15 -0
- package/dist/record/family/current.d.mts +15 -0
- package/dist/record/family/current.d.ts +15 -0
- package/dist/record/model/index.js +66 -64
- package/dist/record/model/run-context.cjs +9 -3
- package/dist/record/model/run-context.cjs.map +1 -1
- package/dist/record/model/run-context.d.cts +9 -2
- package/dist/record/model/run-context.d.mts +9 -2
- package/dist/record/model/run-context.d.ts +9 -2
- package/dist/record/model/run-context.js +8 -6
- package/dist/record/model/seal-manifest.d.cts +1 -1
- package/dist/record/model/seal-manifest.d.mts +1 -1
- package/dist/record/model/seal-manifest.d.ts +1 -1
- package/dist/run/cli/contribution.cjs +6 -32
- package/dist/run/cli/contribution.cjs.map +1 -1
- package/dist/run/host/runtime.cjs +1 -1
- package/dist/run/host/runtime.cjs.map +1 -1
- package/dist/run/storage/sqlite.cjs +7 -7
- package/dist/run/storage/sqlite.cjs.map +1 -1
- package/dist/runner/adapter-usage.cjs +5 -3
- package/dist/runner/adapter-usage.cjs.map +1 -1
- package/dist/runner/adapter-usage.d.cts +2 -2
- package/dist/runner/adapter-usage.d.mts +2 -2
- package/dist/runner/adapter-usage.d.ts +2 -2
- package/dist/runner/adoption.cjs +9 -12
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-notes.cjs +8 -0
- package/dist/runner/attempt-notes.cjs.map +1 -0
- package/dist/runner/attempt-notes.d.cts +4 -0
- package/dist/runner/attempt-notes.d.mts +4 -0
- package/dist/runner/attempt-notes.d.ts +4 -0
- package/dist/runner/attempt-notes.js +8 -0
- package/dist/runner/attempt-notes.js.map +1 -0
- package/dist/runner/attempt.cjs +61 -73
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/attempt.d.cts +3 -3
- package/dist/runner/attempt.d.mts +3 -3
- package/dist/runner/attempt.d.ts +3 -3
- package/dist/runner/command-plan.cjs +21 -26
- package/dist/runner/command-plan.cjs.map +1 -1
- package/dist/runner/command-plan.d.cts +4 -4
- package/dist/runner/command-plan.d.mts +4 -4
- package/dist/runner/command-plan.d.ts +4 -4
- package/dist/runner/command-plan.js +4 -4
- package/dist/runner/config-identity.cjs.map +1 -1
- package/dist/runner/config-identity.d.cts +2 -2
- package/dist/runner/config-identity.d.mts +2 -2
- package/dist/runner/config-identity.d.ts +2 -2
- package/dist/runner/discover.cjs +6 -6
- package/dist/runner/discover.cjs.map +1 -1
- package/dist/runner/eval-selection.cjs +2 -2
- package/dist/runner/eval-selection.cjs.map +1 -1
- package/dist/runner/eval-selection.d.cts +2 -2
- package/dist/runner/eval-selection.d.mts +2 -2
- package/dist/runner/eval-selection.d.ts +2 -2
- package/dist/runner/feedback/human.cjs +1 -1
- package/dist/runner/feedback/human.cjs.map +1 -1
- package/dist/runner/feedback/json.cjs +4 -2
- package/dist/runner/feedback/json.cjs.map +1 -1
- package/dist/runner/feedback/json.d.cts +1 -1
- package/dist/runner/feedback/json.d.mts +1 -1
- package/dist/runner/feedback/json.d.ts +1 -1
- package/dist/runner/feedback/sink.cjs +1 -1
- package/dist/runner/feedback/sink.cjs.map +1 -1
- package/dist/runner/feedback/sink.d.cts +1 -1
- package/dist/runner/feedback/sink.d.mts +1 -1
- package/dist/runner/feedback/sink.d.ts +1 -1
- package/dist/runner/fingerprint.cjs +1 -1
- package/dist/runner/fingerprint.cjs.map +1 -1
- package/dist/runner/project-target.cjs.map +1 -1
- package/dist/runner/project-target.d.cts +2 -2
- package/dist/runner/project-target.d.mts +2 -2
- package/dist/runner/project-target.d.ts +2 -2
- package/dist/runner/record/attachments.cjs +2 -2
- package/dist/runner/record/attachments.cjs.map +1 -1
- package/dist/runner/record/planning.cjs +8 -2
- package/dist/runner/record/planning.cjs.map +1 -1
- package/dist/runner/record.cjs +2 -0
- package/dist/runner/record.cjs.map +1 -1
- package/dist/runner/report.cjs +3 -3
- package/dist/runner/report.cjs.map +1 -1
- package/dist/runner/report.d.cts +1 -1
- package/dist/runner/report.d.mts +1 -1
- package/dist/runner/report.d.ts +1 -1
- package/dist/runner/reuse-plan.cjs +2 -2
- package/dist/runner/reuse-plan.cjs.map +1 -1
- package/dist/runner/run.cjs +10 -45
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/sandbox-pool.cjs +1 -2
- package/dist/runner/sandbox-pool.cjs.map +1 -1
- package/dist/runner/setup-prefix-preparation.cjs +1 -1
- package/dist/runner/setup-prefix-preparation.cjs.map +1 -1
- package/dist/runner/teardown-registry.cjs +2 -2
- package/dist/runner/teardown-registry.cjs.map +1 -1
- package/dist/runner/teardown-registry.d.cts +1 -1
- package/dist/runner/teardown-registry.d.mts +1 -1
- package/dist/runner/teardown-registry.d.ts +1 -1
- package/dist/runner/types.cjs +4 -4
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +64 -93
- package/dist/runner/types.d.mts +64 -93
- package/dist/runner/types.d.ts +64 -93
- package/dist/runner/types.js +2 -2
- package/dist/sandbox/action.cjs +1 -1
- package/dist/sandbox/action.cjs.map +1 -1
- package/dist/sandbox/cli/contribution.cjs +17 -14
- package/dist/sandbox/cli/contribution.cjs.map +1 -1
- package/dist/sandbox/cli/contribution.d.cts +1 -1
- package/dist/sandbox/cli/contribution.d.mts +1 -1
- package/dist/sandbox/cli/contribution.d.ts +1 -1
- package/dist/sandbox/commands.cjs +1 -1
- package/dist/sandbox/commands.cjs.map +1 -1
- package/dist/sandbox/commands.d.cts +1 -1
- package/dist/sandbox/commands.d.mts +1 -1
- package/dist/sandbox/commands.d.ts +1 -1
- package/dist/sandbox/compose.cjs +2 -2
- package/dist/sandbox/compose.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.cjs +5 -9
- package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.d.cts +0 -3
- package/dist/sandbox/docker-profile/registry.d.mts +0 -3
- package/dist/sandbox/docker-profile/registry.d.ts +0 -3
- package/dist/sandbox/docker-profile/registry.js +6 -12
- package/dist/sandbox/docker-profile/runtime.cjs +1 -1
- package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.cjs +12 -16
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.d.cts +2 -6
- package/dist/sandbox/docker-profile/schema.d.mts +2 -6
- package/dist/sandbox/docker-profile/schema.d.ts +2 -6
- package/dist/sandbox/docker-profile/schema.js +24 -32
- package/dist/sandbox/incus.cjs +2 -2
- package/dist/sandbox/incus.cjs.map +1 -1
- package/dist/sandbox/index.cjs +4 -35
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +4 -8
- package/dist/sandbox/index.d.mts +4 -8
- package/dist/sandbox/index.d.ts +4 -8
- package/dist/sandbox/index.js +116 -172
- package/dist/sandbox/index.mjs +116 -172
- package/dist/sandbox/layer.cjs +3 -3
- package/dist/sandbox/layer.cjs.map +1 -1
- package/dist/sandbox/link.cjs +5 -0
- package/dist/sandbox/link.cjs.map +1 -1
- package/dist/sandbox/link.d.cts +3 -0
- package/dist/sandbox/link.d.mts +3 -0
- package/dist/sandbox/link.d.ts +3 -0
- package/dist/sandbox/runtime.cjs +9 -4
- package/dist/sandbox/runtime.cjs.map +1 -1
- package/dist/shared/failure-class.cjs +5 -5
- package/dist/shared/failure-class.cjs.map +1 -1
- package/dist/shared/failure-class.d.cts +4 -10
- package/dist/shared/failure-class.d.mts +4 -10
- package/dist/shared/failure-class.d.ts +4 -10
- package/dist/shared/types.cjs.map +1 -1
- package/dist/shared/types.d.cts +1 -1
- package/dist/shared/types.d.mts +1 -1
- package/dist/shared/types.d.ts +1 -1
- package/dist/show/contribution.cjs +17 -2
- package/dist/show/contribution.cjs.map +1 -1
- package/dist/show/contribution.d.cts +14 -0
- package/dist/show/contribution.d.mts +14 -0
- package/dist/show/contribution.d.ts +14 -0
- package/dist/show/model.cjs +8 -5
- package/dist/show/model.cjs.map +1 -1
- package/dist/show/model.d.cts +11 -8
- package/dist/show/model.d.mts +11 -8
- package/dist/show/model.d.ts +11 -8
- package/dist/show/render.cjs +34 -22
- package/dist/show/render.cjs.map +1 -1
- package/dist/sources/projector.cjs +1 -1
- package/dist/sources/projector.cjs.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +2 -2
- package/dist/view/app-dist/.vite/manifest.json +2 -2
- package/dist/view/app-dist/assets/{index-B3ijZRph.js → index-CxrOUvHC.js} +17 -17
- package/dist/view/app-dist/assets/{quality-cost-scatter-B--DfJ9s.js → quality-cost-scatter-B6Aiss7x.js} +1 -1
- package/dist/view/app-dist/index.html +1 -1
- package/dist/view/cli/contribution.cjs +1 -1
- package/dist/view/cli/contribution.cjs.map +1 -1
- package/dist/view/function-runtime.mjs +318 -121
- package/dist/view/http-protocol.d.cts +1 -1
- package/dist/view/http-protocol.d.mts +1 -1
- package/dist/view/http-protocol.d.ts +1 -1
- package/dist/view/inspection-host.cjs +2 -2
- package/dist/view/inspection-host.cjs.map +1 -1
- package/dist/view/inspection-host.d.cts +349 -331
- package/dist/view/inspection-host.d.mts +349 -331
- package/dist/view/inspection-host.d.ts +349 -331
- package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +6 -6
- package/docs-site/zh/examples/integrations/claude-sdk.mdx +5 -5
- package/docs-site/zh/examples/integrations/codex-sdk.mdx +4 -4
- package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
- package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
- package/docs-site/zh/explanation/adapter.mdx +6 -6
- package/docs-site/zh/explanation/assert.mdx +7 -7
- package/docs-site/zh/explanation/drive.mdx +4 -4
- package/docs-site/zh/explanation/hitl.mdx +2 -2
- package/docs-site/zh/explanation/judge.mdx +2 -2
- package/docs-site/zh/introduction.mdx +2 -2
- package/docs-site/zh/reference/builtin-agents.mdx +46 -49
- package/docs-site/zh/reference/cli.mdx +16 -14
- package/docs-site/zh/reference/define-agent.mdx +19 -19
- package/docs-site/zh/reference/define-config.mdx +7 -15
- package/docs-site/zh/reference/define-eval.mdx +20 -14
- package/docs-site/zh/reference/define-experiment.mdx +18 -39
- package/docs-site/zh/reference/events.mdx +1 -1
- package/docs-site/zh/reference/expect.mdx +21 -0
- package/docs-site/zh/reference/official-adapters.mdx +12 -5
- package/docs-site/zh/troubleshooting/debugging.mdx +2 -2
- package/docs-site/zh/troubleshooting/recover-after-kill.mdx +1 -1
- package/docs-site/zh/tutorials/agent-onboarding.mdx +2 -2
- package/docs-site/zh/tutorials/authoring.mdx +2 -2
- package/docs-site/zh/tutorials/compare-runs.mdx +1 -1
- package/docs-site/zh/tutorials/concurrency.mdx +8 -8
- package/docs-site/zh/tutorials/configuration.mdx +5 -5
- package/docs-site/zh/tutorials/control-run-cost.mdx +19 -19
- package/docs-site/zh/tutorials/eval-groups.mdx +1 -1
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +5 -5
- package/docs-site/zh/tutorials/experiment-services.mdx +32 -32
- package/docs-site/zh/tutorials/handle-execution-failures.mdx +2 -28
- package/docs-site/zh/tutorials/plugins.mdx +49 -143
- package/docs-site/zh/tutorials/sandbox-agent.mdx +1 -1
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +7 -7
- package/docs-site/zh/tutorials/upgrade-0-18.mdx +1 -1
- package/docs-site/zh/tutorials/upgrade-0-19.mdx +121 -0
- package/docs-site/zh/tutorials/upgrade-0-20.mdx +12 -0
- package/docs-site/zh/tutorials/verify-judge.mdx +2 -2
- package/docs-site/zh/tutorials/viewing-results.mdx +2 -2
- package/docs-site/zh/tutorials/write-experiment.mdx +1 -1
- package/docs-site/zh/tutorials/write-send.mdx +13 -13
- package/package.json +1 -1
- package/dist/agents/effect-runtime.cjs.map +0 -1
- package/dist/agents/effect-runtime.d.cts +0 -29
- package/dist/agents/effect-runtime.d.mts +0 -29
- package/dist/agents/effect-runtime.d.ts +0 -29
- package/dist/agents/effect-runtime.js +0 -16
- package/dist/agents/effect-runtime.js.map +0 -1
- package/dist/agents/session-slot.cjs.map +0 -1
- package/dist/agents/session-slot.d.cts +0 -12
- package/dist/agents/session-slot.d.mts +0 -12
- package/dist/agents/session-slot.d.ts +0 -12
- package/dist/agents/session-slot.js +0 -6
- package/dist/agents/session-slot.js.map +0 -1
- package/dist/model-slots.js +0 -14
- package/dist/model-slots.js.map +0 -1
package/dist/agents/mcp.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["mcp.ts"],"names":[],"mappings":";;AAKA,8BAEC;AAED,4CAMC;AAED,gDAIC;AAjBD,mEAAmE;AACnE,SAAgB,SAAS,CAAC,MAAiB;IACvC,OAAO,KAAK,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC7D,CAAC;AACD,oDAAoD;AACpD,SAAgB,gBAAgB,CAAC,OAA6B;IAC1D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,SAAS,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,IAAI,6IAA6I,CAAC,CAAC;QAC7L,CAAC;IACL,CAAC;AACL,CAAC;AACD,+DAA+D;AAC/D,SAAgB,kBAAkB,CAAC,OAA6B;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;QAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClG,CAAC","sourcesContent":["// MCP server 的形态判别与 manifest 映射 —— Claude Code / Codex 两个 adapter 共用。\n// 契约见 docs/feature/adapters/architecture/coding-agent-extensions.md「类型边界」:\n// stdio(command)与 Streamable HTTP(url)按形状判别;双字段是配置错误,setup 点名报错。\nimport type {
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["mcp.ts"],"names":[],"mappings":";;AAKA,8BAEC;AAED,4CAMC;AAED,gDAIC;AAjBD,mEAAmE;AACnE,SAAgB,SAAS,CAAC,MAAiB;IACvC,OAAO,KAAK,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC7D,CAAC;AACD,oDAAoD;AACpD,SAAgB,gBAAgB,CAAC,OAA6B;IAC1D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,SAAS,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,IAAI,6IAA6I,CAAC,CAAC;QAC7L,CAAC;IACL,CAAC;AACL,CAAC;AACD,+DAA+D;AAC/D,SAAgB,kBAAkB,CAAC,OAA6B;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;QAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClG,CAAC","sourcesContent":["// MCP server 的形态判别与 manifest 映射 —— Claude Code / Codex 两个 adapter 共用。\n// 契约见 docs/feature/adapters/architecture/coding-agent-extensions.md「类型边界」:\n// stdio(command)与 Streamable HTTP(url)按形状判别;双字段是配置错误,setup 点名报错。\nimport type { AgentInstallationManifest, McpHttpServer, McpServer } from \"./types.ts\";\n/** 形态判别:有 url 的是 HTTP。调用前先过 {@link assertMcpServers}(双字段在那里报错)。 */\nexport function isHttpMcp(server: McpServer): server is McpHttpServer {\n return \"url\" in server && typeof server.url === \"string\";\n}\n/** 双字段(command + url)的配置错误在写任何沙箱配置前抛出,点名 server。 */\nexport function assertMcpServers(servers: readonly McpServer[]): void {\n for (const server of servers) {\n if (\"command\" in server && \"url\" in server) {\n throw new Error(`MCP server \"${server.name}\" specifies both \"command\" and \"url\" — pick one transport: \"command\" for a local stdio server, \"url\" for a remote Streamable HTTP endpoint.`);\n }\n }\n}\n/** manifest 条目:只记非 secret 字段(stdio 不含 env,HTTP 不含 headers)。 */\nexport function mcpManifestEntries(servers: readonly McpServer[]): NonNullable<AgentInstallationManifest[\"mcpServers\"]> {\n return servers.map((s) => isHttpMcp(s)\n ? { name: s.name, url: s.url }\n : { name: s.name, command: s.command, ...(s.args?.length ? { args: [...s.args] } : {}) });\n}\n"]}
|
package/dist/agents/mcp.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AgentInstallationManifest, McpHttpServer, McpServer } from "./types.cjs";
|
|
2
2
|
/** 形态判别:有 url 的是 HTTP。调用前先过 {@link assertMcpServers}(双字段在那里报错)。 */
|
|
3
3
|
export declare function isHttpMcp(server: McpServer): server is McpHttpServer;
|
|
4
4
|
/** 双字段(command + url)的配置错误在写任何沙箱配置前抛出,点名 server。 */
|
|
5
5
|
export declare function assertMcpServers(servers: readonly McpServer[]): void;
|
|
6
6
|
/** manifest 条目:只记非 secret 字段(stdio 不含 env,HTTP 不含 headers)。 */
|
|
7
|
-
export declare function mcpManifestEntries(servers: readonly McpServer[]): NonNullable<
|
|
7
|
+
export declare function mcpManifestEntries(servers: readonly McpServer[]): NonNullable<AgentInstallationManifest["mcpServers"]>;
|
package/dist/agents/mcp.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AgentInstallationManifest, McpHttpServer, McpServer } from "./types.mjs";
|
|
2
2
|
/** 形态判别:有 url 的是 HTTP。调用前先过 {@link assertMcpServers}(双字段在那里报错)。 */
|
|
3
3
|
export declare function isHttpMcp(server: McpServer): server is McpHttpServer;
|
|
4
4
|
/** 双字段(command + url)的配置错误在写任何沙箱配置前抛出,点名 server。 */
|
|
5
5
|
export declare function assertMcpServers(servers: readonly McpServer[]): void;
|
|
6
6
|
/** manifest 条目:只记非 secret 字段(stdio 不含 env,HTTP 不含 headers)。 */
|
|
7
|
-
export declare function mcpManifestEntries(servers: readonly McpServer[]): NonNullable<
|
|
7
|
+
export declare function mcpManifestEntries(servers: readonly McpServer[]): NonNullable<AgentInstallationManifest["mcpServers"]>;
|
package/dist/agents/mcp.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AgentInstallationManifest, McpHttpServer, McpServer } from "./types.js";
|
|
2
2
|
/** 形态判别:有 url 的是 HTTP。调用前先过 {@link assertMcpServers}(双字段在那里报错)。 */
|
|
3
3
|
export declare function isHttpMcp(server: McpServer): server is McpHttpServer;
|
|
4
4
|
/** 双字段(command + url)的配置错误在写任何沙箱配置前抛出,点名 server。 */
|
|
5
5
|
export declare function assertMcpServers(servers: readonly McpServer[]): void;
|
|
6
6
|
/** manifest 条目:只记非 secret 字段(stdio 不含 env,HTTP 不含 headers)。 */
|
|
7
|
-
export declare function mcpManifestEntries(servers: readonly McpServer[]): NonNullable<
|
|
7
|
+
export declare function mcpManifestEntries(servers: readonly McpServer[]): NonNullable<AgentInstallationManifest["mcpServers"]>;
|
package/dist/agents/omp.cjs
CHANGED
|
@@ -74,7 +74,7 @@ function enrichOmpEvent(event) {
|
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */
|
|
77
|
-
// @concord-code
|
|
77
|
+
// @concord-code
|
|
78
78
|
// @concord-implements docs/feature/adapters/README.md
|
|
79
79
|
// @concord-implements docs/feature/adapters/sdk/omp/README.md
|
|
80
80
|
function ompAgent(config) {
|
|
@@ -97,7 +97,7 @@ function ompAgent(config) {
|
|
|
97
97
|
evidenceCoverage: OMP_EVIDENCE_COVERAGE,
|
|
98
98
|
ensure: [bunInstall.ensure, ompInstall.ensure],
|
|
99
99
|
installers: [bunInstall.installer, ompInstall.installer],
|
|
100
|
-
|
|
100
|
+
before: (sb, ctx) => effect_1.Effect.tryPromise({
|
|
101
101
|
try: async () => {
|
|
102
102
|
const homeResult = await sb.runShell('test -n "$HOME" && printf "%s" "$HOME"');
|
|
103
103
|
const home = homeResult.stdout.trim();
|
package/dist/agents/omp.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omp.js","sourceRoot":"","sources":["omp.ts"],"names":[],"mappings":";;AA6FA,4BAmHC;AAhND,mCAAgC;AAChC,4CAAgD;AAChD,wCAAgD;AAEhD,kEAAwF;AACxF,2CAAqC;AACrC,qDAAmF;AACnF,yDAA0D;AAC1D,yEAA8F;AAC9F,mDAA+E;AAC/E,qEAAyH;AAEzH,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAC1C,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAC3C,MAAM,qBAAqB,GAAqB;IAC5C,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;IAC9B,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;IAC/B,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;IAChC,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;IAC7B,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;IAC9B,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,4DAA4D,EAAE;CACxG,CAAC;AAWF,SAAS,aAAa,CAAC,MAAkB;IACrC,OAAO,MAAM,EAAE,MAAM,IAAI,IAAA,gBAAM,EAAC,aAAa,CAAC,IAAI,IAAA,oBAAU,EAAC,gBAAgB,CAAC,CAAC;AACnF,CAAC;AACD,SAAS,cAAc,CAAC,MAAkB;IACtC,OAAO,MAAM,EAAE,OAAO,IAAI,IAAA,gBAAM,EAAC,cAAc,CAAC,IAAI,IAAA,gBAAM,EAAC,iBAAiB,CAAC,CAAC;AAClF,CAAC;AACD,SAAS,kBAAkB,CAAC,OAAe,EAAE,QAA+B;IAIxE,IAAI,QAAQ,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS;YACpC,OAAO,SAAS,CAAC;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,IAAI,EAAE,mBAAmB,IAAI,GAAG,IAAI,IAAI,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACrF,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnE,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS;YACpC,OAAO,SAAS,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,oBAAoB,IAAI,IAAI,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC/E,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,UAAU,CAAC,GAAW;IAC3B,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACxE,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAEzD,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,KAAyB,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,cAAc,CAAC,KAAkB;IACtC,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM;QACrE,OAAO,KAAK,CAAC;IACjB,MAAM,IAAI,GAAG,IAAA,iCAAiB,EAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO;QACH,GAAG,KAAK;QACR,SAAS,EAAE;YACP,GAAG,KAAK,CAAC,SAAS;YAClB,IAAI;YACJ,OAAO,EAAE,IAAI,KAAK,OAAO;gBACrB,CAAC,CAAC,IAAA,+CAAuB,EAAC,sBAAsB,CAAC;gBACjD,CAAC,CAAC,IAAA,4CAAoB,GAAE;SAC/B;KACJ,CAAC;AACN,CAAC;AACD,oEAAoE;AACpE,qCAAqC;AACrC,sDAAsD;AACtD,8DAA8D;AAC9D,SAAgB,QAAQ,CAAC,MAAkB;IACvC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,gDAAuB,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,4CAAmB,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAA,qCAAqB,EAAC;QACrC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,uDAA8B,CAAC,GAAG,CAAC,EAAE;QACzF,WAAW,EAAE,2BAA2B;QACxC,GAAG,EAAE,KAAK;KACb,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAA,qCAAqB,EAAC;QACrC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE;QAC9D,WAAW,EAAE,KAAK;QAClB,GAAG,EAAE,KAAK;QACV,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC;KAC1E,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,OAAO,IAAA,4BAAgB,EAAC;QACpB,IAAI,EAAE,KAAK;QACX,gBAAgB,EAAE,qBAAqB;QACvC,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;QAC9C,UAAU,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC;QACxD,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,eAAM,CAAC,UAAU,CAAC;YAClC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACZ,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC;gBAC/E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,UAAU,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBAC7E,CAAC;gBACD,MAAM,GAAG,GAAG,GAAG,IAAI,gBAAgB,CAAC;gBACpC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAClC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,mBAAmB,CAAC;gBAC/C,MAAM,MAAM,GAAG;oBACX,SAAS,EAAE;wBACP,CAAC,eAAe,CAAC,EAAE;4BACf,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/B,GAAG,EAAE,oBAAoB;4BACzB,MAAM,EAAE,WAAW;4BACnB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;yBACjF;qBACJ;iBACJ,CAAC;gBACF,MAAM,kBAAM,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,GAAG,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACrF,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SAC1B,CAAC;QACF,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACtC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAA,qCAAqB,EAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBAC5B,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBAClB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;oBACrC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBAClD,IAAI,CAAC,GAAG;wBACJ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBACtD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,mBAAmB,CAAC;oBAC/C,MAAM,GAAG,GAAsC;wBAC3C,CAAC,WAAW,CAAC,EAAE,MAAM;wBACrB,mBAAmB,EAAE,GAAG;wBACxB,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG;qBACxB,CAAC;oBACF,MAAM,IAAI,GAAG;wBACT,SAAS;wBACT,QAAQ,EAAE,MAAM;wBAChB,SAAS,EAAE,GAAG,eAAe,IAAI,KAAK,EAAE;wBACxC,iBAAiB,EAAE,MAAM;wBACzB,UAAU;wBACV,YAAY;wBACZ,KAAK,CAAC,IAAI;qBACb,CAAC;oBACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE;wBACnD,GAAG;wBACH,eAAe,EAAE,CAAC,MAAM,CAAC;wBACzB,MAAM,EAAE,IAAI;wBACZ,MAAM;qBACT,CAAC,CAAC;oBACH,IAAI,YAAgC,CAAC;oBACrC,IAAI,CAAC;wBACD,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1C,CAAC;oBACD,OAAO,KAAK,EAAE,CAAC;wBACX,MAAM,IAAA,kCAAe,EAAC;4BAClB,UAAU,EAAE,SAAS;4BACrB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC;4BACtF,OAAO,EAAE,GAAG;yBACf,CAAC,CAAC;oBACP,CAAC;oBACD,MAAM,MAAM,GAAG,IAAA,yCAAwB,GAAE,CAAC;oBAC1C,MAAM,MAAM,GAAkB,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;oBACrG,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW;wBACrE,KAEC,CAAC,UAAU,KAAK,KAAK;wBACvB,KAAK,CAAC,OAAO,CAAE,KAEb,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAClB,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC9C,MAAM,IAAA,kCAAe,EAAC;4BAClB,UAAU,EAAE,IAAA,2CAAwB,EAAC,MAAM,CAAC;4BAC5C,OAAO,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC;gCACvB,CAAC,CAAC,kBAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;gCACjD,CAAC,CAAC,gBAAgB,QAAQ,CAAC,MAAM,yDAAyD;4BAC9F,MAAM;4BACN,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,OAAO,EAAE,GAAG;yBACf,CAAC,CAAC;oBACP,CAAC;oBACD,OAAO;wBACH,MAAM;wBACN,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,WAAoB;qBACnE,CAAC;gBACN,CAAC;gBACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;aAC1B,CAAC,CAAC;QACP,CAAC,CAAC;KACL,CAAC,CAAC;AACP,CAAC;AACD,kBAAe,QAAQ,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport { makeSandboxAgent } from \"../define.ts\";\nimport { getEnv, requireEnv } from \"../util.ts\";\nimport type { Agent, EvidenceCoverage, StreamEvent } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shared } from \"./shared.ts\";\nimport { createPiAgentEventStream, type PiAgentEventLike } from \"./sdk-streams.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { AGENT_BASELINE_RECIPE_REVISION, DEFAULT_BUN_VERSION, DEFAULT_OMP_CLI_VERSION, } from \"./coding-cli-versions.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nconst COMPAT_PROVIDER = \"niceeval-compat\";\nconst API_KEY_ENV = \"NICEEVAL_OMP_API_KEY\";\nconst OMP_EVIDENCE_COVERAGE: EvidenceCoverage = {\n events: { status: \"complete\" },\n actions: { status: \"complete\" },\n messages: { status: \"complete\" },\n usage: { status: \"complete\" },\n status: { status: \"complete\" },\n data: { status: \"unavailable\", reason: \"OMP print mode does not expose a separate Turn.data value.\" },\n};\nexport interface OmpConfig {\n /** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */\n apiKey?: string;\n /** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */\n baseUrl?: string;\n /** Exact npm version of `@oh-my-pi/pi-coding-agent`. */\n version?: string;\n /** Exact Bun runtime version used by the fallback installer. */\n bunVersion?: string;\n}\nfunction resolveApiKey(config?: OmpConfig): string {\n return config?.apiKey ?? getEnv(\"OMP_API_KEY\") ?? requireEnv(\"OPENAI_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OmpConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OMP_BASE_URL\") ?? getEnv(\"OPENAI_BASE_URL\");\n}\nfunction bunPlatformPackage(version: string, platform: AgentArtifactPlatform): {\n spec: string;\n binPath: string;\n} | undefined {\n if (platform.os === \"linux\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n const musl = platform.libc === \"musl\" ? \"-musl\" : \"\";\n return { spec: `@oven/bun-linux-${arch}${musl}@${version}`, binPath: \"bin/bun\" };\n }\n if (platform.os === \"darwin\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n return { spec: `@oven/bun-darwin-${arch}@${version}`, binPath: \"bin/bun\" };\n }\n return undefined;\n}\nfunction parseJsonl(raw: string): PiAgentEventLike[] {\n return raw.split(/\\r?\\n/).filter((line) => line.trim()).map((line, index) => {\n let value: unknown;\n try {\n value = JSON.parse(line);\n }\n catch (cause) {\n throw new Error(`OMP emitted invalid JSONL at line ${index + 1}`, { cause });\n }\n if (typeof value !== \"object\" || value === null || typeof (value as {\n type?: unknown;\n }).type !== \"string\") {\n throw new Error(`OMP emitted an invalid event at line ${index + 1}`);\n }\n return value as PiAgentEventLike;\n });\n}\nfunction enrichOmpEvent(event: StreamEvent): StreamEvent {\n if (event.type !== \"operation.started\" || event.operation.kind !== \"tool\")\n return event;\n const tool = normalizeToolName(event.operation.name);\n return {\n ...event,\n operation: {\n ...event.operation,\n tool,\n command: tool === \"shell\"\n ? opaqueCommandProjection(\"unsupported-protocol\")\n : notCommandProjection(),\n },\n };\n}\n/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */\n// @concord-code ne-adapter-omp-agent\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/omp/README.md\nexport function ompAgent(config?: OmpConfig): Agent {\n const version = config?.version ?? DEFAULT_OMP_CLI_VERSION;\n const bunVersion = config?.bunVersion ?? DEFAULT_BUN_VERSION;\n const ompInstall = createNpmCliInstaller({\n identity: { agent: \"omp\", version, revision: String(AGENT_BASELINE_RECIPE_REVISION.omp) },\n packageName: \"@oh-my-pi/pi-coding-agent\",\n bin: \"omp\",\n });\n const bunInstall = createNpmCliInstaller({\n identity: { agent: \"bun\", version: bunVersion, revision: \"1\" },\n packageName: \"bun\",\n bin: \"bun\",\n platformPackage: (platform) => bunPlatformPackage(bunVersion, platform),\n });\n const configDirs = new Map<string, string>();\n return makeSandboxAgent({\n name: \"omp\",\n evidenceCoverage: OMP_EVIDENCE_COVERAGE,\n ensure: [bunInstall.ensure, ompInstall.ensure],\n installers: [bunInstall.installer, ompInstall.installer],\n setup: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n const homeResult = await sb.runShell('test -n \"$HOME\" && printf \"%s\" \"$HOME\"');\n const home = homeResult.stdout.trim();\n if (homeResult.exitCode !== 0 || !home.startsWith(\"/\")) {\n throw new Error(\"OMP setup requires an absolute sandbox HOME directory\");\n }\n const dir = `${home}/.niceeval-omp`;\n configDirs.set(sb.sandboxId, dir);\n const baseUrl = resolveBaseUrl(config);\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const models = {\n providers: {\n [COMPAT_PROVIDER]: {\n ...(baseUrl ? { baseUrl } : {}),\n api: \"openai-completions\",\n apiKey: API_KEY_ENV,\n models: [{ id: model, name: model, contextWindow: 1000000, maxTokens: 64000 }],\n },\n },\n };\n await shared.writeFile(sb, `${dir}/models.yml`, JSON.stringify(models, null, 2));\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const ompBin = yield* resolveAgentBinEffect(ctx.sandbox, \"omp\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const apiKey = resolveApiKey(config);\n const dir = configDirs.get(ctx.sandbox.sandboxId);\n if (!dir)\n throw new Error(\"OMP setup state is unavailable\");\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const env: globalThis.Record<string, string> = {\n [API_KEY_ENV]: apiKey,\n PI_CODING_AGENT_DIR: dir,\n ...ctx.telemetry?.env,\n };\n const args = [\n \"--print\",\n \"--mode\", \"json\",\n \"--model\", `${COMPAT_PROVIDER}/${model}`,\n \"--approval-mode\", \"yolo\",\n \"--no-pty\",\n \"--no-title\",\n input.text,\n ];\n const res = await ctx.sandbox.runCommand(ompBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n let nativeEvents: PiAgentEventLike[];\n try {\n nativeEvents = parseJsonl(res.stdout);\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: cause instanceof Error ? cause.message : \"OMP transcript could not be parsed\",\n process: res,\n });\n }\n const stream = createPiAgentEventStream();\n const events: StreamEvent[] = nativeEvents.flatMap((event) => stream.add(event)).map(enrichOmpEvent);\n const terminal = nativeEvents.filter((event) => event.type === \"agent_end\" &&\n (event as {\n isTerminal?: unknown;\n }).isTerminal !== false &&\n Array.isArray((event as {\n messages?: unknown;\n }).messages));\n if (res.exitCode !== 0 || terminal.length !== 1) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: res.exitCode !== 0\n ? shared.diagnoseFailure(res, events, res.stdout)\n : `OMP produced ${terminal.length} valid terminal agent_end events; expected exactly one.`,\n events,\n usage: stream.usage,\n process: res,\n });\n }\n return {\n events,\n usage: stream.usage,\n status: stream.failed ? \"failed\" as const : \"completed\" as const,\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default ompAgent;\n"]}
|
|
1
|
+
{"version":3,"file":"omp.js","sourceRoot":"","sources":["omp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { makeSandboxAgent } from \"../define.ts\";\nimport { getEnv, requireEnv } from \"../util.ts\";\nimport type { Agent, EvidenceCoverage, StreamEvent } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shared } from \"./shared.ts\";\nimport { createPiAgentEventStream, type PiAgentEventLike } from \"./sdk-streams.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { AGENT_BASELINE_RECIPE_REVISION, DEFAULT_BUN_VERSION, DEFAULT_OMP_CLI_VERSION, } from \"./coding-cli-versions.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nconst COMPAT_PROVIDER = \"niceeval-compat\";\nconst API_KEY_ENV = \"NICEEVAL_OMP_API_KEY\";\nconst OMP_EVIDENCE_COVERAGE: EvidenceCoverage = {\n events: { status: \"complete\" },\n actions: { status: \"complete\" },\n messages: { status: \"complete\" },\n usage: { status: \"complete\" },\n status: { status: \"complete\" },\n data: { status: \"unavailable\", reason: \"OMP print mode does not expose a separate Turn.data value.\" },\n};\nexport interface OmpConfig {\n /** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */\n apiKey?: string;\n /** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */\n baseUrl?: string;\n /** Exact npm version of `@oh-my-pi/pi-coding-agent`. */\n version?: string;\n /** Exact Bun runtime version used by the fallback installer. */\n bunVersion?: string;\n}\nfunction resolveApiKey(config?: OmpConfig): string {\n return config?.apiKey ?? getEnv(\"OMP_API_KEY\") ?? requireEnv(\"OPENAI_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OmpConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OMP_BASE_URL\") ?? getEnv(\"OPENAI_BASE_URL\");\n}\nfunction bunPlatformPackage(version: string, platform: AgentArtifactPlatform): {\n spec: string;\n binPath: string;\n} | undefined {\n if (platform.os === \"linux\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n const musl = platform.libc === \"musl\" ? \"-musl\" : \"\";\n return { spec: `@oven/bun-linux-${arch}${musl}@${version}`, binPath: \"bin/bun\" };\n }\n if (platform.os === \"darwin\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n return { spec: `@oven/bun-darwin-${arch}@${version}`, binPath: \"bin/bun\" };\n }\n return undefined;\n}\nfunction parseJsonl(raw: string): PiAgentEventLike[] {\n return raw.split(/\\r?\\n/).filter((line) => line.trim()).map((line, index) => {\n let value: unknown;\n try {\n value = JSON.parse(line);\n }\n catch (cause) {\n throw new Error(`OMP emitted invalid JSONL at line ${index + 1}`, { cause });\n }\n if (typeof value !== \"object\" || value === null || typeof (value as {\n type?: unknown;\n }).type !== \"string\") {\n throw new Error(`OMP emitted an invalid event at line ${index + 1}`);\n }\n return value as PiAgentEventLike;\n });\n}\nfunction enrichOmpEvent(event: StreamEvent): StreamEvent {\n if (event.type !== \"operation.started\" || event.operation.kind !== \"tool\")\n return event;\n const tool = normalizeToolName(event.operation.name);\n return {\n ...event,\n operation: {\n ...event.operation,\n tool,\n command: tool === \"shell\"\n ? opaqueCommandProjection(\"unsupported-protocol\")\n : notCommandProjection(),\n },\n };\n}\n/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */\n// @concord-code\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/omp/README.md\nexport function ompAgent(config?: OmpConfig): Agent {\n const version = config?.version ?? DEFAULT_OMP_CLI_VERSION;\n const bunVersion = config?.bunVersion ?? DEFAULT_BUN_VERSION;\n const ompInstall = createNpmCliInstaller({\n identity: { agent: \"omp\", version, revision: String(AGENT_BASELINE_RECIPE_REVISION.omp) },\n packageName: \"@oh-my-pi/pi-coding-agent\",\n bin: \"omp\",\n });\n const bunInstall = createNpmCliInstaller({\n identity: { agent: \"bun\", version: bunVersion, revision: \"1\" },\n packageName: \"bun\",\n bin: \"bun\",\n platformPackage: (platform) => bunPlatformPackage(bunVersion, platform),\n });\n const configDirs = new Map<string, string>();\n return makeSandboxAgent({\n name: \"omp\",\n evidenceCoverage: OMP_EVIDENCE_COVERAGE,\n ensure: [bunInstall.ensure, ompInstall.ensure],\n installers: [bunInstall.installer, ompInstall.installer],\n before: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n const homeResult = await sb.runShell('test -n \"$HOME\" && printf \"%s\" \"$HOME\"');\n const home = homeResult.stdout.trim();\n if (homeResult.exitCode !== 0 || !home.startsWith(\"/\")) {\n throw new Error(\"OMP setup requires an absolute sandbox HOME directory\");\n }\n const dir = `${home}/.niceeval-omp`;\n configDirs.set(sb.sandboxId, dir);\n const baseUrl = resolveBaseUrl(config);\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const models = {\n providers: {\n [COMPAT_PROVIDER]: {\n ...(baseUrl ? { baseUrl } : {}),\n api: \"openai-completions\",\n apiKey: API_KEY_ENV,\n models: [{ id: model, name: model, contextWindow: 1000000, maxTokens: 64000 }],\n },\n },\n };\n await shared.writeFile(sb, `${dir}/models.yml`, JSON.stringify(models, null, 2));\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const ompBin = yield* resolveAgentBinEffect(ctx.sandbox, \"omp\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const apiKey = resolveApiKey(config);\n const dir = configDirs.get(ctx.sandbox.sandboxId);\n if (!dir)\n throw new Error(\"OMP setup state is unavailable\");\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const env: globalThis.Record<string, string> = {\n [API_KEY_ENV]: apiKey,\n PI_CODING_AGENT_DIR: dir,\n ...ctx.telemetry?.env,\n };\n const args = [\n \"--print\",\n \"--mode\", \"json\",\n \"--model\", `${COMPAT_PROVIDER}/${model}`,\n \"--approval-mode\", \"yolo\",\n \"--no-pty\",\n \"--no-title\",\n input.text,\n ];\n const res = await ctx.sandbox.runCommand(ompBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n let nativeEvents: PiAgentEventLike[];\n try {\n nativeEvents = parseJsonl(res.stdout);\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: cause instanceof Error ? cause.message : \"OMP transcript could not be parsed\",\n process: res,\n });\n }\n const stream = createPiAgentEventStream();\n const events: StreamEvent[] = nativeEvents.flatMap((event) => stream.add(event)).map(enrichOmpEvent);\n const terminal = nativeEvents.filter((event) => event.type === \"agent_end\" &&\n (event as {\n isTerminal?: unknown;\n }).isTerminal !== false &&\n Array.isArray((event as {\n messages?: unknown;\n }).messages));\n if (res.exitCode !== 0 || terminal.length !== 1) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: res.exitCode !== 0\n ? shared.diagnoseFailure(res, events, res.stdout)\n : `OMP produced ${terminal.length} valid terminal agent_end events; expected exactly one.`,\n events,\n usage: stream.usage,\n process: res,\n });\n }\n return {\n events,\n usage: stream.usage,\n status: stream.failed ? \"failed\" as const : \"completed\" as const,\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default ompAgent;\n"]}
|
|
@@ -74,7 +74,7 @@ function chatCompletionUsage(usage) {
|
|
|
74
74
|
* Chat Completions 形状的响应 → `Turn`。零映射:`res.choices[0].message` 的
|
|
75
75
|
* `tool_calls` / `content` 直接变成 `operation.started` / `message`,`usage` 顺手带上。
|
|
76
76
|
*/
|
|
77
|
-
// @concord-code
|
|
77
|
+
// @concord-code
|
|
78
78
|
// @concord-implements docs/feature/adapters/library/streaming.md
|
|
79
79
|
// @concord-implements docs/feature/adapters/sdk/openai-compat/README.md
|
|
80
80
|
function turnFromChatCompletion(res) {
|
|
@@ -135,7 +135,7 @@ function responsesUsage(usage) {
|
|
|
135
135
|
* Responses 形状的响应 → `Turn`。零映射:`res.output` 逐项翻译——
|
|
136
136
|
* `message`(`content` 里的 `output_text`)变成 `message`,`function_call` 变成 `operation.started`。
|
|
137
137
|
*/
|
|
138
|
-
// @concord-code
|
|
138
|
+
// @concord-code
|
|
139
139
|
// @concord-implements docs/feature/adapters/library/streaming.md
|
|
140
140
|
// @concord-implements docs/feature/adapters/sdk/openai-compat/README.md
|
|
141
141
|
function turnFromResponses(res) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["openai-compat.ts"],"names":[],"mappings":"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","sourcesContent":["// OpenAI 两种响应形状(Chat Completions / Responses)的官方转换器 —— 写 send 指南「零映射」\n// 表格里的 turnFromChatCompletion(res) / turnFromResponses(res)。和 turnFromAiSdk 同一先例:结构化\n// *Like 类型,不依赖 openai 包,兼容任何声明自己走这两种协议形状的服务(不止 OpenAI 官方)。\n//\n// 两种形状对负断言的可信度不同:Chat Completions 可能只给最终消息,Responses.output\n// 则完整列出本轮 function_call。下列六通道 EvidenceCoverage 常量把差异交给 core 的\n// 三值逻辑;转换器在单轮缺 usage 时再据实降级该通道。\nimport type { EvidenceCoverage, JsonValue, StreamEvent, Turn, Usage } from \"../types.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nconst COMPLETE = Object.freeze({ status: \"complete\" as const });\nconst NO_DATA = Object.freeze({ status: \"unavailable\" as const, reason: \"OpenAI response conversion does not populate Turn.data.\" });\nexport const chatCompletionEvidenceCoverage: EvidenceCoverage = Object.freeze({\n events: Object.freeze({\n status: \"partial\",\n reason: \"Chat Completions may expose only the final response, not a server-side tool loop.\",\n }),\n actions: Object.freeze({\n status: \"partial\",\n reason: \"Chat Completions cannot prove that no hidden server-side tool action occurred.\",\n }),\n messages: COMPLETE,\n usage: COMPLETE,\n status: COMPLETE,\n data: NO_DATA,\n});\nexport const responsesEvidenceCoverage: EvidenceCoverage = Object.freeze({\n events: Object.freeze({\n status: \"partial\",\n reason: \"Unknown Responses output item types are intentionally skipped by the protocol-neutral converter.\",\n }),\n actions: Object.freeze({\n status: \"partial\",\n reason: \"Unknown Responses output item types are intentionally skipped by the protocol-neutral converter.\",\n }),\n messages: COMPLETE,\n usage: COMPLETE,\n status: COMPLETE,\n data: NO_DATA,\n});\nfunction turnCoverage(events: readonly StreamEvent[], usage: Usage | undefined): Turn[\"evidenceCoverage\"] {\n const actionCoverage = unclassifiedToolActionsCoverage(events);\n if (usage)\n return actionCoverage;\n return {\n ...actionCoverage,\n usage: { status: \"unavailable\", reason: \"This response did not include protocol usage.\" },\n };\n}\n/** function tool `arguments` 是 JSON 字符串;解析失败时原样保留,不吞输入。 */\nfunction parseArgs(raw: string | undefined): JsonValue {\n if (!raw)\n return {};\n try {\n return JSON.parse(raw) as JsonValue;\n }\n catch {\n return raw;\n }\n}\n// ───────────────────────── Chat Completions ─────────────────────────\nexport interface ChatCompletionFunctionToolCallLike {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\nexport interface ChatCompletionCustomToolCallLike {\n id: string;\n type: \"custom\";\n custom: {\n name: string;\n input: string;\n };\n}\n/** Extensible fallback; unknown future tool-call variants are ignored. */\nexport interface ChatCompletionUnknownToolCallLike {\n id?: string;\n type: string;\n}\nexport type ChatCompletionToolCallLike = ChatCompletionFunctionToolCallLike | ChatCompletionCustomToolCallLike | ChatCompletionUnknownToolCallLike;\nexport interface ChatCompletionMessageLike {\n role?: string;\n content?: string | null;\n tool_calls?: readonly ChatCompletionToolCallLike[];\n}\nexport interface ChatCompletionUsageLike {\n prompt_tokens?: number;\n completion_tokens?: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n /** 推理模型(o-series 等)经 Chat Completions 端点也会带回这项,拆自 completion_tokens。 */\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\nexport interface ChatCompletionLike {\n choices: {\n message: ChatCompletionMessageLike;\n }[];\n usage?: ChatCompletionUsageLike;\n}\nfunction chatCompletionUsage(usage: ChatCompletionUsageLike | undefined): Usage | undefined {\n if (!usage)\n return undefined;\n // prompt_tokens 含缓存命中,cached_tokens 是其子集;落互斥桶前扣掉\n // (docs/feature/adapters/sdk/openai-compat/cost.md)\n const cached = usage.prompt_tokens_details?.cached_tokens ?? 0;\n const u: Usage = {\n inputTokens: Math.max(0, (usage.prompt_tokens ?? 0) - cached),\n outputTokens: usage.completion_tokens ?? 0,\n };\n if (cached)\n u.cacheReadTokens = cached;\n if (usage.completion_tokens_details?.reasoning_tokens)\n u.reasoningTokens = usage.completion_tokens_details.reasoning_tokens;\n return u;\n}\n/**\n * Chat Completions 形状的响应 → `Turn`。零映射:`res.choices[0].message` 的\n * `tool_calls` / `content` 直接变成 `operation.started` / `message`,`usage` 顺手带上。\n */\n// @concord-code ne-adapter-openai-chat-turn\n// @concord-implements docs/feature/adapters/library/streaming.md\n// @concord-implements docs/feature/adapters/sdk/openai-compat/README.md\nexport function turnFromChatCompletion(res: ChatCompletionLike): Turn {\n const message = res.choices[0]?.message;\n const events: StreamEvent[] = [];\n for (const call of message?.tool_calls ?? []) {\n if (call.type === \"function\" && \"function\" in call) {\n events.push({\n type: \"operation.started\",\n operationId: call.id,\n operation: { kind: \"tool\", name: call.function.name, input: parseArgs(call.function.arguments) },\n });\n }\n else if (call.type === \"custom\" && \"custom\" in call) {\n events.push({\n type: \"operation.started\",\n operationId: call.id,\n operation: { kind: \"tool\", name: call.custom.name, input: call.custom.input },\n });\n }\n }\n if (message?.content)\n events.push({ type: \"message\", role: \"assistant\", text: message.content });\n const usage = chatCompletionUsage(res.usage);\n const evidenceCoverage = turnCoverage(events, usage);\n return { events, status: \"completed\", usage, ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }) };\n}\n// ───────────────────────── Responses ─────────────────────────\nexport interface ResponseOutputTextLike {\n type: \"output_text\";\n text: string;\n}\nexport interface ResponseMessageItemLike {\n type: \"message\";\n content?: readonly unknown[];\n}\nexport interface ResponseFunctionCallItemLike {\n type: \"function_call\";\n call_id: string;\n name: string;\n arguments: string;\n}\nexport type ResponseOutputItemLike = ResponseMessageItemLike | ResponseFunctionCallItemLike;\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction isMessageItem(item: unknown): item is ResponseMessageItemLike {\n return isRecord(item) && item.type === \"message\";\n}\nfunction isFunctionCallItem(item: unknown): item is ResponseFunctionCallItemLike {\n return (isRecord(item) &&\n item.type === \"function_call\" &&\n typeof item.call_id === \"string\" &&\n typeof item.name === \"string\" &&\n typeof item.arguments === \"string\");\n}\nexport interface ResponseUsageLike {\n input_tokens?: number;\n output_tokens?: number;\n input_tokens_details?: {\n cached_tokens?: number;\n };\n /** 推理模型经 Responses 端点带回的思考 token 拆分,拆自 output_tokens。 */\n output_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\nexport interface ResponseLike {\n /** Full official Responses output union; recognized items are narrowed at runtime. */\n output: readonly unknown[];\n usage?: ResponseUsageLike;\n}\nfunction responsesUsage(usage: ResponseUsageLike | undefined): Usage | undefined {\n if (!usage)\n return undefined;\n // input_tokens 含缓存命中,cached_tokens 是其子集;落互斥桶前扣掉\n // (docs/feature/adapters/sdk/openai-compat/cost.md)\n const cached = usage.input_tokens_details?.cached_tokens ?? 0;\n const u: Usage = {\n inputTokens: Math.max(0, (usage.input_tokens ?? 0) - cached),\n outputTokens: usage.output_tokens ?? 0,\n };\n if (cached)\n u.cacheReadTokens = cached;\n if (usage.output_tokens_details?.reasoning_tokens)\n u.reasoningTokens = usage.output_tokens_details.reasoning_tokens;\n return u;\n}\n/**\n * Responses 形状的响应 → `Turn`。零映射:`res.output` 逐项翻译——\n * `message`(`content` 里的 `output_text`)变成 `message`,`function_call` 变成 `operation.started`。\n */\n// @concord-code ne-adapter-openai-responses-turn\n// @concord-implements docs/feature/adapters/library/streaming.md\n// @concord-implements docs/feature/adapters/sdk/openai-compat/README.md\nexport function turnFromResponses(res: ResponseLike): Turn {\n const events: StreamEvent[] = [];\n for (const item of res.output ?? []) {\n if (isMessageItem(item)) {\n const text = (item.content ?? [])\n .filter((content): content is ResponseOutputTextLike => isRecord(content) && content.type === \"output_text\" && typeof content.text === \"string\")\n .map((c) => c.text)\n .join(\"\");\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n }\n else if (isFunctionCallItem(item)) {\n events.push({\n type: \"operation.started\",\n operationId: item.call_id,\n operation: { kind: \"tool\", name: item.name, input: parseArgs(item.arguments) },\n });\n }\n }\n const usage = responsesUsage(res.usage);\n const evidenceCoverage = turnCoverage(events, usage);\n return { events, status: \"completed\", usage, ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }) };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["openai-compat.ts"],"names":[],"mappings":"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","sourcesContent":["// OpenAI 两种响应形状(Chat Completions / Responses)的官方转换器 —— 写 send 指南「零映射」\n// 表格里的 turnFromChatCompletion(res) / turnFromResponses(res)。和 turnFromAiSdk 同一先例:结构化\n// *Like 类型,不依赖 openai 包,兼容任何声明自己走这两种协议形状的服务(不止 OpenAI 官方)。\n//\n// 两种形状对负断言的可信度不同:Chat Completions 可能只给最终消息,Responses.output\n// 则完整列出本轮 function_call。下列六通道 EvidenceCoverage 常量把差异交给 core 的\n// 三值逻辑;转换器在单轮缺 usage 时再据实降级该通道。\nimport type { EvidenceCoverage, JsonValue, StreamEvent, Turn, Usage } from \"../types.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nconst COMPLETE = Object.freeze({ status: \"complete\" as const });\nconst NO_DATA = Object.freeze({ status: \"unavailable\" as const, reason: \"OpenAI response conversion does not populate Turn.data.\" });\nexport const chatCompletionEvidenceCoverage: EvidenceCoverage = Object.freeze({\n events: Object.freeze({\n status: \"partial\",\n reason: \"Chat Completions may expose only the final response, not a server-side tool loop.\",\n }),\n actions: Object.freeze({\n status: \"partial\",\n reason: \"Chat Completions cannot prove that no hidden server-side tool action occurred.\",\n }),\n messages: COMPLETE,\n usage: COMPLETE,\n status: COMPLETE,\n data: NO_DATA,\n});\nexport const responsesEvidenceCoverage: EvidenceCoverage = Object.freeze({\n events: Object.freeze({\n status: \"partial\",\n reason: \"Unknown Responses output item types are intentionally skipped by the protocol-neutral converter.\",\n }),\n actions: Object.freeze({\n status: \"partial\",\n reason: \"Unknown Responses output item types are intentionally skipped by the protocol-neutral converter.\",\n }),\n messages: COMPLETE,\n usage: COMPLETE,\n status: COMPLETE,\n data: NO_DATA,\n});\nfunction turnCoverage(events: readonly StreamEvent[], usage: Usage | undefined): Turn[\"evidenceCoverage\"] {\n const actionCoverage = unclassifiedToolActionsCoverage(events);\n if (usage)\n return actionCoverage;\n return {\n ...actionCoverage,\n usage: { status: \"unavailable\", reason: \"This response did not include protocol usage.\" },\n };\n}\n/** function tool `arguments` 是 JSON 字符串;解析失败时原样保留,不吞输入。 */\nfunction parseArgs(raw: string | undefined): JsonValue {\n if (!raw)\n return {};\n try {\n return JSON.parse(raw) as JsonValue;\n }\n catch {\n return raw;\n }\n}\n// ───────────────────────── Chat Completions ─────────────────────────\nexport interface ChatCompletionFunctionToolCallLike {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\nexport interface ChatCompletionCustomToolCallLike {\n id: string;\n type: \"custom\";\n custom: {\n name: string;\n input: string;\n };\n}\n/** Extensible fallback; unknown future tool-call variants are ignored. */\nexport interface ChatCompletionUnknownToolCallLike {\n id?: string;\n type: string;\n}\nexport type ChatCompletionToolCallLike = ChatCompletionFunctionToolCallLike | ChatCompletionCustomToolCallLike | ChatCompletionUnknownToolCallLike;\nexport interface ChatCompletionMessageLike {\n role?: string;\n content?: string | null;\n tool_calls?: readonly ChatCompletionToolCallLike[];\n}\nexport interface ChatCompletionUsageLike {\n prompt_tokens?: number;\n completion_tokens?: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n /** 推理模型(o-series 等)经 Chat Completions 端点也会带回这项,拆自 completion_tokens。 */\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\nexport interface ChatCompletionLike {\n choices: {\n message: ChatCompletionMessageLike;\n }[];\n usage?: ChatCompletionUsageLike;\n}\nfunction chatCompletionUsage(usage: ChatCompletionUsageLike | undefined): Usage | undefined {\n if (!usage)\n return undefined;\n // prompt_tokens 含缓存命中,cached_tokens 是其子集;落互斥桶前扣掉\n // (docs/feature/adapters/sdk/openai-compat/cost.md)\n const cached = usage.prompt_tokens_details?.cached_tokens ?? 0;\n const u: Usage = {\n inputTokens: Math.max(0, (usage.prompt_tokens ?? 0) - cached),\n outputTokens: usage.completion_tokens ?? 0,\n };\n if (cached)\n u.cacheReadTokens = cached;\n if (usage.completion_tokens_details?.reasoning_tokens)\n u.reasoningTokens = usage.completion_tokens_details.reasoning_tokens;\n return u;\n}\n/**\n * Chat Completions 形状的响应 → `Turn`。零映射:`res.choices[0].message` 的\n * `tool_calls` / `content` 直接变成 `operation.started` / `message`,`usage` 顺手带上。\n */\n// @concord-code\n// @concord-implements docs/feature/adapters/library/streaming.md\n// @concord-implements docs/feature/adapters/sdk/openai-compat/README.md\nexport function turnFromChatCompletion(res: ChatCompletionLike): Turn {\n const message = res.choices[0]?.message;\n const events: StreamEvent[] = [];\n for (const call of message?.tool_calls ?? []) {\n if (call.type === \"function\" && \"function\" in call) {\n events.push({\n type: \"operation.started\",\n operationId: call.id,\n operation: { kind: \"tool\", name: call.function.name, input: parseArgs(call.function.arguments) },\n });\n }\n else if (call.type === \"custom\" && \"custom\" in call) {\n events.push({\n type: \"operation.started\",\n operationId: call.id,\n operation: { kind: \"tool\", name: call.custom.name, input: call.custom.input },\n });\n }\n }\n if (message?.content)\n events.push({ type: \"message\", role: \"assistant\", text: message.content });\n const usage = chatCompletionUsage(res.usage);\n const evidenceCoverage = turnCoverage(events, usage);\n return { events, status: \"completed\", usage, ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }) };\n}\n// ───────────────────────── Responses ─────────────────────────\nexport interface ResponseOutputTextLike {\n type: \"output_text\";\n text: string;\n}\nexport interface ResponseMessageItemLike {\n type: \"message\";\n content?: readonly unknown[];\n}\nexport interface ResponseFunctionCallItemLike {\n type: \"function_call\";\n call_id: string;\n name: string;\n arguments: string;\n}\nexport type ResponseOutputItemLike = ResponseMessageItemLike | ResponseFunctionCallItemLike;\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction isMessageItem(item: unknown): item is ResponseMessageItemLike {\n return isRecord(item) && item.type === \"message\";\n}\nfunction isFunctionCallItem(item: unknown): item is ResponseFunctionCallItemLike {\n return (isRecord(item) &&\n item.type === \"function_call\" &&\n typeof item.call_id === \"string\" &&\n typeof item.name === \"string\" &&\n typeof item.arguments === \"string\");\n}\nexport interface ResponseUsageLike {\n input_tokens?: number;\n output_tokens?: number;\n input_tokens_details?: {\n cached_tokens?: number;\n };\n /** 推理模型经 Responses 端点带回的思考 token 拆分,拆自 output_tokens。 */\n output_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\nexport interface ResponseLike {\n /** Full official Responses output union; recognized items are narrowed at runtime. */\n output: readonly unknown[];\n usage?: ResponseUsageLike;\n}\nfunction responsesUsage(usage: ResponseUsageLike | undefined): Usage | undefined {\n if (!usage)\n return undefined;\n // input_tokens 含缓存命中,cached_tokens 是其子集;落互斥桶前扣掉\n // (docs/feature/adapters/sdk/openai-compat/cost.md)\n const cached = usage.input_tokens_details?.cached_tokens ?? 0;\n const u: Usage = {\n inputTokens: Math.max(0, (usage.input_tokens ?? 0) - cached),\n outputTokens: usage.output_tokens ?? 0,\n };\n if (cached)\n u.cacheReadTokens = cached;\n if (usage.output_tokens_details?.reasoning_tokens)\n u.reasoningTokens = usage.output_tokens_details.reasoning_tokens;\n return u;\n}\n/**\n * Responses 形状的响应 → `Turn`。零映射:`res.output` 逐项翻译——\n * `message`(`content` 里的 `output_text`)变成 `message`,`function_call` 变成 `operation.started`。\n */\n// @concord-code\n// @concord-implements docs/feature/adapters/library/streaming.md\n// @concord-implements docs/feature/adapters/sdk/openai-compat/README.md\nexport function turnFromResponses(res: ResponseLike): Turn {\n const events: StreamEvent[] = [];\n for (const item of res.output ?? []) {\n if (isMessageItem(item)) {\n const text = (item.content ?? [])\n .filter((content): content is ResponseOutputTextLike => isRecord(content) && content.type === \"output_text\" && typeof content.text === \"string\")\n .map((c) => c.text)\n .join(\"\");\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n }\n else if (isFunctionCallItem(item)) {\n events.push({\n type: \"operation.started\",\n operationId: item.call_id,\n operation: { kind: \"tool\", name: item.name, input: parseArgs(item.arguments) },\n });\n }\n }\n const usage = responsesUsage(res.usage);\n const evidenceCoverage = turnCoverage(events, usage);\n return { events, status: \"completed\", usage, ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }) };\n}\n"]}
|
package/dist/agents/openclaw.cjs
CHANGED
|
@@ -93,7 +93,7 @@ function resolveModelFlag(model, hasCompatBase) {
|
|
|
93
93
|
* 默认主会话——否则相邻 attempt 会静默共享历史),后续轮用 `ctx.session.id` resume;
|
|
94
94
|
* `t.newSession()` 后的新会话线自然拿到新 id,session 之间互相隔离。
|
|
95
95
|
*/
|
|
96
|
-
// @concord-code
|
|
96
|
+
// @concord-code
|
|
97
97
|
// @concord-implements docs/feature/adapters/README.md
|
|
98
98
|
// @concord-implements docs/feature/adapters/sdk/openclaw/README.md
|
|
99
99
|
function openClawAgent(config) {
|
|
@@ -127,7 +127,7 @@ function openClawAgent(config) {
|
|
|
127
127
|
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: "http/protobuf",
|
|
128
128
|
}),
|
|
129
129
|
},
|
|
130
|
-
|
|
130
|
+
before: (sb, ctx) => effect_1.Effect.tryPromise({
|
|
131
131
|
try: async () => {
|
|
132
132
|
const baseUrl = resolveBaseUrl(config);
|
|
133
133
|
if (baseUrl) {
|
|
@@ -182,7 +182,7 @@ function openClawAgent(config) {
|
|
|
182
182
|
await (0, skills_ts_1.appendProjectInstruction)(sb, (0, skills_ts_1.skillDiscoveryInstruction)(SKILL_DIR, (0, skills_ts_1.installedSkillNames)(manifest.skills)));
|
|
183
183
|
}
|
|
184
184
|
if (manifest.skills.length) {
|
|
185
|
-
ctx.
|
|
185
|
+
ctx.reportInstallation(manifest);
|
|
186
186
|
}
|
|
187
187
|
},
|
|
188
188
|
catch: (cause) => cause,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["openclaw.ts"],"names":[],"mappings":";;AAmHA,sCAmMC;AAtTD,4CAAgD;AAChD,mCAAgC;AAChC,wCAAgD;AAChD,2CAAqC;AACrC,2CAAuH;AACvH,4DAA4D;AAC5D,yEAAgF;AAChF,6DAA4F;AAC5F,2DAAqE;AACrE,qEAAwG;AACxG,mDAA+E;AAC/E,6CAAyC;AAEzC,kEAAwF;AACxF,wDAA+C;AAC/C,kDAAiD;AAEjD,iEAAgH;AAChH,8EAA8E;AAC9E,iCAAiC;AACjC,EAAE;AACF,mEAAmE;AACnE,0DAA0D;AAC1D,0FAA0F;AAC1F,EAAE;AACF,oEAAoE;AACpE,qDAAqD;AACrD,sBAAsB;AACtB,8EAA8E;AAC9E,wEAAwE;AACxE,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,qDAAqD;AACrD,MAAM,eAAe,GAAG,QAAQ,CAAC;AAgBjC,SAAS,mBAAmB,CAAC,UAAkB,EAAE,OAAkC;IAI/E,MAAM,QAAQ,GAAG;QACb,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,aAAa,IAAA,6CAAsB,EAAC,OAAO,CAAC,EAAE;KAC3D,CAAC;IACF,MAAM,WAAW,GAAG,wDAAwD;QACxE,kBAAkB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gDAAgD;QACzF,yDAAyD;QACzD,qJAAqJ;QACrJ,mQAAmQ;QACnQ,mLAAmL;QACnL,oDAAoD;QACpD,mFAAmF;QACnF,uFAAuF;QACvF,uJAAuJ,CAAC;IAC5J,OAAO;QACH,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAA,mBAAK,EAAC,WAAW,IAAA,qBAAU,EAAC,WAAW,CAAC,EAAE,CAAC,EAAE;QACxE,SAAS,EAAE;YACP,QAAQ;YACR,WAAW,EAAE,iBAAiB;YAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;gBAChC,MAAM,QAAQ,GAAG,OAAO;qBACnB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,0CAA0C,IAAA,qBAAU,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;qBACpF,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChB,sEAAsE;gBACtE,oEAAoE;gBACpE,uDAAuD;gBACvD,MAAM,MAAM,GAAG;;+CAEgB,IAAA,qBAAU,EAAC,uJAAuJ,CAAC;;EAEhN,QAAQ,EAAE,CAAC;gBACG,MAAM,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;SACJ;KACJ,CAAC;AACN,CAAC;AACD,SAAS,aAAa,CAAC,MAAuB;IAC1C,OAAO,MAAM,EAAE,MAAM,IAAI,IAAA,gBAAM,EAAC,kBAAkB,CAAC,IAAI,IAAA,oBAAU,EAAC,mBAAmB,CAAC,CAAC;AAC3F,CAAC;AACD,SAAS,cAAc,CAAC,MAAuB;IAC3C,OAAO,MAAM,EAAE,OAAO,IAAI,IAAA,gBAAM,EAAC,mBAAmB,CAAC,CAAC;AAC1D,CAAC;AACD,mEAAmE;AACnE,SAAS,gBAAgB,CAAC,KAAyB,EAAE,aAAsB;IACvE,IAAI,CAAC,KAAK;QACN,OAAO,SAAS,CAAC;IACrB,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,OAAO,KAAK,CAAC;IACjB,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACjE,CAAC;AACD;;;;;;;;GAQG;AACH,0CAA0C;AAC1C,sDAAsD;AACtD,mEAAmE;AACnE,SAAgB,aAAa,CAAC,MAAuB;IACjD,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,qDAA4B,CAAC;IAChE,MAAM,OAAO,GAAG,IAAA,+CAAwB,EAAC,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC;IACnF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,qCAAqB,EAAC;QAChD,QAAQ,EAAE;YACN,KAAK,EAAE,UAAU;YACjB,OAAO;YACP,QAAQ,EAAE,MAAM,CAAC,uDAA8B,CAAC,QAAQ,CAAC;SAC5D;QACD,WAAW,EAAE,UAAU;QACvB,GAAG,EAAE,UAAU;KAClB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7F,OAAO,IAAA,4BAAgB,EAAC;QACpB,IAAI,EAAE,UAAU;QAChB,uDAAuD;QACvD,sDAAsD;QACtD,gBAAgB,EAAE,sCAAwB;QAC1C,iEAAiE;QACjE,wDAAwD;QACxD,UAAU,EAAE,8BAAe;QAC3B,MAAM,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;QACzE,UAAU,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC;QACxF,OAAO,EAAE;YACL,QAAQ,EAAE,eAAe;YACzB,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAChB,oBAAoB,EAAE,MAAM;gBAC5B,kCAAkC,EAAE,QAAQ;gBAC5C,kCAAkC,EAAE,eAAe;aACtD,CAAC;SACL;QACD,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,eAAM,CAAC,UAAU,CAAC;YAClC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACZ,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,OAAO,EAAE,CAAC;oBACV,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;oBACrC,iDAAiD;oBACjD,kDAAkD;oBAClD,uCAAuC;oBACvC,IAAI,gBAAgB,GAAuC,EAAE,CAAC;oBAC9D,IAAI,CAAC;wBACD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC;wBAC1E,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC;4BACvB,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACvD,CAAC;oBACD,MAAM,CAAC;wBACH,gBAAgB,GAAG,EAAE,CAAC;oBAC1B,CAAC;oBACD,MAAM,cAAc,GAAG;wBACnB,GAAG,gBAAgB;wBACnB,MAAM,EAAE;4BACJ,QAAQ,EAAE;gCACN,aAAa,EAAE,IAAI;gCACnB,SAAS,EAAE,EAAE,CAAC,OAAO;6BACxB;yBACJ;wBACD,MAAM,EAAE;4BACJ,IAAI,EAAE,OAAO;4BACb,SAAS,EAAE;gCACP,CAAC,eAAe,CAAC,EAAE;oCACf,OAAO;oCACP,MAAM;oCACN,GAAG,EAAE,oBAAoB;oCACzB,MAAM,EAAE;wCACJ,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE;wCAC5C,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE;wCACxC,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE;wCAC5C,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;qCACrC;iCACJ;6BACJ;yBACJ;qBACJ,CAAC;oBACF,MAAM,kBAAM,CAAC,SAAS,CAAC,EAAE,EAAE,2BAA2B,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,eAAe,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAChI,kCAAkC;oBAClC,MAAM,kBAAM,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,cAAc,EAAE,0CAA0C,CAAC,CAAC;oBACpG,MAAM,kBAAM,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,UAAU,EAAE,oCAAoC,CAAC,CAAC;oBAC1F,MAAM,kBAAM,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,UAAU,EAAE,uEAAuE,CAAC,CAAC;gBACjI,CAAC;gBACD,MAAM,QAAQ,GAAuB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;gBACpD,IAAI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;oBACzB,QAAQ,CAAC,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC7E,sBAAsB;oBACtB,MAAM,IAAA,oCAAwB,EAAC,EAAE,EAAE,IAAA,qCAAyB,EAAC,SAAS,EAAE,IAAA,+BAAmB,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnH,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACzB,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC9B,CAAC;YACL,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SAC1B,CAAC;QACF,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACtC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACvB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,IAAA,qCAAqB,EAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACjE,OAAO,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBAC5B,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBAClB,kDAAkD;oBAClD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,YAAY,EAAE,CAAC,SAAS,IAAI,IAAA,wBAAU,GAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC3F,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBAC/B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;oBACvC,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAChG,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC5D,IAAI,KAAK;wBACL,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBAChC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;oBACrC,MAAM,GAAG,GAAsC;wBAC3C,gBAAgB,EAAE,MAAM;wBACxB,iBAAiB,EAAE,MAAM;wBACzB,cAAc,EAAE,MAAM;wBACtB,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG;qBACxB,CAAC;oBACF,IAAI,OAAO,EAAE,CAAC;wBACV,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;wBAChC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC;oBAClC,CAAC;oBACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE;wBAC/C,GAAG;wBACH,eAAe,EAAE,CAAC,MAAM,CAAC;wBACzB,MAAM,EAAE,IAAI;wBACZ,MAAM;qBACT,CAAC,CAAC;oBACH,MAAM,OAAO,GAAG,IAAA,kCAAoB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACjD,6DAA6D;oBAC7D,qBAAqB;oBACrB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACvC,kCAAkC;oBAClC,qDAAqD;oBACrD,mDAAmD;oBACnD,+CAA+C;oBAC/C,IAAI,GAAuB,CAAC;oBAC5B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;wBACtB,IAAI,CAAC;4BACD,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;wBACjD,CAAC;wBACD,MAAM,CAAC;4BACH,GAAG,GAAG,SAAS,CAAC;wBACpB,CAAC;oBACL,CAAC;oBACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;wBACpB,GAAG,GAAG,MAAM,kBAAM,CAAC,kBAAkB,CAAC,EAAE,EAAE,oBAAoB,EAAE;4BAC5D,WAAW,EAAE,uBAAuB;yBACvC,CAAC,CAAC;oBACP,CAAC;oBACD,MAAM,MAAM,GAAG,IAAA,qCAAuB,EAAC,GAAG,CAAC,CAAC;oBAC5C,MAAM,MAAM,GAAkB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;oBACjD,qDAAqD;oBACrD,+CAA+C;oBAC/C,IAAI,oBAAsD,CAAC;oBAC3D,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAClD,MAAM,MAAM,GAAG,2EAA2E,CAAC;wBAC3F,oBAAoB,GAAG;4BACnB,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;4BACzC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;4BAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;yBAC3C,CAAC;wBACF,GAAG,CAAC,GAAG,CAAC,4GAA4G,CAAC,CAAC;wBACtH,IAAI,OAAO,CAAC,IAAI;4BACZ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;oBAChF,CAAC;yBACI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;wBAC5B,MAAM,MAAM,GAAG,2CAA2C,CAAC;wBAC3D,oBAAoB,GAAG;4BACnB,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;4BACrC,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;yBACzC,CAAC;oBACN,CAAC;yBACI,CAAC;wBACF,oBAAoB,GAAG,IAAA,uDAA+B,EAAC,MAAM,CAAC,CAAC;oBACnE,CAAC;oBACD,sDAAsD;oBACtD,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC;wBACrF,CAAC,CAAC,MAAM,CAAC,KAAK;wBACd,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;oBACtC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;wBACrB,MAAM,IAAA,kCAAe,EAAC;4BAClB,UAAU,EAAE,IAAA,2CAAwB,EAAC,MAAM,CAAC;4BAC5C,OAAO,EAAE,kBAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;4BACxD,MAAM;4BACN,KAAK;4BACL,OAAO,EAAE,GAAG;yBACf,CAAC,CAAC;oBACP,CAAC;oBACD,IAAI,OAAO,CAAC,MAAM;wBACd,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC7F,OAAO;wBACH,MAAM;wBACN,KAAK;wBACL,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,WAAoB;wBACjE,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC9E,CAAC;gBACN,CAAC;gBACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;aAC1B,CAAC,CAAC;QACP,CAAC,CAAC;KACL,CAAC,CAAC;AACP,CAAC;AACD,kBAAe,aAAa,EAAE,CAAC","sourcesContent":["import { makeSandboxAgent } from \"../define.ts\";\nimport { Effect } from \"effect\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapGenericSpans } from \"../o11y/otlp/canonical.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { parseOpenClawTranscript, parseOpenClawRunJson } from \"../o11y/parsers/openclaw.ts\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { DEFAULT_OPENCLAW_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Agent, AgentSetupManifest, SkillSpec, StreamEvent, TurnEvidenceCoverage } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shell } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport type { AgentEnsure, AgentInstaller } from \"./types.ts\";\nimport { exactNpmPluginRevision, normalizeExactNpmPlugins, type ExactNpmPlugin, } from \"./exact-npm-plugins.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// OpenClaw 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `openclaw agent --local --json`(嵌入式 agent 循环,不依赖\n// 长驻 gateway),读回结果封包 + session transcript → 标准事件流。方言解析全部住\n// src/o11y/parsers/openclaw.ts,不进 core(契约见 docs/feature/adapters/sdk/openclaw/README.md)。\n//\n// 行为轨优先级(collection.md):session transcript(完整工具轨迹)优先;transcript 拿不到\n// 时只保留 `--json` 封包的最终回复,不从最终文本猜工具行为——此时负断言不可信,send 会\n// 经 ctx.log 明确记录这个限制。\n// ───────────────────────────────────────────────────────────────────────────\n/** OpenClaw 的 skill 目录(`skills` 生态的「通用」目录);发现靠 AGENTS.md 指引,不依赖原生扫描。 */\nconst SKILL_DIR = \".agents/skills\";\n/** 自定义 OpenAI 兼容网关在 openclaw.json 里的 provider id。 */\nconst COMPAT_PROVIDER = \"compat\";\nexport interface OpenClawConfig {\n /** 模型 API key。省略时读 OPENCLAW_API_KEY,再回落 ANTHROPIC_API_KEY。 */\n apiKey?: string;\n /** OpenAI 兼容端点。省略时读 OPENCLAW_BASE_URL。 */\n baseUrl?: string;\n /** 固定安装的 openclaw npm 版本(如 \"1.2.3\");省略时用内置默认。 */\n version?: string;\n /**\n * 装进沙箱的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。\n */\n skills?: SkillSpec[];\n /** Native OpenClaw plugins as exact npm package@version declarations. */\n plugins?: readonly string[];\n}\nfunction openClawPluginLayer(cliVersion: string, plugins: readonly ExactNpmPlugin[]): {\n ensure: AgentEnsure;\n installer: AgentInstaller;\n} {\n const identity = {\n agent: \"openclaw-plugins\",\n version: cliVersion,\n revision: `umask-022:${exactNpmPluginRevision(plugins)}`,\n };\n const verifyFiles = `const fs=require(\"node:fs\"),path=require(\"node:path\");` +\n `const expected=${JSON.stringify(plugins)},base=path.join(process.env.HOME,\".openclaw\");` +\n `const projects=path.join(base,\"npm/projects\"),found=[];` +\n `for(const dir of fs.readdirSync(projects)){const root=path.join(projects,dir),p=JSON.parse(fs.readFileSync(path.join(root,\"package.json\"),\"utf8\"));` +\n `for(const [name,version] of Object.entries(p.dependencies||{})){const packageRoot=path.join(root,\"node_modules\",name);if(fs.statSync(packageRoot).mode&0o002)process.exit(1);const pkg=JSON.parse(fs.readFileSync(path.join(packageRoot,\"package.json\"),\"utf8\"));` +\n `const manifest=JSON.parse(fs.readFileSync(path.join(root,\"node_modules\",name,\"openclaw.plugin.json\"),\"utf8\"));found.push({name,version,pkgVersion:pkg.version,id:manifest.id});}}` +\n `if(found.length!==expected.length)process.exit(1);` +\n `const config=JSON.parse(fs.readFileSync(path.join(base,\"openclaw.json\"),\"utf8\"));` +\n `const ordered=expected.map(e=>found.find(x=>x.name===e.name&&x.version===e.version));` +\n `for(const x of ordered){if(!x||x.pkgVersion!==x.version||!config.plugins?.entries?.[x.id]?.enabled||!/^[A-Za-z0-9._-]+$/.test(x.id))process.exit(1);}`;\n return {\n ensure: { identity, probe: shell(`node -e ${shellQuote(verifyFiles)}`) },\n installer: {\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox, context) => {\n const installs = plugins\n .map((plugin) => `openclaw plugins install --force --pin ${shellQuote(plugin.spec)}`)\n .join(\"\\n\");\n // Docker exec can inherit umask 0000. OpenClaw refuses world-writable\n // plugin roots; use ordinary package permissions and let its native\n // installer replace a previously blocked installation.\n const script = `set -eu\numask 022\nids=$(openclaw plugins list --json | node -e ${shellQuote(`let s=\"\";process.stdin.on(\"data\",c=>s+=c).on(\"end\",()=>{const x=JSON.parse(s);for(const p of x.plugins||[])if(p.origin===\"global\")console.log(p.id)})`)})\nfor id in $ids; do openclaw plugins uninstall --force \"$id\"; done\n${installs}`;\n await sandbox.runShellOrThrow(script, { signal: context.signal });\n },\n },\n };\n}\nfunction resolveApiKey(config?: OpenClawConfig): string {\n return config?.apiKey ?? getEnv(\"OPENCLAW_API_KEY\") ?? requireEnv(\"ANTHROPIC_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OpenClawConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OPENCLAW_BASE_URL\");\n}\n/** experiment.model → `--model`。裸模型名在自定义网关下补成 `compat/<model>`。 */\nfunction resolveModelFlag(model: string | undefined, hasCompatBase: boolean): string | undefined {\n if (!model)\n return undefined;\n if (model.includes(\"/\"))\n return model;\n return hasCompatBase ? `${COMPAT_PROVIDER}/${model}` : model;\n}\n/**\n * OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、\n * `ctx.session` 存取器与 canonical OTel 通用 mapper(`mapGenericSpans`);OpenClaw 方言\n * (transcript / `agent --json` 字段)只住 `src/o11y/parsers/openclaw.ts`,不进 core。\n *\n * 会话契约:首轮显式发一个全新 session id 并 `ctx.session.capture()`(不依赖 OpenClaw 的\n * 默认主会话——否则相邻 attempt 会静默共享历史),后续轮用 `ctx.session.id` resume;\n * `t.newSession()` 后的新会话线自然拿到新 id,session 之间互相隔离。\n */\n// @concord-code ne-adapter-openclaw-agent\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/openclaw/README.md\nexport function openClawAgent(config?: OpenClawConfig): Agent {\n const version = config?.version ?? DEFAULT_OPENCLAW_CLI_VERSION;\n const plugins = normalizeExactNpmPlugins(config?.plugins, \"openClawAgent plugins\");\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"openclaw\",\n version,\n revision: String(AGENT_BASELINE_RECIPE_REVISION.openclaw),\n },\n packageName: \"openclaw\",\n bin: \"openclaw\",\n });\n const pluginLayer = plugins.length === 0 ? undefined : openClawPluginLayer(version, plugins);\n return makeSandboxAgent({\n name: \"openclaw\",\n // e2e 已用真实 CLI 证明 session transcript 能给出工具轨 / 消息 / 用量;\n // 采集失败的单轮仍会在 send 里把 coverage 降成 unavailable/partial。\n evidenceCoverage: completeEvidenceCoverage,\n // OpenClaw 没有专属 span 方言 mapper:原生 span 走 canonical 通用 heuristic。\n // OTel 内容采集关闭时只影响 trace 证据面;行为轨(下面的 transcript 解析)不受影响。\n spanMapper: mapGenericSpans,\n ensure: pluginLayer === undefined ? ensure : [ensure, pluginLayer.ensure],\n installers: pluginLayer === undefined ? [installer] : [installer, pluginLayer.installer],\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n OTEL_TRACES_EXPORTER: \"otlp\",\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 const baseUrl = resolveBaseUrl(config);\n if (baseUrl) {\n const apiKey = resolveApiKey(config);\n // OpenAI 兼容网关走自定义 provider + openai-completions;\n // skipBootstrap 跳过首轮身份仪式,否则 agent 会先问 \"Who am I\"。\n // workspace 钉沙箱工作目录,文件工具写到 eval 可见的路径。\n let persistentConfig: globalThis.Record<string, unknown> = {};\n try {\n const existing = await sb.runShell('cat \"$HOME/.openclaw/openclaw.json\"');\n if (existing.exitCode === 0)\n persistentConfig = JSON.parse(existing.stdout);\n }\n catch {\n persistentConfig = {};\n }\n const openclawConfig = {\n ...persistentConfig,\n agents: {\n defaults: {\n skipBootstrap: true,\n workspace: sb.workdir,\n },\n },\n models: {\n mode: \"merge\",\n providers: {\n [COMPAT_PROVIDER]: {\n baseUrl,\n apiKey,\n api: \"openai-completions\",\n models: [\n { id: \"gpt-5.6-luna\", name: \"gpt-5.6-luna\" },\n { id: \"gpt-6-luna\", name: \"gpt-6-luna\" },\n { id: \"gpt-5.4-mini\", name: \"gpt-5.4-mini\" },\n { id: \"gpt-5.4\", name: \"gpt-5.4\" },\n ],\n },\n },\n },\n };\n await shared.writeFile(sb, \"~/.openclaw/openclaw.json\", JSON.stringify(openclawConfig, null, 2), { sensitiveValues: [apiKey] });\n // 预置最小身份文件,避免缺 IDENTITY 时仍触发仪式文案。\n await shared.writeFile(sb, `${sb.workdir}/IDENTITY.md`, \"# Identity\\n\\nName: niceeval\\nEmoji: ✓\\n\");\n await shared.writeFile(sb, `${sb.workdir}/USER.md`, \"# User\\n\\nEval harness operator.\\n\");\n await shared.writeFile(sb, `${sb.workdir}/SOUL.md`, \"# Soul\\n\\nExecute the user's task directly. Do not ask who you are.\\n\");\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // 发现指引跟着一起写:不提示 = 白装。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (manifest.skills.length) {\n ctx.reportSetup(manifest);\n }\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const sb = ctx.sandbox;\n const openclawBin = yield* resolveAgentBinEffect(sb, \"openclaw\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n // 会话契约:新会话线显式发新 session id(隔离);后续轮 resume 记录的 id。\n const sessionId = ctx.session.id ?? `niceeval-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const baseUrl = resolveBaseUrl(config);\n const args = [\"agent\", \"--local\", \"--session-id\", sessionId, \"--message\", input.text, \"--json\"];\n const model = resolveModelFlag(ctx.model, Boolean(baseUrl));\n if (model)\n args.push(\"--model\", model);\n const apiKey = resolveApiKey(config);\n const env: globalThis.Record<string, string> = {\n OPENCLAW_API_KEY: apiKey,\n ANTHROPIC_API_KEY: apiKey,\n OPENAI_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n };\n if (baseUrl) {\n env.OPENCLAW_BASE_URL = baseUrl;\n env.OPENAI_BASE_URL = baseUrl;\n }\n const res = await sb.runCommand(openclawBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n const runJson = parseOpenClawRunJson(res.stdout);\n // 封包若带回服务端分配的 session key,后续轮以它为准(capture first-writer-wins,\n // 首轮已用自发 id 落地时不覆盖)。\n ctx.session.capture(runJson.sessionId);\n // 完整工具轨迹的唯一来源:session transcript。\n // 优先读封包给出的 sessionFile(精确);否则在 agents 目录取最新 *.jsonl,\n // 但排除同目录旁路产物 *.trajectory.jsonl(mtime 常更新、却不是消息轨——\n // 误读会导致 events 为空、整轮 coverage 降成 unavailable)。\n let raw: string | undefined;\n if (runJson.sessionFile) {\n try {\n raw = await sb.readText(runJson.sessionFile);\n }\n catch {\n raw = undefined;\n }\n }\n if (raw === undefined) {\n raw = await shared.captureLatestJsonl(sb, \"~/.openclaw/agents\", {\n excludeName: /\\.trajectory\\.jsonl$/i,\n });\n }\n const parsed = parseOpenClawTranscript(raw);\n const events: StreamEvent[] = [...parsed.events];\n // transcript 缺失 / 有解析不了的行:这一轮的工具轨迹不可信,coverage 降级说出来\n // (负断言由此落 unavailable,而不是在空流上假通过),不从最终文本猜工具行为。\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (raw === undefined || parsed.events.length === 0) {\n const reason = \"session transcript unavailable; only the --json final reply was collected\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n ctx.log(\"openclaw transcript unavailable: tool trajectory missing for this turn, negative assertions are unreliable\");\n if (runJson.text)\n events.push({ type: \"message\", role: \"assistant\", text: runJson.text });\n }\n else if (!parsed.parseSuccess) {\n const reason = \"some transcript 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 // 用量:transcript 逐消息累加优先;transcript 没报时用封包摘要,都没有就是空对象。\n const usage = (parsed.usage.inputTokens ?? 0) > 0 || (parsed.usage.outputTokens ?? 0) > 0\n ? parsed.usage\n : (runJson.usage ?? parsed.usage);\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage,\n process: res,\n });\n }\n if (runJson.failed)\n events.push({ type: \"error\", message: shared.diagnoseFailure(res, parsed.events, raw) });\n return {\n events,\n usage,\n status: runJson.failed ? \"failed\" as const : \"completed\" as const,\n ...(turnEvidenceCoverage ? { evidenceCoverage: turnEvidenceCoverage } : {}),\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default openClawAgent();\n"]}
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["openclaw.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeSandboxAgent } from \"../define.ts\";\nimport { Effect } from \"effect\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapGenericSpans } from \"../o11y/otlp/canonical.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { parseOpenClawTranscript, parseOpenClawRunJson } from \"../o11y/parsers/openclaw.ts\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { DEFAULT_OPENCLAW_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Agent, AgentInstallationManifest, SkillSpec, StreamEvent, TurnEvidenceCoverage } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shell } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport type { AgentEnsure, AgentInstaller } from \"./types.ts\";\nimport { exactNpmPluginRevision, normalizeExactNpmPlugins, type ExactNpmPlugin, } from \"./exact-npm-plugins.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// OpenClaw 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `openclaw agent --local --json`(嵌入式 agent 循环,不依赖\n// 长驻 gateway),读回结果封包 + session transcript → 标准事件流。方言解析全部住\n// src/o11y/parsers/openclaw.ts,不进 core(契约见 docs/feature/adapters/sdk/openclaw/README.md)。\n//\n// 行为轨优先级(collection.md):session transcript(完整工具轨迹)优先;transcript 拿不到\n// 时只保留 `--json` 封包的最终回复,不从最终文本猜工具行为——此时负断言不可信,send 会\n// 经 ctx.log 明确记录这个限制。\n// ───────────────────────────────────────────────────────────────────────────\n/** OpenClaw 的 skill 目录(`skills` 生态的「通用」目录);发现靠 AGENTS.md 指引,不依赖原生扫描。 */\nconst SKILL_DIR = \".agents/skills\";\n/** 自定义 OpenAI 兼容网关在 openclaw.json 里的 provider id。 */\nconst COMPAT_PROVIDER = \"compat\";\nexport interface OpenClawConfig {\n /** 模型 API key。省略时读 OPENCLAW_API_KEY,再回落 ANTHROPIC_API_KEY。 */\n apiKey?: string;\n /** OpenAI 兼容端点。省略时读 OPENCLAW_BASE_URL。 */\n baseUrl?: string;\n /** 固定安装的 openclaw npm 版本(如 \"1.2.3\");省略时用内置默认。 */\n version?: string;\n /**\n * 装进沙箱的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。\n */\n skills?: SkillSpec[];\n /** Native OpenClaw plugins as exact npm package@version declarations. */\n plugins?: readonly string[];\n}\nfunction openClawPluginLayer(cliVersion: string, plugins: readonly ExactNpmPlugin[]): {\n ensure: AgentEnsure;\n installer: AgentInstaller;\n} {\n const identity = {\n agent: \"openclaw-plugins\",\n version: cliVersion,\n revision: `umask-022:${exactNpmPluginRevision(plugins)}`,\n };\n const verifyFiles = `const fs=require(\"node:fs\"),path=require(\"node:path\");` +\n `const expected=${JSON.stringify(plugins)},base=path.join(process.env.HOME,\".openclaw\");` +\n `const projects=path.join(base,\"npm/projects\"),found=[];` +\n `for(const dir of fs.readdirSync(projects)){const root=path.join(projects,dir),p=JSON.parse(fs.readFileSync(path.join(root,\"package.json\"),\"utf8\"));` +\n `for(const [name,version] of Object.entries(p.dependencies||{})){const packageRoot=path.join(root,\"node_modules\",name);if(fs.statSync(packageRoot).mode&0o002)process.exit(1);const pkg=JSON.parse(fs.readFileSync(path.join(packageRoot,\"package.json\"),\"utf8\"));` +\n `const manifest=JSON.parse(fs.readFileSync(path.join(root,\"node_modules\",name,\"openclaw.plugin.json\"),\"utf8\"));found.push({name,version,pkgVersion:pkg.version,id:manifest.id});}}` +\n `if(found.length!==expected.length)process.exit(1);` +\n `const config=JSON.parse(fs.readFileSync(path.join(base,\"openclaw.json\"),\"utf8\"));` +\n `const ordered=expected.map(e=>found.find(x=>x.name===e.name&&x.version===e.version));` +\n `for(const x of ordered){if(!x||x.pkgVersion!==x.version||!config.plugins?.entries?.[x.id]?.enabled||!/^[A-Za-z0-9._-]+$/.test(x.id))process.exit(1);}`;\n return {\n ensure: { identity, probe: shell(`node -e ${shellQuote(verifyFiles)}`) },\n installer: {\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox, context) => {\n const installs = plugins\n .map((plugin) => `openclaw plugins install --force --pin ${shellQuote(plugin.spec)}`)\n .join(\"\\n\");\n // Docker exec can inherit umask 0000. OpenClaw refuses world-writable\n // plugin roots; use ordinary package permissions and let its native\n // installer replace a previously blocked installation.\n const script = `set -eu\numask 022\nids=$(openclaw plugins list --json | node -e ${shellQuote(`let s=\"\";process.stdin.on(\"data\",c=>s+=c).on(\"end\",()=>{const x=JSON.parse(s);for(const p of x.plugins||[])if(p.origin===\"global\")console.log(p.id)})`)})\nfor id in $ids; do openclaw plugins uninstall --force \"$id\"; done\n${installs}`;\n await sandbox.runShellOrThrow(script, { signal: context.signal });\n },\n },\n };\n}\nfunction resolveApiKey(config?: OpenClawConfig): string {\n return config?.apiKey ?? getEnv(\"OPENCLAW_API_KEY\") ?? requireEnv(\"ANTHROPIC_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OpenClawConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OPENCLAW_BASE_URL\");\n}\n/** experiment.model → `--model`。裸模型名在自定义网关下补成 `compat/<model>`。 */\nfunction resolveModelFlag(model: string | undefined, hasCompatBase: boolean): string | undefined {\n if (!model)\n return undefined;\n if (model.includes(\"/\"))\n return model;\n return hasCompatBase ? `${COMPAT_PROVIDER}/${model}` : model;\n}\n/**\n * OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、\n * `ctx.session` 存取器与 canonical OTel 通用 mapper(`mapGenericSpans`);OpenClaw 方言\n * (transcript / `agent --json` 字段)只住 `src/o11y/parsers/openclaw.ts`,不进 core。\n *\n * 会话契约:首轮显式发一个全新 session id 并 `ctx.session.capture()`(不依赖 OpenClaw 的\n * 默认主会话——否则相邻 attempt 会静默共享历史),后续轮用 `ctx.session.id` resume;\n * `t.newSession()` 后的新会话线自然拿到新 id,session 之间互相隔离。\n */\n// @concord-code\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/openclaw/README.md\nexport function openClawAgent(config?: OpenClawConfig): Agent {\n const version = config?.version ?? DEFAULT_OPENCLAW_CLI_VERSION;\n const plugins = normalizeExactNpmPlugins(config?.plugins, \"openClawAgent plugins\");\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"openclaw\",\n version,\n revision: String(AGENT_BASELINE_RECIPE_REVISION.openclaw),\n },\n packageName: \"openclaw\",\n bin: \"openclaw\",\n });\n const pluginLayer = plugins.length === 0 ? undefined : openClawPluginLayer(version, plugins);\n return makeSandboxAgent({\n name: \"openclaw\",\n // e2e 已用真实 CLI 证明 session transcript 能给出工具轨 / 消息 / 用量;\n // 采集失败的单轮仍会在 send 里把 coverage 降成 unavailable/partial。\n evidenceCoverage: completeEvidenceCoverage,\n // OpenClaw 没有专属 span 方言 mapper:原生 span 走 canonical 通用 heuristic。\n // OTel 内容采集关闭时只影响 trace 证据面;行为轨(下面的 transcript 解析)不受影响。\n spanMapper: mapGenericSpans,\n ensure: pluginLayer === undefined ? ensure : [ensure, pluginLayer.ensure],\n installers: pluginLayer === undefined ? [installer] : [installer, pluginLayer.installer],\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n OTEL_TRACES_EXPORTER: \"otlp\",\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 const baseUrl = resolveBaseUrl(config);\n if (baseUrl) {\n const apiKey = resolveApiKey(config);\n // OpenAI 兼容网关走自定义 provider + openai-completions;\n // skipBootstrap 跳过首轮身份仪式,否则 agent 会先问 \"Who am I\"。\n // workspace 钉沙箱工作目录,文件工具写到 eval 可见的路径。\n let persistentConfig: globalThis.Record<string, unknown> = {};\n try {\n const existing = await sb.runShell('cat \"$HOME/.openclaw/openclaw.json\"');\n if (existing.exitCode === 0)\n persistentConfig = JSON.parse(existing.stdout);\n }\n catch {\n persistentConfig = {};\n }\n const openclawConfig = {\n ...persistentConfig,\n agents: {\n defaults: {\n skipBootstrap: true,\n workspace: sb.workdir,\n },\n },\n models: {\n mode: \"merge\",\n providers: {\n [COMPAT_PROVIDER]: {\n baseUrl,\n apiKey,\n api: \"openai-completions\",\n models: [\n { id: \"gpt-5.6-luna\", name: \"gpt-5.6-luna\" },\n { id: \"gpt-6-luna\", name: \"gpt-6-luna\" },\n { id: \"gpt-5.4-mini\", name: \"gpt-5.4-mini\" },\n { id: \"gpt-5.4\", name: \"gpt-5.4\" },\n ],\n },\n },\n },\n };\n await shared.writeFile(sb, \"~/.openclaw/openclaw.json\", JSON.stringify(openclawConfig, null, 2), { sensitiveValues: [apiKey] });\n // 预置最小身份文件,避免缺 IDENTITY 时仍触发仪式文案。\n await shared.writeFile(sb, `${sb.workdir}/IDENTITY.md`, \"# Identity\\n\\nName: niceeval\\nEmoji: ✓\\n\");\n await shared.writeFile(sb, `${sb.workdir}/USER.md`, \"# User\\n\\nEval harness operator.\\n\");\n await shared.writeFile(sb, `${sb.workdir}/SOUL.md`, \"# Soul\\n\\nExecute the user's task directly. Do not ask who you are.\\n\");\n }\n const manifest: AgentInstallationManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // 发现指引跟着一起写:不提示 = 白装。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (manifest.skills.length) {\n ctx.reportInstallation(manifest);\n }\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const sb = ctx.sandbox;\n const openclawBin = yield* resolveAgentBinEffect(sb, \"openclaw\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n // 会话契约:新会话线显式发新 session id(隔离);后续轮 resume 记录的 id。\n const sessionId = ctx.session.id ?? `niceeval-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const baseUrl = resolveBaseUrl(config);\n const args = [\"agent\", \"--local\", \"--session-id\", sessionId, \"--message\", input.text, \"--json\"];\n const model = resolveModelFlag(ctx.model, Boolean(baseUrl));\n if (model)\n args.push(\"--model\", model);\n const apiKey = resolveApiKey(config);\n const env: globalThis.Record<string, string> = {\n OPENCLAW_API_KEY: apiKey,\n ANTHROPIC_API_KEY: apiKey,\n OPENAI_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n };\n if (baseUrl) {\n env.OPENCLAW_BASE_URL = baseUrl;\n env.OPENAI_BASE_URL = baseUrl;\n }\n const res = await sb.runCommand(openclawBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n const runJson = parseOpenClawRunJson(res.stdout);\n // 封包若带回服务端分配的 session key,后续轮以它为准(capture first-writer-wins,\n // 首轮已用自发 id 落地时不覆盖)。\n ctx.session.capture(runJson.sessionId);\n // 完整工具轨迹的唯一来源:session transcript。\n // 优先读封包给出的 sessionFile(精确);否则在 agents 目录取最新 *.jsonl,\n // 但排除同目录旁路产物 *.trajectory.jsonl(mtime 常更新、却不是消息轨——\n // 误读会导致 events 为空、整轮 coverage 降成 unavailable)。\n let raw: string | undefined;\n if (runJson.sessionFile) {\n try {\n raw = await sb.readText(runJson.sessionFile);\n }\n catch {\n raw = undefined;\n }\n }\n if (raw === undefined) {\n raw = await shared.captureLatestJsonl(sb, \"~/.openclaw/agents\", {\n excludeName: /\\.trajectory\\.jsonl$/i,\n });\n }\n const parsed = parseOpenClawTranscript(raw);\n const events: StreamEvent[] = [...parsed.events];\n // transcript 缺失 / 有解析不了的行:这一轮的工具轨迹不可信,coverage 降级说出来\n // (负断言由此落 unavailable,而不是在空流上假通过),不从最终文本猜工具行为。\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (raw === undefined || parsed.events.length === 0) {\n const reason = \"session transcript unavailable; only the --json final reply was collected\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n ctx.log(\"openclaw transcript unavailable: tool trajectory missing for this turn, negative assertions are unreliable\");\n if (runJson.text)\n events.push({ type: \"message\", role: \"assistant\", text: runJson.text });\n }\n else if (!parsed.parseSuccess) {\n const reason = \"some transcript 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 // 用量:transcript 逐消息累加优先;transcript 没报时用封包摘要,都没有就是空对象。\n const usage = (parsed.usage.inputTokens ?? 0) > 0 || (parsed.usage.outputTokens ?? 0) > 0\n ? parsed.usage\n : (runJson.usage ?? parsed.usage);\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage,\n process: res,\n });\n }\n if (runJson.failed)\n events.push({ type: \"error\", message: shared.diagnoseFailure(res, parsed.events, raw) });\n return {\n events,\n usage,\n status: runJson.failed ? \"failed\" as const : \"completed\" as const,\n ...(turnEvidenceCoverage ? { evidenceCoverage: turnEvidenceCoverage } : {}),\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default openClawAgent();\n"]}
|
package/dist/agents/opencode.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.openCodeAgent = openCodeAgent;
|
|
4
|
+
const unrecognized_events_ts_1 = require("./unrecognized-events.cjs");
|
|
4
5
|
const define_ts_1 = require("../define.cjs");
|
|
5
6
|
const effect_1 = require("effect");
|
|
6
7
|
const util_ts_1 = require("../util.cjs");
|
|
@@ -68,7 +69,7 @@ function resolveModelFlag(model, hasCompatBase) {
|
|
|
68
69
|
/**
|
|
69
70
|
* OpenCode 的内置 sandbox Agent 工厂。
|
|
70
71
|
*/
|
|
71
|
-
// @concord-code
|
|
72
|
+
// @concord-code
|
|
72
73
|
// @concord-implements docs/feature/adapters/README.md
|
|
73
74
|
// @concord-implements docs/feature/adapters/sdk/opencode/README.md
|
|
74
75
|
function openCodeAgent(config) {
|
|
@@ -82,6 +83,7 @@ function openCodeAgent(config) {
|
|
|
82
83
|
packageName: "opencode-ai",
|
|
83
84
|
bin: "opencode",
|
|
84
85
|
});
|
|
86
|
+
const unknownEvents = new Map();
|
|
85
87
|
return (0, define_ts_1.makeSandboxAgent)({
|
|
86
88
|
name: "opencode",
|
|
87
89
|
evidenceCoverage: coverage_ts_1.completeEvidenceCoverage,
|
|
@@ -96,8 +98,9 @@ function openCodeAgent(config) {
|
|
|
96
98
|
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: "http/protobuf",
|
|
97
99
|
}),
|
|
98
100
|
},
|
|
99
|
-
|
|
101
|
+
before: (sb, ctx) => effect_1.Effect.tryPromise({
|
|
100
102
|
try: async () => {
|
|
103
|
+
unknownEvents.set(sb.sandboxId, new unrecognized_events_ts_1.UnrecognizedAgentEvents());
|
|
101
104
|
const baseUrl = resolveBaseUrl(config);
|
|
102
105
|
const provider = {};
|
|
103
106
|
if (baseUrl) {
|
|
@@ -139,11 +142,15 @@ function openCodeAgent(config) {
|
|
|
139
142
|
await (0, skills_ts_1.appendProjectInstruction)(sb, (0, skills_ts_1.skillDiscoveryInstruction)(SKILL_DIR, (0, skills_ts_1.installedSkillNames)(manifest.skills)));
|
|
140
143
|
}
|
|
141
144
|
if (manifest.skills.length) {
|
|
142
|
-
ctx.
|
|
145
|
+
ctx.reportInstallation(manifest);
|
|
143
146
|
}
|
|
144
147
|
},
|
|
145
148
|
catch: (cause) => cause,
|
|
146
149
|
}),
|
|
150
|
+
after: (sb, ctx) => effect_1.Effect.sync(() => {
|
|
151
|
+
unknownEvents.get(sb.sandboxId)?.report((diagnostic) => ctx.diagnostic(diagnostic));
|
|
152
|
+
unknownEvents.delete(sb.sandboxId);
|
|
153
|
+
}),
|
|
147
154
|
send: (input, ctx) => effect_1.Effect.gen(function* () {
|
|
148
155
|
const sb = ctx.sandbox;
|
|
149
156
|
const opencodeBin = yield* (0, npm_staged_ts_1.resolveAgentBinEffect)(sb, "opencode");
|
|
@@ -174,6 +181,9 @@ function openCodeAgent(config) {
|
|
|
174
181
|
if (sessionId)
|
|
175
182
|
ctx.session.capture(sessionId);
|
|
176
183
|
let parsed = (0, opencode_ts_1.parseOpenCodeTranscript)(raw);
|
|
184
|
+
let hasUnrecognizedEvents = Object.keys(parsed.unrecognizedEvents ?? {}).length > 0;
|
|
185
|
+
const unknown = unknownEvents.get(sb.sandboxId);
|
|
186
|
+
unknown?.observe(parsed.unrecognizedEvents);
|
|
177
187
|
// 仅当 stdout 既没有工具也没有助手文本时才 export 补读——纯对话轮
|
|
178
188
|
// (session/recall) 的 text 事件已在 JSONL 里,再 export 会冲掉已解析事件。
|
|
179
189
|
const hasActions = parsed.events.some((e) => e.type === "operation.started" && e.operation.kind === "tool");
|
|
@@ -184,6 +194,8 @@ function openCodeAgent(config) {
|
|
|
184
194
|
if (exported.exitCode === 0 && exported.stdout.trim()) {
|
|
185
195
|
raw = exported.stdout;
|
|
186
196
|
parsed = (0, opencode_ts_1.parseOpenCodeTranscript)(raw);
|
|
197
|
+
hasUnrecognizedEvents ||= Object.keys(parsed.unrecognizedEvents ?? {}).length > 0;
|
|
198
|
+
unknown?.observe(parsed.unrecognizedEvents, `export:${sid}`);
|
|
187
199
|
sessionId = (0, opencode_ts_1.sessionIdFromOpenCodeTranscript)(raw) ?? sessionId;
|
|
188
200
|
if (sessionId)
|
|
189
201
|
ctx.session.capture(sessionId);
|
|
@@ -200,7 +212,7 @@ function openCodeAgent(config) {
|
|
|
200
212
|
usage: { status: "unavailable", reason },
|
|
201
213
|
};
|
|
202
214
|
}
|
|
203
|
-
else if (!parsed.parseSuccess) {
|
|
215
|
+
else if (!parsed.parseSuccess || hasUnrecognizedEvents) {
|
|
204
216
|
const reason = "Some OpenCode transcript lines could not be parsed.";
|
|
205
217
|
turnEvidenceCoverage = {
|
|
206
218
|
events: { status: "partial", reason },
|