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/index.mjs
CHANGED
|
@@ -33,54 +33,58 @@ const __niceevalExport14 = __niceevalCanonical["createPiAgentEventStream"];
|
|
|
33
33
|
export { __niceevalExport14 as createPiAgentEventStream };
|
|
34
34
|
const __niceevalExport15 = __niceevalCanonical["createSessionSlot"];
|
|
35
35
|
export { __niceevalExport15 as createSessionSlot };
|
|
36
|
-
const __niceevalExport16 = __niceevalCanonical["
|
|
37
|
-
export { __niceevalExport16 as
|
|
38
|
-
const __niceevalExport17 = __niceevalCanonical["
|
|
39
|
-
export { __niceevalExport17 as
|
|
40
|
-
const __niceevalExport18 = __niceevalCanonical["
|
|
41
|
-
export { __niceevalExport18 as
|
|
42
|
-
const __niceevalExport19 = __niceevalCanonical["
|
|
43
|
-
export { __niceevalExport19 as
|
|
44
|
-
const __niceevalExport20 = __niceevalCanonical["
|
|
45
|
-
export { __niceevalExport20 as
|
|
46
|
-
const __niceevalExport21 = __niceevalCanonical["
|
|
47
|
-
export { __niceevalExport21 as
|
|
48
|
-
const __niceevalExport22 = __niceevalCanonical["
|
|
49
|
-
export { __niceevalExport22 as
|
|
50
|
-
const __niceevalExport23 = __niceevalCanonical["
|
|
51
|
-
export { __niceevalExport23 as
|
|
52
|
-
const __niceevalExport24 = __niceevalCanonical["
|
|
53
|
-
export { __niceevalExport24 as
|
|
54
|
-
const __niceevalExport25 = __niceevalCanonical["
|
|
55
|
-
export { __niceevalExport25 as
|
|
56
|
-
const __niceevalExport26 = __niceevalCanonical["
|
|
57
|
-
export { __niceevalExport26 as
|
|
58
|
-
const __niceevalExport27 = __niceevalCanonical["
|
|
59
|
-
export { __niceevalExport27 as
|
|
60
|
-
const __niceevalExport28 = __niceevalCanonical["
|
|
61
|
-
export { __niceevalExport28 as
|
|
62
|
-
const __niceevalExport29 = __niceevalCanonical["
|
|
63
|
-
export { __niceevalExport29 as
|
|
64
|
-
const __niceevalExport30 = __niceevalCanonical["
|
|
65
|
-
export { __niceevalExport30 as
|
|
66
|
-
const __niceevalExport31 = __niceevalCanonical["
|
|
67
|
-
export { __niceevalExport31 as
|
|
68
|
-
const __niceevalExport32 = __niceevalCanonical["
|
|
69
|
-
export { __niceevalExport32 as
|
|
70
|
-
const __niceevalExport33 = __niceevalCanonical["
|
|
71
|
-
export { __niceevalExport33 as
|
|
72
|
-
const __niceevalExport34 = __niceevalCanonical["
|
|
73
|
-
export { __niceevalExport34 as
|
|
74
|
-
const __niceevalExport35 = __niceevalCanonical["
|
|
75
|
-
export { __niceevalExport35 as
|
|
76
|
-
const __niceevalExport36 = __niceevalCanonical["
|
|
77
|
-
export { __niceevalExport36 as
|
|
78
|
-
const __niceevalExport37 = __niceevalCanonical["
|
|
79
|
-
export { __niceevalExport37 as
|
|
80
|
-
const __niceevalExport38 = __niceevalCanonical["
|
|
81
|
-
export { __niceevalExport38 as
|
|
82
|
-
const __niceevalExport39 = __niceevalCanonical["
|
|
83
|
-
export { __niceevalExport39 as
|
|
84
|
-
const __niceevalExport40 = __niceevalCanonical["
|
|
85
|
-
export { __niceevalExport40 as
|
|
36
|
+
const __niceevalExport16 = __niceevalCanonical["deepSeekHarnessAgent"];
|
|
37
|
+
export { __niceevalExport16 as deepSeekHarnessAgent };
|
|
38
|
+
const __niceevalExport17 = __niceevalCanonical["defineAgent"];
|
|
39
|
+
export { __niceevalExport17 as defineAgent };
|
|
40
|
+
const __niceevalExport18 = __niceevalCanonical["defineSandboxAgent"];
|
|
41
|
+
export { __niceevalExport18 as defineSandboxAgent };
|
|
42
|
+
const __niceevalExport19 = __niceevalCanonical["deltaStream"];
|
|
43
|
+
export { __niceevalExport19 as deltaStream };
|
|
44
|
+
const __niceevalExport20 = __niceevalCanonical["driveFrameStream"];
|
|
45
|
+
export { __niceevalExport20 as driveFrameStream };
|
|
46
|
+
const __niceevalExport21 = __niceevalCanonical["externalCauseMessageChain"];
|
|
47
|
+
export { __niceevalExport21 as externalCauseMessageChain };
|
|
48
|
+
const __niceevalExport22 = __niceevalCanonical["externalCauseText"];
|
|
49
|
+
export { __niceevalExport22 as externalCauseText };
|
|
50
|
+
const __niceevalExport23 = __niceevalCanonical["hermesAgent"];
|
|
51
|
+
export { __niceevalExport23 as hermesAgent };
|
|
52
|
+
const __niceevalExport24 = __niceevalCanonical["heuristicTag"];
|
|
53
|
+
export { __niceevalExport24 as heuristicTag };
|
|
54
|
+
const __niceevalExport25 = __niceevalCanonical["makeSendFailure"];
|
|
55
|
+
export { __niceevalExport25 as makeSendFailure };
|
|
56
|
+
const __niceevalExport26 = __niceevalCanonical["mapCodexSpans"];
|
|
57
|
+
export { __niceevalExport26 as mapCodexSpans };
|
|
58
|
+
const __niceevalExport27 = __niceevalCanonical["normalizeExternalCause"];
|
|
59
|
+
export { __niceevalExport27 as normalizeExternalCause };
|
|
60
|
+
const __niceevalExport28 = __niceevalCanonical["normalizeLogicalCommand"];
|
|
61
|
+
export { __niceevalExport28 as normalizeLogicalCommand };
|
|
62
|
+
const __niceevalExport29 = __niceevalCanonical["notCommandProjection"];
|
|
63
|
+
export { __niceevalExport29 as notCommandProjection };
|
|
64
|
+
const __niceevalExport30 = __niceevalCanonical["ompAgent"];
|
|
65
|
+
export { __niceevalExport30 as ompAgent };
|
|
66
|
+
const __niceevalExport31 = __niceevalCanonical["opaqueCommandProjection"];
|
|
67
|
+
export { __niceevalExport31 as opaqueCommandProjection };
|
|
68
|
+
const __niceevalExport32 = __niceevalCanonical["openClawAgent"];
|
|
69
|
+
export { __niceevalExport32 as openClawAgent };
|
|
70
|
+
const __niceevalExport33 = __niceevalCanonical["openCodeAgent"];
|
|
71
|
+
export { __niceevalExport33 as openCodeAgent };
|
|
72
|
+
const __niceevalExport34 = __niceevalCanonical["responsesEvidenceCoverage"];
|
|
73
|
+
export { __niceevalExport34 as responsesEvidenceCoverage };
|
|
74
|
+
const __niceevalExport35 = __niceevalCanonical["sendFailureText"];
|
|
75
|
+
export { __niceevalExport35 as sendFailureText };
|
|
76
|
+
const __niceevalExport36 = __niceevalCanonical["shared"];
|
|
77
|
+
export { __niceevalExport36 as shared };
|
|
78
|
+
const __niceevalExport37 = __niceevalCanonical["sseJsonFrames"];
|
|
79
|
+
export { __niceevalExport37 as sseJsonFrames };
|
|
80
|
+
const __niceevalExport38 = __niceevalCanonical["tagSpan"];
|
|
81
|
+
export { __niceevalExport38 as tagSpan };
|
|
82
|
+
const __niceevalExport39 = __niceevalCanonical["turnFromAiSdk"];
|
|
83
|
+
export { __niceevalExport39 as turnFromAiSdk };
|
|
84
|
+
const __niceevalExport40 = __niceevalCanonical["turnFromChatCompletion"];
|
|
85
|
+
export { __niceevalExport40 as turnFromChatCompletion };
|
|
86
|
+
const __niceevalExport41 = __niceevalCanonical["turnFromResponses"];
|
|
87
|
+
export { __niceevalExport41 as turnFromResponses };
|
|
88
|
+
const __niceevalExport42 = __niceevalCanonical["uiMessageStreamAgent"];
|
|
89
|
+
export { __niceevalExport42 as uiMessageStreamAgent };
|
|
86
90
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ompAgent = ompAgent;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const define_ts_1 = require("../define.cjs");
|
|
6
|
+
const util_ts_1 = require("../util.cjs");
|
|
7
|
+
const send_failures_ts_1 = require("../context/send-failures.cjs");
|
|
8
|
+
const shared_ts_1 = require("./shared.cjs");
|
|
9
|
+
const sdk_streams_ts_1 = require("./sdk-streams.cjs");
|
|
10
|
+
const npm_staged_ts_1 = require("./npm-staged.cjs");
|
|
11
|
+
const coding_cli_versions_ts_1 = require("./coding-cli-versions.cjs");
|
|
12
|
+
const COMPAT_PROVIDER = "niceeval-compat";
|
|
13
|
+
const API_KEY_ENV = "NICEEVAL_OMP_API_KEY";
|
|
14
|
+
const OMP_EVIDENCE_COVERAGE = {
|
|
15
|
+
events: { status: "complete" },
|
|
16
|
+
actions: { status: "complete" },
|
|
17
|
+
messages: { status: "complete" },
|
|
18
|
+
usage: { status: "complete" },
|
|
19
|
+
status: { status: "complete" },
|
|
20
|
+
data: { status: "unavailable", reason: "OMP print mode does not expose a separate Turn.data value." },
|
|
21
|
+
};
|
|
22
|
+
function resolveApiKey(config) {
|
|
23
|
+
return config?.apiKey ?? (0, util_ts_1.getEnv)("OMP_API_KEY") ?? (0, util_ts_1.requireEnv)("OPENAI_API_KEY");
|
|
24
|
+
}
|
|
25
|
+
function resolveBaseUrl(config) {
|
|
26
|
+
return config?.baseUrl ?? (0, util_ts_1.getEnv)("OMP_BASE_URL") ?? (0, util_ts_1.getEnv)("OPENAI_BASE_URL");
|
|
27
|
+
}
|
|
28
|
+
function bunPlatformPackage(version, platform) {
|
|
29
|
+
if (platform.os === "linux") {
|
|
30
|
+
const arch = platform.arch === "arm64" ? "aarch64" : platform.arch;
|
|
31
|
+
if (arch !== "x64" && arch !== "aarch64")
|
|
32
|
+
return undefined;
|
|
33
|
+
const musl = platform.libc === "musl" ? "-musl" : "";
|
|
34
|
+
return { spec: `@oven/bun-linux-${arch}${musl}@${version}`, binPath: "bin/bun" };
|
|
35
|
+
}
|
|
36
|
+
if (platform.os === "darwin") {
|
|
37
|
+
const arch = platform.arch === "arm64" ? "aarch64" : platform.arch;
|
|
38
|
+
if (arch !== "x64" && arch !== "aarch64")
|
|
39
|
+
return undefined;
|
|
40
|
+
return { spec: `@oven/bun-darwin-${arch}@${version}`, binPath: "bin/bun" };
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
function parseJsonl(raw) {
|
|
45
|
+
return raw.split(/\r?\n/).filter((line) => line.trim()).map((line, index) => {
|
|
46
|
+
let value;
|
|
47
|
+
try {
|
|
48
|
+
value = JSON.parse(line);
|
|
49
|
+
}
|
|
50
|
+
catch (cause) {
|
|
51
|
+
throw new Error(`OMP emitted invalid JSONL at line ${index + 1}`, { cause });
|
|
52
|
+
}
|
|
53
|
+
if (typeof value !== "object" || value === null || typeof value.type !== "string") {
|
|
54
|
+
throw new Error(`OMP emitted an invalid event at line ${index + 1}`);
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */
|
|
60
|
+
function ompAgent(config) {
|
|
61
|
+
const version = config?.version ?? coding_cli_versions_ts_1.DEFAULT_OMP_CLI_VERSION;
|
|
62
|
+
const bunVersion = config?.bunVersion ?? coding_cli_versions_ts_1.DEFAULT_BUN_VERSION;
|
|
63
|
+
const ompInstall = (0, npm_staged_ts_1.createNpmCliInstaller)({
|
|
64
|
+
identity: { agent: "omp", version, revision: String(coding_cli_versions_ts_1.AGENT_BASELINE_RECIPE_REVISION.omp) },
|
|
65
|
+
packageName: "@oh-my-pi/pi-coding-agent",
|
|
66
|
+
bin: "omp",
|
|
67
|
+
});
|
|
68
|
+
const bunInstall = (0, npm_staged_ts_1.createNpmCliInstaller)({
|
|
69
|
+
identity: { agent: "bun", version: bunVersion, revision: "1" },
|
|
70
|
+
packageName: "bun",
|
|
71
|
+
bin: "bun",
|
|
72
|
+
platformPackage: (platform) => bunPlatformPackage(bunVersion, platform),
|
|
73
|
+
});
|
|
74
|
+
const configDirs = new Map();
|
|
75
|
+
return (0, define_ts_1.defineSandboxAgent)({
|
|
76
|
+
name: "omp",
|
|
77
|
+
evidenceCoverage: OMP_EVIDENCE_COVERAGE,
|
|
78
|
+
ensure: [bunInstall.ensure, ompInstall.ensure],
|
|
79
|
+
installers: [bunInstall.installer, ompInstall.installer],
|
|
80
|
+
async setup(sb, ctx) {
|
|
81
|
+
const homeResult = await sb.runShell('test -n "$HOME" && printf "%s" "$HOME"');
|
|
82
|
+
const home = homeResult.stdout.trim();
|
|
83
|
+
if (homeResult.exitCode !== 0 || !home.startsWith("/")) {
|
|
84
|
+
throw new Error("OMP setup requires an absolute sandbox HOME directory");
|
|
85
|
+
}
|
|
86
|
+
const dir = `${home}/.niceeval-omp`;
|
|
87
|
+
configDirs.set(sb.sandboxId, dir);
|
|
88
|
+
const baseUrl = resolveBaseUrl(config);
|
|
89
|
+
const model = ctx.model ?? "deepseek-v4-flash";
|
|
90
|
+
const models = {
|
|
91
|
+
providers: {
|
|
92
|
+
[COMPAT_PROVIDER]: {
|
|
93
|
+
...(baseUrl ? { baseUrl } : {}),
|
|
94
|
+
api: "openai-completions",
|
|
95
|
+
apiKey: API_KEY_ENV,
|
|
96
|
+
models: [{ id: model, name: model, contextWindow: 1000000, maxTokens: 64000 }],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
await shared_ts_1.shared.writeFile(sb, `${dir}/models.yml`, JSON.stringify(models, null, 2));
|
|
101
|
+
},
|
|
102
|
+
send: (input, ctx) => effect_1.Effect.runPromise(effect_1.Effect.scoped(effect_1.Effect.gen(function* () {
|
|
103
|
+
const ompBin = yield* (0, npm_staged_ts_1.resolveAgentBinEffect)(ctx.sandbox, "omp");
|
|
104
|
+
return yield* effect_1.Effect.tryPromise({
|
|
105
|
+
try: async (signal) => {
|
|
106
|
+
const apiKey = resolveApiKey(config);
|
|
107
|
+
const dir = configDirs.get(ctx.sandbox.sandboxId);
|
|
108
|
+
if (!dir)
|
|
109
|
+
throw new Error("OMP setup state is unavailable");
|
|
110
|
+
const model = ctx.model ?? "deepseek-v4-flash";
|
|
111
|
+
const env = {
|
|
112
|
+
[API_KEY_ENV]: apiKey,
|
|
113
|
+
PI_CODING_AGENT_DIR: dir,
|
|
114
|
+
...ctx.telemetry?.env,
|
|
115
|
+
};
|
|
116
|
+
const args = [
|
|
117
|
+
"--print",
|
|
118
|
+
"--mode", "json",
|
|
119
|
+
"--model", `${COMPAT_PROVIDER}/${model}`,
|
|
120
|
+
"--approval-mode", "yolo",
|
|
121
|
+
"--no-pty",
|
|
122
|
+
"--no-title",
|
|
123
|
+
input.text,
|
|
124
|
+
];
|
|
125
|
+
const res = await ctx.sandbox.runCommand(ompBin, args, {
|
|
126
|
+
env,
|
|
127
|
+
sensitiveValues: [apiKey],
|
|
128
|
+
stream: true,
|
|
129
|
+
signal,
|
|
130
|
+
});
|
|
131
|
+
let nativeEvents;
|
|
132
|
+
try {
|
|
133
|
+
nativeEvents = parseJsonl(res.stdout);
|
|
134
|
+
}
|
|
135
|
+
catch (cause) {
|
|
136
|
+
throw (0, send_failures_ts_1.makeSendFailure)({
|
|
137
|
+
acceptance: "unknown",
|
|
138
|
+
message: cause instanceof Error ? cause.message : "OMP transcript could not be parsed",
|
|
139
|
+
process: res,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const stream = (0, sdk_streams_ts_1.createPiAgentEventStream)();
|
|
143
|
+
const events = nativeEvents.flatMap((event) => stream.add(event));
|
|
144
|
+
const terminal = nativeEvents.filter((event) => event.type === "agent_end" &&
|
|
145
|
+
event.isTerminal !== false &&
|
|
146
|
+
Array.isArray(event.messages));
|
|
147
|
+
if (res.exitCode !== 0 || terminal.length !== 1) {
|
|
148
|
+
throw (0, send_failures_ts_1.makeSendFailure)({
|
|
149
|
+
acceptance: (0, send_failures_ts_1.sendAcceptanceFromEvents)(events),
|
|
150
|
+
message: res.exitCode !== 0
|
|
151
|
+
? shared_ts_1.shared.diagnoseFailure(res, events, res.stdout)
|
|
152
|
+
: `OMP produced ${terminal.length} valid terminal agent_end events; expected exactly one.`,
|
|
153
|
+
events,
|
|
154
|
+
usage: stream.usage,
|
|
155
|
+
process: res,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
events,
|
|
160
|
+
usage: stream.usage,
|
|
161
|
+
status: stream.failed ? "failed" : "completed",
|
|
162
|
+
};
|
|
163
|
+
},
|
|
164
|
+
catch: (cause) => cause,
|
|
165
|
+
});
|
|
166
|
+
})), { signal: ctx.signal }),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
exports.default = ompAgent;
|
|
170
|
+
//# sourceMappingURL=omp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omp.js","sourceRoot":"","sources":["omp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { getEnv, requireEnv } from \"../util.ts\";\nimport type { Agent, EvidenceCoverage, StreamEvent } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shared } from \"./shared.ts\";\nimport { createPiAgentEventStream, type PiAgentEventLike } from \"./sdk-streams.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { AGENT_BASELINE_RECIPE_REVISION, DEFAULT_BUN_VERSION, DEFAULT_OMP_CLI_VERSION, } from \"./coding-cli-versions.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nconst COMPAT_PROVIDER = \"niceeval-compat\";\nconst API_KEY_ENV = \"NICEEVAL_OMP_API_KEY\";\nconst OMP_EVIDENCE_COVERAGE: EvidenceCoverage = {\n events: { status: \"complete\" },\n actions: { status: \"complete\" },\n messages: { status: \"complete\" },\n usage: { status: \"complete\" },\n status: { status: \"complete\" },\n data: { status: \"unavailable\", reason: \"OMP print mode does not expose a separate Turn.data value.\" },\n};\nexport interface OmpConfig {\n /** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */\n apiKey?: string;\n /** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */\n baseUrl?: string;\n /** Exact npm version of `@oh-my-pi/pi-coding-agent`. */\n version?: string;\n /** Exact Bun runtime version used by the fallback installer. */\n bunVersion?: string;\n}\nfunction resolveApiKey(config?: OmpConfig): string {\n return config?.apiKey ?? getEnv(\"OMP_API_KEY\") ?? requireEnv(\"OPENAI_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OmpConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OMP_BASE_URL\") ?? getEnv(\"OPENAI_BASE_URL\");\n}\nfunction bunPlatformPackage(version: string, platform: AgentArtifactPlatform): {\n spec: string;\n binPath: string;\n} | undefined {\n if (platform.os === \"linux\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n const musl = platform.libc === \"musl\" ? \"-musl\" : \"\";\n return { spec: `@oven/bun-linux-${arch}${musl}@${version}`, binPath: \"bin/bun\" };\n }\n if (platform.os === \"darwin\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n return { spec: `@oven/bun-darwin-${arch}@${version}`, binPath: \"bin/bun\" };\n }\n return undefined;\n}\nfunction parseJsonl(raw: string): PiAgentEventLike[] {\n return raw.split(/\\r?\\n/).filter((line) => line.trim()).map((line, index) => {\n let value: unknown;\n try {\n value = JSON.parse(line);\n }\n catch (cause) {\n throw new Error(`OMP emitted invalid JSONL at line ${index + 1}`, { cause });\n }\n if (typeof value !== \"object\" || value === null || typeof (value as {\n type?: unknown;\n }).type !== \"string\") {\n throw new Error(`OMP emitted an invalid event at line ${index + 1}`);\n }\n return value as PiAgentEventLike;\n });\n}\n/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */\nexport function ompAgent(config?: OmpConfig): Agent {\n const version = config?.version ?? DEFAULT_OMP_CLI_VERSION;\n const bunVersion = config?.bunVersion ?? DEFAULT_BUN_VERSION;\n const ompInstall = createNpmCliInstaller({\n identity: { agent: \"omp\", version, revision: String(AGENT_BASELINE_RECIPE_REVISION.omp) },\n packageName: \"@oh-my-pi/pi-coding-agent\",\n bin: \"omp\",\n });\n const bunInstall = createNpmCliInstaller({\n identity: { agent: \"bun\", version: bunVersion, revision: \"1\" },\n packageName: \"bun\",\n bin: \"bun\",\n platformPackage: (platform) => bunPlatformPackage(bunVersion, platform),\n });\n const configDirs = new Map<string, string>();\n return defineSandboxAgent({\n name: \"omp\",\n evidenceCoverage: OMP_EVIDENCE_COVERAGE,\n ensure: [bunInstall.ensure, ompInstall.ensure],\n installers: [bunInstall.installer, ompInstall.installer],\n async setup(sb, ctx) {\n const homeResult = await sb.runShell('test -n \"$HOME\" && printf \"%s\" \"$HOME\"');\n const home = homeResult.stdout.trim();\n if (homeResult.exitCode !== 0 || !home.startsWith(\"/\")) {\n throw new Error(\"OMP setup requires an absolute sandbox HOME directory\");\n }\n const dir = `${home}/.niceeval-omp`;\n configDirs.set(sb.sandboxId, dir);\n const baseUrl = resolveBaseUrl(config);\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const models = {\n providers: {\n [COMPAT_PROVIDER]: {\n ...(baseUrl ? { baseUrl } : {}),\n api: \"openai-completions\",\n apiKey: API_KEY_ENV,\n models: [{ id: model, name: model, contextWindow: 1000000, maxTokens: 64000 }],\n },\n },\n };\n await shared.writeFile(sb, `${dir}/models.yml`, JSON.stringify(models, null, 2));\n },\n send: (input, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n const ompBin = yield* resolveAgentBinEffect(ctx.sandbox, \"omp\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const apiKey = resolveApiKey(config);\n const dir = configDirs.get(ctx.sandbox.sandboxId);\n if (!dir)\n throw new Error(\"OMP setup state is unavailable\");\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const env: globalThis.Record<string, string> = {\n [API_KEY_ENV]: apiKey,\n PI_CODING_AGENT_DIR: dir,\n ...ctx.telemetry?.env,\n };\n const args = [\n \"--print\",\n \"--mode\", \"json\",\n \"--model\", `${COMPAT_PROVIDER}/${model}`,\n \"--approval-mode\", \"yolo\",\n \"--no-pty\",\n \"--no-title\",\n input.text,\n ];\n const res = await ctx.sandbox.runCommand(ompBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n let nativeEvents: PiAgentEventLike[];\n try {\n nativeEvents = parseJsonl(res.stdout);\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: cause instanceof Error ? cause.message : \"OMP transcript could not be parsed\",\n process: res,\n });\n }\n const stream = createPiAgentEventStream();\n const events: StreamEvent[] = nativeEvents.flatMap((event) => stream.add(event));\n const terminal = nativeEvents.filter((event) => event.type === \"agent_end\" &&\n (event as {\n isTerminal?: unknown;\n }).isTerminal !== false &&\n Array.isArray((event as {\n messages?: unknown;\n }).messages));\n if (res.exitCode !== 0 || terminal.length !== 1) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: res.exitCode !== 0\n ? shared.diagnoseFailure(res, events, res.stdout)\n : `OMP produced ${terminal.length} valid terminal agent_end events; expected exactly one.`,\n events,\n usage: stream.usage,\n process: res,\n });\n }\n return {\n events,\n usage: stream.usage,\n status: stream.failed ? \"failed\" as const : \"completed\" as const,\n };\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n });\n}\nexport default ompAgent;\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Agent } from "../types.cjs";
|
|
2
|
+
export interface OmpConfig {
|
|
3
|
+
/** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
/** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
/** Exact npm version of `@oh-my-pi/pi-coding-agent`. */
|
|
8
|
+
version?: string;
|
|
9
|
+
/** Exact Bun runtime version used by the fallback installer. */
|
|
10
|
+
bunVersion?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */
|
|
13
|
+
export declare function ompAgent(config?: OmpConfig): Agent;
|
|
14
|
+
export default ompAgent;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Agent } from "../types.mjs";
|
|
2
|
+
export interface OmpConfig {
|
|
3
|
+
/** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
/** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
/** Exact npm version of `@oh-my-pi/pi-coding-agent`. */
|
|
8
|
+
version?: string;
|
|
9
|
+
/** Exact Bun runtime version used by the fallback installer. */
|
|
10
|
+
bunVersion?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */
|
|
13
|
+
export declare function ompAgent(config?: OmpConfig): Agent;
|
|
14
|
+
export default ompAgent;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Agent } from "../types.js";
|
|
2
|
+
export interface OmpConfig {
|
|
3
|
+
/** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
/** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
/** Exact npm version of `@oh-my-pi/pi-coding-agent`. */
|
|
8
|
+
version?: string;
|
|
9
|
+
/** Exact Bun runtime version used by the fallback installer. */
|
|
10
|
+
bunVersion?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */
|
|
13
|
+
export declare function ompAgent(config?: OmpConfig): Agent;
|
|
14
|
+
export default ompAgent;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createRequire as __niceevalCreateRequire } from "node:module";
|
|
2
|
+
const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
|
|
3
|
+
const __niceevalCanonical = __niceevalRequire("./omp.cjs");
|
|
4
|
+
export default __niceevalCanonical.default;
|
|
5
|
+
const __niceevalExport0 = __niceevalCanonical["ompAgent"];
|
|
6
|
+
export { __niceevalExport0 as ompAgent };
|
|
7
|
+
//# sourceMappingURL=omp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omp.js","sources":[],"names":[],"mappings":""}
|
package/dist/agents/openclaw.cjs
CHANGED
|
@@ -14,6 +14,9 @@ const coding_cli_versions_ts_1 = require("./coding-cli-versions.cjs");
|
|
|
14
14
|
const npm_staged_ts_1 = require("./npm-staged.cjs");
|
|
15
15
|
const node_crypto_1 = require("node:crypto");
|
|
16
16
|
const send_failures_ts_1 = require("../context/send-failures.cjs");
|
|
17
|
+
const commands_ts_1 = require("../sandbox/commands.cjs");
|
|
18
|
+
const shell_ts_1 = require("../sandbox/shell.cjs");
|
|
19
|
+
const exact_npm_plugins_ts_1 = require("./exact-npm-plugins.cjs");
|
|
17
20
|
// ───────────────────────────────────────────────────────────────────────────
|
|
18
21
|
// OpenClaw 的 agent adapter(沙箱型)。
|
|
19
22
|
//
|
|
@@ -29,6 +32,40 @@ const send_failures_ts_1 = require("../context/send-failures.cjs");
|
|
|
29
32
|
const SKILL_DIR = ".agents/skills";
|
|
30
33
|
/** 自定义 OpenAI 兼容网关在 openclaw.json 里的 provider id。 */
|
|
31
34
|
const COMPAT_PROVIDER = "compat";
|
|
35
|
+
function openClawPluginLayer(cliVersion, plugins) {
|
|
36
|
+
const identity = {
|
|
37
|
+
agent: "openclaw-plugins",
|
|
38
|
+
version: cliVersion,
|
|
39
|
+
revision: (0, exact_npm_plugins_ts_1.exactNpmPluginRevision)(plugins),
|
|
40
|
+
};
|
|
41
|
+
const verifyFiles = `const fs=require("node:fs"),path=require("node:path");` +
|
|
42
|
+
`const expected=${JSON.stringify(plugins)},base=path.join(process.env.HOME,".openclaw");` +
|
|
43
|
+
`const projects=path.join(base,"npm/projects"),found=[];` +
|
|
44
|
+
`for(const dir of fs.readdirSync(projects)){const root=path.join(projects,dir),p=JSON.parse(fs.readFileSync(path.join(root,"package.json"),"utf8"));` +
|
|
45
|
+
`for(const [name,version] of Object.entries(p.dependencies||{})){const pkg=JSON.parse(fs.readFileSync(path.join(root,"node_modules",name,"package.json"),"utf8"));` +
|
|
46
|
+
`const manifest=JSON.parse(fs.readFileSync(path.join(root,"node_modules",name,"openclaw.plugin.json"),"utf8"));found.push({name,version,pkgVersion:pkg.version,id:manifest.id});}}` +
|
|
47
|
+
`if(found.length!==expected.length)process.exit(1);` +
|
|
48
|
+
`const config=JSON.parse(fs.readFileSync(path.join(base,"openclaw.json"),"utf8"));` +
|
|
49
|
+
`const ordered=expected.map(e=>found.find(x=>x.name===e.name&&x.version===e.version));` +
|
|
50
|
+
`for(const x of ordered){if(!x||x.pkgVersion!==x.version||!config.plugins?.entries?.[x.id]?.enabled||!/^[A-Za-z0-9._-]+$/.test(x.id))process.exit(1);}`;
|
|
51
|
+
return {
|
|
52
|
+
ensure: { identity, probe: (0, commands_ts_1.shell)(`node -e ${(0, shell_ts_1.shellQuote)(verifyFiles)}`) },
|
|
53
|
+
installer: {
|
|
54
|
+
identity,
|
|
55
|
+
installMode: "sandbox-network",
|
|
56
|
+
install: async (sandbox, context) => {
|
|
57
|
+
const installs = plugins
|
|
58
|
+
.map((plugin) => `openclaw plugins install --pin ${(0, shell_ts_1.shellQuote)(plugin.spec)}`)
|
|
59
|
+
.join("\n");
|
|
60
|
+
const script = `set -eu
|
|
61
|
+
ids=$(openclaw plugins list --json | node -e ${(0, shell_ts_1.shellQuote)(`let s="";process.stdin.on("data",c=>s+=c).on("end",()=>{const x=JSON.parse(s);for(const p of x.plugins||[])if(p.origin==="global")console.log(p.id)})`)})
|
|
62
|
+
for id in $ids; do openclaw plugins uninstall --force "$id"; done
|
|
63
|
+
${installs}`;
|
|
64
|
+
await sandbox.runShellOrThrow(script, { signal: context.signal });
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
32
69
|
function resolveApiKey(config) {
|
|
33
70
|
return config?.apiKey ?? (0, util_ts_1.getEnv)("OPENCLAW_API_KEY") ?? (0, util_ts_1.requireEnv)("ANTHROPIC_API_KEY");
|
|
34
71
|
}
|
|
@@ -54,6 +91,7 @@ function resolveModelFlag(model, hasCompatBase) {
|
|
|
54
91
|
*/
|
|
55
92
|
function openClawAgent(config) {
|
|
56
93
|
const version = config?.version ?? coding_cli_versions_ts_1.DEFAULT_OPENCLAW_CLI_VERSION;
|
|
94
|
+
const plugins = (0, exact_npm_plugins_ts_1.normalizeExactNpmPlugins)(config?.plugins, "openClawAgent plugins");
|
|
57
95
|
const { ensure, installer } = (0, npm_staged_ts_1.createNpmCliInstaller)({
|
|
58
96
|
identity: {
|
|
59
97
|
agent: "openclaw",
|
|
@@ -63,6 +101,7 @@ function openClawAgent(config) {
|
|
|
63
101
|
packageName: "openclaw",
|
|
64
102
|
bin: "openclaw",
|
|
65
103
|
});
|
|
104
|
+
const pluginLayer = plugins.length === 0 ? undefined : openClawPluginLayer(version, plugins);
|
|
66
105
|
return (0, define_ts_1.defineSandboxAgent)({
|
|
67
106
|
name: "openclaw",
|
|
68
107
|
// e2e 已用真实 CLI 证明 session transcript 能给出工具轨 / 消息 / 用量;
|
|
@@ -71,8 +110,8 @@ function openClawAgent(config) {
|
|
|
71
110
|
// OpenClaw 没有专属 span 方言 mapper:原生 span 走 canonical 通用 heuristic。
|
|
72
111
|
// OTel 内容采集关闭时只影响 trace 证据面;行为轨(下面的 transcript 解析)不受影响。
|
|
73
112
|
spanMapper: canonical_ts_1.mapGenericSpans,
|
|
74
|
-
ensure,
|
|
75
|
-
installers: [installer],
|
|
113
|
+
ensure: pluginLayer === undefined ? ensure : [ensure, pluginLayer.ensure],
|
|
114
|
+
installers: pluginLayer === undefined ? [installer] : [installer, pluginLayer.installer],
|
|
76
115
|
tracing: {
|
|
77
116
|
protocol: "http/protobuf",
|
|
78
117
|
env: (endpoint) => ({
|
|
@@ -88,7 +127,17 @@ function openClawAgent(config) {
|
|
|
88
127
|
// OpenAI 兼容网关走自定义 provider + openai-completions;
|
|
89
128
|
// skipBootstrap 跳过首轮身份仪式,否则 agent 会先问 "Who am I"。
|
|
90
129
|
// workspace 钉沙箱工作目录,文件工具写到 eval 可见的路径。
|
|
130
|
+
let persistentConfig = {};
|
|
131
|
+
try {
|
|
132
|
+
const existing = await sb.runShell('cat "$HOME/.openclaw/openclaw.json"');
|
|
133
|
+
if (existing.exitCode === 0)
|
|
134
|
+
persistentConfig = JSON.parse(existing.stdout);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
persistentConfig = {};
|
|
138
|
+
}
|
|
91
139
|
const openclawConfig = {
|
|
140
|
+
...persistentConfig,
|
|
92
141
|
agents: {
|
|
93
142
|
defaults: {
|
|
94
143
|
skipBootstrap: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["openclaw.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineSandboxAgent } from \"../define.ts\";\nimport { Effect } from \"effect\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapGenericSpans } from \"../o11y/otlp/canonical.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { parseOpenClawTranscript, parseOpenClawRunJson } from \"../o11y/parsers/openclaw.ts\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { DEFAULT_OPENCLAW_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Agent, AgentSetupManifest, SkillSpec, StreamEvent, TurnEvidenceCoverage } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// OpenClaw 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `openclaw agent --local --json`(嵌入式 agent 循环,不依赖\n// 长驻 gateway),读回结果封包 + session transcript → 标准事件流。方言解析全部住\n// src/o11y/parsers/openclaw.ts,不进 core(契约见 docs/feature/adapters/sdk/openclaw/README.md)。\n//\n// 行为轨优先级(collection.md):session transcript(完整工具轨迹)优先;transcript 拿不到\n// 时只保留 `--json` 封包的最终回复,不从最终文本猜工具行为——此时负断言不可信,send 会\n// 经 ctx.log 明确记录这个限制。\n// ───────────────────────────────────────────────────────────────────────────\n/** OpenClaw 的 skill 目录(`skills` 生态的「通用」目录);发现靠 AGENTS.md 指引,不依赖原生扫描。 */\nconst SKILL_DIR = \".agents/skills\";\n/** 自定义 OpenAI 兼容网关在 openclaw.json 里的 provider id。 */\nconst COMPAT_PROVIDER = \"compat\";\nexport interface OpenClawConfig {\n /** 模型 API key。省略时读 OPENCLAW_API_KEY,再回落 ANTHROPIC_API_KEY。 */\n apiKey?: string;\n /** OpenAI 兼容端点。省略时读 OPENCLAW_BASE_URL。 */\n baseUrl?: string;\n /** 固定安装的 openclaw npm 版本(如 \"1.2.3\");省略时用内置默认。 */\n version?: string;\n /**\n * 装进沙箱的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。\n */\n skills?: SkillSpec[];\n}\nfunction resolveApiKey(config?: OpenClawConfig): string {\n return config?.apiKey ?? getEnv(\"OPENCLAW_API_KEY\") ?? requireEnv(\"ANTHROPIC_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OpenClawConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OPENCLAW_BASE_URL\");\n}\n/** experiment.model → `--model`。裸模型名在自定义网关下补成 `compat/<model>`。 */\nfunction resolveModelFlag(model: string | undefined, hasCompatBase: boolean): string | undefined {\n if (!model)\n return undefined;\n if (model.includes(\"/\"))\n return model;\n return hasCompatBase ? `${COMPAT_PROVIDER}/${model}` : model;\n}\n/**\n * OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、\n * `ctx.session` 存取器与 canonical OTel 通用 mapper(`mapGenericSpans`);OpenClaw 方言\n * (transcript / `agent --json` 字段)只住 `src/o11y/parsers/openclaw.ts`,不进 core。\n *\n * 会话契约:首轮显式发一个全新 session id 并 `ctx.session.capture()`(不依赖 OpenClaw 的\n * 默认主会话——否则相邻 attempt 会静默共享历史),后续轮用 `ctx.session.id` resume;\n * `t.newSession()` 后的新会话线自然拿到新 id,session 之间互相隔离。\n */\nexport function openClawAgent(config?: OpenClawConfig): Agent {\n const version = config?.version ?? DEFAULT_OPENCLAW_CLI_VERSION;\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"openclaw\",\n version,\n revision: String(AGENT_BASELINE_RECIPE_REVISION.openclaw),\n },\n packageName: \"openclaw\",\n bin: \"openclaw\",\n });\n return defineSandboxAgent({\n name: \"openclaw\",\n // e2e 已用真实 CLI 证明 session transcript 能给出工具轨 / 消息 / 用量;\n // 采集失败的单轮仍会在 send 里把 coverage 降成 unavailable/partial。\n evidenceCoverage: completeEvidenceCoverage,\n // OpenClaw 没有专属 span 方言 mapper:原生 span 走 canonical 通用 heuristic。\n // OTel 内容采集关闭时只影响 trace 证据面;行为轨(下面的 transcript 解析)不受影响。\n spanMapper: mapGenericSpans,\n ensure,\n installers: [installer],\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n OTEL_TRACES_EXPORTER: \"otlp\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n async setup(sb, ctx) {\n const baseUrl = resolveBaseUrl(config);\n if (baseUrl) {\n const apiKey = resolveApiKey(config);\n // OpenAI 兼容网关走自定义 provider + openai-completions;\n // skipBootstrap 跳过首轮身份仪式,否则 agent 会先问 \"Who am I\"。\n // workspace 钉沙箱工作目录,文件工具写到 eval 可见的路径。\n const openclawConfig = {\n agents: {\n defaults: {\n skipBootstrap: true,\n workspace: sb.workdir,\n },\n },\n models: {\n mode: \"merge\",\n providers: {\n [COMPAT_PROVIDER]: {\n baseUrl,\n apiKey,\n api: \"openai-completions\",\n models: [\n { id: \"gpt-5.6-luna\", name: \"gpt-5.6-luna\" },\n { id: \"gpt-5.4-mini\", name: \"gpt-5.4-mini\" },\n { id: \"gpt-5.4\", name: \"gpt-5.4\" },\n ],\n },\n },\n },\n };\n await shared.writeFile(sb, \"~/.openclaw/openclaw.json\", JSON.stringify(openclawConfig, null, 2), { sensitiveValues: [apiKey] });\n // 预置最小身份文件,避免缺 IDENTITY 时仍触发仪式文案。\n await shared.writeFile(sb, `${sb.workdir}/IDENTITY.md`, \"# Identity\\n\\nName: niceeval\\nEmoji: ✓\\n\");\n await shared.writeFile(sb, `${sb.workdir}/USER.md`, \"# User\\n\\nEval harness operator.\\n\");\n await shared.writeFile(sb, `${sb.workdir}/SOUL.md`, \"# Soul\\n\\nExecute the user's task directly. Do not ask who you are.\\n\");\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // 发现指引跟着一起写:不提示 = 白装。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (manifest.skills.length) {\n ctx.reportSetup(manifest);\n }\n },\n send: (input, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n const sb = ctx.sandbox;\n const openclawBin = yield* resolveAgentBinEffect(sb, \"openclaw\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n // 会话契约:新会话线显式发新 session id(隔离);后续轮 resume 记录的 id。\n const sessionId = ctx.session.id ?? `niceeval-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const baseUrl = resolveBaseUrl(config);\n const args = [\"agent\", \"--local\", \"--session-id\", sessionId, \"--message\", input.text, \"--json\"];\n const model = resolveModelFlag(ctx.model, Boolean(baseUrl));\n if (model)\n args.push(\"--model\", model);\n const apiKey = resolveApiKey(config);\n const env: globalThis.Record<string, string> = {\n OPENCLAW_API_KEY: apiKey,\n ANTHROPIC_API_KEY: apiKey,\n OPENAI_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n };\n if (baseUrl) {\n env.OPENCLAW_BASE_URL = baseUrl;\n env.OPENAI_BASE_URL = baseUrl;\n }\n const res = await sb.runCommand(openclawBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n const runJson = parseOpenClawRunJson(res.stdout);\n // 封包若带回服务端分配的 session key,后续轮以它为准(capture first-writer-wins,\n // 首轮已用自发 id 落地时不覆盖)。\n ctx.session.capture(runJson.sessionId);\n // 完整工具轨迹的唯一来源:session transcript。\n // 优先读封包给出的 sessionFile(精确);否则在 agents 目录取最新 *.jsonl,\n // 但排除同目录旁路产物 *.trajectory.jsonl(mtime 常更新、却不是消息轨——\n // 误读会导致 events 为空、整轮 coverage 降成 unavailable)。\n let raw: string | undefined;\n if (runJson.sessionFile) {\n try {\n raw = await sb.readText(runJson.sessionFile);\n }\n catch {\n raw = undefined;\n }\n }\n if (raw === undefined) {\n raw = await shared.captureLatestJsonl(sb, \"~/.openclaw/agents\", {\n excludeName: /\\.trajectory\\.jsonl$/i,\n });\n }\n const parsed = parseOpenClawTranscript(raw);\n const events: StreamEvent[] = [...parsed.events];\n // transcript 缺失 / 有解析不了的行:这一轮的工具轨迹不可信,coverage 降级说出来\n // (负断言由此落 unavailable,而不是在空流上假通过),不从最终文本猜工具行为。\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (raw === undefined || parsed.events.length === 0) {\n const reason = \"session transcript unavailable; only the --json final reply was collected\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n ctx.log(\"openclaw transcript unavailable: tool trajectory missing for this turn, negative assertions are unreliable\");\n if (runJson.text)\n events.push({ type: \"message\", role: \"assistant\", text: runJson.text });\n }\n else if (!parsed.parseSuccess) {\n const reason = \"some transcript lines could not be parsed\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n // 用量:transcript 逐消息累加优先;transcript 没报时用封包摘要,都没有就是空对象。\n const usage = (parsed.usage.inputTokens ?? 0) > 0 || (parsed.usage.outputTokens ?? 0) > 0\n ? parsed.usage\n : (runJson.usage ?? parsed.usage);\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage,\n process: res,\n });\n }\n if (runJson.failed)\n events.push({ type: \"error\", message: shared.diagnoseFailure(res, parsed.events, raw) });\n return {\n events,\n usage,\n status: runJson.failed ? \"failed\" as const : \"completed\" as const,\n ...(turnEvidenceCoverage ? { evidenceCoverage: turnEvidenceCoverage } : {}),\n };\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n });\n}\nexport default openClawAgent();\n"]}
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["openclaw.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineSandboxAgent } from \"../define.ts\";\nimport { Effect } from \"effect\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapGenericSpans } from \"../o11y/otlp/canonical.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { parseOpenClawTranscript, parseOpenClawRunJson } from \"../o11y/parsers/openclaw.ts\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { DEFAULT_OPENCLAW_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Agent, AgentSetupManifest, SkillSpec, StreamEvent, TurnEvidenceCoverage } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shell } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport type { AgentEnsure, AgentInstaller } from \"./types.ts\";\nimport { exactNpmPluginRevision, normalizeExactNpmPlugins, type ExactNpmPlugin, } from \"./exact-npm-plugins.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// OpenClaw 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `openclaw agent --local --json`(嵌入式 agent 循环,不依赖\n// 长驻 gateway),读回结果封包 + session transcript → 标准事件流。方言解析全部住\n// src/o11y/parsers/openclaw.ts,不进 core(契约见 docs/feature/adapters/sdk/openclaw/README.md)。\n//\n// 行为轨优先级(collection.md):session transcript(完整工具轨迹)优先;transcript 拿不到\n// 时只保留 `--json` 封包的最终回复,不从最终文本猜工具行为——此时负断言不可信,send 会\n// 经 ctx.log 明确记录这个限制。\n// ───────────────────────────────────────────────────────────────────────────\n/** OpenClaw 的 skill 目录(`skills` 生态的「通用」目录);发现靠 AGENTS.md 指引,不依赖原生扫描。 */\nconst SKILL_DIR = \".agents/skills\";\n/** 自定义 OpenAI 兼容网关在 openclaw.json 里的 provider id。 */\nconst COMPAT_PROVIDER = \"compat\";\nexport interface OpenClawConfig {\n /** 模型 API key。省略时读 OPENCLAW_API_KEY,再回落 ANTHROPIC_API_KEY。 */\n apiKey?: string;\n /** OpenAI 兼容端点。省略时读 OPENCLAW_BASE_URL。 */\n baseUrl?: string;\n /** 固定安装的 openclaw npm 版本(如 \"1.2.3\");省略时用内置默认。 */\n version?: string;\n /**\n * 装进沙箱的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。\n */\n skills?: SkillSpec[];\n /** Native OpenClaw plugins as exact npm package@version declarations. */\n plugins?: readonly string[];\n}\nfunction openClawPluginLayer(cliVersion: string, plugins: readonly ExactNpmPlugin[]): {\n ensure: AgentEnsure;\n installer: AgentInstaller;\n} {\n const identity = {\n agent: \"openclaw-plugins\",\n version: cliVersion,\n revision: exactNpmPluginRevision(plugins),\n };\n const verifyFiles = `const fs=require(\"node:fs\"),path=require(\"node:path\");` +\n `const expected=${JSON.stringify(plugins)},base=path.join(process.env.HOME,\".openclaw\");` +\n `const projects=path.join(base,\"npm/projects\"),found=[];` +\n `for(const dir of fs.readdirSync(projects)){const root=path.join(projects,dir),p=JSON.parse(fs.readFileSync(path.join(root,\"package.json\"),\"utf8\"));` +\n `for(const [name,version] of Object.entries(p.dependencies||{})){const pkg=JSON.parse(fs.readFileSync(path.join(root,\"node_modules\",name,\"package.json\"),\"utf8\"));` +\n `const manifest=JSON.parse(fs.readFileSync(path.join(root,\"node_modules\",name,\"openclaw.plugin.json\"),\"utf8\"));found.push({name,version,pkgVersion:pkg.version,id:manifest.id});}}` +\n `if(found.length!==expected.length)process.exit(1);` +\n `const config=JSON.parse(fs.readFileSync(path.join(base,\"openclaw.json\"),\"utf8\"));` +\n `const ordered=expected.map(e=>found.find(x=>x.name===e.name&&x.version===e.version));` +\n `for(const x of ordered){if(!x||x.pkgVersion!==x.version||!config.plugins?.entries?.[x.id]?.enabled||!/^[A-Za-z0-9._-]+$/.test(x.id))process.exit(1);}`;\n return {\n ensure: { identity, probe: shell(`node -e ${shellQuote(verifyFiles)}`) },\n installer: {\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox, context) => {\n const installs = plugins\n .map((plugin) => `openclaw plugins install --pin ${shellQuote(plugin.spec)}`)\n .join(\"\\n\");\n const script = `set -eu\nids=$(openclaw plugins list --json | node -e ${shellQuote(`let s=\"\";process.stdin.on(\"data\",c=>s+=c).on(\"end\",()=>{const x=JSON.parse(s);for(const p of x.plugins||[])if(p.origin===\"global\")console.log(p.id)})`)})\nfor id in $ids; do openclaw plugins uninstall --force \"$id\"; done\n${installs}`;\n await sandbox.runShellOrThrow(script, { signal: context.signal });\n },\n },\n };\n}\nfunction resolveApiKey(config?: OpenClawConfig): string {\n return config?.apiKey ?? getEnv(\"OPENCLAW_API_KEY\") ?? requireEnv(\"ANTHROPIC_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OpenClawConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OPENCLAW_BASE_URL\");\n}\n/** experiment.model → `--model`。裸模型名在自定义网关下补成 `compat/<model>`。 */\nfunction resolveModelFlag(model: string | undefined, hasCompatBase: boolean): string | undefined {\n if (!model)\n return undefined;\n if (model.includes(\"/\"))\n return model;\n return hasCompatBase ? `${COMPAT_PROVIDER}/${model}` : model;\n}\n/**\n * OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、\n * `ctx.session` 存取器与 canonical OTel 通用 mapper(`mapGenericSpans`);OpenClaw 方言\n * (transcript / `agent --json` 字段)只住 `src/o11y/parsers/openclaw.ts`,不进 core。\n *\n * 会话契约:首轮显式发一个全新 session id 并 `ctx.session.capture()`(不依赖 OpenClaw 的\n * 默认主会话——否则相邻 attempt 会静默共享历史),后续轮用 `ctx.session.id` resume;\n * `t.newSession()` 后的新会话线自然拿到新 id,session 之间互相隔离。\n */\nexport function openClawAgent(config?: OpenClawConfig): Agent {\n const version = config?.version ?? DEFAULT_OPENCLAW_CLI_VERSION;\n const plugins = normalizeExactNpmPlugins(config?.plugins, \"openClawAgent plugins\");\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"openclaw\",\n version,\n revision: String(AGENT_BASELINE_RECIPE_REVISION.openclaw),\n },\n packageName: \"openclaw\",\n bin: \"openclaw\",\n });\n const pluginLayer = plugins.length === 0 ? undefined : openClawPluginLayer(version, plugins);\n return defineSandboxAgent({\n name: \"openclaw\",\n // e2e 已用真实 CLI 证明 session transcript 能给出工具轨 / 消息 / 用量;\n // 采集失败的单轮仍会在 send 里把 coverage 降成 unavailable/partial。\n evidenceCoverage: completeEvidenceCoverage,\n // OpenClaw 没有专属 span 方言 mapper:原生 span 走 canonical 通用 heuristic。\n // OTel 内容采集关闭时只影响 trace 证据面;行为轨(下面的 transcript 解析)不受影响。\n spanMapper: mapGenericSpans,\n ensure: pluginLayer === undefined ? ensure : [ensure, pluginLayer.ensure],\n installers: pluginLayer === undefined ? [installer] : [installer, pluginLayer.installer],\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n OTEL_TRACES_EXPORTER: \"otlp\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n async setup(sb, ctx) {\n const baseUrl = resolveBaseUrl(config);\n if (baseUrl) {\n const apiKey = resolveApiKey(config);\n // OpenAI 兼容网关走自定义 provider + openai-completions;\n // skipBootstrap 跳过首轮身份仪式,否则 agent 会先问 \"Who am I\"。\n // workspace 钉沙箱工作目录,文件工具写到 eval 可见的路径。\n let persistentConfig: globalThis.Record<string, unknown> = {};\n try {\n const existing = await sb.runShell('cat \"$HOME/.openclaw/openclaw.json\"');\n if (existing.exitCode === 0)\n persistentConfig = JSON.parse(existing.stdout);\n }\n catch {\n persistentConfig = {};\n }\n const openclawConfig = {\n ...persistentConfig,\n agents: {\n defaults: {\n skipBootstrap: true,\n workspace: sb.workdir,\n },\n },\n models: {\n mode: \"merge\",\n providers: {\n [COMPAT_PROVIDER]: {\n baseUrl,\n apiKey,\n api: \"openai-completions\",\n models: [\n { id: \"gpt-5.6-luna\", name: \"gpt-5.6-luna\" },\n { id: \"gpt-5.4-mini\", name: \"gpt-5.4-mini\" },\n { id: \"gpt-5.4\", name: \"gpt-5.4\" },\n ],\n },\n },\n },\n };\n await shared.writeFile(sb, \"~/.openclaw/openclaw.json\", JSON.stringify(openclawConfig, null, 2), { sensitiveValues: [apiKey] });\n // 预置最小身份文件,避免缺 IDENTITY 时仍触发仪式文案。\n await shared.writeFile(sb, `${sb.workdir}/IDENTITY.md`, \"# Identity\\n\\nName: niceeval\\nEmoji: ✓\\n\");\n await shared.writeFile(sb, `${sb.workdir}/USER.md`, \"# User\\n\\nEval harness operator.\\n\");\n await shared.writeFile(sb, `${sb.workdir}/SOUL.md`, \"# Soul\\n\\nExecute the user's task directly. Do not ask who you are.\\n\");\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // 发现指引跟着一起写:不提示 = 白装。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (manifest.skills.length) {\n ctx.reportSetup(manifest);\n }\n },\n send: (input, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n const sb = ctx.sandbox;\n const openclawBin = yield* resolveAgentBinEffect(sb, \"openclaw\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n // 会话契约:新会话线显式发新 session id(隔离);后续轮 resume 记录的 id。\n const sessionId = ctx.session.id ?? `niceeval-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const baseUrl = resolveBaseUrl(config);\n const args = [\"agent\", \"--local\", \"--session-id\", sessionId, \"--message\", input.text, \"--json\"];\n const model = resolveModelFlag(ctx.model, Boolean(baseUrl));\n if (model)\n args.push(\"--model\", model);\n const apiKey = resolveApiKey(config);\n const env: globalThis.Record<string, string> = {\n OPENCLAW_API_KEY: apiKey,\n ANTHROPIC_API_KEY: apiKey,\n OPENAI_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n };\n if (baseUrl) {\n env.OPENCLAW_BASE_URL = baseUrl;\n env.OPENAI_BASE_URL = baseUrl;\n }\n const res = await sb.runCommand(openclawBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n const runJson = parseOpenClawRunJson(res.stdout);\n // 封包若带回服务端分配的 session key,后续轮以它为准(capture first-writer-wins,\n // 首轮已用自发 id 落地时不覆盖)。\n ctx.session.capture(runJson.sessionId);\n // 完整工具轨迹的唯一来源:session transcript。\n // 优先读封包给出的 sessionFile(精确);否则在 agents 目录取最新 *.jsonl,\n // 但排除同目录旁路产物 *.trajectory.jsonl(mtime 常更新、却不是消息轨——\n // 误读会导致 events 为空、整轮 coverage 降成 unavailable)。\n let raw: string | undefined;\n if (runJson.sessionFile) {\n try {\n raw = await sb.readText(runJson.sessionFile);\n }\n catch {\n raw = undefined;\n }\n }\n if (raw === undefined) {\n raw = await shared.captureLatestJsonl(sb, \"~/.openclaw/agents\", {\n excludeName: /\\.trajectory\\.jsonl$/i,\n });\n }\n const parsed = parseOpenClawTranscript(raw);\n const events: StreamEvent[] = [...parsed.events];\n // transcript 缺失 / 有解析不了的行:这一轮的工具轨迹不可信,coverage 降级说出来\n // (负断言由此落 unavailable,而不是在空流上假通过),不从最终文本猜工具行为。\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (raw === undefined || parsed.events.length === 0) {\n const reason = \"session transcript unavailable; only the --json final reply was collected\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n ctx.log(\"openclaw transcript unavailable: tool trajectory missing for this turn, negative assertions are unreliable\");\n if (runJson.text)\n events.push({ type: \"message\", role: \"assistant\", text: runJson.text });\n }\n else if (!parsed.parseSuccess) {\n const reason = \"some transcript lines could not be parsed\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n // 用量:transcript 逐消息累加优先;transcript 没报时用封包摘要,都没有就是空对象。\n const usage = (parsed.usage.inputTokens ?? 0) > 0 || (parsed.usage.outputTokens ?? 0) > 0\n ? parsed.usage\n : (runJson.usage ?? parsed.usage);\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage,\n process: res,\n });\n }\n if (runJson.failed)\n events.push({ type: \"error\", message: shared.diagnoseFailure(res, parsed.events, raw) });\n return {\n events,\n usage,\n status: runJson.failed ? \"failed\" as const : \"completed\" as const,\n ...(turnEvidenceCoverage ? { evidenceCoverage: turnEvidenceCoverage } : {}),\n };\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n });\n}\nexport default openClawAgent();\n"]}
|
|
@@ -11,6 +11,8 @@ export interface OpenClawConfig {
|
|
|
11
11
|
* 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。
|
|
12
12
|
*/
|
|
13
13
|
skills?: SkillSpec[];
|
|
14
|
+
/** Native OpenClaw plugins as exact npm package@version declarations. */
|
|
15
|
+
plugins?: readonly string[];
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、
|
|
@@ -11,6 +11,8 @@ export interface OpenClawConfig {
|
|
|
11
11
|
* 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。
|
|
12
12
|
*/
|
|
13
13
|
skills?: SkillSpec[];
|
|
14
|
+
/** Native OpenClaw plugins as exact npm package@version declarations. */
|
|
15
|
+
plugins?: readonly string[];
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、
|
|
@@ -11,6 +11,8 @@ export interface OpenClawConfig {
|
|
|
11
11
|
* 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。
|
|
12
12
|
*/
|
|
13
13
|
skills?: SkillSpec[];
|
|
14
|
+
/** Native OpenClaw plugins as exact npm package@version declarations. */
|
|
15
|
+
plugins?: readonly string[];
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、
|