niceeval 0.13.1 → 0.13.2
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 +25 -2
- package/README.md +9 -10
- package/README.zh.md +9 -10
- package/dist/agents/ai-sdk.cjs.map +1 -1
- package/dist/agents/ai-sdk.d.cts +1 -1
- package/dist/agents/ai-sdk.d.mts +1 -1
- package/dist/agents/ai-sdk.d.ts +1 -1
- package/dist/agents/bub-install-spec.cjs +19 -5
- package/dist/agents/bub-install-spec.cjs.map +1 -1
- package/dist/agents/bub-install-spec.d.cts +9 -2
- package/dist/agents/bub-install-spec.d.mts +9 -2
- package/dist/agents/bub-install-spec.d.ts +9 -2
- package/dist/agents/bub-install-spec.js +14 -12
- package/dist/agents/bub.cjs +10 -6
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +2 -2
- package/dist/agents/bub.d.mts +2 -2
- package/dist/agents/bub.d.ts +2 -2
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/claude-code.d.cts +2 -2
- package/dist/agents/claude-code.d.mts +2 -2
- package/dist/agents/claude-code.d.ts +2 -2
- package/dist/agents/codex.cjs +4 -4
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +3 -3
- package/dist/agents/codex.d.mts +3 -3
- package/dist/agents/codex.d.ts +3 -3
- package/dist/agents/coding-cli-versions.cjs +10 -1
- package/dist/agents/coding-cli-versions.cjs.map +1 -1
- package/dist/agents/coding-cli-versions.d.cts +8 -3
- package/dist/agents/coding-cli-versions.d.mts +8 -3
- package/dist/agents/coding-cli-versions.d.ts +8 -3
- package/dist/agents/coding-cli-versions.js +18 -12
- package/dist/agents/deepseek-harness.cjs +151 -0
- package/dist/agents/deepseek-harness.cjs.map +1 -0
- package/dist/agents/deepseek-harness.d.cts +14 -0
- package/dist/agents/deepseek-harness.d.mts +14 -0
- package/dist/agents/deepseek-harness.d.ts +14 -0
- package/dist/agents/deepseek-harness.js +7 -0
- package/dist/agents/deepseek-harness.js.map +1 -0
- package/dist/agents/exact-npm-plugins.cjs +28 -0
- package/dist/agents/exact-npm-plugins.cjs.map +1 -0
- package/dist/agents/exact-npm-plugins.d.cts +10 -0
- package/dist/agents/exact-npm-plugins.d.mts +10 -0
- package/dist/agents/exact-npm-plugins.d.ts +10 -0
- package/dist/agents/exact-npm-plugins.js +8 -0
- package/dist/agents/exact-npm-plugins.js.map +1 -0
- package/dist/agents/index.cjs +5 -1
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +4 -0
- package/dist/agents/index.d.mts +4 -0
- package/dist/agents/index.d.ts +4 -0
- package/dist/agents/index.js +54 -50
- package/dist/agents/index.mjs +54 -50
- package/dist/agents/omp.cjs +170 -0
- package/dist/agents/omp.cjs.map +1 -0
- package/dist/agents/omp.d.cts +14 -0
- package/dist/agents/omp.d.mts +14 -0
- package/dist/agents/omp.d.ts +14 -0
- package/dist/agents/omp.js +7 -0
- package/dist/agents/omp.js.map +1 -0
- package/dist/agents/openclaw.cjs +51 -2
- package/dist/agents/openclaw.cjs.map +1 -1
- package/dist/agents/openclaw.d.cts +2 -0
- package/dist/agents/openclaw.d.mts +2 -0
- package/dist/agents/openclaw.d.ts +2 -0
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +4 -4
- package/dist/agents/types.d.mts +4 -4
- package/dist/agents/types.d.ts +4 -4
- package/dist/agents/ui-message-stream.cjs +24 -7
- package/dist/agents/ui-message-stream.cjs.map +1 -1
- package/dist/analysis/api.cjs +28 -2
- package/dist/analysis/api.cjs.map +1 -1
- package/dist/analysis/api.d.cts +22 -1
- package/dist/analysis/api.d.mts +22 -1
- package/dist/analysis/api.d.ts +22 -1
- package/dist/analysis/api.js +8 -6
- package/dist/analysis/bindings.cjs +11 -18
- package/dist/analysis/bindings.cjs.map +1 -1
- package/dist/analysis/bindings.d.cts +177 -49
- package/dist/analysis/bindings.d.mts +177 -49
- package/dist/analysis/bindings.d.ts +177 -49
- package/dist/analysis/contracts.cjs +1 -0
- package/dist/analysis/contracts.cjs.map +1 -1
- package/dist/analysis/contracts.d.cts +43 -3
- package/dist/analysis/contracts.d.mts +43 -3
- package/dist/analysis/contracts.d.ts +43 -3
- package/dist/analysis/cost-projection.cjs +2 -1
- package/dist/analysis/cost-projection.cjs.map +1 -1
- package/dist/analysis/cost-projection.d.cts +1 -1
- package/dist/analysis/cost-projection.d.mts +1 -1
- package/dist/analysis/cost-projection.d.ts +1 -1
- package/dist/analysis/cost.cjs +13 -3
- package/dist/analysis/cost.cjs.map +1 -1
- package/dist/analysis/cost.d.cts +10 -3
- package/dist/analysis/cost.d.mts +10 -3
- package/dist/analysis/cost.d.ts +10 -3
- package/dist/analysis/experiment-groups.cjs +96 -0
- package/dist/analysis/experiment-groups.cjs.map +1 -0
- package/dist/analysis/experiment-groups.d.cts +9 -0
- package/dist/analysis/experiment-groups.d.mts +9 -0
- package/dist/analysis/experiment-groups.d.ts +9 -0
- package/dist/analysis/experiment-groups.js +10 -0
- package/dist/analysis/experiment-groups.js.map +1 -0
- package/dist/analysis/index.cjs +4 -1
- package/dist/analysis/index.cjs.map +1 -1
- package/dist/analysis/index.d.cts +4 -2
- package/dist/analysis/index.d.mts +4 -2
- package/dist/analysis/index.d.ts +4 -2
- package/dist/analysis/index.js +40 -36
- package/dist/analysis/index.mjs +40 -36
- package/dist/assertions/limits.cjs +4 -0
- package/dist/assertions/limits.cjs.map +1 -1
- package/dist/assertions/limits.d.cts +4 -0
- package/dist/assertions/limits.d.mts +4 -0
- package/dist/assertions/limits.d.ts +4 -0
- package/dist/assertions/match.cjs +63 -25
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +7 -0
- package/dist/assertions/match.d.mts +7 -0
- package/dist/assertions/match.d.ts +7 -0
- package/dist/assertions/record/attachment.cjs +32 -4
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/diff.cjs +10 -4
- package/dist/assertions/record/diff.cjs.map +1 -1
- package/dist/assertions/record/producer.cjs +101 -4
- package/dist/assertions/record/producer.cjs.map +1 -1
- package/dist/assertions/record/producer.d.cts +4 -1
- package/dist/assertions/record/producer.d.mts +4 -1
- package/dist/assertions/record/producer.d.ts +4 -1
- package/dist/assertions/runtime.cjs +45 -5
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/record.cjs +113 -8
- package/dist/cli/record.cjs.map +1 -1
- package/dist/cli/record.d.cts +20 -1
- package/dist/cli/record.d.mts +20 -1
- package/dist/cli/record.d.ts +20 -1
- package/dist/cli/record.js +4 -2
- package/dist/cli.cjs +386 -31
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +10 -2
- package/dist/cli.d.mts +10 -2
- package/dist/cli.d.ts +10 -2
- package/dist/context/send-retry.cjs +4 -4
- package/dist/context/send-retry.cjs.map +1 -1
- package/dist/coordination/host/runtime.cjs +8 -30
- package/dist/coordination/host/runtime.cjs.map +1 -1
- package/dist/coordination/host/runtime.d.cts +3 -3
- package/dist/coordination/host/runtime.d.mts +3 -3
- package/dist/coordination/host/runtime.d.ts +3 -3
- package/dist/coordination/host/types.cjs.map +1 -1
- package/dist/coordination/host/types.d.cts +0 -5
- package/dist/coordination/host/types.d.mts +0 -5
- package/dist/coordination/host/types.d.ts +0 -5
- package/dist/coordination/platform/node.cjs +90 -9
- package/dist/coordination/platform/node.cjs.map +1 -1
- package/dist/define.cjs +25 -1
- package/dist/define.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -0
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/i18n/en.cjs +26 -8
- package/dist/i18n/en.cjs.map +1 -1
- package/dist/i18n/en.d.cts +19 -6
- package/dist/i18n/en.d.mts +19 -6
- package/dist/i18n/en.d.ts +19 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/o11y/parsers/hermes.cjs +1 -1
- package/dist/o11y/parsers/hermes.cjs.map +1 -1
- package/dist/o11y/prices.json +1 -1
- package/dist/o11y/record/families.cjs +12 -3
- package/dist/o11y/record/families.cjs.map +1 -1
- package/dist/o11y/record/families.d.cts +8 -8
- package/dist/o11y/record/families.d.mts +8 -8
- package/dist/o11y/record/families.d.ts +8 -8
- package/dist/o11y/record/family-projectors.d.cts +66 -18
- package/dist/o11y/record/family-projectors.d.mts +66 -18
- package/dist/o11y/record/family-projectors.d.ts +66 -18
- package/dist/o11y/record/family-writers.d.cts +11 -3
- package/dist/o11y/record/family-writers.d.mts +11 -3
- package/dist/o11y/record/family-writers.d.ts +11 -3
- package/dist/o11y/record/runner-producer.cjs +14 -4
- package/dist/o11y/record/runner-producer.cjs.map +1 -1
- package/dist/record/codec/core.d.cts +2 -2
- package/dist/record/codec/core.d.mts +2 -2
- package/dist/record/codec/core.d.ts +2 -2
- package/dist/record/family/catalog.d.cts +44 -12
- package/dist/record/family/catalog.d.mts +44 -12
- package/dist/record/family/catalog.d.ts +44 -12
- package/dist/record/family/index.js +128 -124
- package/dist/record/family/observability-v1.cjs +35 -0
- package/dist/record/family/observability-v1.cjs.map +1 -0
- package/dist/record/family/observability-v1.d.cts +3 -0
- package/dist/record/family/observability-v1.d.mts +3 -0
- package/dist/record/family/observability-v1.d.ts +3 -0
- package/dist/record/family/observability-v1.js +6 -0
- package/dist/record/family/observability-v1.js.map +1 -0
- package/dist/record/family/observability.cjs +58 -9
- package/dist/record/family/observability.cjs.map +1 -1
- package/dist/record/family/observability.d.cts +1014 -15
- package/dist/record/family/observability.d.mts +1014 -15
- package/dist/record/family/observability.d.ts +1014 -15
- package/dist/record/family/observability.js +22 -18
- package/dist/record/host/runtime.cjs +600 -31
- package/dist/record/host/runtime.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +33 -9
- package/dist/record/host/types.d.mts +33 -9
- package/dist/record/host/types.d.ts +33 -9
- package/dist/record/maintenance/runtime.cjs +1 -2
- package/dist/record/maintenance/runtime.cjs.map +1 -1
- package/dist/record/model/core.cjs.map +1 -1
- package/dist/record/model/core.d.cts +1 -1
- package/dist/record/model/core.d.mts +1 -1
- package/dist/record/model/core.d.ts +1 -1
- package/dist/record/model/definition.d.cts +6 -6
- package/dist/record/model/definition.d.mts +6 -6
- package/dist/record/model/definition.d.ts +6 -6
- package/dist/record/model/identifiers.cjs +1 -1
- package/dist/record/model/identifiers.cjs.map +1 -1
- package/dist/record/model/identifiers.d.cts +1 -1
- package/dist/record/model/identifiers.d.mts +1 -1
- package/dist/record/model/identifiers.d.ts +1 -1
- package/dist/record/platform/node.cjs +159 -23
- package/dist/record/platform/node.cjs.map +1 -1
- package/dist/record/platform/services.cjs.map +1 -1
- package/dist/record/platform/services.d.cts +15 -2
- package/dist/record/platform/services.d.mts +15 -2
- package/dist/record/platform/services.d.ts +15 -2
- package/dist/record/reader/errors.cjs +37 -1
- package/dist/record/reader/errors.cjs.map +1 -1
- package/dist/record/reader/errors.d.cts +49 -1
- package/dist/record/reader/errors.d.mts +49 -1
- package/dist/record/reader/errors.d.ts +49 -1
- package/dist/record/reader/errors.js +22 -12
- package/dist/record/reader/format.cjs +76 -17
- package/dist/record/reader/format.cjs.map +1 -1
- package/dist/record/reader/format.d.cts +11 -4
- package/dist/record/reader/format.d.mts +11 -4
- package/dist/record/reader/format.d.ts +11 -4
- package/dist/record/reader/format.js +2 -0
- package/dist/record/reader/index.js +32 -18
- package/dist/record/reader/runtime.cjs +64 -0
- package/dist/record/reader/runtime.cjs.map +1 -1
- package/dist/record/reader/runtime.d.cts +15 -0
- package/dist/record/reader/runtime.d.mts +15 -0
- package/dist/record/reader/runtime.d.ts +15 -0
- package/dist/record/reader/runtime.js +2 -0
- package/dist/report/assets/styles.css +53 -29
- package/dist/report/built-in/analysis-values.cjs +21 -13
- package/dist/report/built-in/analysis-values.cjs.map +1 -1
- package/dist/report/built-in/analysis-values.d.cts +11 -22
- package/dist/report/built-in/analysis-values.d.mts +11 -22
- package/dist/report/built-in/analysis-values.d.ts +11 -22
- package/dist/report/built-in/analysis-values.js +4 -6
- package/dist/report/built-in/index.cjs +1 -3
- package/dist/report/built-in/index.cjs.map +1 -1
- package/dist/report/built-in/index.d.cts +1 -1
- package/dist/report/built-in/index.d.mts +1 -1
- package/dist/report/built-in/index.d.ts +1 -1
- package/dist/report/built-in/index.js +4 -8
- package/dist/report/built-in/index.mjs +4 -8
- package/dist/report/built-in/machine.cjs +0 -2
- package/dist/report/built-in/machine.cjs.map +1 -1
- package/dist/report/built-in/machine.d.cts +0 -2
- package/dist/report/built-in/machine.d.mts +0 -2
- package/dist/report/built-in/machine.d.ts +0 -2
- package/dist/report/built-in/result-components.cjs +49 -51
- package/dist/report/built-in/result-components.cjs.map +1 -1
- package/dist/report/built-in/result-components.d.cts +16 -17
- package/dist/report/built-in/result-components.d.mts +16 -17
- package/dist/report/built-in/result-components.d.ts +16 -17
- package/dist/report/built-in/result-components.js +0 -4
- package/dist/report/built-in/run-membership-overview.cjs +126 -17
- package/dist/report/built-in/run-membership-overview.cjs.map +1 -1
- package/dist/report/built-in/run-membership-overview.d.cts +14 -0
- package/dist/report/built-in/run-membership-overview.d.mts +14 -0
- package/dist/report/built-in/run-membership-overview.d.ts +14 -0
- package/dist/report/built-in/run-membership-overview.js +4 -2
- package/dist/report/built-in/standard.cjs +80 -45
- package/dist/report/built-in/standard.cjs.map +1 -1
- package/dist/report/built-in/standard.d.cts +19 -41
- package/dist/report/built-in/standard.d.mts +19 -41
- package/dist/report/built-in/standard.d.ts +19 -41
- package/dist/report/built-in/standard.js +6 -6
- package/dist/report/components/attempt-detail/compute.cjs +78 -2
- package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
- package/dist/report/components/attempt-detail/compute.d.cts +1 -1
- package/dist/report/components/attempt-detail/compute.d.mts +1 -1
- package/dist/report/components/attempt-detail/compute.d.ts +1 -1
- package/dist/report/components/attempt-detail/content.cjs +1 -1
- package/dist/report/components/attempt-detail/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.cjs +42 -5
- package/dist/report/components/entity-lists/compute.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.d.cts +10 -8
- package/dist/report/components/entity-lists/compute.d.mts +10 -8
- package/dist/report/components/entity-lists/compute.d.ts +10 -8
- package/dist/report/components/entity-lists/content.cjs +31 -6
- package/dist/report/components/entity-lists/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.cjs +9 -4
- package/dist/report/components/entity-lists/index.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.d.cts +4 -7
- package/dist/report/components/entity-lists/index.d.mts +4 -7
- package/dist/report/components/entity-lists/index.d.ts +4 -7
- package/dist/report/components/summaries/compute.cjs +8 -1
- package/dist/report/components/summaries/compute.cjs.map +1 -1
- package/dist/report/components/summaries/compute.d.cts +9 -1
- package/dist/report/components/summaries/compute.d.mts +9 -1
- package/dist/report/components/summaries/compute.d.ts +9 -1
- package/dist/report/components/summaries/index.cjs +48 -4
- package/dist/report/components/summaries/index.cjs.map +1 -1
- package/dist/report/components/summaries/index.d.cts +7 -4
- package/dist/report/components/summaries/index.d.mts +7 -4
- package/dist/report/components/summaries/index.d.ts +7 -4
- package/dist/report/definition/cell.cjs +3 -0
- package/dist/report/definition/cell.cjs.map +1 -1
- package/dist/report/definition/cell.d.cts +2 -0
- package/dist/report/definition/cell.d.mts +2 -0
- package/dist/report/definition/cell.d.ts +2 -0
- package/dist/report/definition/primitives/chart.cjs +8 -5
- package/dist/report/definition/primitives/chart.cjs.map +1 -1
- package/dist/report/definition/primitives/points-dataset.cjs +1 -0
- package/dist/report/definition/primitives/points-dataset.cjs.map +1 -1
- package/dist/report/definition/primitives.cjs +15 -2
- package/dist/report/definition/primitives.cjs.map +1 -1
- package/dist/report/definition/report.cjs +27 -3
- package/dist/report/definition/report.cjs.map +1 -1
- package/dist/report/definition/report.d.cts +8 -0
- package/dist/report/definition/report.d.mts +8 -0
- package/dist/report/definition/report.d.ts +8 -0
- package/dist/report/execution/machine.cjs +30 -14
- package/dist/report/execution/machine.cjs.map +1 -1
- package/dist/report/execution/machine.d.cts +20 -10
- package/dist/report/execution/machine.d.mts +20 -10
- package/dist/report/execution/machine.d.ts +20 -10
- package/dist/report/execution/machine.js +6 -6
- package/dist/report/host/execute.cjs +25 -16
- package/dist/report/host/execute.cjs.map +1 -1
- package/dist/report/host/execute.d.cts +4 -0
- package/dist/report/host/execute.d.mts +4 -0
- package/dist/report/host/execute.d.ts +4 -0
- package/dist/report/host/from-record.cjs +22 -5
- package/dist/report/host/from-record.cjs.map +1 -1
- package/dist/report/host/machine.cjs +53 -11
- package/dist/report/host/machine.cjs.map +1 -1
- package/dist/report/host/site-runtime.cjs +9 -8
- package/dist/report/host/site-runtime.cjs.map +1 -1
- package/dist/report/host/site-runtime.d.cts +1 -1
- package/dist/report/host/site-runtime.d.mts +1 -1
- package/dist/report/host/site-runtime.d.ts +1 -1
- package/dist/report/host/static.cjs +56 -9
- package/dist/report/host/static.cjs.map +1 -1
- package/dist/report/index.cjs.map +1 -1
- package/dist/report/index.d.cts +1 -1
- package/dist/report/index.d.mts +1 -1
- package/dist/report/index.d.ts +1 -1
- package/dist/report/model/dataset.cjs +7 -2
- package/dist/report/model/dataset.cjs.map +1 -1
- package/dist/report/model/locale.cjs +2 -0
- package/dist/report/model/locale.cjs.map +1 -1
- package/dist/report/model/locale.d.cts +1 -0
- package/dist/report/model/locale.d.mts +1 -0
- package/dist/report/model/locale.d.ts +1 -0
- package/dist/report/model/metrics.cjs +3 -1
- package/dist/report/model/metrics.cjs.map +1 -1
- package/dist/report/model/pricing.cjs +16 -11
- package/dist/report/model/pricing.cjs.map +1 -1
- package/dist/report/react/styles.css +53 -29
- package/dist/runner/adoption.cjs +1 -0
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt.cjs +44 -5
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/attempt.d.cts +13 -1
- package/dist/runner/attempt.d.mts +13 -1
- package/dist/runner/attempt.d.ts +13 -1
- package/dist/runner/config-identity.cjs +10 -2
- package/dist/runner/config-identity.cjs.map +1 -1
- package/dist/runner/config-identity.d.cts +4 -2
- package/dist/runner/config-identity.d.mts +4 -2
- package/dist/runner/config-identity.d.ts +4 -2
- package/dist/runner/feedback/human.cjs +298 -59
- package/dist/runner/feedback/human.cjs.map +1 -1
- package/dist/runner/feedback/json.cjs +14 -6
- package/dist/runner/feedback/json.cjs.map +1 -1
- package/dist/runner/feedback/json.d.cts +3 -2
- package/dist/runner/feedback/json.d.mts +3 -2
- package/dist/runner/feedback/json.d.ts +3 -2
- package/dist/runner/feedback/reducer.cjs +2 -0
- package/dist/runner/feedback/reducer.cjs.map +1 -1
- package/dist/runner/judge-config.cjs +1 -1
- package/dist/runner/judge-config.cjs.map +1 -1
- package/dist/runner/ledger.cjs +124 -12
- package/dist/runner/ledger.cjs.map +1 -1
- package/dist/runner/project-current.cjs +13 -5
- package/dist/runner/project-current.cjs.map +1 -1
- package/dist/runner/run.cjs +564 -256
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/sandbox-pool.cjs +161 -30
- package/dist/runner/sandbox-pool.cjs.map +1 -1
- package/dist/runner/sandbox-pool.d.cts +34 -2
- package/dist/runner/sandbox-pool.d.mts +34 -2
- package/dist/runner/sandbox-pool.d.ts +34 -2
- package/dist/runner/shared-state-lease.cjs +803 -0
- package/dist/runner/shared-state-lease.cjs.map +1 -0
- package/dist/runner/shared-state-lease.d.cts +121 -0
- package/dist/runner/shared-state-lease.d.mts +121 -0
- package/dist/runner/shared-state-lease.d.ts +121 -0
- package/dist/runner/shared-state-lease.js +24 -0
- package/dist/runner/shared-state-lease.js.map +1 -0
- package/dist/runner/teardown-registry.cjs +97 -34
- package/dist/runner/teardown-registry.cjs.map +1 -1
- package/dist/runner/teardown-registry.d.cts +27 -1
- package/dist/runner/teardown-registry.d.mts +27 -1
- package/dist/runner/teardown-registry.d.ts +27 -1
- package/dist/runner/teardown-registry.js +20 -16
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +31 -5
- package/dist/runner/types.d.mts +31 -5
- package/dist/runner/types.d.ts +31 -5
- package/dist/sample/analysis.cjs +249 -459
- package/dist/sample/analysis.cjs.map +1 -1
- package/dist/sample/capability.cjs +138 -7
- package/dist/sample/capability.cjs.map +1 -1
- package/dist/sample/capability.d.cts +3 -1
- package/dist/sample/capability.d.mts +3 -1
- package/dist/sample/capability.d.ts +3 -1
- package/dist/sample/capability.js +8 -6
- package/dist/sandbox/docker-agent-image.cjs +5 -1
- package/dist/sandbox/docker-agent-image.cjs.map +1 -1
- package/dist/sandbox/docker-agent-image.d.cts +2 -0
- package/dist/sandbox/docker-agent-image.d.mts +2 -0
- package/dist/sandbox/docker-agent-image.d.ts +2 -0
- package/dist/sandbox/docker-agent-image.js +14 -10
- package/dist/sandbox/docker-profile/schema.cjs +283 -534
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.d.cts +10 -27
- package/dist/sandbox/docker-profile/schema.d.mts +10 -27
- package/dist/sandbox/docker-profile/schema.d.ts +10 -27
- package/dist/sandbox/e2b-agent-template.cjs +5 -2
- package/dist/sandbox/e2b-agent-template.cjs.map +1 -1
- package/dist/sandbox/index.cjs +4 -2
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +1 -1
- package/dist/sandbox/index.d.mts +1 -1
- package/dist/sandbox/index.d.ts +1 -1
- package/dist/sandbox/index.js +120 -116
- package/dist/sandbox/index.mjs +120 -116
- package/dist/sandbox/keep-registry.cjs +28 -66
- package/dist/sandbox/keep-registry.cjs.map +1 -1
- package/dist/sandbox/types.cjs.map +1 -1
- package/dist/sandbox/types.d.cts +1 -1
- package/dist/sandbox/types.d.mts +1 -1
- package/dist/sandbox/types.d.ts +1 -1
- package/dist/shared/aggregate.cjs +16 -6
- package/dist/shared/aggregate.cjs.map +1 -1
- package/dist/shared/aggregate.d.cts +12 -4
- package/dist/shared/aggregate.d.mts +12 -4
- package/dist/shared/aggregate.d.ts +12 -4
- package/dist/shared/turn-label.cjs +20 -2
- package/dist/shared/turn-label.cjs.map +1 -1
- package/dist/shared/turn-label.d.cts +2 -0
- package/dist/shared/turn-label.d.mts +2 -0
- package/dist/shared/turn-label.d.ts +2 -0
- package/dist/shared/turn-label.js +4 -2
- package/dist/vendor/remark/remark-gfm.cjs +7 -7
- package/dist/vendor/remark/remark-gfm.cjs.map +1 -1
- package/dist/vendor/remark/remark-parse.cjs +12 -12
- package/dist/vendor/remark/remark-parse.cjs.map +1 -1
- package/dist/vendor/remark/remark.cjs +13 -13
- package/dist/vendor/remark/remark.cjs.map +1 -1
- package/dist/view/server.cjs +6 -0
- package/dist/view/server.cjs.map +1 -1
- package/docs-site/images/hitl-handshake-zh.svg +3 -3
- package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
- package/docs-site/zh/examples/coding-agent-extensions.mdx +1 -1
- package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +4 -3
- package/docs-site/zh/examples/integrations/claude-sdk.mdx +3 -3
- package/docs-site/zh/examples/integrations/codex-sdk.mdx +5 -5
- 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 +5 -5
- package/docs-site/zh/explanation/assert.mdx +7 -7
- package/docs-site/zh/explanation/drive.mdx +4 -2
- package/docs-site/zh/explanation/evals.mdx +10 -8
- package/docs-site/zh/explanation/experiment.mdx +2 -2
- package/docs-site/zh/explanation/hitl.mdx +9 -9
- package/docs-site/zh/explanation/judge.mdx +5 -5
- package/docs-site/zh/explanation/overview.mdx +3 -3
- package/docs-site/zh/explanation/runner.mdx +1 -1
- package/docs-site/zh/index.mdx +3 -3
- package/docs-site/zh/reference/builtin-agents.mdx +13 -13
- package/docs-site/zh/reference/capabilities.mdx +1 -1
- package/docs-site/zh/reference/cli.mdx +18 -12
- package/docs-site/zh/reference/define-agent.mdx +130 -5
- package/docs-site/zh/reference/define-config.mdx +2 -2
- package/docs-site/zh/reference/define-eval.mdx +4 -4
- package/docs-site/zh/reference/events.mdx +11 -11
- package/docs-site/zh/reference/official-adapters.mdx +6 -6
- package/docs-site/zh/reference/results-data.mdx +6 -0
- package/docs-site/zh/troubleshooting/debugging.mdx +1 -1
- package/docs-site/zh/troubleshooting/recover-after-kill.mdx +37 -5
- package/docs-site/zh/tutorials/accept-results.mdx +72 -0
- package/docs-site/zh/tutorials/agent-onboarding.mdx +6 -6
- package/docs-site/zh/tutorials/authoring.mdx +9 -13
- package/docs-site/zh/tutorials/ci-integration.mdx +6 -6
- package/docs-site/zh/tutorials/compare-runs.mdx +61 -0
- package/docs-site/zh/tutorials/concurrency.mdx +13 -12
- package/docs-site/zh/tutorials/configuration.mdx +4 -6
- package/docs-site/zh/tutorials/connect-your-agent.mdx +1 -1
- package/docs-site/zh/tutorials/control-run-cost.mdx +58 -0
- package/docs-site/zh/tutorials/criteria-files.mdx +2 -2
- package/docs-site/zh/tutorials/custom-reports.mdx +2 -2
- package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +46 -0
- package/docs-site/zh/tutorials/docker-in-docker.mdx +52 -43
- package/docs-site/zh/tutorials/eval-groups.mdx +6 -6
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +3 -3
- package/docs-site/zh/tutorials/experiments.mdx +2 -3
- package/docs-site/zh/tutorials/handle-execution-failures.mdx +18 -10
- package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +16 -8
- package/docs-site/zh/tutorials/nixos-managed-dind.mdx +160 -0
- package/docs-site/zh/tutorials/plugins.mdx +14 -0
- package/docs-site/zh/tutorials/rerun-and-cache.mdx +4 -2
- package/docs-site/zh/tutorials/sandbox-agent.mdx +17 -11
- package/docs-site/zh/tutorials/sandbox-providers.mdx +17 -13
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +12 -19
- package/docs-site/zh/tutorials/select-and-preview.mdx +65 -0
- package/docs-site/zh/tutorials/verify-judge.mdx +78 -0
- package/docs-site/zh/tutorials/viewing-results.mdx +38 -1
- package/docs-site/zh/tutorials/write-experiment.mdx +7 -5
- package/docs-site/zh/tutorials/write-send.mdx +9 -8
- package/package.json +9 -5
- package/dist/report/built-in/overview.cjs +0 -44
- package/dist/report/built-in/overview.cjs.map +0 -1
- package/dist/report/built-in/overview.d.cts +0 -6
- package/dist/report/built-in/overview.d.mts +0 -6
- package/dist/report/built-in/overview.d.ts +0 -6
- package/dist/report/built-in/overview.js +0 -9
- package/dist/report/built-in/overview.js.map +0 -1
- package/dist/runner/gate-lease.cjs +0 -283
- package/dist/runner/gate-lease.cjs.map +0 -1
- package/dist/runner/gate-lease.d.cts +0 -62
- package/dist/runner/gate-lease.d.mts +0 -62
- package/dist/runner/gate-lease.d.ts +0 -62
- package/dist/runner/gate-lease.js +0 -22
- package/dist/runner/gate-lease.js.map +0 -1
package/dist/agents/bub.cjs
CHANGED
|
@@ -26,9 +26,13 @@ const SKILL_DIR = ".agents/skills";
|
|
|
26
26
|
// 安装都会去拉 Bub 主干,版本失控。所以安装前总是先把 `bub==<version>` 写进这个文件。
|
|
27
27
|
const BUB_OVERRIDE_FILE = "/tmp/bub-override.txt";
|
|
28
28
|
function resolvePin(config) {
|
|
29
|
+
const version = config?.version ?? coding_cli_versions_ts_1.DEFAULT_BUB_VERSION;
|
|
29
30
|
return {
|
|
30
31
|
requirement: config?.version ? (0, bub_install_spec_ts_1.bubRequirement)(config.version) : bub_install_spec_ts_1.DEFAULT_BUB_REQUIREMENT,
|
|
31
32
|
otelPlugin: config?.otelPlugin ?? bub_install_spec_ts_1.DEFAULT_BUB_OTEL_PLUGIN,
|
|
33
|
+
// NiceEval can reproduce the default release's upstream lock exactly. A caller-selected
|
|
34
|
+
// historical Bub version owns a different closure, so do not silently apply 0.4.0's pins.
|
|
35
|
+
dependencyOverrides: version === coding_cli_versions_ts_1.DEFAULT_BUB_VERSION ? bub_install_spec_ts_1.DEFAULT_BUB_DEPENDENCY_OVERRIDES : [],
|
|
32
36
|
};
|
|
33
37
|
}
|
|
34
38
|
// NiceEval 的预制配方与运行时安装都写到 $HOME/.local;显式使用该路径,避免 PATH 上
|
|
@@ -39,7 +43,7 @@ function normalizePackages(plugins) {
|
|
|
39
43
|
return (0, bub_install_spec_ts_1.normalizeBubPackages)((plugins ?? []).map((plugin) => plugin.package));
|
|
40
44
|
}
|
|
41
45
|
function installHashOf(packages, pin) {
|
|
42
|
-
return (0, bub_install_spec_ts_1.bubInstallHash)(packages, pin.requirement, pin.otelPlugin);
|
|
46
|
+
return (0, bub_install_spec_ts_1.bubInstallHash)(packages, pin.requirement, pin.otelPlugin, pin.dependencyOverrides);
|
|
43
47
|
}
|
|
44
48
|
function tapePath(workspace, sessionId, bubHome) {
|
|
45
49
|
const w = (0, node_crypto_1.createHash)("md5").update(workspace).digest("hex").slice(0, 16);
|
|
@@ -47,8 +51,8 @@ function tapePath(workspace, sessionId, bubHome) {
|
|
|
47
51
|
return `${bubHome}/tapes/${w}__${s}.jsonl`;
|
|
48
52
|
}
|
|
49
53
|
function bubAgent(config) {
|
|
50
|
-
const getApiKey = () => config?.apiKey ?? (0, util_ts_1.requireEnv)("
|
|
51
|
-
const getApiBase = () => config?.apiBase ?? (0, util_ts_1.requireEnv)("
|
|
54
|
+
const getApiKey = () => config?.apiKey ?? (0, util_ts_1.requireEnv)("OPENAI_API_KEY");
|
|
55
|
+
const getApiBase = () => config?.apiBase ?? (0, util_ts_1.requireEnv)("OPENAI_BASE_URL");
|
|
52
56
|
const packages = normalizePackages(config?.pythonPlugins);
|
|
53
57
|
const pin = resolvePin(config);
|
|
54
58
|
const identity = {
|
|
@@ -70,7 +74,7 @@ function bubAgent(config) {
|
|
|
70
74
|
installMode: "sandbox-network",
|
|
71
75
|
install: async (sandbox) => {
|
|
72
76
|
await sandbox.runShellOrThrow(`test -x ${UV} || (curl -LsSf https://astral.sh/uv/install.sh | sh)`);
|
|
73
|
-
await sandbox.writeText(BUB_OVERRIDE_FILE, `${pin.requirement}\n`);
|
|
77
|
+
await sandbox.writeText(BUB_OVERRIDE_FILE, `${[pin.requirement, ...pin.dependencyOverrides].join("\n")}\n`);
|
|
74
78
|
const withPlugins = packages.map((pkg) => `--with ${(0, shell_ts_1.shellQuote)(pkg)}`).join(" ");
|
|
75
79
|
let last = "";
|
|
76
80
|
for (let attempt = 1; attempt <= 3; attempt += 1) {
|
|
@@ -151,8 +155,8 @@ function bubAgent(config) {
|
|
|
151
155
|
ctx.session.capture(sessionId);
|
|
152
156
|
const apiKey = getApiKey();
|
|
153
157
|
const env = {
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
OPENAI_API_KEY: apiKey,
|
|
159
|
+
OPENAI_BASE_URL: getApiBase(),
|
|
156
160
|
BUB_HOME: bubHome,
|
|
157
161
|
...ctx.telemetry?.env,
|
|
158
162
|
};
|
package/dist/agents/bub.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bub.js","sourceRoot":"","sources":["bub.ts"],"names":[],"mappings":"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","sourcesContent":["import { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { requireEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapBubSpans } from \"../o11y/otlp/mappers/bub.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { registerAgentLifecycleHookCommands, runPostSetupHooks, runPreTeardownHooks, } from \"./post-setup.ts\";\nimport type { Agent, AgentSetupManifest, SkillSpec, TurnEvidenceCoverage } from \"../types.ts\";\nimport type { SandboxCommand } from \"../sandbox/commands.ts\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { t } from \"../i18n/index.ts\";\nimport { BUB_INSTALL_MARKER, DEFAULT_BUB_OTEL_PLUGIN, DEFAULT_BUB_REQUIREMENT, bubInstallHash, bubRequirement, normalizeBubPackages, } from \"./bub-install-spec.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { defineSandboxCommand } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport { DEFAULT_BUB_VERSION } from \"./coding-cli-versions.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// bub 的 agent adapter(沙箱型)。\n//\n// ⚠️ 现实校正:bub 是 PyPI 上的 `bub`(alpha,Python 3.12),不是 npm 包。\n// · 安装:uv tool install bub(uv 自带 python 3.12,免 root)。\n// · 调用:bub run \"<prompt>\" --session-id <id> --workspace <path>\n// · 模型 + 代理:BUB_MODEL=openai:<model>、BUB_API_BASE、BUB_API_KEY。\n// · 记忆:tape(总是开),落盘在 ~/.bub/tapes/<md5(ws)[:16]>__<md5(sess)[:16]>.jsonl。\n// ───────────────────────────────────────────────────────────────────────────\n/**\n * Bub 的扩展单元 —— **只属于 Bub**:Bub 的插件是运行环境里的 Python Package,\n * 与 Claude Code / Codex 的 native plugin 没有共同的安装协议,不共用类型。\n */\nexport interface PythonPluginSpec {\n /** PyPI Package、Version Specifier 或 Git URL(如 `bub-plugin-memory==1.3.0`、`git+https://…@8f3c1a2`)。 */\n package: string;\n}\nexport interface BubConfig {\n /** OpenAI 兼容代理的 API key。省略时读 BUB_API_KEY env。 */\n apiKey?: string;\n /** OpenAI 兼容代理的 base URL。省略时读 BUB_API_BASE env。 */\n apiBase?: string;\n /**\n * 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md(bub 没有原生 Skill 加载机制)。\n */\n skills?: SkillSpec[];\n /**\n * 装哪一版 Bub(PyPI 版本号,如 `\"0.4.0\"`)。省略时用 NiceEval 钉的默认版本;\n * 永远是确定版本,不装 latest —— 被测对象的版本要能从实验配置读出来。\n */\n version?: string;\n /**\n * OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval 钉的默认 pin。\n *\n * 插件与 Bub 的 tape 协议同代:默认 pin 从 `bub.tape` 取类型,要求 Bub ≥ 0.3.10;更早的\n * 插件 commit 按 republic 的类型校验,配 Bub ≤ 0.3.9。配错代不会安装失败,而是 span 全被拒、\n * 时间轨静默为空 —— 所以往回钉 `version` 时必须同批钉配套的插件 commit。\n */\n otelPlugin?: string;\n /**\n * 额外装进 bub tool 环境的 Python Package,每个 Sandbox setup 时进 `uv tool install … --with <pkg>`。\n * 规范化后的 package 列表进安装 checkpoint key:plugin 集合不同的两个 agent 变体不会复用同一个\n * 安装 checkpoint(否则第二个变体会静默拿到第一个变体的环境)。\n */\n pythonPlugins?: PythonPluginSpec[];\n /**\n * 安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在装 bub、装 Skills /\n * Python package、写 manifest 全部完成后执行。抛错按基础设施错误计(attempt errored)。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n postSetup?: SandboxCommand[];\n /**\n * 与 `postSetup` 成对的收尾 Hook:按 `postSetup` 的逆序语义,在 agent 自己的 teardown 步骤\n * 之前执行(LIFO 镜像 —— `postSetup` 跑在 agent 安装之后,`preTeardown` 就跑在 agent 收尾\n * 之前),当且仅当 `postSetup` 的时点走到过才触发。抛错按基础设施错误计,由 teardown 段\n * 按 teardown-failed 诊断收束。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n preTeardown?: SandboxCommand[];\n}\nconst UV = \"$HOME/.local/bin/uv\";\n/** bub 的 skill 目录(`skills` 生态的「通用」目录);bub 不原生扫描它,靠 AGENTS.md 的发现指引。 */\nconst SKILL_DIR = \".agents/skills\";\n// bub 与 OTel 插件的 pin 都从 config 来(缺省用源码里的默认 pin)——不设环境变量后门:\n// 装哪个包是配置,配置的家是代码(边界见 docs/architecture.md「配置从代码来,凭据从环境来」)。\n//\n// override 文件不是历史包袱:插件所在 workspace 把 `bub` 声明成 git 依赖,不覆盖的话每次\n// 安装都会去拉 Bub 主干,版本失控。所以安装前总是先把 `bub==<version>` 写进这个文件。\nconst BUB_OVERRIDE_FILE = \"/tmp/bub-override.txt\";\n/** 一个 agent 变体装的那套 bub:requirement + OTel 插件,两者都进安装指纹。 */\ninterface BubInstallPin {\n requirement: string;\n otelPlugin: string;\n}\nfunction resolvePin(config?: BubConfig): BubInstallPin {\n return {\n requirement: config?.version ? bubRequirement(config.version) : DEFAULT_BUB_REQUIREMENT,\n otelPlugin: config?.otelPlugin ?? DEFAULT_BUB_OTEL_PLUGIN,\n };\n}\n// NiceEval 的预制配方与运行时安装都写到 $HOME/.local;显式使用该路径,避免 PATH 上\n// 另一个未知版本的 bub 抢先命中。\nconst BUB = \"$HOME/.local/bin/bub\";\n/** 规范化 python plugin:去空白、丢空串、去重 —— 安装命令与 checkpoint key 用同一份列表。 */\nfunction normalizePackages(plugins?: readonly PythonPluginSpec[]): string[] {\n return normalizeBubPackages((plugins ?? []).map((plugin) => plugin.package));\n}\nfunction installHashOf(packages: readonly string[], pin: BubInstallPin): string {\n return bubInstallHash(packages, pin.requirement, pin.otelPlugin);\n}\nfunction tapePath(workspace: string, sessionId: string, bubHome: string): string {\n const w = createHash(\"md5\").update(workspace).digest(\"hex\").slice(0, 16);\n const s = createHash(\"md5\").update(sessionId).digest(\"hex\").slice(0, 16);\n return `${bubHome}/tapes/${w}__${s}.jsonl`;\n}\nexport function bubAgent(config?: BubConfig): Agent {\n const getApiKey = () => config?.apiKey ?? requireEnv(\"BUB_API_KEY\");\n const getApiBase = () => config?.apiBase ?? requireEnv(\"BUB_API_BASE\");\n const packages = normalizePackages(config?.pythonPlugins);\n const pin = resolvePin(config);\n const identity = {\n agent: \"bub\",\n version: config?.version ?? DEFAULT_BUB_VERSION,\n revision: installHashOf(packages, pin),\n } as const;\n const marker = `$HOME/${BUB_INSTALL_MARKER}`;\n const probe = defineSandboxCommand({ id: \"niceeval.agent.probe.bub\", revision: identity.revision, inputs: identity }, async (sandbox) => {\n await sandbox.runShellOrThrow(`test -x ${BUB} && test \"$(cat ${marker} 2>/dev/null)\" = ${shellQuote(identity.revision)}`);\n });\n // sandboxId → { home, workspace }; persists values detected in setup() so send() can use them.\n const sessionInfo = new Map<string, {\n home: string;\n workspace: string;\n }>();\n return registerAgentLifecycleHookCommands(defineSandboxAgent({\n name: \"bub\",\n ensure: { identity, probe },\n installers: [{\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox) => {\n await sandbox.runShellOrThrow(`test -x ${UV} || (curl -LsSf https://astral.sh/uv/install.sh | sh)`);\n await sandbox.writeText(BUB_OVERRIDE_FILE, `${pin.requirement}\\n`);\n const withPlugins = packages.map((pkg) => `--with ${shellQuote(pkg)}`).join(\" \");\n let last = \"\";\n for (let attempt = 1; attempt <= 3; attempt += 1) {\n const result = await sandbox.runShell(`${UV} tool install --reinstall --python 3.12 --prerelease allow 'bub' --overrides ${BUB_OVERRIDE_FILE} --with ${shellQuote(pin.otelPlugin)}${withPlugins ? ` ${withPlugins}` : \"\"}`);\n if (result.exitCode === 0) {\n await sandbox.runShellOrThrow(`mkdir -p \"$(dirname ${marker})\" && printf '%s' ${shellQuote(identity.revision)} > ${marker}`);\n return;\n }\n last = (result.stdout + result.stderr).split(\"\\n\").slice(-15).join(\"\\n\");\n }\n throw new Error(t(\"bub.installFailed\", { attempts: 3, tail: last }));\n },\n }],\n // 官方 adapter:transcript 经生命周期 fixture 验证,全通道 complete。\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapBubSpans,\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n BUB_TAPESTORE_OTEL_ENABLED: \"true\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n async setup(sb, ctx) {\n // home 必须来自运行时探测:各 sandbox provider 不同(/home/node、/home/vercel-sandbox…),\n // 兜一个 provider 专属常量会静默走错路径(tape 读不到 → 空事件流 → 负断言假通过)。\n const home = (await sb.runShell(\"printf '%s' $HOME\")).stdout.trim();\n if (!home)\n throw new Error(t(\"bub.homeDetectFailed\"));\n const workspace = sb.workdir;\n sessionInfo.set(sb.sandboxId, { home, workspace });\n // Agent CLI 已由 runner 的 agent.ensure 循环完成安装与复检。\n // adapter setup 只写本 Attempt 的 runtime config。\n if (!(await sb.pathExists(`${workspace}/AGENTS.md`))) {\n await shared.writeFile(sb, `${workspace}/AGENTS.md`, [\n `You are a coding agent working in a Next.js project at ${workspace}.`,\n ``,\n `Implement the requested feature by writing files directly to disk with the available tools:`,\n `- fs_write(path, content): create or overwrite a file`,\n `- fs_edit(path, old, new): edit an existing file`,\n `- bash(cmd): run shell commands`,\n ``,\n `Do NOT respond with only a text explanation — write the actual code files.`,\n `After writing, verify with bash(\"cd ${workspace} && npm run build\").`,\n ].join(\"\\n\"));\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // bub 没有原生 Skill 加载机制:装进目录不等于会被读到,发现指引跟着一起写。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (packages.length)\n manifest.pythonPlugins = packages.map((pkg) => ({ package: pkg }));\n if (manifest.skills.length || manifest.pythonPlugins?.length) {\n ctx.reportSetup(manifest);\n }\n // 安装后钩子(postSetup):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,\n // 钩子失败不该丢掉这份证据。\n await runPostSetupHooks(sb, ctx, \"bub\", config?.postSetup);\n },\n async teardown(sb, ctx) {\n // preTeardown 与 postSetup 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。\n // bub 目前没有其它收尾步骤,这段就是整个 teardown。\n await runPreTeardownHooks(sb, ctx, \"bub\", config?.preTeardown);\n },\n async send(input, ctx) {\n const sb = ctx.sandbox;\n const info = sessionInfo.get(sb.sandboxId);\n if (!info)\n throw new Error(t(\"bub.setupNotRun\"));\n const { home, workspace } = info;\n const bubHome = `${home}/.bub`;\n // 会话契约:ctx.session.id 未记录时开新 tape(新 sessionId),否则 resume 传入的 id。\n // tape 路径由 md5(workspace)+md5(sessionId) 决定,同沙箱多会话靠 sessionId 区分。\n const sessionId = ctx.session.id ?? `fe-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const apiKey = getApiKey();\n const env: globalThis.Record<string, string> = {\n BUB_API_KEY: apiKey,\n BUB_API_BASE: getApiBase(),\n BUB_HOME: bubHome,\n ...ctx.telemetry?.env,\n };\n // model 归属:实验决定(ctx.model),省略时交给 bub 原生默认 / 用户环境,不硬编码。\n if (ctx.model)\n env.BUB_MODEL = `openai:${ctx.model}`;\n const res = await sb.runShell(`${BUB} --workspace ${workspace} run ${shared.shellQuote(input.text)} --session-id ${sessionId}`, { env, sensitiveValues: [apiKey], stream: true });\n const raw = await sb.readText(tapePath(workspace, sessionId, bubHome)).catch(() => undefined);\n const parsed = shared.parseBub(raw);\n const events = [...parsed.events];\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"Bub tape was unavailable; tool trajectory was not observed.\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n }\n else if (!parsed.parseSuccess) {\n const reason = \"Some Bub tape lines could not be parsed.\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: \"completed\",\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n }), config?.postSetup, config?.preTeardown);\n}\nexport default bubAgent();\n"]}
|
|
1
|
+
{"version":3,"file":"bub.js","sourceRoot":"","sources":["bub.ts"],"names":[],"mappings":"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","sourcesContent":["import { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { requireEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapBubSpans } from \"../o11y/otlp/mappers/bub.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { registerAgentLifecycleHookCommands, runPostSetupHooks, runPreTeardownHooks, } from \"./post-setup.ts\";\nimport type { Agent, AgentSetupManifest, SkillSpec, TurnEvidenceCoverage } from \"../types.ts\";\nimport type { SandboxCommand } from \"../sandbox/commands.ts\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { t } from \"../i18n/index.ts\";\nimport { BUB_INSTALL_MARKER, DEFAULT_BUB_DEPENDENCY_OVERRIDES, DEFAULT_BUB_OTEL_PLUGIN, DEFAULT_BUB_REQUIREMENT, bubInstallHash, bubRequirement, normalizeBubPackages, } from \"./bub-install-spec.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { defineSandboxCommand } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport { DEFAULT_BUB_VERSION } from \"./coding-cli-versions.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// bub 的 agent adapter(沙箱型)。\n//\n// ⚠️ 现实校正:bub 是 PyPI 上的 `bub`(alpha,Python 3.12),不是 npm 包。\n// · 安装:uv tool install bub(uv 自带 python 3.12,免 root)。\n// · 调用:bub run \"<prompt>\" --session-id <id> --workspace <path>\n// · 模型 + 代理:BUB_MODEL=openai:<model>、OPENAI_BASE_URL、OPENAI_API_KEY。\n// · 记忆:tape(总是开),落盘在 ~/.bub/tapes/<md5(ws)[:16]>__<md5(sess)[:16]>.jsonl。\n// ───────────────────────────────────────────────────────────────────────────\n/**\n * Bub 的扩展单元 —— **只属于 Bub**:Bub 的插件是运行环境里的 Python Package,\n * 与 Claude Code / Codex 的 native plugin 没有共同的安装协议,不共用类型。\n */\nexport interface PythonPluginSpec {\n /** PyPI Package、Version Specifier 或 Git URL(如 `bub-plugin-memory==1.3.0`、`git+https://…@8f3c1a2`)。 */\n package: string;\n}\nexport interface BubConfig {\n /** OpenAI 兼容代理的 API key。省略时读 OPENAI_API_KEY env。 */\n apiKey?: string;\n /** OpenAI 兼容代理的 base URL。省略时读 OPENAI_BASE_URL env。 */\n apiBase?: string;\n /**\n * 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md(bub 没有原生 Skill 加载机制)。\n */\n skills?: SkillSpec[];\n /**\n * 装哪一版 Bub(PyPI 版本号,如 `\"0.4.0\"`)。省略时用 NiceEval 钉的默认版本;\n * 永远是确定版本,不装 latest —— 被测对象的版本要能从实验配置读出来。\n */\n version?: string;\n /**\n * OTel tape store 插件的 git 依赖(时间轨的来源)。省略时用 NiceEval 钉的默认 pin。\n *\n * 插件与 Bub 的 tape 协议同代:默认 pin 从 `bub.tape` 取类型,要求 Bub ≥ 0.3.10;更早的\n * 插件 commit 按 republic 的类型校验,配 Bub ≤ 0.3.9。配错代不会安装失败,而是 span 全被拒、\n * 时间轨静默为空 —— 所以往回钉 `version` 时必须同批钉配套的插件 commit。\n */\n otelPlugin?: string;\n /**\n * 额外装进 bub tool 环境的 Python Package,每个 Sandbox setup 时进 `uv tool install … --with <pkg>`。\n * 规范化后的 package 列表进安装 checkpoint key:plugin 集合不同的两个 agent 变体不会复用同一个\n * 安装 checkpoint(否则第二个变体会静默拿到第一个变体的环境)。\n */\n pythonPlugins?: PythonPluginSpec[];\n /**\n * 安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在装 bub、装 Skills /\n * Python package、写 manifest 全部完成后执行。抛错按基础设施错误计(attempt errored)。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n postSetup?: SandboxCommand[];\n /**\n * 与 `postSetup` 成对的收尾 Hook:按 `postSetup` 的逆序语义,在 agent 自己的 teardown 步骤\n * 之前执行(LIFO 镜像 —— `postSetup` 跑在 agent 安装之后,`preTeardown` 就跑在 agent 收尾\n * 之前),当且仅当 `postSetup` 的时点走到过才触发。抛错按基础设施错误计,由 teardown 段\n * 按 teardown-failed 诊断收束。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n preTeardown?: SandboxCommand[];\n}\nconst UV = \"$HOME/.local/bin/uv\";\n/** bub 的 skill 目录(`skills` 生态的「通用」目录);bub 不原生扫描它,靠 AGENTS.md 的发现指引。 */\nconst SKILL_DIR = \".agents/skills\";\n// bub 与 OTel 插件的 pin 都从 config 来(缺省用源码里的默认 pin)——不设环境变量后门:\n// 装哪个包是配置,配置的家是代码(边界见 docs/architecture.md「配置从代码来,凭据从环境来」)。\n//\n// override 文件不是历史包袱:插件所在 workspace 把 `bub` 声明成 git 依赖,不覆盖的话每次\n// 安装都会去拉 Bub 主干,版本失控。所以安装前总是先把 `bub==<version>` 写进这个文件。\nconst BUB_OVERRIDE_FILE = \"/tmp/bub-override.txt\";\n/** 一个 agent 变体装的那套 bub:requirement + OTel 插件,两者都进安装指纹。 */\ninterface BubInstallPin {\n requirement: string;\n otelPlugin: string;\n dependencyOverrides: readonly string[];\n}\nfunction resolvePin(config?: BubConfig): BubInstallPin {\n const version = config?.version ?? DEFAULT_BUB_VERSION;\n return {\n requirement: config?.version ? bubRequirement(config.version) : DEFAULT_BUB_REQUIREMENT,\n otelPlugin: config?.otelPlugin ?? DEFAULT_BUB_OTEL_PLUGIN,\n // NiceEval can reproduce the default release's upstream lock exactly. A caller-selected\n // historical Bub version owns a different closure, so do not silently apply 0.4.0's pins.\n dependencyOverrides: version === DEFAULT_BUB_VERSION ? DEFAULT_BUB_DEPENDENCY_OVERRIDES : [],\n };\n}\n// NiceEval 的预制配方与运行时安装都写到 $HOME/.local;显式使用该路径,避免 PATH 上\n// 另一个未知版本的 bub 抢先命中。\nconst BUB = \"$HOME/.local/bin/bub\";\n/** 规范化 python plugin:去空白、丢空串、去重 —— 安装命令与 checkpoint key 用同一份列表。 */\nfunction normalizePackages(plugins?: readonly PythonPluginSpec[]): string[] {\n return normalizeBubPackages((plugins ?? []).map((plugin) => plugin.package));\n}\nfunction installHashOf(packages: readonly string[], pin: BubInstallPin): string {\n return bubInstallHash(packages, pin.requirement, pin.otelPlugin, pin.dependencyOverrides);\n}\nfunction tapePath(workspace: string, sessionId: string, bubHome: string): string {\n const w = createHash(\"md5\").update(workspace).digest(\"hex\").slice(0, 16);\n const s = createHash(\"md5\").update(sessionId).digest(\"hex\").slice(0, 16);\n return `${bubHome}/tapes/${w}__${s}.jsonl`;\n}\nexport function bubAgent(config?: BubConfig): Agent {\n const getApiKey = () => config?.apiKey ?? requireEnv(\"OPENAI_API_KEY\");\n const getApiBase = () => config?.apiBase ?? requireEnv(\"OPENAI_BASE_URL\");\n const packages = normalizePackages(config?.pythonPlugins);\n const pin = resolvePin(config);\n const identity = {\n agent: \"bub\",\n version: config?.version ?? DEFAULT_BUB_VERSION,\n revision: installHashOf(packages, pin),\n } as const;\n const marker = `$HOME/${BUB_INSTALL_MARKER}`;\n const probe = defineSandboxCommand({ id: \"niceeval.agent.probe.bub\", revision: identity.revision, inputs: identity }, async (sandbox) => {\n await sandbox.runShellOrThrow(`test -x ${BUB} && test \"$(cat ${marker} 2>/dev/null)\" = ${shellQuote(identity.revision)}`);\n });\n // sandboxId → { home, workspace }; persists values detected in setup() so send() can use them.\n const sessionInfo = new Map<string, {\n home: string;\n workspace: string;\n }>();\n return registerAgentLifecycleHookCommands(defineSandboxAgent({\n name: \"bub\",\n ensure: { identity, probe },\n installers: [{\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox) => {\n await sandbox.runShellOrThrow(`test -x ${UV} || (curl -LsSf https://astral.sh/uv/install.sh | sh)`);\n await sandbox.writeText(BUB_OVERRIDE_FILE, `${[pin.requirement, ...pin.dependencyOverrides].join(\"\\n\")}\\n`);\n const withPlugins = packages.map((pkg) => `--with ${shellQuote(pkg)}`).join(\" \");\n let last = \"\";\n for (let attempt = 1; attempt <= 3; attempt += 1) {\n const result = await sandbox.runShell(`${UV} tool install --reinstall --python 3.12 --prerelease allow 'bub' --overrides ${BUB_OVERRIDE_FILE} --with ${shellQuote(pin.otelPlugin)}${withPlugins ? ` ${withPlugins}` : \"\"}`);\n if (result.exitCode === 0) {\n await sandbox.runShellOrThrow(`mkdir -p \"$(dirname ${marker})\" && printf '%s' ${shellQuote(identity.revision)} > ${marker}`);\n return;\n }\n last = (result.stdout + result.stderr).split(\"\\n\").slice(-15).join(\"\\n\");\n }\n throw new Error(t(\"bub.installFailed\", { attempts: 3, tail: last }));\n },\n }],\n // 官方 adapter:transcript 经生命周期 fixture 验证,全通道 complete。\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapBubSpans,\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n BUB_TAPESTORE_OTEL_ENABLED: \"true\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n async setup(sb, ctx) {\n // home 必须来自运行时探测:各 sandbox provider 不同(/home/node、/home/vercel-sandbox…),\n // 兜一个 provider 专属常量会静默走错路径(tape 读不到 → 空事件流 → 负断言假通过)。\n const home = (await sb.runShell(\"printf '%s' $HOME\")).stdout.trim();\n if (!home)\n throw new Error(t(\"bub.homeDetectFailed\"));\n const workspace = sb.workdir;\n sessionInfo.set(sb.sandboxId, { home, workspace });\n // Agent CLI 已由 runner 的 agent.ensure 循环完成安装与复检。\n // adapter setup 只写本 Attempt 的 runtime config。\n if (!(await sb.pathExists(`${workspace}/AGENTS.md`))) {\n await shared.writeFile(sb, `${workspace}/AGENTS.md`, [\n `You are a coding agent working in a Next.js project at ${workspace}.`,\n ``,\n `Implement the requested feature by writing files directly to disk with the available tools:`,\n `- fs_write(path, content): create or overwrite a file`,\n `- fs_edit(path, old, new): edit an existing file`,\n `- bash(cmd): run shell commands`,\n ``,\n `Do NOT respond with only a text explanation — write the actual code files.`,\n `After writing, verify with bash(\"cd ${workspace} && npm run build\").`,\n ].join(\"\\n\"));\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // bub 没有原生 Skill 加载机制:装进目录不等于会被读到,发现指引跟着一起写。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (packages.length)\n manifest.pythonPlugins = packages.map((pkg) => ({ package: pkg }));\n if (manifest.skills.length || manifest.pythonPlugins?.length) {\n ctx.reportSetup(manifest);\n }\n // 安装后钩子(postSetup):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,\n // 钩子失败不该丢掉这份证据。\n await runPostSetupHooks(sb, ctx, \"bub\", config?.postSetup);\n },\n async teardown(sb, ctx) {\n // preTeardown 与 postSetup 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。\n // bub 目前没有其它收尾步骤,这段就是整个 teardown。\n await runPreTeardownHooks(sb, ctx, \"bub\", config?.preTeardown);\n },\n async send(input, ctx) {\n const sb = ctx.sandbox;\n const info = sessionInfo.get(sb.sandboxId);\n if (!info)\n throw new Error(t(\"bub.setupNotRun\"));\n const { home, workspace } = info;\n const bubHome = `${home}/.bub`;\n // 会话契约:ctx.session.id 未记录时开新 tape(新 sessionId),否则 resume 传入的 id。\n // tape 路径由 md5(workspace)+md5(sessionId) 决定,同沙箱多会话靠 sessionId 区分。\n const sessionId = ctx.session.id ?? `fe-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const apiKey = getApiKey();\n const env: globalThis.Record<string, string> = {\n OPENAI_API_KEY: apiKey,\n OPENAI_BASE_URL: getApiBase(),\n BUB_HOME: bubHome,\n ...ctx.telemetry?.env,\n };\n // model 归属:实验决定(ctx.model),省略时交给 bub 原生默认 / 用户环境,不硬编码。\n if (ctx.model)\n env.BUB_MODEL = `openai:${ctx.model}`;\n const res = await sb.runShell(`${BUB} --workspace ${workspace} run ${shared.shellQuote(input.text)} --session-id ${sessionId}`, { env, sensitiveValues: [apiKey], stream: true });\n const raw = await sb.readText(tapePath(workspace, sessionId, bubHome)).catch(() => undefined);\n const parsed = shared.parseBub(raw);\n const events = [...parsed.events];\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"Bub tape was unavailable; tool trajectory was not observed.\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n }\n else if (!parsed.parseSuccess) {\n const reason = \"Some Bub tape lines could not be parsed.\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: \"completed\",\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n }), config?.postSetup, config?.preTeardown);\n}\nexport default bubAgent();\n"]}
|
package/dist/agents/bub.d.cts
CHANGED
|
@@ -9,9 +9,9 @@ export interface PythonPluginSpec {
|
|
|
9
9
|
package: string;
|
|
10
10
|
}
|
|
11
11
|
export interface BubConfig {
|
|
12
|
-
/** OpenAI 兼容代理的 API key。省略时读
|
|
12
|
+
/** OpenAI 兼容代理的 API key。省略时读 OPENAI_API_KEY env。 */
|
|
13
13
|
apiKey?: string;
|
|
14
|
-
/** OpenAI 兼容代理的 base URL。省略时读
|
|
14
|
+
/** OpenAI 兼容代理的 base URL。省略时读 OPENAI_BASE_URL env。 */
|
|
15
15
|
apiBase?: string;
|
|
16
16
|
/**
|
|
17
17
|
* 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。
|
package/dist/agents/bub.d.mts
CHANGED
|
@@ -9,9 +9,9 @@ export interface PythonPluginSpec {
|
|
|
9
9
|
package: string;
|
|
10
10
|
}
|
|
11
11
|
export interface BubConfig {
|
|
12
|
-
/** OpenAI 兼容代理的 API key。省略时读
|
|
12
|
+
/** OpenAI 兼容代理的 API key。省略时读 OPENAI_API_KEY env。 */
|
|
13
13
|
apiKey?: string;
|
|
14
|
-
/** OpenAI 兼容代理的 base URL。省略时读
|
|
14
|
+
/** OpenAI 兼容代理的 base URL。省略时读 OPENAI_BASE_URL env。 */
|
|
15
15
|
apiBase?: string;
|
|
16
16
|
/**
|
|
17
17
|
* 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。
|
package/dist/agents/bub.d.ts
CHANGED
|
@@ -9,9 +9,9 @@ export interface PythonPluginSpec {
|
|
|
9
9
|
package: string;
|
|
10
10
|
}
|
|
11
11
|
export interface BubConfig {
|
|
12
|
-
/** OpenAI 兼容代理的 API key。省略时读
|
|
12
|
+
/** OpenAI 兼容代理的 API key。省略时读 OPENAI_API_KEY env。 */
|
|
13
13
|
apiKey?: string;
|
|
14
|
-
/** OpenAI 兼容代理的 base URL。省略时读
|
|
14
|
+
/** OpenAI 兼容代理的 base URL。省略时读 OPENAI_BASE_URL env。 */
|
|
15
15
|
apiBase?: string;
|
|
16
16
|
/**
|
|
17
17
|
* 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["claude-code.ts"],"names":[],"mappings":"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","sourcesContent":["import { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { Effect } from \"effect\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { cloneRepo, installSkills } from \"./skills.ts\";\nimport { verifyMarketplaceName } from \"./marketplace.ts\";\nimport { assertJsonNativeConfig, loadNativeConfigFileEffect, uploadNativeConfigFileEffect, type LoadedNativeConfig, } from \"./native-config.ts\";\nimport { mapClaudeCodeSpans } from \"../o11y/otlp/mappers/claude-code.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { DEFAULT_CLAUDE_CODE_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { assertMcpServers, isHttpMcp, mcpManifestEntries } from \"./mcp.ts\";\nimport { registerAgentLifecycleHookCommands, runPostSetupHooks, runPreTeardownHooks, } from \"./post-setup.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport type { Agent, AgentSetupManifest, McpServer, Sandbox, SkillSpec, TurnEvidenceCoverage } from \"../types.ts\";\nimport type { SandboxCommand } from \"../sandbox/commands.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// Claude Code 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `claude` CLI,跑完读回 transcript JSONL → 标准事件流。\n// 扩展(skill / plugin / MCP)全部是构造参数,setup 里翻译成 Claude Code 的原生形态,\n// 装完写一份 manifest(见 docs/feature/adapters/architecture/coding-agent-extensions.md)。\n// ───────────────────────────────────────────────────────────────────────────\n/** Claude Code 的 skill 目录(project 级):CLI 原生扫描它,不需要额外的发现指引。 */\nconst SKILL_DIR = \".claude/skills\";\n/** 沙箱里用户级 settings 的落点:`settingsFile` 的原始字节原样替换这份原本为空的用户层。 */\nconst SETTINGS_PATH = \"~/.claude/settings.json\";\n/**\n * `settingsFile` 的保留键:`model` 归 experiment(经 `--model` flag),`env` 归 Adapter\n * (鉴权与 OTel 导出经进程环境变量注入)。清单定稿见 docs/feature/adapters/sdk/claude-code/README.md。\n */\nconst RESERVED_SETTINGS_KEYS = [\"model\", \"env\"] as const;\n/**\n * Claude Code 的原生 Plugin —— **只属于 Claude Code**,不能传给 Codex(Codex 有自己的\n * {@link import(\"./codex.ts\").CodexPluginSpec})。每一项同时声明 Marketplace 连接和其中的 Plugin 名:\n * 连上 Marketplace 不等于启用它的全部 Plugin。\n */\nexport interface ClaudeCodePluginSpec {\n marketplace: {\n /** 目标仓库 manifest 声明的真实 name;CLI 不支持由调用方另取连接别名。 */\n name: string;\n /** Marketplace 来源:GitHub `owner/repo`、Git URL 或路径。 */\n source: string;\n /** 固定 Marketplace 的 Tag、Commit 或 Branch;给了就先按 ref clone 下来再以本地路径连接。 */\n ref?: string;\n };\n /** Marketplace 中的 Plugin 名。 */\n name: string;\n}\nexport interface ClaudeCodeConfig {\n /** Anthropic API key。省略时读 ANTHROPIC_API_KEY env。 */\n apiKey?: string;\n /**\n * 自定义 API base URL(代理 / 内网端点)。省略时读 ANTHROPIC_BASE_URL env;\n * 两者都没有则用 Anthropic 官方端点(claude CLI 默认行为)。\n */\n baseUrl?: string;\n /**\n * Extra process environment for Claude Code. Values stay private runtime data and do not enter carry identity.\n * Mirror behavior-changing non-secret values into Experiment flags or the owning Plugin identity.\n */\n env?: Readonly<globalThis.Record<string, string>>;\n /**\n * 最多跑几个 tool-use 轮次(→ `--max-turns`)。\n * 控制评估用例成本上限;省略时用 CLI 原生默认(无限制)。\n */\n maxTurns?: number;\n /**\n * 额外 MCP server(每个 Sandbox setup 时写进用户级 ~/.claude.json)。\n * stdio 形态写 command(可带 args / env);Streamable HTTP 形态写 url(可带 headers,\n * 逐字进请求头),落成 { \"type\": \"http\", \"url\": …, \"headers\": … } 条目。\n */\n mcpServers?: readonly McpServer[];\n /**\n * 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 project 级 `.claude/skills/<name>/`,claude CLI 原生发现。\n */\n skills?: readonly SkillSpec[];\n /** Claude Code 原生 Plugin(先连 Marketplace,再从中装指定 Plugin)。 */\n plugins?: readonly ClaudeCodePluginSpec[];\n /**\n * 一份完整的 Claude Code `settings.json`(官方格式)在本地项目里的路径 —— 相对运行\n * niceeval 的项目根(含 `niceeval.config.ts` 的目录)解析,不是 Sandbox 内路径;只接受\n * 项目根内的相对路径,包含 `..` 的路径、绝对路径、`~` 路径和解析后逃出项目根的符号链接\n * 都在 setup 阶段报错。原始字节原样上传为 Sandbox 里原本为空的用户级 `~/.claude/settings.json`\n * (不继承宿主机配置、不拼接、不重新序列化);保留键 `model` 与 `env` 出现在文件里\n * setup 报错。manifest 只记项目相对路径与字节 SHA-256,不落正文。\n */\n settingsFile?: string;\n /**\n * 安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在写 settings、挂 MCP、\n * 装 Skills / Plugin、写 manifest 全部完成后执行,适合跑插件自带的 setup 脚本这类\n * 「安装产物就位后才能跑」的过程动作。抛错按基础设施错误计(attempt errored)。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n postSetup?: readonly SandboxCommand[];\n /**\n * 与 `postSetup` 成对的收尾 Hook:按 `postSetup` 的逆序语义,在 agent 自己的 teardown 步骤\n * 之前执行(LIFO 镜像 —— `postSetup` 跑在 agent 安装之后,`preTeardown` 就跑在 agent 收尾\n * 之前),当且仅当 `postSetup` 的时点走到过才触发。抛错按基础设施错误计,由 teardown 段\n * 按 teardown-failed 诊断收束。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n preTeardown?: readonly SandboxCommand[];\n}\nexport function claudeCodeAgent(config?: ClaudeCodeConfig): Agent {\n const getApiKey = () => config?.apiKey ?? requireEnv(\"ANTHROPIC_API_KEY\");\n const getBaseUrl = () => config?.baseUrl ?? getEnv(\"ANTHROPIC_BASE_URL\");\n const agentEnv = Object.freeze({ ...(config?.env ?? {}) });\n const agentEnvSensitiveValues = Object.freeze(Object.values(agentEnv));\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"claude-code\",\n version: DEFAULT_CLAUDE_CODE_CLI_VERSION,\n revision: String(AGENT_BASELINE_RECIPE_REVISION[\"claude-code\"]),\n },\n packageName: \"@anthropic-ai/claude-code\",\n bin: \"claude\",\n });\n return registerAgentLifecycleHookCommands(defineSandboxAgent({\n name: \"claude-code\",\n // 官方 adapter:transcript 经生命周期 fixture 验证,全通道 complete。\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapClaudeCodeSpans,\n ensure,\n installers: [installer],\n // claude CLI 原生 OTLP trace spans(beta):interaction / llm_request / tool 层级,\n // 需要 CLAUDE_CODE_ENHANCED_TELEMETRY_BETA 开关。\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n CLAUDE_CODE_ENABLE_TELEMETRY: \"1\",\n CLAUDE_CODE_ENHANCED_TELEMETRY_BETA: \"1\",\n OTEL_TRACES_EXPORTER: \"otlp\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n // CLI 是短命进程:压短导出间隔,别让 span 死在退出前的批处理队列里。\n OTEL_TRACES_EXPORT_INTERVAL: \"1000\",\n }),\n },\n setup: (sb, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n // 原生配置文件最先落(安装顺序契约的第 1 步):本地读原始字节 → 验 JSON 语法与保留键\n // → 原样替换沙箱里原本为空的用户级 settings.json。字节 SHA-256 进 manifest 与安装\n // checkpoint key(见 native-config.ts 的 nativeConfigCheckpointItem)。\n let settings: LoadedNativeConfig | undefined;\n if (config?.settingsFile !== undefined) {\n settings = yield* loadNativeConfigFileEffect({\n agent: \"claude-code\",\n field: \"settingsFile\",\n path: config.settingsFile,\n });\n yield* Effect.try({\n try: () => assertJsonNativeConfig(settings!, {\n agent: \"claude-code\",\n field: \"settingsFile\",\n reservedKeys: RESERVED_SETTINGS_KEYS,\n }),\n catch: (cause) => cause,\n });\n yield* uploadNativeConfigFileEffect(sb, settings, SETTINGS_PATH);\n }\n yield* Effect.tryPromise({\n try: async () => {\n if (config?.mcpServers?.length) {\n assertMcpServers(config.mcpServers);\n const servers: globalThis.Record<string, object> = {};\n const sensitiveValues: string[] = [];\n for (const s of config.mcpServers) {\n if (isHttpMcp(s)) {\n const headers = s.headers;\n if (headers)\n sensitiveValues.push(...Object.values(headers));\n servers[s.name] = {\n type: \"http\",\n url: s.url,\n ...(headers && Object.keys(headers).length && { headers }),\n };\n }\n else {\n const env = s.env;\n if (env)\n sensitiveValues.push(...Object.values(env));\n servers[s.name] = {\n command: s.command,\n ...(s.args?.length && { args: s.args }),\n ...(env && { env }),\n };\n }\n }\n // 用户级 MCP 配置在 ~/.claude.json(顶层 mcpServers 字段),不是 ~/.claude/claude.json\n // ——后者 claude CLI 根本不读,MCP 静默挂不上(本机 `claude mcp list` 可核对)。\n await shared.writeFile(sb, \"~/.claude.json\", JSON.stringify({ mcpServers: servers }, null, 2), { sensitiveValues });\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n }\n if (config?.plugins?.length) {\n manifest.nativePlugins = await installPlugins(sb, config.plugins);\n }\n if (config?.mcpServers?.length) {\n // manifest 里只记「挂了哪个 server、怎么连」;env / headers 里可能有 token,不落盘。\n manifest.mcpServers = mcpManifestEntries(config.mcpServers);\n }\n if (settings) {\n // 只记来源路径与字节哈希,不落正文(任意官方配置都可能带敏感字符串)。\n manifest.nativeConfigFile = { agent: \"claude-code\", path: settings.path, sha256: settings.sha256 };\n }\n // 什么都没装就不写 manifest:空 artifact 不落文件(同 results 的落盘规则)。\n if (manifest.skills.length ||\n manifest.nativePlugins?.length ||\n manifest.mcpServers?.length ||\n manifest.nativeConfigFile) {\n ctx.reportSetup(manifest);\n }\n // 安装后钩子(postSetup):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,\n // 钩子失败不该丢掉这份证据。\n await runPostSetupHooks(sb, ctx, \"claude-code\", config?.postSetup);\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n async teardown(sb, ctx) {\n // preTeardown 与 postSetup 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。\n // claude-code 目前没有其它收尾步骤,这段就是整个 teardown。\n await runPreTeardownHooks(sb, ctx, \"claude-code\", config?.preTeardown);\n },\n send: (input, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n const sb = ctx.sandbox;\n const claudeBin = yield* resolveAgentBinEffect(sb, \"claude\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const args = [\"--print\", \"--dangerously-skip-permissions\"];\n if (ctx.model)\n args.push(\"--model\", ctx.model);\n if (config?.maxTurns != null)\n args.push(\"--max-turns\", String(config.maxTurns));\n if (ctx.flags.webResearch)\n args.push(\"--allowedTools\", \"WebSearch,WebFetch\");\n if (ctx.session.id)\n args.push(\"--resume\", ctx.session.id);\n // --allowedTools is variadic in Claude Code. Terminate option parsing so the\n // positional prompt cannot be consumed as one more allowed tool name.\n args.push(\"--\", input.text);\n const apiKey = getApiKey();\n const env: globalThis.Record<string, string> = {\n ...agentEnv,\n ANTHROPIC_API_KEY: apiKey,\n // Eval runs must not silently change CLI version after the sandbox artifact was built.\n DISABLE_AUTOUPDATER: \"1\",\n ...ctx.telemetry?.env,\n };\n const baseUrl = getBaseUrl();\n if (baseUrl)\n env[\"ANTHROPIC_BASE_URL\"] = baseUrl;\n const res = await sb.runCommand(claudeBin, args, {\n env,\n sensitiveValues: [apiKey, ...agentEnvSensitiveValues],\n stream: true,\n signal,\n });\n // 「最新 jsonl」而非按 session id 精确定位:--resume 会 fork 新 session id 的新文件,\n // 精确匹配旧 id 会读到过期 transcript。send 串行,最新的一定是刚跑完的这次。\n const raw = await shared.captureLatestJsonl(sb, \"~/.claude/projects\");\n ctx.session.capture(shared.sessionIdFromClaudeTranscript(raw));\n const parsed = shared.parseClaudeCode(raw);\n const events = [...parsed.events];\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"Claude Code transcript was unavailable; tool trajectory was not observed.\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n }\n else if (!parsed.parseSuccess) {\n const reason = \"Some Claude Code 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 if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: \"completed\" as const,\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n }), config?.postSetup, config?.preTeardown);\n}\n/**\n * 先按 `marketplace.name` 建立 Marketplace 连接(同名只连一次,add 后回读注册列表校验\n * 名字真的注册上了),再从该连接装指定 Plugin。\n * `claude plugin marketplace add` 没有钉 ref 的入口,所以要钉 ref 时先自己按 ref clone 下来,\n * 再以本地路径连接(CLI 支持 path 形态的 marketplace 源)—— 「来源必须可复现」不因 CLI 少个\n * flag 就打折。\n *\n * 注册类命令是追加式的,而 Sandbox 复用下沙箱带着上一条 attempt 的 `$HOME` 进场,所以每一步\n * 先读沙箱真实状态、把它收敛到声明,再执行 add / install(契约见 docs/feature/adapters/\n * architecture/coding-agent-extensions.md「安装收敛:不假设沙箱空白」)。空白沙箱读回为空,\n * 走的是同一条代码路径。\n */\nexport async function installPlugins(sb: Sandbox, plugins: readonly ClaudeCodePluginSpec[]): Promise<NonNullable<AgentSetupManifest[\"nativePlugins\"]>> {\n const connected = new Set<string>();\n const out: NonNullable<AgentSetupManifest[\"nativePlugins\"]> = [];\n // 摘除顺序固定「先卸完全部同名插件、后摘 marketplace」:插件按 `<plugin>@<marketplace>` 定位,\n // 注册先没了就定位不到残留的那份安装。整体先于安装循环执行,多个插件共用一个 marketplace\n // 时第二个插件的残留才摘得到。\n for (const plugin of plugins) {\n await uninstallPlugins(sb, plugin.name);\n }\n for (const plugin of plugins) {\n const { marketplace } = plugin;\n if (!connected.has(marketplace.name)) {\n await dropRegisteredMarketplace(sb, marketplace.name);\n const source = marketplace.ref\n ? await cloneRepo(sb, marketplace.source, marketplace.ref)\n : marketplace.source;\n const addCommand = `${shared.agentBin(\"claude\")} plugin marketplace add ${shared.shellQuote(source)}`;\n let add = await sb.runShell(addCommand);\n // The native CLI fetches remote marketplace metadata during add. A\n // transient connection failure must not discard an otherwise reusable\n // Sandbox, but every retry starts from the same declared empty state.\n for (let attempt = 1; add.exitCode !== 0 && attempt < 3; attempt += 1) {\n await dropRegisteredMarketplace(sb, marketplace.name);\n add = await sb.runShell(addCommand);\n }\n if (add.exitCode !== 0) {\n throw new Error(t(\"plugin.marketplaceFailed\", {\n agent: \"claude-code\",\n name: marketplace.name,\n source: marketplace.source,\n ref: marketplace.ref ?? \"(default)\",\n tail: outputTail(add),\n }));\n }\n // add 静默按目标仓库 manifest 的 name 注册,错名会拖到 plugin install 才炸;\n // 回读注册列表立刻校验(契约与真机复现见 marketplace.ts 顶部说明)。\n await verifyMarketplaceName(sb, {\n agent: \"claude-code\",\n listCommand: \"claude plugin marketplace list --json\",\n marketplace,\n knownNames: connected,\n });\n connected.add(marketplace.name);\n }\n const id = `${plugin.name}@${marketplace.name}`;\n const install = await sb.runShell(`${shared.agentBin(\"claude\")} plugin install ${shared.shellQuote(id)}`);\n if (install.exitCode !== 0) {\n throw new Error(t(\"plugin.installFailed\", {\n agent: \"claude-code\",\n name: plugin.name,\n marketplace: marketplace.name,\n tail: outputTail(install),\n }));\n }\n const resolvedVersion = await installedVersion(sb, id);\n out.push({\n agent: \"claude-code\",\n marketplace: {\n name: marketplace.name,\n source: marketplace.source,\n ...(marketplace.ref !== undefined ? { ref: marketplace.ref } : {}),\n },\n name: plugin.name,\n ...(resolvedVersion !== undefined ? { resolvedVersion } : {}),\n });\n }\n return out;\n}\n/**\n * `claude plugin list --json` 的已安装条目:`[{ id: \"<plugin>@<marketplace>\", version, scope, … }]`\n * (真机核对 claude 2.1.220)。同一个 plugin 可以在 user / project / local 多个 scope 各有一条,\n * 卸载要带上条目自己的 scope。抠不出(非 JSON / 未知形状)返回 undefined,由调用方决定放行还是抛错。\n */\ninterface ClaudeInstalledPlugin {\n id?: string;\n version?: string;\n scope?: string;\n}\nfunction claudeInstalledPlugins(stdout: string): ClaudeInstalledPlugin[] | undefined {\n let raw: unknown;\n try {\n raw = JSON.parse(stdout);\n }\n catch {\n return undefined;\n }\n if (!Array.isArray(raw))\n return undefined;\n return raw.filter((item): item is ClaudeInstalledPlugin => !!item && typeof item === \"object\");\n}\n/**\n * 与声明同名的 Plugin 已安装就先卸载(不论它出自哪个 marketplace),让本条 attempt 的安装与\n * manifest 里的解析版本同源。claude 对已装的 plugin 重装是空操作(`Plugin \"…\" is already\n * installed`,真机 2.1.220),不先卸就等于把上一条 attempt 装出的内容记成本条的安装事实。\n */\nasync function uninstallPlugins(sb: Sandbox, name: string): Promise<void> {\n const listCommand = \"claude plugin list --json\";\n const res = await sb.runShell(`${shared.agentBin(\"claude\")} plugin list --json`);\n const list = res.exitCode === 0 ? claudeInstalledPlugins(res.stdout) : undefined;\n if (list === undefined) {\n throw new Error(t(\"plugin.listFailed\", { agent: \"claude-code\", command: listCommand, tail: outputTail(res) }));\n }\n const targets = new Map<string, {\n id: string;\n scope?: string;\n }>();\n for (const entry of list) {\n const id = entry.id;\n if (!id || id.split(\"@\")[0] !== name)\n continue;\n targets.set(`${id} ${entry.scope ?? \"\"}`, { id, ...(entry.scope ? { scope: entry.scope } : {}) });\n }\n for (const target of targets.values()) {\n const scopeFlag = target.scope ? ` --scope ${shared.shellQuote(target.scope)}` : \"\";\n const remove = await sb.runShell(`${shared.agentBin(\"claude\")} plugin uninstall ${shared.shellQuote(target.id)}${scopeFlag}`);\n if (remove.exitCode !== 0) {\n throw new Error(t(\"plugin.removeFailed\", { agent: \"claude-code\", name: target.id, tail: outputTail(remove) }));\n }\n }\n}\n/**\n * 按声明名字无条件摘除同名 marketplace 注册,再由调用方按声明的 source(必要时是按 ref clone\n * 出的本地路径)重新 add。不比对来源等价性、也不以注册在回读列表里可见为前提(与 codex 侧\n * 同一条收敛规则,机制见 codex.ts 的 dropRegisteredMarketplace 注释):claude 对已注册的名字\n * 直接复用磁盘上那份(`Marketplace '…' already on disk`,真机 2.1.220),声明的来源根本不生效,\n * 不先摘干净就是静默陈旧。「本就没有可摘的」(`not found`,exit 1)按已收敛处理;\n * 摘除不带 `--scope`,按 CLI 默认摘掉所有 scope 里的声明。\n */\nasync function dropRegisteredMarketplace(sb: Sandbox, name: string): Promise<void> {\n await sb.runShell(`${shared.agentBin(\"claude\")} plugin marketplace remove ${shared.shellQuote(name)}`);\n}\n/** 装完回读版本;取不到不阻断安装(manifest 里 resolvedVersion 省略)。 */\nasync function installedVersion(sb: Sandbox, id: string): Promise<string | undefined> {\n const res = await sb.runShell(`${shared.agentBin(\"claude\")} plugin list --json`);\n if (res.exitCode !== 0)\n return undefined;\n return claudeInstalledPlugins(res.stdout)?.find((p) => p.id === id)?.version;\n}\nfunction outputTail(res: {\n stdout: string;\n stderr: string;\n}, n = 12): string {\n return (res.stdout + res.stderr).trim().split(\"\\n\").slice(-n).join(\"\\n\");\n}\nexport default claudeCodeAgent();\n"]}
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["claude-code.ts"],"names":[],"mappings":"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","sourcesContent":["import { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { Effect } from \"effect\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { cloneRepo, installSkills } from \"./skills.ts\";\nimport { verifyMarketplaceName } from \"./marketplace.ts\";\nimport { assertJsonNativeConfig, loadNativeConfigFileEffect, uploadNativeConfigFileEffect, type LoadedNativeConfig, } from \"./native-config.ts\";\nimport { mapClaudeCodeSpans } from \"../o11y/otlp/mappers/claude-code.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { DEFAULT_CLAUDE_CODE_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { assertMcpServers, isHttpMcp, mcpManifestEntries } from \"./mcp.ts\";\nimport { registerAgentLifecycleHookCommands, runPostSetupHooks, runPreTeardownHooks, } from \"./post-setup.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport type { Agent, AgentSetupManifest, McpServer, Sandbox, SkillSpec, TurnEvidenceCoverage } from \"../types.ts\";\nimport type { SandboxCommand } from \"../sandbox/commands.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// Claude Code 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `claude` CLI,跑完读回 transcript JSONL → 标准事件流。\n// 扩展(skill / plugin / MCP)全部是构造参数,setup 里翻译成 Claude Code 的原生形态,\n// 装完写一份 manifest(见 docs/feature/adapters/architecture/coding-agent-extensions.md)。\n// ───────────────────────────────────────────────────────────────────────────\n/** Claude Code 的 skill 目录(project 级):CLI 原生扫描它,不需要额外的发现指引。 */\nconst SKILL_DIR = \".claude/skills\";\n/** 沙箱里用户级 settings 的落点:`settingsFile` 的原始字节原样替换这份原本为空的用户层。 */\nconst SETTINGS_PATH = \"~/.claude/settings.json\";\n/**\n * `settingsFile` 的保留键:`model` 归 experiment(经 `--model` flag),`env` 归 Adapter\n * (鉴权与 OTel 导出经进程环境变量注入)。清单定稿见 docs/feature/adapters/sdk/claude-code/README.md。\n */\nconst RESERVED_SETTINGS_KEYS = [\"model\", \"env\"] as const;\n/**\n * Claude Code 的原生 Plugin —— **只属于 Claude Code**,不能传给 Codex(Codex 有自己的\n * {@link import(\"./codex.ts\").CodexPluginSpec})。每一项同时声明 Marketplace 连接和其中的 Plugin 名:\n * 连上 Marketplace 不等于启用它的全部 Plugin。\n */\nexport interface ClaudeCodePluginSpec {\n marketplace: {\n /** 目标仓库 manifest 声明的真实 name;CLI 不支持由调用方另取连接别名。 */\n name: string;\n /** Marketplace 来源:GitHub `owner/repo`、Git URL 或路径。 */\n source: string;\n /** 固定 Marketplace 的 Tag、Commit 或 Branch;给了就先按 ref clone 下来再以本地路径连接。 */\n ref?: string;\n };\n /** Marketplace 中的 Plugin 名。 */\n name: string;\n}\nexport interface ClaudeCodeConfig {\n /** Anthropic API key。省略时读 ANTHROPIC_API_KEY env。 */\n apiKey?: string;\n /**\n * 自定义 API base URL(代理 / 内网端点)。省略时读 ANTHROPIC_BASE_URL env;\n * 两者都没有则用 Anthropic 官方端点(claude CLI 默认行为)。\n */\n baseUrl?: string;\n /**\n * Claude Code 进程的额外环境变量。值只保留在运行时,不进入结果沿用身份。\n * 会改变行为的非敏感值应同时写入 Experiment flags 或所属 Plugin 的身份。\n */\n env?: Readonly<globalThis.Record<string, string>>;\n /**\n * 最多跑几个 tool-use 轮次(→ `--max-turns`)。\n * 控制评估用例成本上限;省略时用 CLI 原生默认(无限制)。\n */\n maxTurns?: number;\n /**\n * 额外 MCP server(每个 Sandbox setup 时写进用户级 ~/.claude.json)。\n * stdio 形态写 command(可带 args / env);Streamable HTTP 形态写 url(可带 headers,\n * 逐字进请求头),落成 { \"type\": \"http\", \"url\": …, \"headers\": … } 条目。\n */\n mcpServers?: readonly McpServer[];\n /**\n * 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 project 级 `.claude/skills/<name>/`,claude CLI 原生发现。\n */\n skills?: readonly SkillSpec[];\n /** Claude Code 原生 Plugin(先连 Marketplace,再从中装指定 Plugin)。 */\n plugins?: readonly ClaudeCodePluginSpec[];\n /**\n * 一份完整的 Claude Code `settings.json`(官方格式)在本地项目里的路径 —— 相对运行\n * niceeval 的项目根(含 `niceeval.config.ts` 的目录)解析,不是 Sandbox 内路径;只接受\n * 项目根内的相对路径,包含 `..` 的路径、绝对路径、`~` 路径和解析后逃出项目根的符号链接\n * 都在 setup 阶段报错。原始字节原样上传为 Sandbox 里原本为空的用户级 `~/.claude/settings.json`\n * (不继承宿主机配置、不拼接、不重新序列化);保留键 `model` 与 `env` 出现在文件里\n * setup 报错。manifest 只记项目相对路径与字节 SHA-256,不落正文。\n */\n settingsFile?: string;\n /**\n * 安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在写 settings、挂 MCP、\n * 装 Skills / Plugin、写 manifest 全部完成后执行,适合跑插件自带的 setup 脚本这类\n * 「安装产物就位后才能跑」的过程动作。抛错按基础设施错误计(attempt errored)。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n postSetup?: readonly SandboxCommand[];\n /**\n * 与 `postSetup` 成对的收尾 Hook:按 `postSetup` 的逆序语义,在 agent 自己的 teardown 步骤\n * 之前执行(LIFO 镜像 —— `postSetup` 跑在 agent 安装之后,`preTeardown` 就跑在 agent 收尾\n * 之前),当且仅当 `postSetup` 的时点走到过才触发。抛错按基础设施错误计,由 teardown 段\n * 按 teardown-failed 诊断收束。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n preTeardown?: readonly SandboxCommand[];\n}\nexport function claudeCodeAgent(config?: ClaudeCodeConfig): Agent {\n const getApiKey = () => config?.apiKey ?? requireEnv(\"ANTHROPIC_API_KEY\");\n const getBaseUrl = () => config?.baseUrl ?? getEnv(\"ANTHROPIC_BASE_URL\");\n const agentEnv = Object.freeze({ ...(config?.env ?? {}) });\n const agentEnvSensitiveValues = Object.freeze(Object.values(agentEnv));\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"claude-code\",\n version: DEFAULT_CLAUDE_CODE_CLI_VERSION,\n revision: String(AGENT_BASELINE_RECIPE_REVISION[\"claude-code\"]),\n },\n packageName: \"@anthropic-ai/claude-code\",\n bin: \"claude\",\n });\n return registerAgentLifecycleHookCommands(defineSandboxAgent({\n name: \"claude-code\",\n // 官方 adapter:transcript 经生命周期 fixture 验证,全通道 complete。\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapClaudeCodeSpans,\n ensure,\n installers: [installer],\n // claude CLI 原生 OTLP trace spans(beta):interaction / llm_request / tool 层级,\n // 需要 CLAUDE_CODE_ENHANCED_TELEMETRY_BETA 开关。\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n CLAUDE_CODE_ENABLE_TELEMETRY: \"1\",\n CLAUDE_CODE_ENHANCED_TELEMETRY_BETA: \"1\",\n OTEL_TRACES_EXPORTER: \"otlp\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n // CLI 是短命进程:压短导出间隔,别让 span 死在退出前的批处理队列里。\n OTEL_TRACES_EXPORT_INTERVAL: \"1000\",\n }),\n },\n setup: (sb, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n // 原生配置文件最先落(安装顺序契约的第 1 步):本地读原始字节 → 验 JSON 语法与保留键\n // → 原样替换沙箱里原本为空的用户级 settings.json。字节 SHA-256 进 manifest 与安装\n // checkpoint key(见 native-config.ts 的 nativeConfigCheckpointItem)。\n let settings: LoadedNativeConfig | undefined;\n if (config?.settingsFile !== undefined) {\n settings = yield* loadNativeConfigFileEffect({\n agent: \"claude-code\",\n field: \"settingsFile\",\n path: config.settingsFile,\n });\n yield* Effect.try({\n try: () => assertJsonNativeConfig(settings!, {\n agent: \"claude-code\",\n field: \"settingsFile\",\n reservedKeys: RESERVED_SETTINGS_KEYS,\n }),\n catch: (cause) => cause,\n });\n yield* uploadNativeConfigFileEffect(sb, settings, SETTINGS_PATH);\n }\n yield* Effect.tryPromise({\n try: async () => {\n if (config?.mcpServers?.length) {\n assertMcpServers(config.mcpServers);\n const servers: globalThis.Record<string, object> = {};\n const sensitiveValues: string[] = [];\n for (const s of config.mcpServers) {\n if (isHttpMcp(s)) {\n const headers = s.headers;\n if (headers)\n sensitiveValues.push(...Object.values(headers));\n servers[s.name] = {\n type: \"http\",\n url: s.url,\n ...(headers && Object.keys(headers).length && { headers }),\n };\n }\n else {\n const env = s.env;\n if (env)\n sensitiveValues.push(...Object.values(env));\n servers[s.name] = {\n command: s.command,\n ...(s.args?.length && { args: s.args }),\n ...(env && { env }),\n };\n }\n }\n // 用户级 MCP 配置在 ~/.claude.json(顶层 mcpServers 字段),不是 ~/.claude/claude.json\n // ——后者 claude CLI 根本不读,MCP 静默挂不上(本机 `claude mcp list` 可核对)。\n await shared.writeFile(sb, \"~/.claude.json\", JSON.stringify({ mcpServers: servers }, null, 2), { sensitiveValues });\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n }\n if (config?.plugins?.length) {\n manifest.nativePlugins = await installPlugins(sb, config.plugins);\n }\n if (config?.mcpServers?.length) {\n // manifest 里只记「挂了哪个 server、怎么连」;env / headers 里可能有 token,不落盘。\n manifest.mcpServers = mcpManifestEntries(config.mcpServers);\n }\n if (settings) {\n // 只记来源路径与字节哈希,不落正文(任意官方配置都可能带敏感字符串)。\n manifest.nativeConfigFile = { agent: \"claude-code\", path: settings.path, sha256: settings.sha256 };\n }\n // 什么都没装就不写 manifest:空 artifact 不落文件(同 results 的落盘规则)。\n if (manifest.skills.length ||\n manifest.nativePlugins?.length ||\n manifest.mcpServers?.length ||\n manifest.nativeConfigFile) {\n ctx.reportSetup(manifest);\n }\n // 安装后钩子(postSetup):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,\n // 钩子失败不该丢掉这份证据。\n await runPostSetupHooks(sb, ctx, \"claude-code\", config?.postSetup);\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n async teardown(sb, ctx) {\n // preTeardown 与 postSetup 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。\n // claude-code 目前没有其它收尾步骤,这段就是整个 teardown。\n await runPreTeardownHooks(sb, ctx, \"claude-code\", config?.preTeardown);\n },\n send: (input, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n const sb = ctx.sandbox;\n const claudeBin = yield* resolveAgentBinEffect(sb, \"claude\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const args = [\"--print\", \"--dangerously-skip-permissions\"];\n if (ctx.model)\n args.push(\"--model\", ctx.model);\n if (config?.maxTurns != null)\n args.push(\"--max-turns\", String(config.maxTurns));\n if (ctx.flags.webResearch)\n args.push(\"--allowedTools\", \"WebSearch,WebFetch\");\n if (ctx.session.id)\n args.push(\"--resume\", ctx.session.id);\n // --allowedTools is variadic in Claude Code. Terminate option parsing so the\n // positional prompt cannot be consumed as one more allowed tool name.\n args.push(\"--\", input.text);\n const apiKey = getApiKey();\n const env: globalThis.Record<string, string> = {\n ...agentEnv,\n ANTHROPIC_API_KEY: apiKey,\n // Eval runs must not silently change CLI version after the sandbox artifact was built.\n DISABLE_AUTOUPDATER: \"1\",\n ...ctx.telemetry?.env,\n };\n const baseUrl = getBaseUrl();\n if (baseUrl)\n env[\"ANTHROPIC_BASE_URL\"] = baseUrl;\n const res = await sb.runCommand(claudeBin, args, {\n env,\n sensitiveValues: [apiKey, ...agentEnvSensitiveValues],\n stream: true,\n signal,\n });\n // 「最新 jsonl」而非按 session id 精确定位:--resume 会 fork 新 session id 的新文件,\n // 精确匹配旧 id 会读到过期 transcript。send 串行,最新的一定是刚跑完的这次。\n const raw = await shared.captureLatestJsonl(sb, \"~/.claude/projects\");\n ctx.session.capture(shared.sessionIdFromClaudeTranscript(raw));\n const parsed = shared.parseClaudeCode(raw);\n const events = [...parsed.events];\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"Claude Code transcript was unavailable; tool trajectory was not observed.\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n }\n else if (!parsed.parseSuccess) {\n const reason = \"Some Claude Code 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 if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: \"completed\" as const,\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n }), config?.postSetup, config?.preTeardown);\n}\n/**\n * 先按 `marketplace.name` 建立 Marketplace 连接(同名只连一次,add 后回读注册列表校验\n * 名字真的注册上了),再从该连接装指定 Plugin。\n * `claude plugin marketplace add` 没有钉 ref 的入口,所以要钉 ref 时先自己按 ref clone 下来,\n * 再以本地路径连接(CLI 支持 path 形态的 marketplace 源)—— 「来源必须可复现」不因 CLI 少个\n * flag 就打折。\n *\n * 注册类命令是追加式的,而 Sandbox 复用下沙箱带着上一条 attempt 的 `$HOME` 进场,所以每一步\n * 先读沙箱真实状态、把它收敛到声明,再执行 add / install(契约见 docs/feature/adapters/\n * architecture/coding-agent-extensions.md「安装收敛:不假设沙箱空白」)。空白沙箱读回为空,\n * 走的是同一条代码路径。\n */\nexport async function installPlugins(sb: Sandbox, plugins: readonly ClaudeCodePluginSpec[]): Promise<NonNullable<AgentSetupManifest[\"nativePlugins\"]>> {\n const connected = new Set<string>();\n const out: NonNullable<AgentSetupManifest[\"nativePlugins\"]> = [];\n // 摘除顺序固定「先卸完全部同名插件、后摘 marketplace」:插件按 `<plugin>@<marketplace>` 定位,\n // 注册先没了就定位不到残留的那份安装。整体先于安装循环执行,多个插件共用一个 marketplace\n // 时第二个插件的残留才摘得到。\n for (const plugin of plugins) {\n await uninstallPlugins(sb, plugin.name);\n }\n for (const plugin of plugins) {\n const { marketplace } = plugin;\n if (!connected.has(marketplace.name)) {\n await dropRegisteredMarketplace(sb, marketplace.name);\n const source = marketplace.ref\n ? await cloneRepo(sb, marketplace.source, marketplace.ref)\n : marketplace.source;\n const addCommand = `${shared.agentBin(\"claude\")} plugin marketplace add ${shared.shellQuote(source)}`;\n let add = await sb.runShell(addCommand);\n // The native CLI fetches remote marketplace metadata during add. A\n // transient connection failure must not discard an otherwise reusable\n // Sandbox, but every retry starts from the same declared empty state.\n for (let attempt = 1; add.exitCode !== 0 && attempt < 3; attempt += 1) {\n await dropRegisteredMarketplace(sb, marketplace.name);\n add = await sb.runShell(addCommand);\n }\n if (add.exitCode !== 0) {\n throw new Error(t(\"plugin.marketplaceFailed\", {\n agent: \"claude-code\",\n name: marketplace.name,\n source: marketplace.source,\n ref: marketplace.ref ?? \"(default)\",\n tail: outputTail(add),\n }));\n }\n // add 静默按目标仓库 manifest 的 name 注册,错名会拖到 plugin install 才炸;\n // 回读注册列表立刻校验(契约与真机复现见 marketplace.ts 顶部说明)。\n await verifyMarketplaceName(sb, {\n agent: \"claude-code\",\n listCommand: \"claude plugin marketplace list --json\",\n marketplace,\n knownNames: connected,\n });\n connected.add(marketplace.name);\n }\n const id = `${plugin.name}@${marketplace.name}`;\n const install = await sb.runShell(`${shared.agentBin(\"claude\")} plugin install ${shared.shellQuote(id)}`);\n if (install.exitCode !== 0) {\n throw new Error(t(\"plugin.installFailed\", {\n agent: \"claude-code\",\n name: plugin.name,\n marketplace: marketplace.name,\n tail: outputTail(install),\n }));\n }\n const resolvedVersion = await installedVersion(sb, id);\n out.push({\n agent: \"claude-code\",\n marketplace: {\n name: marketplace.name,\n source: marketplace.source,\n ...(marketplace.ref !== undefined ? { ref: marketplace.ref } : {}),\n },\n name: plugin.name,\n ...(resolvedVersion !== undefined ? { resolvedVersion } : {}),\n });\n }\n return out;\n}\n/**\n * `claude plugin list --json` 的已安装条目:`[{ id: \"<plugin>@<marketplace>\", version, scope, … }]`\n * (真机核对 claude 2.1.220)。同一个 plugin 可以在 user / project / local 多个 scope 各有一条,\n * 卸载要带上条目自己的 scope。抠不出(非 JSON / 未知形状)返回 undefined,由调用方决定放行还是抛错。\n */\ninterface ClaudeInstalledPlugin {\n id?: string;\n version?: string;\n scope?: string;\n}\nfunction claudeInstalledPlugins(stdout: string): ClaudeInstalledPlugin[] | undefined {\n let raw: unknown;\n try {\n raw = JSON.parse(stdout);\n }\n catch {\n return undefined;\n }\n if (!Array.isArray(raw))\n return undefined;\n return raw.filter((item): item is ClaudeInstalledPlugin => !!item && typeof item === \"object\");\n}\n/**\n * 与声明同名的 Plugin 已安装就先卸载(不论它出自哪个 marketplace),让本条 attempt 的安装与\n * manifest 里的解析版本同源。claude 对已装的 plugin 重装是空操作(`Plugin \"…\" is already\n * installed`,真机 2.1.220),不先卸就等于把上一条 attempt 装出的内容记成本条的安装事实。\n */\nasync function uninstallPlugins(sb: Sandbox, name: string): Promise<void> {\n const listCommand = \"claude plugin list --json\";\n const res = await sb.runShell(`${shared.agentBin(\"claude\")} plugin list --json`);\n const list = res.exitCode === 0 ? claudeInstalledPlugins(res.stdout) : undefined;\n if (list === undefined) {\n throw new Error(t(\"plugin.listFailed\", { agent: \"claude-code\", command: listCommand, tail: outputTail(res) }));\n }\n const targets = new Map<string, {\n id: string;\n scope?: string;\n }>();\n for (const entry of list) {\n const id = entry.id;\n if (!id || id.split(\"@\")[0] !== name)\n continue;\n targets.set(`${id} ${entry.scope ?? \"\"}`, { id, ...(entry.scope ? { scope: entry.scope } : {}) });\n }\n for (const target of targets.values()) {\n const scopeFlag = target.scope ? ` --scope ${shared.shellQuote(target.scope)}` : \"\";\n const remove = await sb.runShell(`${shared.agentBin(\"claude\")} plugin uninstall ${shared.shellQuote(target.id)}${scopeFlag}`);\n if (remove.exitCode !== 0) {\n throw new Error(t(\"plugin.removeFailed\", { agent: \"claude-code\", name: target.id, tail: outputTail(remove) }));\n }\n }\n}\n/**\n * 按声明名字无条件摘除同名 marketplace 注册,再由调用方按声明的 source(必要时是按 ref clone\n * 出的本地路径)重新 add。不比对来源等价性、也不以注册在回读列表里可见为前提(与 codex 侧\n * 同一条收敛规则,机制见 codex.ts 的 dropRegisteredMarketplace 注释):claude 对已注册的名字\n * 直接复用磁盘上那份(`Marketplace '…' already on disk`,真机 2.1.220),声明的来源根本不生效,\n * 不先摘干净就是静默陈旧。「本就没有可摘的」(`not found`,exit 1)按已收敛处理;\n * 摘除不带 `--scope`,按 CLI 默认摘掉所有 scope 里的声明。\n */\nasync function dropRegisteredMarketplace(sb: Sandbox, name: string): Promise<void> {\n await sb.runShell(`${shared.agentBin(\"claude\")} plugin marketplace remove ${shared.shellQuote(name)}`);\n}\n/** 装完回读版本;取不到不阻断安装(manifest 里 resolvedVersion 省略)。 */\nasync function installedVersion(sb: Sandbox, id: string): Promise<string | undefined> {\n const res = await sb.runShell(`${shared.agentBin(\"claude\")} plugin list --json`);\n if (res.exitCode !== 0)\n return undefined;\n return claudeInstalledPlugins(res.stdout)?.find((p) => p.id === id)?.version;\n}\nfunction outputTail(res: {\n stdout: string;\n stderr: string;\n}, n = 12): string {\n return (res.stdout + res.stderr).trim().split(\"\\n\").slice(-n).join(\"\\n\");\n}\nexport default claudeCodeAgent();\n"]}
|
|
@@ -26,8 +26,8 @@ export interface ClaudeCodeConfig {
|
|
|
26
26
|
*/
|
|
27
27
|
baseUrl?: string;
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
* Claude Code 进程的额外环境变量。值只保留在运行时,不进入结果沿用身份。
|
|
30
|
+
* 会改变行为的非敏感值应同时写入 Experiment flags 或所属 Plugin 的身份。
|
|
31
31
|
*/
|
|
32
32
|
env?: Readonly<globalThis.Record<string, string>>;
|
|
33
33
|
/**
|
|
@@ -26,8 +26,8 @@ export interface ClaudeCodeConfig {
|
|
|
26
26
|
*/
|
|
27
27
|
baseUrl?: string;
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
* Claude Code 进程的额外环境变量。值只保留在运行时,不进入结果沿用身份。
|
|
30
|
+
* 会改变行为的非敏感值应同时写入 Experiment flags 或所属 Plugin 的身份。
|
|
31
31
|
*/
|
|
32
32
|
env?: Readonly<globalThis.Record<string, string>>;
|
|
33
33
|
/**
|
|
@@ -26,8 +26,8 @@ export interface ClaudeCodeConfig {
|
|
|
26
26
|
*/
|
|
27
27
|
baseUrl?: string;
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
* Claude Code 进程的额外环境变量。值只保留在运行时,不进入结果沿用身份。
|
|
30
|
+
* 会改变行为的非敏感值应同时写入 Experiment flags 或所属 Plugin 的身份。
|
|
31
31
|
*/
|
|
32
32
|
env?: Readonly<globalThis.Record<string, string>>;
|
|
33
33
|
/**
|
package/dist/agents/codex.cjs
CHANGED
|
@@ -164,8 +164,8 @@ function codexPlatformPackage(platform, version) {
|
|
|
164
164
|
// 的 Docker/E2B 制品。
|
|
165
165
|
const CODEX_PLUGIN_HOOK_SAFE_CLI_VERSION = "0.146.0";
|
|
166
166
|
function codexAgent(config) {
|
|
167
|
-
const getApiKey = () => config?.apiKey ?? (0, util_ts_1.requireEnv)("
|
|
168
|
-
const getBaseUrl = () => config?.baseUrl ?? (0, util_ts_1.getEnv)("
|
|
167
|
+
const getApiKey = () => config?.apiKey ?? (0, util_ts_1.requireEnv)("OPENAI_API_KEY");
|
|
168
|
+
const getBaseUrl = () => config?.baseUrl ?? (0, util_ts_1.getEnv)("OPENAI_BASE_URL");
|
|
169
169
|
// PATH 是 Sandbox 受管变量,在 factory 构造时(link/配置校验期)同步拒绝,不留到 setup()
|
|
170
170
|
// 才炸,也不静默丢弃——被覆盖的 PATH 会让 hooks / 子进程读到错误的可执行文件而零报错
|
|
171
171
|
// (见 docs/feature/sandbox/library.md「PATH:受管变量与 pathPrepend」)。
|
|
@@ -248,7 +248,7 @@ function codexAgent(config) {
|
|
|
248
248
|
? `[model_providers.s2a]\n` +
|
|
249
249
|
`name = "s2a"\n` +
|
|
250
250
|
`base_url = "${base}"\n` +
|
|
251
|
-
`env_key = "
|
|
251
|
+
`env_key = "OPENAI_API_KEY"\n` +
|
|
252
252
|
`wire_api = "responses"\n`
|
|
253
253
|
: "";
|
|
254
254
|
if (!nativeConfig) {
|
|
@@ -383,7 +383,7 @@ function codexAgent(config) {
|
|
|
383
383
|
const res = await sb.runShell(cmd, {
|
|
384
384
|
// ambient env 由 Codex 进程自然传给 SessionStart/SessionStop hooks、env_http_headers
|
|
385
385
|
// 与 agent 调起的 nmem 等子进程。鉴权字段最后覆盖,避免 env 形成第二条 key 来源。
|
|
386
|
-
env: { ...agentEnv,
|
|
386
|
+
env: { ...agentEnv, OPENAI_API_KEY: apiKey },
|
|
387
387
|
sensitiveValues: [apiKey, ...agentEnvSensitiveValues],
|
|
388
388
|
stream: true,
|
|
389
389
|
onStdout,
|