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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"human.js","sourceRoot":"","sources":["human.ts"],"names":[],"mappings":"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","sourcesContent":["// Human profile renderer(见 docs/feature/experiments/cli.md「人在终端里怎么用」)。\n//\n// 两个变体,由 `io.stderr.isTTY` 在构造时选一次(profile 是消费者模型,TTY 只是传输能力 ——\n// 不加 `--json` 在非 TTY 下仍是人读文本,只是退化成纯追加文案,不悄悄变成 `--json` 语义):\n//\n// - TTY:动态 dashboard(命令/elapsed/守恒计数/cost/active slots)覆盖重画,永久事件走\n// clear → append → redraw(coordinator 保证顺序,这里只需正确实现三个钩子)。\n// - 非 TTY:零 ANSI 的单一有序 stdout 追加流 —— 只有 start(plan 永久事件天然充当)、永久事件、\n// 运行级瞬时通知、以及连续 30 秒无永久事件时的一条 heartbeat;不追踪 active slot,不重画。\n//\n// 两个变体共用同一份「永久事件 → 文本行」的纯函数(renderDurableLines 及其子函数),保证\n// 完成页/失败行/诊断行的实际文案在两种模式下完全一致,只有「要不要用 ANSI 维护一块动态区域」\n// 不同 —— 不是两套平行的文案实现。\n//\n// 一条失败/errored 的终端投影恒为单行事实行(buildFailureFactLine):TTY 下滚动显示在 live\n// 面板内嵌的 FAILURES 分节(最近 5 条本次新发生的失败,carry 携入失败不进分节,不写\n// scrollback);非 TTY 单流逐条追加同一投影。结束反馈的 FAILURES 面板改按失败形态聚合\n// (buildFailuresPanelRows),不再逐条铺开;新增的 WARNINGS 面板按 code 汇总本次去重后的诊断。\n// 详见 docs/feature/experiments/cli.md「运行中的 live 面板」与「人看的结束反馈」。\n//\n// 完成页(summary/receipt 两个永久事件)不再调用 `./reporters/table.ts` 的 `renderRunReport()`\n// 大表:失败优先摘要留在终端,完整证据始终由 receipt 中的真实 Run ID 打开。\nimport { t } from \"../../i18n/index.ts\";\nimport { formatCost } from \"../../shared/format.ts\";\nimport { compactAssertionSummary, fitCompactAssertionSummary } from \"../../assertions/display.ts\";\nimport { COORDINATION_RECOVERED_CODE, encodeAttemptKey, HALT_DIAGNOSTIC_CODE } from \"../types.ts\";\nimport { panelCapabilityOf as panelCapability, panelContentWidth, renderPanel, type PanelMode, type PanelRow, } from \"../../report/model/panel.ts\";\nimport { charDisplayWidth, padDisplay, padStartDisplay, stringWidth } from \"../../report/model/text-layout.ts\";\nimport type { CommandPlan, CommandPlanLane, CommandPlanStep, } from \"../command-plan.ts\";\nimport type { ActiveAttempt, ActiveExperimentHook, ActiveLockWait, ActivePrecheck, ActiveRunActivity, AttemptKey, AttemptRef, DiagnosticNotice, ExperimentHookName, FailureNotice, LifecyclePhase, DurableFeedbackEvent, RunFeedbackPlan, RunFeedbackState, } from \"../types.ts\";\nimport type { FeedbackRenderer } from \"./renderer.ts\";\nimport type { FeedbackIO } from \"./io.ts\";\nimport type { JsonValue } from \"../../shared/types.ts\";\nimport type { PrimaryFactSummary } from \"../../assertions/types.ts\";\ninterface HumanFingerprintDelta {\n selector: string;\n _tag?: \"Added\" | \"Removed\" | \"Changed\" | \"Unknown\";\n kind?: \"added\" | \"removed\" | \"changed\" | \"unknown\";\n from?: string;\n to?: string;\n}\ninterface HumanFingerprintDiagnosticFactValue {\n label: string;\n value: JsonValue;\n}\ninterface HumanFingerprintDiagnosticFactTransition {\n label: string;\n from: JsonValue;\n to: JsonValue;\n}\ntype HumanFingerprintDiagnosticFact = HumanFingerprintDiagnosticFactValue | HumanFingerprintDiagnosticFactTransition;\ninterface HumanFingerprintDiagnostic {\n code: string;\n summary: string;\n facts?: readonly HumanFingerprintDiagnosticFact[];\n observedDeltas?: readonly HumanFingerprintDelta[];\n limitations?: readonly string[];\n causes?: readonly HumanFingerprintDiagnostic[];\n}\ntype HumanFingerprintComparison = {\n kind: \"match\";\n} | {\n kind: \"changed\";\n deltas: readonly HumanFingerprintDelta[];\n} | {\n kind: \"unexplained\";\n diagnostic: HumanFingerprintDiagnostic;\n};\n/** live/结束面板的传输能力(docs/feature/reports/README.md「区域框」):是 TTY 且\n * 没有要求朴素输出(`NO_COLOR`)时才画框——`io.env` 而不是直接读 `process.env`,保持\n * profile renderer 可用假 IO 确定性测试。 */\nfunction panelCapabilityForFeedback(io: FeedbackIO): {\n mode: PanelMode;\n width: number;\n} {\n return panelCapability({ isTTY: io.stderr.isTTY, noColor: io.env.NO_COLOR, width: io.stderr.columns });\n}\n/** 失败/errored 默认展开上限(见 cli.md「'立即追加'也必须有上限」表:human 前 10 条)。\n * 只管非 TTY 追加流的展开条数;TTY live 面板的 FAILURES 分节用 LIVE_FAILURES_VISIBLE,\n * 结束反馈的 FAILURES 面板用 FAILURE_GROUPS_CAP(按失败形态的组数,不是原始条数)。 */\nconst HUMAN_FAILURE_CAP = 10;\n/** live 面板 FAILURES 分节滚动保留的条数(见 cli.md「运行中的 live 面板」)。 */\nconst LIVE_FAILURES_VISIBLE = 5;\n/** 结束反馈 FAILURES 面板按失败形态聚合后,展开的组数上限;超出收进\n * `+K more kinds — niceeval view` 尾行(见 cli.md「人看的结束反馈」)。 */\nconst FAILURE_GROUPS_CAP = 10;\n/** 非 TTY / `--json` 没有可依赖的终端宽度,失败单行投影用固定预算(见\n * docs/feature/assertions/library/display.md「一条摘要怎样排版」)。 */\nconst NON_TTY_FAILURE_LINE_MAX_CHARS = 100;\n/** 非 TTY human 退化流的空闲 heartbeat 阈值(见 cli.md「什么动态更新,什么逐条追加」表)。 */\nconst NON_TTY_HEARTBEAT_IDLE_MS = 30000;\n/** dashboard 高度预留:避免最后一行触发终端自动滚动(与 live.ts 旧实现的 `rows - 2` 同一动机,\n * 这里只需要给「下一帧」留出一行余地,不需要额外的表头/尾行预留)。 */\nconst DASHBOARD_ROW_RESERVE = 1;\nexport interface HumanRendererOptions {\n io: FeedbackIO;\n /** dashboard 首行的命令名(如 \"niceeval exp compare\");CLI 层按 argv 拼好传入 —— renderer\n * 不解析 argv,不重新发明「这次跑的是什么命令」。 */\n command: string;\n}\n/** 按 `io.stderr.isTTY` 派发:构造时选一次,运行期不再切换。 */\nexport function createHumanRenderer(options: HumanRendererOptions): FeedbackRenderer {\n const { io, command } = options;\n return io.stderr.isTTY ? createDashboardRenderer(io, command) : createPlainRenderer(io);\n}\n// ───────────────────────── 共享:永久事件 → 文本行(纯函数,两种模式同一份文案) ─────────────────────────\n/** 一条永久事件 → 待写入的整行文本(不含结尾换行,调用方统一 join(\"\\n\") + \"\\n\")。\n * 空数组表示这个事件类型在 human 下没有可见内容(目前没有这种情形,保留以防未来扩展)。\n * `panel` 是面板的传输能力(见 `panelCapabilityOf`)——只有面板体裁(plan/summary/receipt)\n * 消费它;流事件(failure/diagnostic/…)不画框,不需要这份能力。 */\nexport function renderDurableLines(event: DurableFeedbackEvent, state: RunFeedbackState, panel: {\n mode: PanelMode;\n width: number;\n}): string[] {\n switch (event.type) {\n case \"plan\":\n return buildPlanLines(event.plan, panel);\n case \"failure\": {\n // 立即追加也要遵守展开上限(见 cli.md「'立即追加'也必须有上限,防止失败风暴重新淹没\n // 输出」)。reducer 已经把这一条计入 state.failures(emit() 先 reduce 再入队),所以\n // freshFailureCount 就是「本次新发生且算上这一条」的累计数;plan 静态注入的复用失败\n // 不消耗流式上限。越过上限\n // 的第一条给一次 suppressed 提示(让人立刻知道开始折叠了);再往后的每一条都静默 ——\n // 不然「追加一次」会变成每条失败都重复一遍「还剩多少条」,完成页的 FAILURES 区块才是\n // 最终准确总数的权威来源。\n // 只服务非 TTY 退化流:TTY dashboard 的 appendDurable 对 \"failure\" 直接返回(不写\n // scrollback),这条投影只由下一帧的 live 面板 FAILURES 分节显现(见 cli.md「运行中的\n // live 面板」)。非 TTY 单流逐条追加同一份单行事实投影,预算固定 100(没有可依赖的\n // 终端宽度)。\n const count = state.freshFailureCount;\n if (count <= HUMAN_FAILURE_CAP)\n return [buildFailureFactLine(event, NON_TTY_FAILURE_LINE_MAX_CHARS)];\n if (count === HUMAN_FAILURE_CAP + 1) {\n return [t(\"feedback.human.suppressedFailures\", { count: 1 })];\n }\n return [];\n }\n case \"diagnostic\":\n return buildDiagnosticLines(event, state);\n case \"budget-exhausted\":\n return [\n `! ${t(\"feedback.human.budgetExhausted\", {\n experimentId: event.experimentId,\n spent: event.spent.toFixed(2),\n unstarted: event.unstarted,\n })}`,\n ];\n case \"interrupted\":\n return [t(\"runner.interrupted\").trimEnd()];\n case \"reporter-error\":\n return [t(\"runner.reporterDiagnostic\", { stage: event.reporter, message: event.message }).trimEnd()];\n case \"kept\":\n // 留存授予单条不即时打印;run 摘要后由 buildSummaryLines 汇总成 Kept sandboxes 块\n // (见 docs/feature/sandbox/cli.md「run 收尾输出」)。\n return [];\n case \"experiment-hook\": {\n // 只服务非 TTY 退化流(TTY dashboard 的 appendDurable 对这个事件直接返回,运行级行\n // 由 state.experimentHooks 驱动,成功钩子不进 scrollback,见 cli.md「实验级 Hook 的显示」)。\n const label = experimentHookLabel(event.hook);\n const duration = event.durationMs !== undefined ? ` (${formatElapsed(event.durationMs)})` : \"\";\n const recoverySuffix = event.recovery ? ` (recovery)` : \"\";\n if (event.status === \"started\")\n return [`${label} · ${event.experimentId}${recoverySuffix}`];\n const statusWord = event.status === \"done\" ? t(\"feedback.human.hookDone\") : t(\"feedback.human.hookFailed\");\n return [`${label} ${statusWord} · ${event.experimentId}${duration}`];\n }\n case \"precheck\": {\n // 只服务非 TTY 退化流(TTY dashboard 的 appendDurable 对这个事件直接返回,运行级行\n // 由 state.activePrecheck 驱动,不进 scrollback,见 cli.md「judge 预检的显示」)。\n if (event.status === \"started\")\n return [t(\"feedback.human.precheckJudge\")];\n const duration = event.durationMs !== undefined ? ` (${formatElapsed(event.durationMs)})` : \"\";\n // failed 只说预检本身的结局:受影响 eval 逐条的 errored 由随后的 failure 事件解释,\n // 这行不重复它们(见 cli.md「判分预检的显示」)。\n const word = event.status === \"done\" ? t(\"feedback.human.precheckJudgeDone\") : t(\"feedback.human.precheckJudgeFailed\");\n return [`${word}${duration}`];\n }\n case \"lock-wait\": {\n // 只服务非 TTY 退化流(TTY dashboard 的 appendDurable 对这个事件直接返回,运行级行由\n // state.lockWaits 驱动,不进 scrollback,见 cli.md「等待并发 run 的显示」)。按实验聚合\n // ——同一实验可能有多个用例先后撞锁,只在这个「有等待用例」窗口第一次打开(这是当前\n // 唯一一条等待中的用例)与最后一次关闭(等待全部解决)各打印一行,中途加入/解决的用例\n // 不逐条刷屏,与诊断按 dedupeKey 折叠同一种克制(state 已经是这条事件 reduce 之后的\n // 快照,size 天然反映\"这条事件之后\"的计数)。\n const agg = state.lockWaits.get(event.experimentId);\n if (event.status === \"started\") {\n if (!agg || agg.waiting.size !== 1)\n return []; // 不是这个窗口的第一条,静默\n const holder = agg.waiting.get(event.evalId);\n return [\n t(\"feedback.human.lockWaitStarted\", {\n experimentId: event.experimentId,\n count: agg.waiting.size,\n pid: holder?.holderPid ?? \"?\",\n }),\n ];\n }\n if (!agg || agg.waiting.size !== 0)\n return []; // 窗口还没关闭,静默\n const parts: string[] = [];\n if (agg.resolvedCarried > 0)\n parts.push(t(\"feedback.human.lockWaitCarried\", { count: agg.resolvedCarried }));\n if (agg.resolvedDispatched > 0) {\n parts.push(t(\"feedback.human.lockWaitDispatched\", { count: agg.resolvedDispatched }));\n }\n const summary = parts.length > 0 ? parts.join(\" · \") : t(\"feedback.human.lockWaitCarried\", { count: 0 });\n return [\n t(\"feedback.human.lockWaitResolved\", {\n experimentId: event.experimentId,\n summary,\n elapsed: formatElapsed(event.waitedMs ?? 0),\n }),\n ];\n }\n case \"run-activity\": {\n // 只服务非 TTY 退化流(TTY dashboard 由 state.runActivities 驱动运行级行)。\n // 人读文本用 producer 的 label,不查 LifecyclePhase 锚点表;未知 key 同样通用投影。\n const duration = event.durationMs !== undefined ? ` (${formatElapsed(event.durationMs)})` : \"\";\n if (event.status === \"started\")\n return [event.label];\n const statusWord = event.status === \"done\" ? t(\"feedback.human.hookDone\") : t(\"feedback.human.hookFailed\");\n return [`${event.label} ${statusWord}${duration}`];\n }\n case \"summary\":\n return buildSummaryLines(event, state, panel);\n case \"receipt\":\n return buildReceiptLines(event, panel);\n default: {\n // 穷尽性检查:新增 DurableFeedbackEvent 变体时这里编译期报错提醒补上对应分支。\n const exhaustive: never = event;\n return exhaustive;\n }\n }\n}\n/**\n * 把一条永久事件的渲染行写到正确的流(见 docs/feature/experiments/cli.md「输出流和落盘节奏」\n * 的流边界表)。TTY 与非 TTY 两个变体在这里分岔,共用同一份「事件 → 文本行」的纯函数:\n *\n * - TTY(`allStdout: false`):`stdout` 只留给\"最终摘要与 Run 指引\"(\"summary\"/\"receipt\" 两个\n * 事件);计划、失败、诊断等其它永久事件与 live 面板本身都在 `stderr`。\n * - 非 TTY(`allStdout: true`):从 start 到结束摘要是单一有序的 `stdout` 追加流,`stderr` 只留\n * 给启动期用法/配置错误——两个 OS stream 被 CI runner 或 agent 工具层分开缓冲时会打乱顺序,\n * 单流才能保证事件序就是发生序(见 memory/exp-output-two-forms-ruling.md 的补充裁决)。\n */\nfunction writeDurable(io: FeedbackIO, event: DurableFeedbackEvent, state: RunFeedbackState, allStdout: boolean): void {\n const lines = renderDurableLines(event, state, panelCapabilityForFeedback(io));\n if (lines.length === 0)\n return;\n const text = `${lines.join(\"\\n\")}\\n`;\n if (allStdout || event.type === \"summary\" || event.type === \"receipt\")\n io.stdout.write(text);\n else\n io.stderr.write(text);\n}\n/** `PLAN` 面板(docs/feature/experiments/cli.md「运行中的 live 面板」):规模一行 + 复用一行\n * (全新派发时省略),经 panel.ts 画框——面板体裁全仓只有一个渲染件,这里不手拼 `╭─`。 */\nfunction buildPlanLines(plan: RunFeedbackPlan, panel: {\n mode: PanelMode;\n width: number;\n}): string[] {\n // 实验闸让声明了 maxConcurrency 的实验的有效宽度小于全局值:只印全局值会被读成\n // 「这批要开 19 路」。逐个附注在全局值之后(`concurrency 19 · mempal ≤1 · nowledge ≤4`),\n // 未声明的实验不列(见 docs/feature/experiments/cli.md「运行中的 live 面板」)。\n const experimentConcurrency = Object.entries(plan.experimentConcurrency ?? {});\n const concurrencyNotes = experimentConcurrency\n .map(([experimentId, limit]) => t(\"feedback.human.planExperimentConcurrency\", { experimentId, limit }))\n .join(\" · \");\n const rows: PanelRow[] = [\n {\n kind: \"line\",\n text: t(\"feedback.human.plan\", {\n total: plan.shape.totalAttempts,\n evals: plan.shape.evals,\n configs: plan.shape.configs,\n concurrency: plan.shape.maxConcurrency,\n }) + (concurrencyNotes ? ` · ${concurrencyNotes}` : \"\"),\n },\n ];\n if (plan.reused > 0) {\n rows.push({\n kind: \"line\",\n text: t(\"feedback.human.reuse\", {\n reused: plan.reused,\n total: plan.shape.totalAttempts,\n toRun: Math.max(0, plan.shape.totalAttempts - plan.reused),\n }),\n });\n }\n return renderPanel({ title: t(\"feedback.human.planHeader\"), rows, width: panel.width, mode: panel.mode });\n}\n/** 失败/errored 的最小事实面:TTY live 面板 FAILURES 分节、非 TTY 追加流与结束 FAILURES 面板\n * 的 size=1 组三处共用同一个形状,不各自重复摘一遍字段。 */\ninterface FailureFact {\n readonly locator: string;\n readonly identity: AttemptRef;\n readonly who: string;\n readonly verdict: \"failed\" | \"errored\";\n readonly reason: string;\n readonly fact?: PrimaryFactSummary;\n readonly phase?: LifecyclePhase;\n readonly code?: string;\n}\n/** exp 失败/errored 单行事实行与 FAILURES 面板组行的行首符号:`failed`/`errored` 两种 verdict\n * 都用 `✗`(见 cli.md 全部失败行示例,含 errored)——不复用报告表通用的 `verdictSymbol()`,\n * 那张表把 `errored` 记成 `!`,是留给诊断/警告行的符号,混进失败行会和诊断行的行首混淆。 */\nconst FAILURE_SYMBOL = \"✗\";\n/**\n * 一条失败/errored 的单行事实投影(cli.md「框线体裁」:`✗ @<locator> <evalId> [<who>]\n * <单行压缩摘要>`)。TTY live 面板 FAILURES 分节与非 TTY 追加流共用这一份,唯一的差别是\n * `maxWidth`:TTY 按当帧面板内容宽传入,非 TTY 固定 100(见\n * docs/feature/assertions/library/display.md「一条摘要怎样排版」)。\n */\nfunction buildFailureFactLine(failure: FailureFact, maxWidth: number): string {\n const prefix = `${FAILURE_SYMBOL} ${failure.locator} ${failure.identity.evalId} [${failure.who}] `;\n const budget = Math.max(0, maxWidth - stringWidth(prefix));\n const info = failure.fact\n ? fitCompactAssertionSummary(failure.fact, budget)\n : buildErroredInfo(failure.phase, failure.code, failure.reason);\n return prefix + clipDisplayWidth(info, budget);\n}\n/**\n * errored 且没有主 Fact 摘要(真正的结构化执行错误)时的信息段:\n * `errored · <phase> · <code>`,余量够再接 `: <message>`。`phase`/`code` 用未翻译的原始字面量\n * (`LifecyclePhase` 枚举值 / `AttemptError.code`),不走 `phaseLabel()` 的人读短语 —— 这一段\n * 是给读者对照 `--json` `error` 事件、`result.json` 与 `show` 里同一个字面量用的,不是散文。\n */\nfunction buildErroredInfo(phase: LifecyclePhase | undefined, code: string | undefined, reason: string): string {\n const parts = [\"errored\", ...(phase ? [phase] : []), ...(code ? [code] : [])];\n const base = parts.join(\" · \");\n return reason ? `${base}: ${reason}` : base;\n}\n/** 按显示列硬夹紧,超宽尾部截断补 `…`。`fitCompactAssertionSummary` 的截断口径是字符数,不是\n * 显示列(见该函数注释「显示宽度的精确裁剪仍归渲染面」);这里补上那道显示宽度的硬夹紧,\n * 堵住 CJK 内容\"按字符数收口仍超显示列\"的缝,保证渲染行恒不超过预算。 */\nfunction clipDisplayWidth(text: string, maxWidth: number): string {\n if (maxWidth <= 0)\n return \"\";\n if (stringWidth(text) <= maxWidth)\n return text;\n if (maxWidth === 1)\n return \"…\";\n let out = \"\";\n let width = 0;\n for (const ch of text) {\n const w = charDisplayWidth(ch.codePointAt(0)!);\n if (width + w > maxWidth - 1)\n break;\n out += ch;\n width += w;\n }\n return `${out}…`;\n}\nfunction buildDiagnosticLines(event: DurableFeedbackEvent & {\n type: \"diagnostic\";\n}, state: RunFeedbackState): string[] {\n // count 从 state.diagnostics 读(reducer 已经按 key 去重累加),不在这里自己维护第二份计数。\n // 人读运行中流对每个 code 至多完整打印一次(见 cli.md「什么动态更新,什么逐条追加」):\n // 第一条给标题与 message 两行,同 code 的后续条目(哪怕 dedupeKey 不同)一律静默 ——\n // 跨用例撞上同一类状况时,读者需要的是「这类事发生了 N 次」,不是 N 段几乎相同的文字;\n // 逐 code 的次数与首条 message 由结束反馈的 WARNINGS / RECOVERY 面板汇总。\n const code = event.code ?? event.key;\n const firstForCode = state.diagnostics.find((d) => (d.code ?? d.key) === code);\n const count = state.diagnostics.find((d) => d.key === event.key)?.count ?? 1;\n if (count > 1 || firstForCode?.key !== event.key)\n return [];\n const sym = event.severity === \"error\" ? \"✗\" : event.severity === \"warning\" ? \"!\" : \"i\";\n if (event.code === HALT_DIAGNOSTIC_CODE) {\n // 止损闸落闸:一行 error 级通知,文案已经是完整的一句话(`experiment halted\n // (dispatch-halted): <message>` / `eval halted: <message>`,见 docs/feature/\n // error-classification/architecture.md「观察面」),不再加标题行。\n return [`${sym} ${event.message}`];\n }\n // 标题用稳定词法(`code`),不是把折叠身份一起编进去的去重 key —— 人读的一行要能一眼认出\n // 「这是哪一类诊断」,`compare/codex|memory/x` 那串身份属于 message 与机器面的具名字段。\n // 阶段标签走与 buildFailureFactLine 不同的投影:诊断标题用人读短语 `phaseLabel()`(散文),\n // 失败行的 errored 信息段用未翻译的原始 LifecyclePhase 字面量(对照机器面)——两者故意不同。\n // attempt 级诊断的 phase 由运行器写进 `data`(见 attempt.ts 的 recordDiagnostic);运行级诊断\n // (止损闸、协调恢复、budget)不属于任何单条 attempt,天然没有 phase,标题退化成只有 code 一段。\n const phase = typeof event.data?.phase === \"string\" ? (event.data.phase as LifecyclePhase) : undefined;\n const heading = phase !== undefined ? `${phaseLabel(phase)} · ${code}` : code;\n return [`${sym} ${heading}`, ` ${event.message}`];\n}\n/** 结束结论(`FAILED`/`PASSED`/…)+ `FAILURES`(有失败才出现)+ `KEPT SANDBOXES`(有留存才\n * 出现)——三个各自独立的面板,用空行分隔(docs/feature/experiments/cli.md「人看的结束反馈」、\n * docs/feature/sandbox/cli.md「run 收尾输出」)。`NEXT` 面板不在这里:它要等 `receipt` 事件\n * 的真实 Run ID,见 `buildReceiptLines`。 */\nfunction buildSummaryLines(event: DurableFeedbackEvent & {\n type: \"summary\";\n}, state: RunFeedbackState, panel: {\n mode: PanelMode;\n width: number;\n}): string[] {\n const { summary, completion } = event;\n const fullReuse = state.total > 0 && state.total === state.reused;\n // required reporter(显式 --junit)写失败必须让这行判红——它不是\n // CompletionStatus 的第四个值(那个枚举只有 complete/incomplete/interrupted 三态),但必须\n // 避免人看到一句会被误读成\"全绿\"的 PASSED、进程却以非零退出。\n const verdictWord = completion.status === \"interrupted\"\n ? t(\"feedback.human.resultInterrupted\")\n : completion.status === \"incomplete\"\n ? t(\"feedback.human.resultIncomplete\")\n : summary.failed > 0 || summary.errored > 0 || completion.reporterErrors.some((e) => e.required)\n ? t(\"feedback.human.resultFailed\")\n : t(\"feedback.human.resultPassed\");\n const summaryRows: PanelRow[] = [\n {\n kind: \"line\",\n text: t(completion.unstarted > 0\n ? \"feedback.human.summaryIncompleteLine\"\n : fullReuse\n ? \"feedback.human.summaryAllReusedLine\"\n : \"feedback.human.summaryLine\", {\n passed: summary.passed,\n failed: summary.failed,\n errored: summary.errored,\n unstarted: completion.unstarted,\n reused: state.reused,\n }),\n },\n { kind: \"line\", text: formatSummaryCostLine(state) },\n ];\n const blocks: string[][] = [\n renderPanel({ title: verdictWord, meta: formatElapsed(summary.durationMs), rows: summaryRows, width: panel.width, mode: panel.mode }),\n ];\n // 全通过时(state.failures 为空)不留空 FAILURES 面板。fresh 失败来自 durable event,carry\n // 失败由 plan 静态注入;reducer 把两者按 locator 收进同一清单,这里不从 InvocationSummary 再造 ——\n // 整套结果集(含携入)都要出现在这里,不只是本次派发的那部分(见 cli.md「计数口径…」)。\n if (state.failures.length > 0) {\n const { rows: failureRows, meta } = buildFailuresPanelRows(state.failures, panel);\n blocks.push(renderPanel({ title: t(\"feedback.human.failuresHeader\"), meta, rows: failureRows, width: panel.width, mode: panel.mode }));\n }\n // 留存授予块(--keep-sandbox,见 docs/feature/sandbox/cli.md「run 收尾输出」):\n // 每条给 locator(接 niceeval show)、provider 与实例 id、进入现场的命令,下边框嵌批量清理。\n if (state.kept.length > 0) {\n const keptRows: PanelRow[] = [];\n for (const k of state.kept) {\n keptRows.push({\n kind: \"line\",\n text: `${k.locator} ${k.identity.evalId} #${k.identity.attempt} ${k.verdict} ${k.provider} · ${k.sandboxId}`,\n });\n keptRows.push({\n kind: \"line\",\n text: `${\" \".repeat(stringWidth(k.locator) + 2)}enter: niceeval sandbox enter ${k.sandboxId.slice(0, 12)}`,\n });\n }\n blocks.push(renderPanel({\n title: t(\"feedback.human.keptSandboxesHeader\"),\n meta: `${state.kept.length} kept`,\n footerCommand: \"niceeval sandbox stop --all\",\n rows: keptRows,\n width: panel.width,\n mode: panel.mode,\n }));\n }\n // `WARNINGS`(有诊断才出现,位于 FAILURES 与 NEXT 之间,见 cli.md「人看的结束反馈」):\n // 按 code 汇总本次去重后的诊断,运行中同 code 只完整打印过第一条,这里是「这类事一共\n // 发生了几次」的权威答案。\n const warningsRows = buildWarningsPanelRows(state.diagnostics);\n if (warningsRows) {\n blocks.push(renderPanel({ title: t(\"feedback.human.warningsHeader\"), rows: warningsRows, width: panel.width, mode: panel.mode }));\n }\n const recoveryRows = buildRecoveryPanelRows(state.diagnostics);\n if (recoveryRows) {\n blocks.push(renderPanel({ title: t(\"feedback.human.recoveryHeader\"), rows: recoveryRows, width: panel.width, mode: panel.mode }));\n }\n return blocks.flatMap((block, i) => (i === 0 ? block : [\"\", ...block]));\n}\n/**\n * `FAILURES` 面板的内容:未通过的 attempt 按失败形态分组(见 cli.md「人看的结束反馈」)。\n * `failed` 的组 key 是主失败断言的标题 + 检查方式,`errored`(没有主断言摘要的结构化执行错误)\n * 的组 key 是 `phase · code`;`received`/message 各条不同,不进 key 也不进组行。size > 1 的组\n * 只占一行(右对齐 `×N` + 形态摘要 + 组内首现的代表 locator);size = 1 的组展开成身份行 +\n * 悬挂的单行压缩摘要两行。组按条数降序,超过 `FAILURE_GROUPS_CAP` 收进尾行。\n */\nfunction buildFailuresPanelRows(failures: readonly FailureNotice[], panel: {\n mode: PanelMode;\n width: number;\n}): {\n rows: PanelRow[];\n meta: string;\n} {\n const groups = groupFailuresByShape(failures);\n const contentWidth = panelContentWidth(panel.width, panel.mode);\n const shown = groups.slice(0, FAILURE_GROUPS_CAP);\n const multi = shown.filter((g) => g.size > 1);\n const countWidth = Math.max(0, ...multi.map((g) => stringWidth(`${FAILURE_SYMBOL} ×${g.size}`)));\n const rows: PanelRow[] = [];\n for (const group of shown) {\n if (group.size === 1) {\n rows.push(...buildSingleFailureGroupRows(group.representative, contentWidth));\n }\n else {\n rows.push(buildMultiFailureGroupRow(group, countWidth));\n }\n }\n if (groups.length > FAILURE_GROUPS_CAP) {\n rows.push({\n kind: \"line\",\n text: t(\"feedback.human.moreFailureKinds\", { count: groups.length - FAILURE_GROUPS_CAP }),\n });\n }\n return { rows, meta: t(\"feedback.human.failuresTotalKinds\", { total: failures.length, kinds: groups.length }) };\n}\n/** 一个失败形态组:同一 key 下的全部失败共享同一条 `shapeText`(已经剥掉 `received`/message\n * 这类逐条不同的字段),`representative` 是组内首现的那一条(给 `e.g. <locator>`)。 */\ninterface FailureShapeGroup {\n readonly key: string;\n readonly size: number;\n readonly representative: FailureNotice;\n readonly shapeText: string;\n}\nfunction groupFailuresByShape(failures: readonly FailureNotice[]): FailureShapeGroup[] {\n const groups = new Map<string, {\n size: number;\n representative: FailureNotice;\n shapeText: string;\n }>();\n for (const failure of failures) {\n const { key, shapeText } = failureShapeOf(failure);\n const existing = groups.get(key);\n if (existing) {\n groups.set(key, { ...existing, size: existing.size + 1 });\n }\n else {\n groups.set(key, { size: 1, representative: failure, shapeText });\n }\n }\n return [...groups.entries()]\n .map(([key, g]) => ({ key, ...g }))\n .sort((a, b) => b.size - a.size);\n}\n/** 组 key 与形态摘要文本共用同一个\"剥掉 received 的断言摘要\"投影(有主断言摘要时,`failed`\n * 与 Fact unavailable 造成的 `errored` 都走这条);没有主 Fact 摘要的 `errored`(真正的\n * 结构化执行错误)按 `phase · code` 分组,摘要文本复用 `buildErroredInfo`(不带 message)。 */\nfunction failureShapeOf(failure: FailureNotice): {\n key: string;\n shapeText: string;\n} {\n if (failure.fact) {\n const shapeText = compactAssertionSummary({ ...failure.fact, received: undefined, additionalFailures: 0 });\n return { key: `fact\\u0000${failure.fact.title}\\u0000${failure.fact.matcher ?? \"\"}`, shapeText };\n }\n return {\n key: `errored\\u0000${failure.phase ?? \"?\"}\\u0000${failure.code ?? \"?\"}`,\n shapeText: buildErroredInfo(failure.phase, failure.code, \"\"),\n };\n}\nfunction buildMultiFailureGroupRow(group: FailureShapeGroup, countWidth: number): PanelRow {\n const countToken = padStartDisplay(`${FAILURE_SYMBOL} ×${group.size}`, countWidth);\n return {\n kind: \"line\",\n text: `${countToken} ${group.shapeText} ${t(\"feedback.human.exampleLocator\", { locator: group.representative.locator })}`,\n };\n}\n/** size = 1 组的两行:身份行(`✗ @locator evalId [who]`)+ 悬挂到身份内容起始列的单行压缩\n * 摘要——与 `buildFailureFactLine` 共用同一套 info 组装逻辑,只是拆成两行而不是塞进一行。 */\nfunction buildSingleFailureGroupRows(failure: FailureNotice, contentWidth: number): PanelRow[] {\n const identityLine = `${FAILURE_SYMBOL} ${failure.locator} ${failure.identity.evalId} [${failure.who}]`;\n const indent = stringWidth(`${FAILURE_SYMBOL} `);\n const budget = Math.max(0, contentWidth - indent);\n const info = failure.fact\n ? fitCompactAssertionSummary(failure.fact, budget)\n : buildErroredInfo(failure.phase, failure.code, failure.reason);\n return [\n { kind: \"line\", text: identityLine },\n { kind: \"line\", text: `${\" \".repeat(indent)}${clipDisplayWidth(info, budget)}` },\n ];\n}\n/** `WARNINGS` 面板:`state.diagnostics` 已经按去重 key 折叠,这里再按对外稳定词法 `code` 二次\n * 聚合。info 由自己的完成面板消费;没有 warning/error 时返回 undefined。 */\nfunction buildWarningsPanelRows(diagnostics: readonly DiagnosticNotice[]): PanelRow[] | undefined {\n if (diagnostics.length === 0)\n return undefined;\n const byCode = new Map<string, {\n count: number;\n message: string;\n severity: \"warning\" | \"error\";\n }>();\n for (const d of diagnostics) {\n if (d.severity === \"info\")\n continue;\n const code = d.code ?? d.key;\n const existing = byCode.get(code);\n if (existing) {\n byCode.set(code, { ...existing, count: existing.count + d.count });\n }\n else {\n byCode.set(code, { count: d.count, message: d.message, severity: d.severity });\n }\n }\n const entries = [...byCode.entries()];\n if (entries.length === 0)\n return undefined;\n const labelWidth = Math.max(0, ...entries.map(([code, v]) => stringWidth(warningCodeLabel(code, v.count))));\n return entries.map(([code, v]) => ({\n kind: \"line\",\n text: `${v.severity === \"error\" ? \"✗\" : \"!\"} ${padDisplay(warningCodeLabel(code, v.count), labelWidth)} ${v.message}`,\n }));\n}\nfunction buildRecoveryPanelRows(diagnostics: readonly DiagnosticNotice[]): PanelRow[] | undefined {\n let slots = 0;\n let locks = 0;\n for (const d of diagnostics) {\n if (d.severity !== \"info\" || d.code !== COORDINATION_RECOVERED_CODE)\n continue;\n if (d.data?.resource === \"concurrency-slot\")\n slots += d.count;\n if (d.data?.resource === \"case-lock\")\n locks += d.count;\n }\n if (slots === 0 && locks === 0)\n return undefined;\n const summary = t(\"feedback.human.coordinationRecoveredSummary\", {\n slots: pluralUnit(slots, \"feedback.human.unit.concurrencySlot\", \"feedback.human.unit.concurrencySlots\"),\n locks: pluralUnit(locks, \"feedback.human.unit.caseLock\", \"feedback.human.unit.caseLocks\"),\n });\n return [{ kind: \"line\", text: `i ${COORDINATION_RECOVERED_CODE} ${summary}` }];\n}\nfunction warningCodeLabel(code: string, count: number): string {\n return count > 1 ? `${code} ×${count}` : code;\n}\n/** `NEXT` 面板只由 receipt 的真实 Run ID 给出 Record 读取命令。 */\nfunction buildReceiptLines(event: DurableFeedbackEvent & {\n type: \"receipt\";\n}, panel: {\n mode: PanelMode;\n width: number;\n}): string[] {\n const rows: PanelRow[] = [];\n for (const runId of event.receipt.runIds) {\n rows.push({ kind: \"line\", text: `niceeval show --run ${runId}` });\n }\n if (rows.length === 0) {\n rows.push({ kind: \"line\", text: \"No published Record Runs are available for this invocation.\" });\n }\n return renderPanel({ title: t(\"feedback.human.nextHeader\"), rows, width: panel.width, mode: panel.mode });\n}\n/** estimated cost 展示:金额前加 `~`,明确是价目表估算(observed 只留在 result.usage.costUSD)。 */\nfunction formatEstimatedCost(value: number | undefined): string {\n const cost = formatCost(value);\n return cost === \"—\" ? cost : `~${cost}`;\n}\n/** tok/cost 一行(不含时长——时长已经嵌在面板上边框右侧的 meta 里,不在正文里重复一遍)。 */\nfunction formatSummaryCostLine(state: RunFeedbackState): string {\n const fullReuse = state.total > 0 && state.total === state.reused;\n if (fullReuse)\n return \"0 new tok · $0.00\";\n const parts: string[] = [];\n if (state.newTokenCount !== undefined)\n parts.push(`${formatTokenCount(state.newTokenCount)} new tok`);\n const cost = formatEstimatedCost(state.estimatedCostUSD);\n if (cost !== \"—\")\n parts.push(cost);\n return parts.join(\" · \");\n}\n// ───────────────────────── 共享:纯格式化 helper ─────────────────────────\n/** \"2m 14s\" / \"54s\" 风格,匹配 cli.md 全部 dashboard/完成页示例;`shared/format.ts` 的\n * `formatDuration` 是 \"2.3m\"/\"120ms\" 风格,服务的是 view/表格场景,不是这里要的格式。 */\nexport function formatElapsed(ms: number): string {\n const totalS = Math.max(0, Math.floor(ms / 1000));\n const m = Math.floor(totalS / 60);\n const s = totalS % 60;\n return m > 0 ? `${m}m ${s}s` : `${s}s`;\n}\n/** \"1.2M tok\" / \"3.4k\" 风格;`table.ts` 的 `formatTokens` 只到 k 档,凑不出 cli.md 完成页\n * 示例里的 \"1.2M tok\"。 */\nexport function formatTokenCount(n: number): string {\n if (n >= 1000000)\n return `${(n / 1000000).toFixed(1)}M`;\n if (n >= 1000)\n return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n/** LifecyclePhase → Human 展示列的人读投影(见 docs/feature/experiments/cli.md「Attempt 阶段」);\n * 机器面(json 的 `phase=` 与落盘)保留精确的点分名,收尾段在 Human 侧合并显示为一档。 */\nfunction phaseLabel(phase: LifecyclePhase): string {\n switch (phase) {\n // 运行级 / 实验级三员不会作为 ActiveAttempt.phase 出现(它们跑的时候没有活跃 attempt),\n // 这里只服务 failure 行的 phase 标注(judge 预检失败、experiment.setup 失败这两类派发前\n // 确定性失败合成的 errored 结果)。\n case \"judge.precheck\":\n return t(\"feedback.phase.judgePrecheck\");\n case \"experiment.setup\":\n return t(\"feedback.phase.experimentSetup\");\n case \"experiment.teardown\":\n return t(\"feedback.phase.teardown\");\n case \"sandbox.queue\":\n return t(\"feedback.phase.sandboxQueue\");\n case \"sandbox.create\":\n return t(\"feedback.phase.sandboxCreate\");\n case \"sandbox.prepare\":\n case \"sandbox.prepare.eval\":\n case \"sandbox.prepare.group\":\n case \"sandbox.prepare.experiment\":\n return t(\"feedback.phase.sandboxPrepare\");\n case \"agent.ensure\":\n return t(\"feedback.phase.agentEnsure\");\n case \"workspace.baseline\":\n return t(\"feedback.phase.workspaceBaseline\");\n case \"agent.setup\":\n return t(\"feedback.phase.agentSetup\");\n case \"telemetry.configure\":\n return t(\"feedback.phase.telemetryConfigure\");\n case \"eval.run\":\n case \"agent.run\": // 嵌套成员:Human 展示不切换顶层阶段\n return t(\"feedback.phase.evalRun\");\n case \"workspace.diff\":\n return t(\"feedback.phase.workspaceDiff\");\n case \"assertions.evaluate\":\n return t(\"feedback.phase.assertions\");\n case \"telemetry.collect\":\n return t(\"feedback.phase.telemetryCollect\");\n case \"agent.teardown\":\n case \"sandbox.cleanup\":\n case \"sandbox.suspend\":\n case \"sandbox.stop\":\n return t(\"feedback.phase.teardown\");\n default: {\n const exhaustive: never = phase;\n return exhaustive;\n }\n }\n}\n/** 实验级钩子的运行级行标签。`phaseLabel` 把 `experiment.teardown` 与其它收尾段合并成\n * 「cleaning up」一档(那是 attempt failure 行的语境);运行级行没有 attempt 语境,必须\n * 自报家门是哪个实验级钩子,所以这里用独立的两个词。 */\nfunction experimentHookLabel(hook: ExperimentHookName): string {\n return hook === \"setup\" ? t(\"feedback.phase.experimentSetup\") : t(\"feedback.phase.experimentTeardown\");\n}\n/** 首行守恒计数的文案(见 cli.md「运行中的 live 面板」)。四项结局恒显示、零值不省略——\n * 「0 errored」是一句有价值的肯定;`elsewhere` 只在非零时出现,没有并发 run 的场景少一项。\n * 行长不是压缩它的理由:首行跟随终端全宽,九项写满仍是一行。两个调用点(live dashboard\n * 首行、非 TTY heartbeat)共用这一份,不各自维护一份键选择逻辑。 */\nfunction countsText(state: RunFeedbackState): string {\n const outcomes = {\n passed: state.passed,\n failed: state.failed,\n errored: state.errored,\n skipped: state.skipped,\n };\n return state.elsewhere > 0\n ? t(\"feedback.human.countsWithElsewhere\", {\n total: state.total,\n reused: state.reused,\n running: state.running,\n elsewhere: state.elsewhere,\n queued: state.queued,\n ...outcomes,\n })\n : t(\"feedback.human.counts\", {\n total: state.total,\n reused: state.reused,\n running: state.running,\n queued: state.queued,\n ...outcomes,\n });\n}\nfunction formatCounts(state: RunFeedbackState): string {\n const counts = countsText(state);\n if (state.estimatedCostUSD === undefined || state.estimatedCostUSD <= 0)\n return counts;\n return `${counts} ${formatEstimatedCost(state.estimatedCostUSD)}`;\n}\n/** 定宽格式化:内容按 `width` 左对齐补空格对齐后面的列;超宽时尾部截断补 `…`(cli.md\n * 「active 行的列序」:身份列「超宽截尾补 `…`」),不是硬切丢字符。`width <= 0` 退化为空串。 */\nfunction padTrunc(s: string, width: number): string {\n if (width <= 0)\n return \"\";\n if (s.length <= width)\n return s.padEnd(width);\n if (width === 1)\n return \"…\";\n return `${s.slice(0, width - 1)}…`;\n}\n// ───────────────────────── TTY:动态 dashboard ─────────────────────────\nfunction createDashboardRenderer(io: FeedbackIO, command: string): FeedbackRenderer {\n // active slot 的稳定顺序:只在这里追加/删除(attempt:start 追加到末尾,\n // attempt:complete/early-exit 删除),phase/detail 变化不改变顺序或成员 ——\n // 可见 attempt 完成前不会因为别的 attempt 更新而换位(checklist「active slots 稳定」)。\n const activeOrder: AttemptKey[] = [];\n // 上一帧写了多少行(供 \\x1B[nA 回跳)与上一帧的完整文本(供「同帧不写」判断)。\n let linesDrawn = 0;\n let lastFrameText: string | undefined;\n // 身份两列(evalId/who)本次运行里\"实际出现过的最长值\"宽度——跨帧单调只放宽不回缩\n // (cli.md「active 行的列序」),存在这个闭包里而不是每次从当前行现算,完成的 attempt\n // 让出 slot 后也不应该让列宽跟着变窄。渲染时还要叠加当帧内容宽算出的封顶(见\n // identityColumnWidths)——封顶随终端 resize 每帧重新从 contentWidth 推导,这里的\n // 「见过的最长值」本身不因为封顶变严就被吃掉,分辨率更宽的下一帧仍能用得上。\n let maxEvalIdWidth = 0;\n let maxWhoWidth = 0;\n /** 身份两列本帧的渲染宽度:观测到的最长值与本帧内容宽算出的 40% / 20% 封顶取较小值。 */\n function identityColumnWidths(contentWidth: number): {\n evalWidth: number;\n whoWidth: number;\n } {\n const evalCap = Math.floor(contentWidth * 0.4);\n const whoCap = Math.floor(contentWidth * 0.2);\n return { evalWidth: Math.min(maxEvalIdWidth, evalCap), whoWidth: Math.min(maxWhoWidth, whoCap) };\n }\n /** 上边框标题 = 本次命令、meta = 已运行时长;下边框 footerCommand = 本次新派发的累计估算成本\n * (docs/feature/experiments/cli.md「运行中的 live 面板」)。ACTIVE 是嵌套 Section 的\n * 同构体裁——一条贯穿框宽的横隔,不是独立的框;非 boxed(非 TTY 或 NO_COLOR)时\n * panel.ts 自动降级成无框文本,dashboard 的覆盖重画机制不因此改变,只是重画的内容\n * 换成了无框版本。 */\n function buildFrameLines(state: RunFeedbackState): string[] {\n // 全量复用没有 active attempt,也没有“本次执行中”状态;plan/reuse 与终局摘要已经完整,\n // 不画一块只有 0 running 的 dashboard。\n if (state.total > 0 && state.total === state.reused)\n return [];\n const capability = panelCapabilityForFeedback(io);\n // live 面板豁免 100 列上限、跟随终端全宽(cli.md「框线体裁」);contentWidth 与下面\n // renderPanel 的 width/capWidth 必须传同一份豁免声明,否则行按这里的宽度排版、框却在\n // renderPanel 内部按另一个宽度钳制,行尾会被框吃掉——这正是 memory/\n // live-dashboard-active-row-width-clamp-mismatch.md 的根因类别。\n const contentWidth = panelContentWidth(capability.width, capability.mode, false);\n const rows: PanelRow[] = [{ kind: \"line\", text: countsText(state) }];\n // FAILURES 分节(cli.md「运行中的 live 面板」):插在 counts 行与 ACTIVE 横隔之间,滚动\n // 保留最近 LIVE_FAILURES_VISIBLE 条本次新发生的失败——state.failures 是「carry(plan 静态\n // 注入)+ fresh(本次事件追加)」按发生序拼起来的同一份清单,fresh 段恒是尾部\n // freshFailureCount 条(carry 只在 \"plan\" 时一次性写入、之后只追加,不重排),因此按长度\n // 切片就能拿到\"本次新发生的失败\",不需要给 FailureNotice 再加一个 origin 标记。横隔 meta\n // 用累计数(如 `12 so far`),不是\"这一帧展示了几条\"。\n const freshFailures = state.failures.slice(Math.max(0, state.failures.length - state.freshFailureCount));\n const maxFailureRows = Math.min(LIVE_FAILURES_VISIBLE, freshFailures.length);\n // 运行级行(judge 预检 + Run activity + 实验钩子 + 用例锁等待)排在 attempt 行前面:\n // 它们解释了为什么后面的 attempt 还停在 queued。预检排最前(发生在任何 attempt 派发\n // 之前),其次共享准备(sandbox.build 等),再是实验钩子,再是锁等待。Map 按插入序迭代,\n // 天然满足稳定 slot。Run activity 不占 attempt active 位。\n const precheck = state.activePrecheck;\n const runActivityRows = [...state.runActivities.values()];\n const hookRows = [...state.experimentHooks.values()];\n // 只有仍在等待(waiting 非空)的实验才占运行级行;窗口已关闭(全部 resolved)的条目只是\n // 给非 TTY 聚合收尾行留的历史计数,TTY 不展示。\n const lockWaitRows = [...state.lockWaits.values()].filter((w) => w.waiting.size > 0);\n // 矮终端先减 ACTIVE 可见项,再减 FAILURES 分节的可见条数(cli.md「运行中的 live 面板」):\n // FAILURES 分节按\"全量意愿\"优先占位,ACTIVE 拿剩下的;只有终端矮到连 FAILURES 分节自己\n // 都放不下时才反过来压缩它。固定开销:上下边框(2)+ counts 行(1)。\n const restBudget = Math.max(0, io.stderr.rows - 3 - DASHBOARD_ROW_RESERVE);\n const failuresDesired = maxFailureRows > 0 ? 1 + maxFailureRows : 0; // 横隔 + 条目\n const shownFailureCount = maxFailureRows > 0 ? Math.min(maxFailureRows, Math.max(0, failuresDesired <= restBudget ? maxFailureRows : restBudget - 1)) : 0;\n if (shownFailureCount > 0) {\n rows.push({\n kind: \"divider\",\n title: t(\"feedback.human.failuresHeader\"),\n meta: t(\"feedback.human.failuresSoFar\", { count: state.freshFailureCount }),\n });\n for (const failure of freshFailures.slice(-shownFailureCount)) {\n rows.push({ kind: \"line\", text: buildFailureFactLine(failure, contentWidth) });\n }\n }\n const failuresRowsUsed = shownFailureCount > 0 ? 1 + shownFailureCount : 0;\n const activeSectionBudget = Math.max(0, restBudget - failuresRowsUsed);\n if (activeOrder.length > 0 ||\n runActivityRows.length > 0 ||\n hookRows.length > 0 ||\n lockWaitRows.length > 0 ||\n precheck) {\n rows.push({ kind: \"divider\", title: t(\"feedback.human.active\") });\n // ACTIVE 横隔自己也占一行,从分给 ACTIVE 小节的预算里再扣一行,剩下的才是内容行数。\n const rowBudget = Math.max(0, activeSectionBudget - 1);\n const precheckCount = precheck ? 1 : 0;\n const total = precheckCount + runActivityRows.length + hookRows.length + lockWaitRows.length + activeOrder.length;\n // 窄/矮终端先减 active slots(减少行数),而不是先压缩单行内容 ——\n // 单行内容的截断在 formatActiveRow 里按 contentWidth 单独处理。\n const showCount = total <= rowBudget ? total : Math.max(0, rowBudget - 1);\n // 先选出本帧真正会显示的行(运行级行恒排在前面,与旧实现一致),再统一量测/定宽——\n // 同一帧内所有行必须共用同一套身份列宽度,不能让前面几行按旧宽度格式化、后面\n // 的行又观测到更长的值再推宽,导致同一帧内本该对齐的列错位。\n const shownPrecheck = precheck && showCount > 0 ? precheck : undefined;\n let remaining = Math.max(0, showCount - (shownPrecheck ? 1 : 0));\n const shownRunActivities = runActivityRows.slice(0, remaining);\n remaining = Math.max(0, remaining - shownRunActivities.length);\n const shownHooks = hookRows.slice(0, remaining);\n remaining = Math.max(0, remaining - shownHooks.length);\n const shownLockWaits = lockWaitRows.slice(0, remaining);\n const shownRunLevel = (shownPrecheck ? 1 : 0) + shownRunActivities.length + shownHooks.length + shownLockWaits.length;\n const shownActive: ActiveAttempt[] = [];\n for (const key of activeOrder) {\n if (shownRunLevel + shownActive.length >= showCount)\n break;\n const active = state.active.get(key);\n if (active)\n shownActive.push(active);\n }\n // 身份列本次运行\"实际出现过的最长值\"只放宽不回缩:运行级行的 label 是拼好的一整块\n // 文本,不是 evalId/who 两个独立字段,不单独参与这里的放宽,只复用下面算出的宽度\n // (cli.md「active 行的列序」:「同一套算法」= 复用同一份结果,不是各自维护一份)。\n for (const active of shownActive) {\n maxEvalIdWidth = Math.max(maxEvalIdWidth, active.identity.evalId.length);\n maxWhoWidth = Math.max(maxWhoWidth, active.who.length);\n }\n const { evalWidth, whoWidth } = identityColumnWidths(contentWidth);\n const activeLines: string[] = [];\n if (shownPrecheck)\n activeLines.push(formatPrecheckRow(shownPrecheck, io, contentWidth));\n for (const activity of shownRunActivities) {\n activeLines.push(formatRunActivityRow(activity, io, contentWidth));\n }\n for (const hookRow of shownHooks) {\n activeLines.push(formatExperimentHookRow(hookRow, io, contentWidth, evalWidth, whoWidth));\n }\n for (const lockWaitRow of shownLockWaits) {\n activeLines.push(formatLockWaitRow(lockWaitRow, io, contentWidth));\n }\n for (const active of shownActive) {\n activeLines.push(formatActiveRow(active, io, contentWidth, evalWidth, whoWidth));\n }\n for (const line of activeLines)\n rows.push({ kind: \"line\", text: line });\n if (total > showCount) {\n rows.push({ kind: \"line\", text: t(\"feedback.human.moreActive\", { count: total - showCount }) });\n }\n }\n const footerCommand = state.estimatedCostUSD !== undefined && state.estimatedCostUSD > 0 ? formatEstimatedCost(state.estimatedCostUSD) : undefined;\n return renderPanel({\n title: command,\n meta: formatElapsed(state.elapsedMs),\n footerCommand,\n rows,\n width: capability.width,\n mode: capability.mode,\n capWidth: false,\n });\n }\n function redraw(state: RunFeedbackState): void {\n const lines = buildFrameLines(state);\n const text = lines.join(\"\\n\");\n if (text === lastFrameText)\n return; // 真实内容没变化,不写(checklist「rendered frame 与上一帧相同则不写」)\n if (lines.length === 0) {\n if (linesDrawn > 0) {\n let out = `\\x1B[${linesDrawn}A`;\n out += \"\\x1B[2K\\n\".repeat(linesDrawn) + `\\x1B[${linesDrawn}A`;\n io.stderr.write(out);\n }\n linesDrawn = 0;\n lastFrameText = text;\n return;\n }\n let out = linesDrawn > 0 ? `\\x1B[${linesDrawn}A` : \"\";\n out += lines.map((l) => `\\x1B[2K${l}`).join(\"\\n\") + \"\\n\";\n // 本帧比上帧短(行完成后折叠、终端拉高)时,清掉下方残留的旧行,与 live.ts 旧实现同一手法。\n const extra = linesDrawn - lines.length;\n if (extra > 0)\n out += \"\\x1B[2K\\n\".repeat(extra) + `\\x1B[${extra}A`;\n io.stderr.write(out);\n linesDrawn = lines.length;\n lastFrameText = text;\n }\n return {\n appendDurable(event, state) {\n // 实验级钩子起止在 TTY 下只驱动运行级 active 行(state.experimentHooks 已由 reducer\n // 更新,coordinator 紧接着的 redrawDynamic 会画出来);成功钩子不写 scrollback 永久行\n // (见 cli.md「实验级 Hook 的显示」)。非 TTY 退化流才逐行追加(见 renderDurableLines)。\n // judge 预检同理:TTY 下只驱动 state.activePrecheck 的运行级 active 行(coordinator 紧接着的\n // redrawDynamic 会画出来),不写 scrollback 永久行(见 cli.md「judge 预检的显示」)。用例锁\n // 等待同理:TTY 下由 state.lockWaits 驱动运行级 active 行(见 cli.md「等待并发 run 的显示」)。\n // Run 级 activity(共享构建等)同理:TTY 下由 state.runActivities 驱动,不占 attempt slot。\n // 失败(verdict failed/errored)同理:TTY 下失败不进 scrollback 流,只更新 state.failures/\n // freshFailureCount,由下一帧 buildFrameLines 的 FAILURES 分节显现(见 cli.md「框线体裁」\n // 「一条失败的多行证据…不进终端,细节的家是 show」)——reducer 已经在 emit() 里同步更新过\n // state,这里的 no-op 只是不写字节;coordinator 仍会围着这次投递做 clear→append→redraw,\n // redraw 读到的是已经含这条失败的最新 state。\n if (event.type === \"experiment-hook\" ||\n event.type === \"precheck\" ||\n event.type === \"lock-wait\" ||\n event.type === \"run-activity\" ||\n event.type === \"failure\") {\n return;\n }\n writeDurable(io, event, state, false);\n },\n activity(text) {\n // 运行级瞬时通知(judge 预检、provider 一次性通知……):coordinator 已按\n // clearDynamic → activity → redrawDynamic 包好顺序,这里只管把这一行落进 scrollback。\n // TTY 下永久事件与 live 面板都在 stderr(见 writeDurable 的流边界注释)。\n io.stderr.write(text.endsWith(\"\\n\") ? text : `${text}\\n`);\n },\n clearDynamic() {\n if (linesDrawn === 0)\n return; // 幂等:coordinator 收尾时会无条件再调一次\n let out = `\\x1B[${linesDrawn}A`;\n out += \"\\x1B[2K\\n\".repeat(linesDrawn) + `\\x1B[${linesDrawn}A`;\n io.stderr.write(out);\n linesDrawn = 0;\n lastFrameText = undefined; // 物理终端已清空,下一帧必须真的重写,不能被「同帧」判断吞掉\n },\n redrawDynamic(state) {\n redraw(state);\n },\n onTick(_event, state) {\n // coordinator 的 tick 周期(默认 250ms = 4fps)已经是重画的硬上限 —— 这里每个 tick 最多\n // 重画一次;elapsed 按整秒渲染进 formatCommandLine,连同「同帧不写」,自然满足\n // 「elapsed 最多每秒变化一次」而不需要单独的节流变量。\n redraw(state);\n },\n onLifecycle(event) {\n if (event.type === \"attempt:start\") {\n const key = encodeAttemptKey(event.identity);\n if (!activeOrder.includes(key))\n activeOrder.push(key);\n }\n else if (event.type === \"attempt:complete\" || event.type === \"attempt:early-exit\") {\n const key = encodeAttemptKey(event.identity);\n const idx = activeOrder.indexOf(key);\n if (idx !== -1)\n activeOrder.splice(idx, 1);\n }\n // attempt:phase / attempt:progress 不改变 activeOrder 成员;下一次 tick 的 redraw()\n // 会从 state.active 读到最新 phase/detail,不需要在这里强制重画(见 checklist\n // 「真实 state 变化合并渲染」—— 逐条 lifecycle 事件不各自触发一次重画)。\n },\n };\n}\n/** active 行的身份两列(evalId/who)按调用方传入的 `evalWidth`/`whoWidth` 定宽——这两个数\n * 是 `createDashboardRenderer` 闭包按「本次运行实际出现过的最长值,封顶内容宽 40% / 20%」\n * 算出来再传进来的(见 `identityColumnWidths`),这个函数本身不比例分配、也不知道 `columns`\n * 的其余部分怎么分。elapsed 固定 6 列右对齐;detail 拿到 `sym + 身份两列 + elapsed + 分隔符`\n * 之后剩下的全部宽度——不是某个比例或固定预留,宽终端因此把整段 phase/detail 露出来\n * (cli.md「active 行的列序」)。 */\nfunction formatActiveRow(active: ActiveAttempt, io: FeedbackIO, columns: number, evalWidth: number, whoWidth: number): string {\n // 时间列从 attempt 派发起算,阶段推进不重置(见 ActiveAttempt.startedAt):这一列是存活性的\n // 唯一证明,归零会被读成「这条 eval 重跑了」。\n const elapsed = formatElapsed(io.clock.now() - active.startedAt).padStart(6);\n const sym = \"● \";\n const evalCol = padTrunc(active.identity.evalId, evalWidth);\n const whoCol = padTrunc(active.who, whoWidth);\n const prefix = `${sym}${evalCol} ${whoCol} ${elapsed} `;\n const budget = Math.max(0, columns - prefix.length);\n const detail = active.detail ? `${phaseLabel(active.phase)}: ${active.detail}` : phaseLabel(active.phase);\n return prefix + detail.slice(0, budget);\n}\n/** 实验级钩子的运行级行:与 attempt 行同一套定宽结果,label 跨过 evalId + 两格间隔 + who\n * 两列的合计宽度(不单独维护第三份\"最长值\"状态——label 是拼好的一整块文本,拆不出\n * evalId/who 两个独立字段,所以只复用 attempt 行算出的宽度,而不是各自决定),elapsed 列\n * 因此与 attempt 行对齐;detail 来自实验级 `ctx.progress`,没有就只留标签行。 */\n/** judge 预检的运行级行:`● prechecking judge config <elapsed>`。预检发生在任何 attempt 派发\n * 之前,此刻没有 attempt 行、也没有实验钩子行(setup 在派发时才跑),它恒是单独一行——所以\n * label 不受身份列宽约束(那时列宽还压在初始最小值,会把标签截成 `p…`),直接用整行宽度。\n * 没有 experimentId、没有 detail:预检只有「在跑」与「跑了多久」两个事实。 */\nfunction formatPrecheckRow(precheck: ActivePrecheck, io: FeedbackIO, columns: number): string {\n const elapsed = formatElapsed(io.clock.now() - precheck.startedAt).padStart(6);\n const sym = \"● \";\n return padTrunc(`${sym}${t(\"feedback.human.precheckJudge\")} ${elapsed}`, columns);\n}\n/** Run 级 activity 的运行级行:`● <producer label> <elapsed>`。\n * label 原样来自 producer,不查 LifecyclePhase 锚点表,也不对 key 做 switch 穷尽。\n * 与预检同理:构建阶段常常还没有任何 attempt 行,身份列宽仍是 0,label 直接用整行宽度。 */\nfunction formatRunActivityRow(activity: ActiveRunActivity, io: FeedbackIO, columns: number): string {\n const elapsed = formatElapsed(io.clock.now() - activity.startedAt).padStart(6);\n const sym = \"● \";\n return padTrunc(`${sym}${activity.label} ${elapsed}`, columns);\n}\nfunction formatExperimentHookRow(hook: ActiveExperimentHook, io: FeedbackIO, columns: number, evalWidth: number, whoWidth: number): string {\n const elapsed = formatElapsed(io.clock.now() - hook.startedAt).padStart(6);\n const sym = \"● \";\n const label = padTrunc(`${experimentHookLabel(hook.hook)} · ${hook.experimentId}${hook.recovery ? \" (recovery)\" : \"\"}`, evalWidth + 2 + whoWidth);\n const prefix = `${sym}${label} ${elapsed} `;\n const budget = Math.max(0, columns - prefix.length);\n return prefix + (hook.detail ?? \"\").slice(0, budget);\n}\n/** 用例锁等待的运行级行:`● waiting on another run · <exp> <elapsed> <n> evals · pid <pid>`\n * (cli.md「等待并发 run 的显示」)。elapsed 从最早一条等待的 startedAt 算(存活性证明,\n * 与其它运行级行同一约定);pid 取最早一条等待对应的持有方——一个实验可能同时撞上多把不同\n * 持有方的锁,这里选一个稳定的代表值展示,不逐条列出(与 earlyExit 代表 attempt 的选法同一\n * 种「挑一个确定性代表」思路)。不吃 evalWidth/whoWidth 身份列宽约束——与 `formatPrecheckRow`\n * 同理:选中用例全在等锁时,本实验没有派发中的 attempt,那两个宽度还压在初始值 0,会把\n * label 截成 \"w…\"(与 memory/live-dashboard-active-row-width-clamp-mismatch.md 同一根因类别,\n * 只是发生在锁等待场景);label 直接用整行宽度。 */\nfunction formatLockWaitRow(wait: ActiveLockWait, io: FeedbackIO, columns: number): string {\n const entries = [...wait.waiting.values()].sort((a, b) => a.startedAt - b.startedAt);\n const earliest = entries[0]!;\n const elapsed = formatElapsed(io.clock.now() - earliest.startedAt).padStart(6);\n const sym = \"● \";\n const label = `${t(\"feedback.human.waitingOnAnotherRun\")} · ${wait.experimentId}`;\n const prefix = `${sym}${label} ${elapsed} `;\n const budget = Math.max(0, columns - prefix.length);\n const detail = t(\"feedback.human.lockWaitDetail\", { count: entries.length, pid: earliest.holderPid ?? \"?\" });\n return padTrunc(prefix + detail.slice(0, budget), columns);\n}\n// ───────────────────────── 非 TTY:human 文案的纯追加流 ─────────────────────────\n//\n// 单一 stdout 有序流(见 memory/exp-output-two-forms-ruling.md 的补充裁决):从 start 到结束\n// 摘要——计划、失败、诊断、运行级瞬时通知、heartbeat、最终摘要——全部落 `stdout`;`stderr` 只留\n// 给启动期用法/配置错误(那些错误发生在 coordinator 存在之前,根本不经过这个 renderer)。这与\n// TTY 变体(live 面板 + 永久事件在 stderr、只有最终摘要在 stdout)刻意不同:非 TTY 没有可覆盖的\n// 动态区域,两个 OS stream 被 CI runner 或 agent 工具层分开缓冲时交错写会打乱真实发生顺序,\n// 单流才能保证事件序就是发生序。\nfunction createPlainRenderer(io: FeedbackIO): FeedbackRenderer {\n // 上一条永久事件的时间戳:heartbeat 只在「连续 30 秒没有永久事件」时才追加一条\n //(见 cli.md「什么动态更新,什么逐条追加」表),failure/diagnostic 出现后立即重新计时。\n let lastDurableAtMs = 0;\n return {\n appendDurable(event, state) {\n lastDurableAtMs = event.at;\n writeDurable(io, event, state, true);\n },\n activity(text) {\n // 运行级瞬时通知按永久行追加(非 TTY 没有可覆盖的动态区域),并重置 heartbeat 计时——\n // 刚有输出就不需要紧跟一条「还活着」。单一 stdout 流,不分流到 stderr。\n lastDurableAtMs = io.clock.now();\n io.stdout.write(text.endsWith(\"\\n\") ? text : `${text}\\n`);\n },\n onTick(event, state) {\n if (event.at - lastDurableAtMs < NON_TTY_HEARTBEAT_IDLE_MS)\n return;\n lastDurableAtMs = event.at;\n io.stdout.write(`${t(\"feedback.human.heartbeat\", { elapsed: formatElapsed(state.elapsedMs), counts: formatCounts(state) })}\\n`);\n },\n // 没有 clearDynamic/redrawDynamic/onLifecycle:非 TTY 退化流不维护动态区域,\n // 不展示 active attempt 的逐次阶段变化,也不逐次输出 provisioning retry/backoff ——\n // 这些行为由「不实现对应可选钩子」天然满足,不需要在这里写 profile 分支。\n };\n}\n// ───────────────────────── `--dry`(human profile):稳定预览,不经 coordinator ─────────────────────────\n/** 一个 (experimentId, evalId) 组合在 `--dry` 预览里的一行,与 cli.ts 里 `matchedByRun` 摊平后\n * 的矩阵、以及 `--dry --json` 的 `ExpPlanRow`(去掉 `reused` 字段)三处同一份数据一一对应——\n * dry 预览同样是「展示」,不该留在 cli.ts(见 docs/feature/experiments/cli.md 与 plan 对\n * 「CLI 只负责解析/构造/退出」的要求)。dry run 不派发 attempt,没有 `RunFeedbackState` 可言,\n * 所以这是独立于 `FeedbackRenderer`/coordinator 的纯函数,与 `renderAgentPlanEnvelope`\n * (agent.ts)同一定位。 */\nexport interface HumanDryPlanRow {\n experimentId: string;\n evalId: string;\n evalGroupId?: string;\n /** 本行计划内的 attempt 总数;混合 `attempts` 的多个 Experiment 不共用 input 的最大值。 */\n attempts?: number;\n /** 该用例正被另一条并行 Invocation 持锁运行(见 docs/feature/experiments/architecture.md\n * 「并发 Invocation:用例锁」);计划行尾如实标注,`--dry` 本身不取锁、不等待。 */\n locked?: boolean;\n /** 本行实际携入的终态结果;只会出现 `passed` / `failed`,供人读面显示已确定判定。 */\n carried?: readonly {\n attempt: number;\n verdict: \"passed\" | \"failed\";\n }[];\n /** 本行要派发的 attempt 卡在哪几道门上(词表见 docs/feature/experiments/cli.md\n * 「`--dry`:计划矩阵与作废原因」);`attempts` 是这组原因覆盖的 0-based 序号。\n * 省略或空数组 = 全部携带(兼容直接调用 formatter 的旧 fixture)。 */\n dispatch?: readonly {\n reason: string;\n attempts?: readonly number[];\n comparison?: HumanFingerprintComparison;\n }[];\n /** previous-result 行对应的历史结果;旧格式 locator 会明确显示为不可接受。 */\n prior?: readonly {\n attempt?: number;\n locator: string;\n verdict: \"passed\" | \"failed\" | \"errored\" | \"skipped\";\n acceptance: \"available\" | \"legacy-locator\";\n evidenceState?: \"local\" | \"borrowed\" | \"dangling\";\n comparison?: HumanFingerprintComparison;\n }[];\n}\nexport interface HumanDryPlanInput {\n /** 矩阵行数 × runs,与 `--dry --json` 的 `ExpPlanDocument.total` 同口径。 */\n totalAttempts: number;\n /** 去重后的候选 eval 数,与 `ExpPlanDocument.evals` 同口径(即 `rows` 里 `evalId` 的去重数,\n * 不是 discover 到的 eval 总数)。 */\n evals: number;\n configs: number;\n attempts: number;\n /** 携带预测的复用 attempt 数;省略或 `0` 时不追加复用摘要行(docs 契约首行示例展示的是\n * 全新派发场景,没有第二行)。 */\n reused?: number;\n rows: readonly HumanDryPlanRow[];\n /** 兼容旧调用方的命令前缀;accept 行现在固定指向每条历史结果的 locator。 */\n command?: string;\n}\n/** 契约首行(docs/feature/experiments/cli.md 开头的 `--dry` 示例):\n * `plan: <total> attempts · <N> eval[s] × <M> config[s] · runs <R>`,单复数随计数变化。\n * 有携带预测时紧跟一行,沿用 `PLAN` 面板缓存摘要既有的 `feedback.human.reuse` 文案(见\n * `buildPlanLines`)而不是为 `--dry` 另造一套词。逐行按 `experimentId`/`evalId` 两列对齐,\n * 第一列按实际出现过的最长值定宽——与 CI/agent 的 dry 预览不同,human 不折叠、不设行数上限:\n * 这条路径历来就是给人逐行读的完整清单。 */\nexport function renderHumanDryPlan(input: HumanDryPlanInput): string {\n const lines = [\n t(\"cli.dry.header\", {\n attempts: pluralUnit(input.totalAttempts, \"cli.dry.unit.attempt\", \"cli.dry.unit.attempts\"),\n evals: pluralUnit(input.evals, \"cli.dry.unit.eval\", \"cli.dry.unit.evals\"),\n configs: pluralUnit(input.configs, \"cli.dry.unit.config\", \"cli.dry.unit.configs\"),\n attemptCount: input.attempts,\n }),\n ];\n if (input.reused) {\n lines.push(t(\"feedback.human.reuse\", {\n reused: input.reused,\n total: input.totalAttempts,\n toRun: Math.max(0, input.totalAttempts - input.reused),\n }));\n }\n const idWidth = Math.max(0, ...input.rows.map((row) => stringWidth(row.experimentId)));\n const evalLabel = (row: HumanDryPlanRow): string => row.evalGroupId === undefined\n ? row.evalId\n : `${row.evalId} [group ${row.evalGroupId}]`;\n const evalWidth = Math.max(0, ...input.rows.map((row) => stringWidth(evalLabel(row))));\n for (const row of input.rows) {\n const label = evalLabel(row);\n const base = `${row.experimentId}${\" \".repeat(idWidth - stringWidth(row.experimentId) + 2)}${label}`;\n // 行尾恒有一个标注:要派发的行逐条给门的原因词,全部携带的行标 carried,\n // 正被别人持锁的行沿用既有的 locked(它回答的是「本次会不会自己跑」,不是哪道门)。\n const suffix = row.locked\n ? t(\"feedback.human.lockedRowSuffix\")\n : dryPlanReasonSuffix(row.dispatch, row.prior, row.carried, row.attempts ?? input.attempts);\n lines.push(`${base}${\" \".repeat(evalWidth - stringWidth(label) + 3)}${suffix}`);\n }\n const previousResultBlocks = renderPreviousResultDeltaGroups(input);\n if (previousResultBlocks.length > 0)\n lines.push(\"\", ...previousResultBlocks);\n return `${lines.join(\"\\n\")}\\n`;\n}\nexport interface HumanCommandPlanOptions {\n readonly isTTY?: boolean;\n readonly noColor?: string;\n readonly width?: number;\n}\nfunction commandPlanOwner(step: CommandPlanStep): string | undefined {\n if (step.owner === undefined)\n return undefined;\n return `owner: ${step.owner.kind}:${step.owner.id}${step.owner.index === undefined ? \"\" : `#${step.owner.index}`}`;\n}\n/** Command-plan 的统一 human sink 不把任何来源的控制字符直接写进终端。 */\nfunction visibleCommandPlanTerminalText(text: string): string {\n let visible = \"\";\n for (const character of text) {\n const codePoint = character.codePointAt(0)!;\n if (character === \"\\t\") {\n visible += \"\\\\t\";\n }\n else if (character === \"\\r\") {\n visible += \"\\\\r\";\n }\n else if (codePoint < 0x20 || (codePoint >= 0x7f && codePoint <= 0x9f)) {\n visible += `\\\\u${codePoint.toString(16).padStart(4, \"0\")}`;\n }\n else {\n visible += character;\n }\n }\n return visible;\n}\nfunction commandPlanExact(step: CommandPlanStep): readonly string[] {\n const command = step.command;\n if (command === undefined)\n return [\"command: exact command unavailable\"];\n const operation = command.kind === \"argv\"\n ? [`command: argv ${JSON.stringify([command.executable, ...command.args])}`]\n : command.script.includes(\"\\n\")\n ? [\n `command: shell · ${command.script.split(\"\\n\").length} lines`,\n ...command.script.split(\"\\n\").map((line) => {\n return line === \"\" ? \" │\" : ` │ ${line}`;\n }),\n ]\n : [`command: shell ${JSON.stringify(command.script)}`];\n const options = [\n command.cwd === undefined ? undefined : `cwd: ${JSON.stringify(command.cwd)}`,\n command.user === undefined ? undefined : `user: ${JSON.stringify(command.user)}`,\n command.timeoutMs === undefined ? undefined : `timeout: ${command.timeoutMs}ms`,\n command.envKeys === undefined ? undefined : `environment keys: ${JSON.stringify(command.envKeys)}`,\n ].filter((value): value is string => value !== undefined);\n return [\n ...operation,\n ...options,\n ...(step.redactions === undefined ? [] : [`redacted: ${step.redactions.join(\", \")}`]),\n ];\n}\nfunction commandPlanTemplate(step: CommandPlanStep): readonly string[] {\n const template = step.template;\n if (template === undefined)\n return [];\n const owner = `${template.owner.kind}:${template.owner.id}`;\n const prefix = [\n `template: ${template.provider}:${template.kind}`,\n `template owner: ${owner}`,\n ];\n if (template.locator._tag === \"Opaque\") {\n return [...prefix, `configured locator: opaque — ${template.locator.reason.summary}`];\n }\n const fields = template.locator.fields\n .map((field) => `${field.name}=${JSON.stringify(field.value)}`)\n .join(\" · \");\n if (template.locator._tag === \"Exact\")\n return [...prefix, `configured locator: exact · ${fields}`];\n const redacted = template.locator.redactions\n .map((entry) => `${entry.field}:${entry.parts.join(\"+\")}`)\n .join(\",\");\n return [...prefix, `configured locator: redacted · ${fields}`, `locator redacted: ${redacted}`];\n}\nfunction commandPlanStepMeta(step: CommandPlanStep): string {\n switch (step.truth) {\n case \"exact\":\n return \"EXACT\";\n case \"conditional\":\n return \"CONDITIONAL\";\n case \"opaque\":\n return \"OPAQUE\";\n case \"known-no-command\":\n return \"NO COMMANDS\";\n }\n}\nfunction commandPlanStepLines(step: CommandPlanStep, position: string): readonly string[] {\n const owner = commandPlanOwner(step);\n const detail = step.truth === \"exact\"\n ? commandPlanExact(step)\n : step.truth === \"conditional\"\n ? [`branches: ${step.children?.length ?? 0} command blocks follow`]\n : step.truth === \"opaque\"\n ? [`reason: ${step.reason?.summary ?? \"runtime callback\"}`]\n : [step.reason === undefined ? \"reason: this lifecycle step has no command\" : `reason: ${step.reason.summary}`];\n return [\n `position: ${position}`,\n ...(owner === undefined ? [] : [owner]),\n ...(step.label === undefined ? [] : [`label: ${step.label}`]),\n ...commandPlanTemplate(step),\n ...detail,\n ...(step.condition === undefined ? [] : [`if: ${step.condition.summary}`]),\n ];\n}\n/** 保留 JSON string 内的连续空格与转义,不用会折叠空白的 prose wrapper。 */\nfunction hardWrapCommandPlanLine(text: string, width: number, continuation = \" \"): string[] {\n const max = Math.max(4, width);\n const lines: string[] = [];\n let line = \"\";\n let used = 0;\n const flush = (): void => {\n lines.push(line);\n line = continuation;\n used = stringWidth(continuation);\n };\n for (const ch of text) {\n const charWidth = charDisplayWidth(ch.codePointAt(0)!);\n if (used > 0 && used + charWidth > max)\n flush();\n line += ch;\n used += charWidth;\n }\n lines.push(line);\n return lines;\n}\nfunction pushCommandPlanLine(target: PanelRow[], text: string, contentWidth: number, continuation = \" \"): void {\n target.push({ kind: \"line\", text: hardWrapCommandPlanLine(text, contentWidth, continuation).join(\"\\n\") });\n}\ninterface CommandPlanPanelCapability {\n readonly width: number;\n readonly mode: PanelMode;\n}\nfunction renderCommandPlanPanel(title: string, meta: string | undefined, lines: readonly string[], capability: CommandPlanPanelCapability): string[] {\n const contentWidth = panelContentWidth(capability.width, capability.mode);\n const rows: PanelRow[] = [];\n for (const line of lines) {\n const visibleLine = visibleCommandPlanTerminalText(line);\n pushCommandPlanLine(rows, visibleLine, contentWidth, visibleLine.startsWith(\" │\") ? \" │ \" : \" \");\n }\n return renderPanel({\n title: visibleCommandPlanTerminalText(title),\n ...(meta === undefined ? {} : { meta: visibleCommandPlanTerminalText(meta) }),\n rows,\n width: capability.width,\n mode: capability.mode,\n });\n}\nfunction renderCommandPlanSteps(target: string[][], steps: readonly CommandPlanStep[], position: string, capability: CommandPlanPanelCapability): void {\n for (const step of steps) {\n target.push(renderCommandPlanPanel(step.phase, commandPlanStepMeta(step), commandPlanStepLines(step, position), capability));\n if ((step.children?.length ?? 0) > 0) {\n const childPosition = `${position} > ${step.phase}${step.label === undefined ? \"\" : ` (${step.label})`}`;\n renderCommandPlanSteps(target, step.children!, childPosition, capability);\n }\n }\n}\nfunction commandPlanLaneLabel(lane: CommandPlanLane): string {\n const ordering = lane.ordering === \"serial-normalized-eval-id\"\n ? \"serial · normalized Eval ID, then attempt\"\n : \"no guaranteed slot order\";\n if (lane.kind !== \"sandbox-reuse\")\n return `lane ${lane.kind}:${lane.id} · ${ordering}`;\n const scope = lane.scope.kind === \"shared\" ? \"shared\" : `eval:${lane.scope.evalId}`;\n return `lane sandbox-reuse:${scope}@${lane.id.slice(-12)} · ${ordering}`;\n}\n/**\n * `niceeval debug` 的人读投影。只呈现保证的局部顺序,不给并发 lane 编造全局序号。\n * TTY 画区域框,NO_COLOR / 非 TTY / 窄终端按全仓 panel 契约退化为 plain。\n */\nexport function renderHumanCommandPlan(plan: CommandPlan, options: HumanCommandPlanOptions): string {\n const capability = panelCapability({\n isTTY: options.isTTY,\n noColor: options.noColor,\n width: options.width,\n });\n const panels: string[][] = [];\n const meta = plan.completeness === \"complete\"\n ? \"COMPLETE\"\n : `PARTIAL · ${plan.opaqueCount} opaque · ${plan.redactedCount} redacted`;\n panels.push(renderCommandPlanPanel(\"COMMAND PLAN\", meta, [\"Guaranteed order is per lane. Different experiments and lanes may interleave at runtime; conditional dispatches may never start.\"], capability));\n for (const experiment of plan.experiments) {\n panels.push(renderCommandPlanPanel(`EXPERIMENT ${experiment.experimentId}`, experiment.activation.toUpperCase(), [\"Contains the lifecycle blocks surrounding every selected lane.\"], capability));\n renderCommandPlanSteps(panels, experiment.beforeLanes, `experiment ${experiment.experimentId} · before lanes`, capability);\n for (const lane of experiment.lanes) {\n const laneLabel = commandPlanLaneLabel(lane);\n panels.push(renderCommandPlanPanel(laneLabel, lane.ordering === \"serial-normalized-eval-id\" ? \"SERIAL\" : \"INDEPENDENT\", [\"Contains the lifecycle blocks for this lane.\"], capability));\n if (lane.kind === \"eval-group\" && lane.beforeSlots.length > 0) {\n renderCommandPlanSteps(panels, lane.beforeSlots, `lane ${lane.kind}:${lane.id} · group lifecycle before slots`, capability);\n }\n const physical = lane.physicalLifecycleTemplate;\n if (physical !== undefined) {\n renderCommandPlanSteps(panels, physical.enter, `lane ${lane.kind}:${lane.id} · physical lifecycle template enter · each physical instance`, capability);\n }\n for (const slot of lane.slots) {\n if (slot.action === \"carried\") {\n panels.push(renderCommandPlanPanel(`SLOT ${slot.evalId} #${slot.attempt}`, \"CARRIED\", [\"No lifecycle commands run for this slot.\"], capability));\n continue;\n }\n panels.push(renderCommandPlanPanel(`SLOT ${slot.evalId} #${slot.attempt}`, \"DISPATCH\", [`if: ${slot.activation?.summary ?? \"admitted\"}`], capability));\n renderCommandPlanSteps(panels, slot.steps, `lane ${lane.kind}:${lane.id} · slot ${slot.evalId} #${slot.attempt}`, capability);\n }\n if (physical !== undefined) {\n renderCommandPlanSteps(panels, physical.exit, `lane ${lane.kind}:${lane.id} · physical lifecycle template exit · each physical instance`, capability);\n }\n if (lane.kind === \"eval-group\" && lane.afterSlots.length > 0) {\n renderCommandPlanSteps(panels, lane.afterSlots, `lane ${lane.kind}:${lane.id} · group lifecycle after slots`, capability);\n }\n }\n renderCommandPlanSteps(panels, experiment.afterLanes, `experiment ${experiment.experimentId} · after lanes`, capability);\n }\n return `${panels.map((panel) => panel.join(\"\\n\")).join(\"\\n\\n\")}\\n`;\n}\n/** previous-result 行逐条列出历史 locator;接受命令永远只影响这一条结果,不按 selector 聚合。 */\nfunction renderPreviousResultDeltaGroups(input: HumanDryPlanInput): string[] {\n const out: string[] = [];\n for (const row of input.rows) {\n if (!row.prior || row.prior.length === 0)\n continue;\n for (const prior of row.prior) {\n const previousResultGroup = row.dispatch?.find((group) => group.reason === \"previous-result\" && group.comparison !== undefined);\n const comparison = prior.comparison ?? previousResultGroup?.comparison;\n const summary = comparison === undefined\n ? \"fingerprint comparison explanation unavailable\"\n : formatFingerprintComparison(comparison);\n out.push(`${row.experimentId} ${row.evalId} previous-result ${prior.verdict}: ${summary}`);\n if (comparison !== undefined)\n out.push(...renderFingerprintComparisonDetails(comparison, \" \"));\n const evidence = prior.evidenceState === \"dangling\" ? \"evidence unavailable\" : \"evidence available\";\n out.push(` prior: ${prior.locator} (${prior.verdict} · ${evidence})`);\n if (prior.evidenceState !== \"dangling\")\n out.push(` review: niceeval show ${prior.locator}`);\n out.push(prior.acceptance === \"available\"\n ? ` accept: niceeval accept ${prior.locator}`\n : \" accept: unavailable (legacy locator; rerun to create an acceptable result)\");\n }\n }\n return out;\n}\n/**\n * `baseline01`…`baseline06` → `baseline 01/02/03/05/06`:同一批受影响的 eval 通常只差编号,\n * 把公共前缀提出来一次,人一眼看得出「缺的是哪几号」。没有公共前缀就逐个列。\n */\nfunction foldIds(ids: string[]): string {\n const sorted = [...ids].sort();\n if (sorted.length < 2)\n return sorted.join(\", \");\n let prefix = sorted[0]!;\n for (const id of sorted) {\n while (prefix !== \"\" && !id.startsWith(prefix))\n prefix = prefix.slice(0, -1);\n if (prefix === \"\")\n break;\n }\n // 公共前缀不许切进一段数字中间:`baseline01`…`baseline06` 的字面公共前缀是 `baseline0`,\n // 折出来的 `1/3/6` 读起来不是编号。退到数字段边界,给出 `baseline 01/03/06`。\n while (prefix !== \"\" && /\\d$/.test(prefix))\n prefix = prefix.slice(0, -1);\n if (prefix === \"\")\n return sorted.join(\", \");\n return `${prefix} ${sorted.map((id) => id.slice(prefix.length)).join(\"/\")}`;\n}\n/**\n * `previous-result: config:judge.model · new` —— 同一行的多组原因按门的出现序连排,旧结果附差异 selector。\n * 当一行有多个 attempt 时,每个派发组带 `N/total`;携入组只在部分携入时带这个分数,避免把\n * `carried` 的来源判定折叠成一个没有 verdict 的总数。\n */\nfunction dryPlanReasonSuffix(dispatch: HumanDryPlanRow[\"dispatch\"], prior: HumanDryPlanRow[\"prior\"], carried: HumanDryPlanRow[\"carried\"] = [], totalAttempts = 1): string {\n const carriedSuffix = carried.length > 0 ? formatCarriedSuffix(carried, totalAttempts) : undefined;\n if (dispatch === undefined || dispatch.length === 0)\n return carriedSuffix ?? \"carried\";\n return [\n ...(carriedSuffix === undefined ? [] : [carriedSuffix]),\n ...dispatch.map((group) => formatDispatchGroup(group, prior, totalAttempts)),\n ].join(\" · \");\n}\nfunction formatCarriedSuffix(carried: NonNullable<HumanDryPlanRow[\"carried\"]>, totalAttempts: number): string {\n if (totalAttempts === 1 && carried.length === 1)\n return `carried (${carried[0]!.verdict})`;\n const verdicts = formatVerdictCounts(carried.map((result) => result.verdict));\n if (carried.length < totalAttempts)\n return `carried ${carried.length}/${totalAttempts} (${verdicts})`;\n return `carried (${verdicts})`;\n}\nfunction formatVerdictCounts(verdicts: readonly (\"passed\" | \"failed\")[]): string {\n const counts = { passed: 0, failed: 0 };\n for (const verdict of verdicts)\n counts[verdict] += 1;\n return ([\"passed\", \"failed\"] as const)\n .filter((verdict) => counts[verdict] > 0)\n .map((verdict) => `${counts[verdict]} ${verdict}`)\n .join(\" · \");\n}\nfunction formatDispatchGroup(group: NonNullable<HumanDryPlanRow[\"dispatch\"]>[number], prior: HumanDryPlanRow[\"prior\"], totalAttempts: number): string {\n const countSuffix = group.attempts !== undefined && totalAttempts > 1\n ? ` ${group.attempts.length}/${totalAttempts}`\n : \"\";\n const comparison = group.comparison;\n const relevantPrior = (prior ?? []).filter((result) => group.attempts === undefined || result.attempt === undefined || group.attempts.includes(result.attempt));\n const previousResultVerdicts = group.reason === \"previous-result\"\n ? ([\"passed\", \"failed\", \"errored\", \"skipped\"] as const).filter((verdict) => relevantPrior.some((result) => result.verdict === verdict))\n : [];\n const reason = previousResultVerdicts.length > 0\n ? `previous-result ${previousResultVerdicts.join(\"/\")}`\n : group.reason;\n if (comparison !== undefined)\n return `${reason}${countSuffix}: ${formatFingerprintComparison(comparison)}`;\n return `${reason}${countSuffix}`;\n}\nfunction formatFingerprintComparison(comparison: NonNullable<HumanDryPlanRow[\"dispatch\"]>[number][\"comparison\"]): string {\n if (comparison === undefined)\n return \"fingerprint comparison explanation unavailable\";\n if (comparison.kind === \"match\")\n return \"fingerprint matches\";\n if (comparison.kind === \"changed\")\n return comparison.deltas.map(formatDryDelta).join(\", \");\n return comparison.diagnostic.summary;\n}\nconst DELTA_COMMON_PREFIX_CAP = 24;\nconst DELTA_DIFF_WINDOW = 56;\nconst DELTA_SINGLE_SIDE_CAP = 80;\n/**\n * Changed 差异的双侧值对齐到第一处不同字符,而不是各自从头独立截断——独立截断在长公共前缀下\n * 会把两侧都截在差异点之前,读者看到的是两份相同的省略串,分不清到底哪里变了。差异点起两侧\n * 各留一个有界窗口,公共前缀过长时压缩显示但保留其尾部作为定位上下文。\n */\nexport function windowChangedDeltaValues(from: string, to: string): [\n string,\n string\n] {\n if (from === to)\n return [from, to];\n const max = Math.min(from.length, to.length);\n let shared = 0;\n while (shared < max && from[shared] === to[shared])\n shared += 1;\n const prefix = shared > DELTA_COMMON_PREFIX_CAP\n ? `…${from.slice(shared - DELTA_COMMON_PREFIX_CAP, shared)}`\n : from.slice(0, shared);\n return [\n `${prefix}${boundedDiffTail(from.slice(shared))}`,\n `${prefix}${boundedDiffTail(to.slice(shared))}`,\n ];\n}\nfunction boundedDiffTail(text: string): string {\n return text.length > DELTA_DIFF_WINDOW ? `${text.slice(0, DELTA_DIFF_WINDOW)}…` : text;\n}\nfunction boundedSingleSide(text: string): string {\n return text.length > DELTA_SINGLE_SIDE_CAP ? `${text.slice(0, DELTA_SINGLE_SIDE_CAP - 1)}…` : text;\n}\nfunction formatDryDelta(delta: {\n selector: string;\n _tag?: \"Added\" | \"Removed\" | \"Changed\" | \"Unknown\";\n kind?: \"added\" | \"removed\" | \"changed\" | \"unknown\";\n from?: string;\n to?: string;\n}): string {\n const kind = delta.kind ?? (delta._tag === \"Added\"\n ? \"added\"\n : delta._tag === \"Removed\"\n ? \"removed\"\n : delta._tag === \"Unknown\"\n ? \"unknown\"\n : delta._tag === \"Changed\"\n ? \"changed\"\n : undefined);\n switch (kind) {\n case \"added\": return `${delta.selector} added (${boundedSingleSide(delta.to ?? \"\")})`;\n case \"removed\": return `${delta.selector} removed (was ${boundedSingleSide(delta.from ?? \"\")})`;\n case \"unknown\": return `${delta.selector}`;\n case \"changed\":\n default: {\n if (delta.from === undefined && delta.to === undefined)\n return delta.selector;\n const [from, to] = windowChangedDeltaValues(delta.from ?? \"\", delta.to ?? \"\");\n return `${delta.selector} changed (${from} → ${to})`;\n }\n }\n}\nconst DIAGNOSTIC_CAUSE_DEPTH_CAP = 4;\nconst DIAGNOSTIC_NODE_CAP = 16;\nconst DIAGNOSTIC_DELTA_CAP = 8;\nfunction renderFingerprintComparisonDetails(comparison: HumanFingerprintComparison, indent: string): string[] {\n if (comparison.kind !== \"unexplained\")\n return [];\n const budget = { nodes: 0 };\n return renderFingerprintDiagnostic(comparison.diagnostic, indent, 0, budget);\n}\nfunction renderFingerprintDiagnostic(diagnostic: Extract<HumanFingerprintComparison, {\n kind: \"unexplained\";\n}>[\"diagnostic\"], indent: string, depth: number, budget: {\n nodes: number;\n}): string[] {\n if (budget.nodes >= DIAGNOSTIC_NODE_CAP)\n return [];\n budget.nodes += 1;\n const lines = [`${indent}${diagnostic.code}: ${diagnostic.summary}`];\n for (const fact of diagnostic.facts ?? []) {\n if (\"value\" in fact) {\n lines.push(`${indent} ${fact.label}: ${formatDiagnosticValue(fact.value)}`);\n }\n else {\n lines.push(`${indent} ${fact.label}: ${formatDiagnosticValue(fact.from)} → ${formatDiagnosticValue(fact.to)}`);\n }\n }\n if (diagnostic.observedDeltas === undefined) {\n lines.push(`${indent} observed inputs: unavailable (comparable manifest inputs were not available)`);\n }\n else if (diagnostic.observedDeltas.length === 0) {\n lines.push(`${indent} observed inputs: no differences in comparable manifest fields`);\n }\n else {\n lines.push(`${indent} observed inputs:`);\n const visible = diagnostic.observedDeltas.slice(0, DIAGNOSTIC_DELTA_CAP);\n for (const delta of visible)\n lines.push(`${indent} ${formatDryDelta(delta)}`);\n if (diagnostic.observedDeltas.length > visible.length) {\n lines.push(`${indent} +${diagnostic.observedDeltas.length - visible.length} more observed deltas`);\n }\n }\n for (const limitation of diagnostic.limitations ?? [])\n lines.push(`${indent} limitation: ${limitation}`);\n const causes = diagnostic.causes ?? [];\n if (causes.length === 0)\n return lines;\n if (depth >= DIAGNOSTIC_CAUSE_DEPTH_CAP) {\n lines.push(`${indent} +${causes.reduce((count, cause) => count + diagnosticNodeCount(cause), 0)} more diagnostic nodes suppressed`);\n return lines;\n }\n for (let index = 0; index < causes.length; index++) {\n const cause = causes[index];\n if (cause === undefined)\n continue;\n if (budget.nodes >= DIAGNOSTIC_NODE_CAP) {\n const remaining = causes.slice(index).reduce((count, rest) => count + diagnosticNodeCount(rest), 0);\n lines.push(`${indent} +${remaining} more diagnostic nodes suppressed`);\n break;\n }\n lines.push(`${indent} cause:`);\n lines.push(...renderFingerprintDiagnostic(cause, `${indent} `, depth + 1, budget));\n }\n return lines;\n}\nfunction diagnosticNodeCount(diagnostic: Extract<HumanFingerprintComparison, {\n kind: \"unexplained\";\n}>[\"diagnostic\"]): number {\n return 1 + (diagnostic.causes ?? []).reduce((count, cause) => count + diagnosticNodeCount(cause), 0);\n}\nfunction formatDiagnosticValue(value: JsonValue): string {\n if (typeof value === \"string\")\n return value;\n return JSON.stringify(value) ?? String(value);\n}\n/** `${n} ${unit}` 的单复数投影;zh 的 singular/plural key 值相同(中文不做语法数变化),\n * 实现照旧走同一条路径,不需要按 locale 分支。 */\nfunction pluralUnit(n: number, singularKey: Parameters<typeof t>[0], pluralKey: Parameters<typeof t>[0]): string {\n return `${n} ${t(n === 1 ? singularKey : pluralKey)}`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"human.js","sourceRoot":"","sources":["human.ts"],"names":[],"mappings":"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","sourcesContent":["// Human profile renderer(见 docs/feature/experiments/cli.md「人在终端里怎么用」)。\n//\n// 两个变体,由 `io.stderr.isTTY` 在构造时选一次(profile 是消费者模型,TTY 只是传输能力 ——\n// 不加 `--json` 在非 TTY 下仍是人读文本,只是退化成纯追加文案,不悄悄变成 `--json` 语义):\n//\n// - TTY:动态 dashboard(命令/elapsed/守恒计数/cost/active slots)覆盖重画,永久事件走\n// clear → append → redraw(coordinator 保证顺序,这里只需正确实现三个钩子)。\n// - 非 TTY:零 ANSI 的单一有序 stdout 追加流 —— 只有 start(plan 永久事件天然充当)、永久事件、\n// 运行级瞬时通知、以及连续 30 秒无永久事件时的一条 heartbeat;不追踪 active slot,不重画。\n//\n// 两个变体共用同一份「永久事件 → 文本行」的纯函数(renderDurableLines 及其子函数),保证\n// 完成页/失败行/诊断行的实际文案在两种模式下完全一致,只有「要不要用 ANSI 维护一块动态区域」\n// 不同 —— 不是两套平行的文案实现。\n//\n// 一条失败/errored 的终端投影恒为单行事实行(buildFailureFactLine):TTY 下滚动显示在 live\n// 面板内嵌的 FAILURES 分节(最近 5 条本次新发生的失败,carry 携入失败不进分节,不写\n// scrollback);非 TTY 单流逐条追加同一投影。结束反馈的 FAILURES 面板改按失败形态聚合\n// (buildFailuresPanelRows),不再逐条铺开;新增的 WARNINGS 面板按 code 汇总本次去重后的诊断。\n// 详见 docs/feature/experiments/cli.md「运行中的 live 面板」与「人看的结束反馈」。\n//\n// 完成页(summary/receipt 两个永久事件)不再调用 `./reporters/table.ts` 的 `renderRunReport()`\n// 大表:失败优先摘要留在终端,完整证据始终由 receipt 中的真实 Run ID 打开。\nimport { t } from \"../../i18n/index.ts\";\nimport { formatCost } from \"../../shared/format.ts\";\nimport { compactAssertionSummary, fitCompactAssertionSummary, stripControl } from \"../../assertions/display.ts\";\nimport { COORDINATION_RECOVERED_CODE, encodeAttemptKey, HALT_DIAGNOSTIC_CODE } from \"../types.ts\";\nimport { panelCapabilityOf as panelCapability, panelContentWidth, renderPanel, type PanelMode, type PanelRow, } from \"../../report/model/panel.ts\";\nimport { charDisplayWidth, padDisplay, padStartDisplay, stringWidth, wrapDisplay } from \"../../report/model/text-layout.ts\";\nimport type { CommandPlan, CommandPlanLane, CommandPlanStep, } from \"../command-plan.ts\";\nimport type { ActiveAttempt, ActiveExperimentHook, ActiveLockWait, ActivePrecheck, ActiveRunActivity, AttemptKey, AttemptRef, DiagnosticNotice, ExperimentHookName, FailureNotice, LifecyclePhase, DurableFeedbackEvent, RunFeedbackPlan, RunFeedbackState, EvalResult, TimingOrigin, } from \"../types.ts\";\nimport type { CurrentReusedAttemptReadback } from \"../reuse-readback.ts\";\nimport type { FeedbackRenderer } from \"./renderer.ts\";\nimport type { FeedbackIO } from \"./io.ts\";\nimport type { JsonValue } from \"../../shared/types.ts\";\nimport type { PrimaryFactSummary } from \"../../assertions/types.ts\";\ninterface HumanFingerprintDelta {\n selector: string;\n _tag?: \"Added\" | \"Removed\" | \"Changed\" | \"Unknown\";\n kind?: \"added\" | \"removed\" | \"changed\" | \"unknown\";\n from?: string;\n to?: string;\n}\ninterface HumanFingerprintDiagnosticFactValue {\n label: string;\n value: JsonValue;\n}\ninterface HumanFingerprintDiagnosticFactTransition {\n label: string;\n from: JsonValue;\n to: JsonValue;\n}\ntype HumanFingerprintDiagnosticFact = HumanFingerprintDiagnosticFactValue | HumanFingerprintDiagnosticFactTransition;\ninterface HumanFingerprintDiagnostic {\n code: string;\n summary: string;\n facts?: readonly HumanFingerprintDiagnosticFact[];\n observedDeltas?: readonly HumanFingerprintDelta[];\n limitations?: readonly string[];\n causes?: readonly HumanFingerprintDiagnostic[];\n}\ntype HumanFingerprintComparison = {\n kind: \"match\";\n} | {\n kind: \"changed\";\n deltas: readonly HumanFingerprintDelta[];\n} | {\n kind: \"unexplained\";\n diagnostic: HumanFingerprintDiagnostic;\n};\n/** live/结束面板的传输能力(docs/feature/reports/README.md「区域框」):是 TTY 且\n * 没有要求朴素输出(`NO_COLOR`)时才画框——`io.env` 而不是直接读 `process.env`,保持\n * profile renderer 可用假 IO 确定性测试。 */\nfunction panelCapabilityForFeedback(io: FeedbackIO): {\n mode: PanelMode;\n width: number;\n} {\n return panelCapability({ isTTY: io.stderr.isTTY, noColor: io.env.NO_COLOR, width: io.stderr.columns });\n}\n/** 失败/errored 默认展开上限(见 cli.md「'立即追加'也必须有上限」表:human 前 10 条)。\n * 只管非 TTY 追加流的展开条数;TTY live 面板的 FAILURES 分节用 LIVE_FAILURES_VISIBLE,\n * 结束反馈的 FAILURES 面板用 FAILURE_GROUPS_CAP(按失败形态的组数,不是原始条数)。 */\nconst HUMAN_FAILURE_CAP = 10;\n/** live 面板 FAILURES 分节滚动保留的条数(见 cli.md「运行中的 live 面板」)。 */\nconst LIVE_FAILURES_VISIBLE = 5;\n/** 结束反馈中断言失败形态的展开上限;execution error 必须逐条保留自己的 message,不受此上限折叠。 */\nconst FAILURE_GROUPS_CAP = 10;\n/** 非 TTY / `--json` 没有可依赖的终端宽度,失败单行投影用固定预算(见\n * docs/feature/assertions/library/display.md「一条摘要怎样排版」)。 */\nconst NON_TTY_FAILURE_LINE_MAX_CHARS = 100;\n/** 非 TTY human 退化流的空闲 heartbeat 阈值(见 cli.md「什么动态更新,什么逐条追加」表)。 */\nconst NON_TTY_HEARTBEAT_IDLE_MS = 30000;\n/** dashboard 高度预留:避免最后一行触发终端自动滚动(与 live.ts 旧实现的 `rows - 2` 同一动机,\n * 这里只需要给「下一帧」留出一行余地,不需要额外的表头/尾行预留)。 */\nconst DASHBOARD_ROW_RESERVE = 1;\nconst HUMAN_RESULTS_EXPERIMENT_CAP = 5;\nconst HUMAN_ERROR_TEXT_MAX_BYTES = 240;\ntype HumanResultItem = {\n readonly experimentId: string;\n readonly evalId: string;\n readonly evaluationKind: \"pass\" | \"score\";\n readonly verdict: import(\"../../shared/types.ts\").Verdict;\n readonly scoreState?: \"complete\" | \"partial\" | \"unavailable\";\n readonly earned?: number;\n};\nfunction freshHumanResult(result: EvalResult): HumanResultItem {\n const score = result.scoreResult;\n const scoreState = score === undefined\n ? undefined\n : score.status === \"scored\"\n ? \"complete\" as const\n : score.earnedScore > 0\n ? \"partial\" as const\n : \"unavailable\" as const;\n return {\n experimentId: result.experimentId ?? \"default\",\n evalId: result.id,\n evaluationKind: result.evaluationKind,\n verdict: result.verdict,\n ...(scoreState === undefined || score === undefined ? {} : { scoreState, earned: score.earnedScore }),\n };\n}\nfunction reusedHumanResult(result: CurrentReusedAttemptReadback): HumanResultItem {\n const attachment = result.score.state === \"applicable\" && result.score.attachment.state === \"available\"\n ? result.score.attachment.value\n : undefined;\n return {\n experimentId: result.target.experimentId,\n evalId: result.target.evalId,\n evaluationKind: result.source.evaluationKind,\n verdict: result.verdict,\n ...(attachment === undefined\n ? {}\n : {\n scoreState: attachment.state,\n ...(attachment.earned === undefined ? {} : { earned: attachment.earned }),\n }),\n };\n}\nfunction humanResultItems(summary: import(\"../types.ts\").InvocationSummary): readonly HumanResultItem[] {\n return [\n ...summary.results.map(freshHumanResult),\n ...summary.reusedAttempts.map(reusedHumanResult),\n ];\n}\nfunction buildResultsPanelRows(items: readonly HumanResultItem[]): PanelRow[] {\n const byExperiment = new Map<string, HumanResultItem[]>();\n for (const item of items) {\n const group = byExperiment.get(item.experimentId);\n if (group)\n group.push(item);\n else\n byExperiment.set(item.experimentId, [item]);\n }\n const groups = [...byExperiment.entries()];\n const rows: PanelRow[] = [];\n for (const [experimentId, members] of groups.slice(0, HUMAN_RESULTS_EXPERIMENT_CAP)) {\n rows.push({ kind: \"line\", text: experimentId });\n const byEval = new Map<string, HumanResultItem[]>();\n for (const member of members) {\n const evalGroup = byEval.get(member.evalId);\n if (evalGroup)\n evalGroup.push(member);\n else\n byEval.set(member.evalId, [member]);\n }\n for (const [evalId, attempts] of byEval) {\n if (attempts.some((attempt) => attempt.evaluationKind === \"score\")) {\n const complete = attempts.filter((attempt) => attempt.scoreState === \"complete\" && attempt.earned !== undefined);\n const partial = attempts.filter((attempt) => attempt.scoreState === \"partial\" && attempt.earned !== undefined);\n const reading = complete.length > 0\n ? `${complete.reduce((sum, attempt) => sum + attempt.earned!, 0) / complete.length} score · ${complete.length}/${attempts.length} complete`\n : partial.length > 0\n ? `≥${partial.map((attempt) => attempt.earned).join(\", ≥\")} score · partial`\n : \"score unavailable\";\n rows.push({ kind: \"line\", text: ` ${evalId} ${reading}` });\n }\n else {\n const passed = attempts.filter((attempt) => attempt.verdict === \"passed\").length;\n rows.push({ kind: \"line\", text: ` ${evalId} ${passed}/${attempts.length} passed` });\n }\n }\n }\n if (groups.length > HUMAN_RESULTS_EXPERIMENT_CAP) {\n rows.push({\n kind: \"line\",\n text: t(\"feedback.human.resultsMore\", { count: groups.length - HUMAN_RESULTS_EXPERIMENT_CAP }),\n });\n }\n return rows;\n}\nfunction buildPreAttemptErrorRows(results: readonly EvalResult[], runIdsByExperiment: ReadonlyMap<string, string>, panel: {\n mode: PanelMode;\n width: number;\n}): {\n readonly rows: PanelRow[];\n readonly slots: number;\n} | undefined {\n const errored = results.filter((result) => result.verdict === \"errored\" && result.locator === undefined && result.error !== undefined);\n if (errored.length === 0)\n return undefined;\n const groups = new Map<string, EvalResult[]>();\n for (const result of errored) {\n const error = result.error!;\n const runId = result.experimentId === undefined\n ? undefined\n : runIdsByExperiment.get(result.experimentId);\n // Run timing node IDs are local identities. The same `n1` in another Run\n // names a different physical failure and must not absorb its message.\n const failureId = error.origin.scope === \"run\"\n ? `${runId ?? result.experimentId ?? \"default\"}\\u0000${error.origin.timingNodeId}`\n : `${result.experimentId ?? \"default\"}\\u0000${error.code}:${error.message}`;\n const members = groups.get(failureId);\n if (members)\n members.push(result);\n else\n groups.set(failureId, [result]);\n }\n const rows: PanelRow[] = [];\n const contentWidth = panelContentWidth(panel.width, panel.mode);\n for (const members of groups.values()) {\n const representative = members[0]!;\n const error = representative.error!;\n rows.push({\n kind: \"line\",\n text: `${FAILURE_SYMBOL} ${representative.experimentId ?? \"default\"} · ${preAttemptErrorTitle(error.origin)}`,\n });\n rows.push({\n kind: \"line\",\n text: ` affected: ${members.map((member) => `${member.experimentId ?? \"default\"}/${member.id}`).join(\", \")}`,\n });\n rows.push(...labelledWrappedRows(\"error\", boundedHumanError(error.message), contentWidth));\n }\n return { rows, slots: errored.length };\n}\nfunction preAttemptErrorTitle(origin: TimingOrigin): string {\n if (origin.scope === \"run\")\n return \"Sandbox image build failed\";\n const phase = origin.phase;\n switch (phase) {\n case \"judge.precheck\": return \"Judge precheck failed\";\n case \"experiment.setup\": return \"Experiment setup failed\";\n case \"sandbox.queue\": return \"Sandbox queue failed\";\n case \"sandbox.create\": return \"Sandbox provisioning failed\";\n default: return `${phaseLabel(phase)} failed`;\n }\n}\nexport interface HumanRendererOptions {\n io: FeedbackIO;\n /** dashboard 首行的命令名(如 \"niceeval exp compare\");CLI 层按 argv 拼好传入 —— renderer\n * 不解析 argv,不重新发明「这次跑的是什么命令」。 */\n command: string;\n}\n/** 按 `io.stderr.isTTY` 派发:构造时选一次,运行期不再切换。 */\nexport function createHumanRenderer(options: HumanRendererOptions): FeedbackRenderer {\n const { io, command } = options;\n return io.stderr.isTTY ? createDashboardRenderer(io, command) : createPlainRenderer(io);\n}\n// ───────────────────────── 共享:永久事件 → 文本行(纯函数,两种模式同一份文案) ─────────────────────────\n/** 一条永久事件 → 待写入的整行文本(不含结尾换行,调用方统一 join(\"\\n\") + \"\\n\")。\n * 空数组表示这个事件类型在 human 下没有可见内容(目前没有这种情形,保留以防未来扩展)。\n * `panel` 是面板的传输能力(见 `panelCapabilityOf`)——只有面板体裁(plan/summary/receipt)\n * 消费它;流事件(failure/diagnostic/…)不画框,不需要这份能力。 */\nexport function renderDurableLines(event: DurableFeedbackEvent, state: RunFeedbackState, panel: {\n mode: PanelMode;\n width: number;\n}): string[] {\n switch (event.type) {\n case \"plan\":\n return buildPlanLines(event.plan, panel);\n case \"failure\": {\n // 立即追加也要遵守展开上限(见 cli.md「'立即追加'也必须有上限,防止失败风暴重新淹没\n // 输出」)。reducer 已经把这一条计入 state.failures(emit() 先 reduce 再入队),所以\n // freshFailureCount 就是「本次新发生且算上这一条」的累计数;plan 静态注入的复用失败\n // 不消耗流式上限。越过上限\n // 的第一条给一次 suppressed 提示(让人立刻知道开始折叠了);再往后的每一条都静默 ——\n // 不然「追加一次」会变成每条失败都重复一遍「还剩多少条」,完成页的 FAILURES 区块才是\n // 最终准确总数的权威来源。\n // 只服务非 TTY 退化流:TTY dashboard 的 appendDurable 对 \"failure\" 直接返回(不写\n // scrollback),这条投影只由下一帧的 live 面板 FAILURES 分节显现(见 cli.md「运行中的\n // live 面板」)。非 TTY 单流逐条追加同一份单行事实投影,预算固定 100(没有可依赖的\n // 终端宽度)。\n const count = state.freshFailureCount;\n if (count <= HUMAN_FAILURE_CAP)\n return [buildFailureFactLine(event, NON_TTY_FAILURE_LINE_MAX_CHARS)];\n if (count === HUMAN_FAILURE_CAP + 1) {\n return [t(\"feedback.human.suppressedFailures\", { count: 1 })];\n }\n return [];\n }\n case \"diagnostic\":\n return buildDiagnosticLines(event, state);\n case \"budget-exhausted\":\n return [\n `! ${t(\"feedback.human.budgetExhausted\", {\n experimentId: event.experimentId,\n spent: event.spent.toFixed(2),\n unstarted: event.unstarted,\n })}`,\n ];\n case \"interrupted\":\n return [t(\"runner.interrupted\").trimEnd()];\n case \"reporter-error\":\n return [t(\"runner.reporterDiagnostic\", { stage: event.reporter, message: event.message }).trimEnd()];\n case \"kept\":\n // 留存授予单条不即时打印;run 摘要后由 buildSummaryLines 汇总成 Kept sandboxes 块\n // (见 docs/feature/sandbox/cli.md「run 收尾输出」)。\n return [];\n case \"experiment-hook\": {\n // 只服务非 TTY 退化流(TTY dashboard 的 appendDurable 对这个事件直接返回,运行级行\n // 由 state.experimentHooks 驱动,成功钩子不进 scrollback,见 cli.md「实验级 Hook 的显示」)。\n const label = experimentHookLabel(event.hook);\n const duration = event.durationMs !== undefined ? ` (${formatElapsed(event.durationMs)})` : \"\";\n const recoverySuffix = event.recovery ? ` (recovery)` : \"\";\n if (event.status === \"started\")\n return [`${label} · ${event.experimentId}${recoverySuffix}`];\n const statusWord = event.status === \"done\" ? t(\"feedback.human.hookDone\") : t(\"feedback.human.hookFailed\");\n return [`${label} ${statusWord} · ${event.experimentId}${duration}`];\n }\n case \"precheck\": {\n // 只服务非 TTY 退化流(TTY dashboard 的 appendDurable 对这个事件直接返回,运行级行\n // 由 state.activePrecheck 驱动,不进 scrollback,见 cli.md「judge 预检的显示」)。\n if (event.status === \"started\")\n return [t(\"feedback.human.precheckJudge\")];\n const duration = event.durationMs !== undefined ? ` (${formatElapsed(event.durationMs)})` : \"\";\n // failed 只说预检本身的结局:受影响 eval 逐条的 errored 由随后的 failure 事件解释,\n // 这行不重复它们(见 cli.md「判分预检的显示」)。\n const word = event.status === \"done\" ? t(\"feedback.human.precheckJudgeDone\") : t(\"feedback.human.precheckJudgeFailed\");\n return [`${word}${duration}`];\n }\n case \"lock-wait\": {\n // 只服务非 TTY 退化流(TTY dashboard 的 appendDurable 对这个事件直接返回,运行级行由\n // state.lockWaits 驱动,不进 scrollback,见 cli.md「等待并发 run 的显示」)。按实验聚合\n // ——同一实验可能有多个用例先后撞锁,只在这个「有等待用例」窗口第一次打开(这是当前\n // 唯一一条等待中的用例)与最后一次关闭(等待全部解决)各打印一行,中途加入/解决的用例\n // 不逐条刷屏,与诊断按 dedupeKey 折叠同一种克制(state 已经是这条事件 reduce 之后的\n // 快照,size 天然反映\"这条事件之后\"的计数)。\n const agg = state.lockWaits.get(event.experimentId);\n if (event.status === \"started\") {\n if (!agg || agg.waiting.size !== 1)\n return []; // 不是这个窗口的第一条,静默\n const holder = agg.waiting.get(event.evalId);\n return [\n t(\"feedback.human.lockWaitStarted\", {\n experimentId: event.experimentId,\n count: agg.waiting.size,\n pid: holder?.holderPid ?? \"?\",\n }),\n ];\n }\n if (!agg || agg.waiting.size !== 0)\n return []; // 窗口还没关闭,静默\n const parts: string[] = [];\n if (agg.resolvedCarried > 0)\n parts.push(t(\"feedback.human.lockWaitCarried\", { count: agg.resolvedCarried }));\n if (agg.resolvedDispatched > 0) {\n parts.push(t(\"feedback.human.lockWaitDispatched\", { count: agg.resolvedDispatched }));\n }\n const summary = parts.length > 0 ? parts.join(\" · \") : t(\"feedback.human.lockWaitCarried\", { count: 0 });\n return [\n t(\"feedback.human.lockWaitResolved\", {\n experimentId: event.experimentId,\n summary,\n elapsed: formatElapsed(event.waitedMs ?? 0),\n }),\n ];\n }\n case \"run-activity\": {\n // 只服务非 TTY 退化流(TTY dashboard 由 state.runActivities 驱动运行级行)。\n // 人读文本用 producer 的 label,不查 LifecyclePhase 锚点表;未知 key 同样通用投影。\n const duration = event.durationMs !== undefined ? ` (${formatElapsed(event.durationMs)})` : \"\";\n if (event.status === \"started\")\n return [event.label];\n const statusWord = event.status === \"done\" ? t(\"feedback.human.hookDone\") : t(\"feedback.human.hookFailed\");\n return [`${event.label} ${statusWord}${duration}`];\n }\n case \"summary\":\n return buildSummaryLines(event, state, panel);\n case \"receipt\":\n return buildReceiptLines(event, state, panel);\n default: {\n // 穷尽性检查:新增 DurableFeedbackEvent 变体时这里编译期报错提醒补上对应分支。\n const exhaustive: never = event;\n return exhaustive;\n }\n }\n}\n/**\n * 把一条永久事件的渲染行写到正确的流(见 docs/feature/experiments/cli.md「输出流和落盘节奏」\n * 的流边界表)。TTY 与非 TTY 两个变体在这里分岔,共用同一份「事件 → 文本行」的纯函数:\n *\n * - TTY(`allStdout: false`):`stdout` 只留给\"最终摘要与 Run 指引\"(\"summary\"/\"receipt\" 两个\n * 事件);计划、失败、诊断等其它永久事件与 live 面板本身都在 `stderr`。\n * - 非 TTY(`allStdout: true`):从 start 到结束摘要是单一有序的 `stdout` 追加流,`stderr` 只留\n * 给启动期用法/配置错误——两个 OS stream 被 CI runner 或 agent 工具层分开缓冲时会打乱顺序,\n * 单流才能保证事件序就是发生序(见 memory/exp-output-two-forms-ruling.md 的补充裁决)。\n */\nfunction writeDurable(io: FeedbackIO, event: DurableFeedbackEvent, state: RunFeedbackState, allStdout: boolean): void {\n const lines = renderDurableLines(event, state, panelCapabilityForFeedback(io));\n if (lines.length === 0)\n return;\n const text = `${lines.join(\"\\n\")}\\n`;\n if (allStdout || event.type === \"summary\" || event.type === \"receipt\")\n io.stdout.write(text);\n else\n io.stderr.write(text);\n}\n/** `PLAN` 面板(docs/feature/experiments/cli.md「运行中的 live 面板」):规模一行 + 复用一行\n * (全新派发时省略),经 panel.ts 画框——面板体裁全仓只有一个渲染件,这里不手拼 `╭─`。 */\nfunction buildPlanLines(plan: RunFeedbackPlan, panel: {\n mode: PanelMode;\n width: number;\n}): string[] {\n // 实验闸让声明了 maxConcurrency 的实验的有效宽度小于全局值:只印全局值会被读成\n // 「这批要开 19 路」。逐个附注在全局值之后(`concurrency 19 · mempal ≤1 · nowledge ≤4`),\n // 未声明的实验不列(见 docs/feature/experiments/cli.md「运行中的 live 面板」)。\n const experimentConcurrency = Object.entries(plan.experimentConcurrency ?? {});\n const concurrencyNotes = experimentConcurrency\n .map(([experimentId, limit]) => t(\"feedback.human.planExperimentConcurrency\", { experimentId, limit }))\n .join(\" · \");\n const rows: PanelRow[] = [\n {\n kind: \"line\",\n text: t(\"feedback.human.plan\", {\n total: plan.shape.totalAttempts,\n evals: plan.shape.evals,\n configs: plan.shape.configs,\n concurrency: plan.shape.maxConcurrency,\n }) + (concurrencyNotes ? ` · ${concurrencyNotes}` : \"\"),\n },\n ];\n if (plan.reused > 0) {\n rows.push({\n kind: \"line\",\n text: t(\"feedback.human.reuse\", {\n reused: plan.reused,\n total: plan.shape.totalAttempts,\n toRun: Math.max(0, plan.shape.totalAttempts - plan.reused),\n }),\n });\n }\n return renderPanel({ title: t(\"feedback.human.planHeader\"), rows, width: panel.width, mode: panel.mode });\n}\n/** 失败/errored 的最小事实面:TTY live 面板 FAILURES 分节、非 TTY 追加流与结束 FAILURES 面板\n * 的 size=1 组三处共用同一个形状,不各自重复摘一遍字段。 */\ninterface FailureFact {\n readonly locator: string;\n readonly identity: AttemptRef;\n readonly who: string;\n readonly verdict: \"failed\" | \"errored\";\n readonly reason: string;\n readonly fact?: PrimaryFactSummary;\n readonly phase?: LifecyclePhase;\n readonly code?: string;\n}\n/** exp 失败/errored 单行事实行与 FAILURES 面板组行的行首符号:`failed`/`errored` 两种 verdict\n * 都用 `✗`(见 cli.md 全部失败行示例,含 errored)——不复用报告表通用的 `verdictSymbol()`,\n * 那张表把 `errored` 记成 `!`,是留给诊断/警告行的符号,混进失败行会和诊断行的行首混淆。 */\nconst FAILURE_SYMBOL = \"✗\";\n/**\n * 一条失败/errored 的单行事实投影(cli.md「框线体裁」:`✗ @<locator> <evalId> [<who>]\n * <单行压缩摘要>`)。TTY live 面板 FAILURES 分节与非 TTY 追加流共用这一份,唯一的差别是\n * `maxWidth`:TTY 按当帧面板内容宽传入,非 TTY 固定 100(见\n * docs/feature/assertions/library/display.md「一条摘要怎样排版」)。\n */\nfunction buildFailureFactLine(failure: FailureFact, maxWidth: number): string {\n const prefix = `${FAILURE_SYMBOL} ${failure.locator} ${failure.identity.evalId} [${failure.who}] `;\n const budget = Math.max(0, maxWidth - stringWidth(prefix));\n const info = failure.fact\n ? fitCompactAssertionSummary(failure.fact, budget)\n : `error: ${boundedHumanError(failure.reason)}`;\n return prefix + clipDisplayWidth(info, budget);\n}\n/** 按显示列硬夹紧,超宽尾部截断补 `…`。`fitCompactAssertionSummary` 的截断口径是字符数,不是\n * 显示列(见该函数注释「显示宽度的精确裁剪仍归渲染面」);这里补上那道显示宽度的硬夹紧,\n * 堵住 CJK 内容\"按字符数收口仍超显示列\"的缝,保证渲染行恒不超过预算。 */\nfunction clipDisplayWidth(text: string, maxWidth: number): string {\n if (maxWidth <= 0)\n return \"\";\n if (stringWidth(text) <= maxWidth)\n return text;\n if (maxWidth === 1)\n return \"…\";\n let out = \"\";\n let width = 0;\n for (const ch of text) {\n const w = charDisplayWidth(ch.codePointAt(0)!);\n if (width + w > maxWidth - 1)\n break;\n out += ch;\n width += w;\n }\n return `${out}…`;\n}\nfunction buildDiagnosticLines(event: DurableFeedbackEvent & {\n type: \"diagnostic\";\n}, state: RunFeedbackState): string[] {\n // count 从 state.diagnostics 读(reducer 已经按 key 去重累加),不在这里自己维护第二份计数。\n // 人读运行中流对每个 code 至多完整打印一次(见 cli.md「什么动态更新,什么逐条追加」):\n // 第一条给标题与 message 两行,同 code 的后续条目(哪怕 dedupeKey 不同)一律静默 ——\n // 跨用例撞上同一类状况时,读者需要的是「这类事发生了 N 次」,不是 N 段几乎相同的文字;\n // 逐 code 的次数与首条 message 由结束反馈的 WARNINGS / RECOVERY 面板汇总。\n const code = event.code ?? event.key;\n // Judge precheck already has a live lifecycle row and a terminal pre-Attempt\n // error block. Repeating its machine code in Human output adds no fact and\n // exposes machine vocabulary in the default profile.\n if (code === \"judge-precheck-failed\")\n return [];\n const firstForCode = state.diagnostics.find((d) => (d.code ?? d.key) === code);\n const count = state.diagnostics.find((d) => d.key === event.key)?.count ?? 1;\n if (count > 1 || firstForCode?.key !== event.key)\n return [];\n const sym = event.severity === \"error\" ? \"✗\" : event.severity === \"warning\" ? \"!\" : \"i\";\n if (event.code === HALT_DIAGNOSTIC_CODE) {\n // 止损闸落闸:一行 error 级通知,文案已经是完整的一句话(`experiment halted\n // (dispatch-halted): <message>` / `eval halted: <message>`,见 docs/feature/\n // error-classification/architecture.md「观察面」),不再加标题行。\n return [`${sym} ${event.message}`];\n }\n // 标题用稳定词法(`code`),不是把折叠身份一起编进去的去重 key —— 人读的一行要能一眼认出\n // 「这是哪一类诊断」,`compare/codex|memory/x` 那串身份属于 message 与机器面的具名字段。\n // 阶段标签走与 buildFailureFactLine 不同的投影:诊断标题用人读短语 `phaseLabel()`(散文),\n // 失败行的 errored 信息段用未翻译的原始 LifecyclePhase 字面量(对照机器面)——两者故意不同。\n // attempt 级诊断的 phase 由运行器写进 `data`(见 attempt.ts 的 recordDiagnostic);运行级诊断\n // (止损闸、协调恢复、budget)不属于任何单条 attempt,天然没有 phase,标题退化成只有 code 一段。\n const phase = typeof event.data?.phase === \"string\" ? (event.data.phase as LifecyclePhase) : undefined;\n const heading = phase !== undefined ? `${phaseLabel(phase)} · ${code}` : code;\n return [`${sym} ${heading}`, ` ${event.message}`];\n}\n/** 结束结论(`FAILED`/`PASSED`/…)+ `FAILURES`(有失败才出现)+ `KEPT SANDBOXES`(有留存才\n * 出现)——三个各自独立的面板,用空行分隔(docs/feature/experiments/cli.md「人看的结束反馈」、\n * docs/feature/sandbox/cli.md「run 收尾输出」)。`NEXT` 面板不在这里:它要等 `receipt` 事件\n * 的真实 Run ID,见 `buildReceiptLines`。 */\nfunction buildSummaryLines(event: DurableFeedbackEvent & {\n type: \"summary\";\n}, state: RunFeedbackState, panel: {\n mode: PanelMode;\n width: number;\n}): string[] {\n const { summary, completion } = event;\n const fullReuse = state.total > 0 && state.total === state.reused;\n const resultItems = humanResultItems(summary);\n const hasScore = resultItems.some((item) => item.evaluationKind === \"score\");\n const hasPass = resultItems.some((item) => item.evaluationKind === \"pass\");\n const scored = resultItems.filter((item) => item.evaluationKind === \"score\" && item.scoreState === \"complete\").length;\n // required reporter(显式 --junit)写失败必须让这行判红——它不是\n // CompletionStatus 的第四个值(那个枚举只有 complete/incomplete/interrupted 三态),但必须\n // 避免人看到一句会被误读成\"全绿\"的 PASSED、进程却以非零退出。\n const verdictWord = completion.status === \"interrupted\"\n ? t(\"feedback.human.resultInterrupted\")\n : summary.errored > 0\n ? t(\"feedback.human.resultErrored\")\n : completion.status === \"incomplete\"\n ? t(\"feedback.human.resultIncomplete\")\n : completion.reporterErrors.some((e) => e.required)\n ? t(\"feedback.human.resultFailed\")\n : hasScore && !hasPass\n ? t(\"feedback.human.resultScored\")\n : hasScore && hasPass\n ? summary.failed > 0\n ? t(\"feedback.human.resultFailed\")\n : t(\"feedback.human.resultCompleted\")\n : summary.failed > 0\n ? t(\"feedback.human.resultFailed\")\n : t(\"feedback.human.resultPassed\");\n const summaryRows: PanelRow[] = [\n {\n kind: \"line\",\n text: hasScore && !hasPass\n ? t(\"feedback.human.scoreSummaryLine\", {\n scored,\n skipped: summary.skipped,\n errored: summary.errored,\n reused: state.reused,\n })\n : t(completion.unstarted > 0\n ? \"feedback.human.summaryIncompleteLine\"\n : fullReuse\n ? \"feedback.human.summaryAllReusedLine\"\n : \"feedback.human.summaryLine\", {\n passed: summary.passed,\n failed: summary.failed,\n errored: summary.errored,\n unstarted: completion.unstarted,\n reused: state.reused,\n }),\n },\n { kind: \"line\", text: formatSummaryCostLine(state) },\n ];\n const blocks: string[][] = [\n renderPanel({ title: verdictWord, meta: formatElapsed(summary.durationMs), rows: summaryRows, width: panel.width, mode: panel.mode }),\n ];\n if (resultItems.length > 0) {\n blocks.push(renderPanel({\n title: t(\"feedback.human.resultsHeader\"),\n meta: `${new Set(resultItems.map((item) => item.experimentId)).size} configs`,\n rows: buildResultsPanelRows(resultItems),\n width: panel.width,\n mode: panel.mode,\n }));\n }\n const preAttemptErrors = buildPreAttemptErrorRows(summary.results, state.runIdsByExperiment, panel);\n if (preAttemptErrors !== undefined) {\n blocks.push(renderPanel({\n title: t(\"feedback.human.errorsHeader\"),\n meta: `${preAttemptErrors.slots} attempt${preAttemptErrors.slots === 1 ? \"\" : \"s\"} not started`,\n rows: preAttemptErrors.rows,\n width: panel.width,\n mode: panel.mode,\n }));\n }\n // 全通过时(state.failures 为空)不留空 FAILURES 面板。fresh 失败来自 durable event,carry\n // 失败由 plan 静态注入;reducer 把两者按 locator 收进同一清单,这里不从 InvocationSummary 再造 ——\n // 整套结果集(含携入)都要出现在这里,不只是本次派发的那部分(见 cli.md「计数口径…」)。\n if (state.failures.length > 0) {\n const { rows: failureRows, meta } = buildFailuresPanelRows(state.failures, panel);\n blocks.push(renderPanel({ title: t(\"feedback.human.failuresHeader\"), meta, rows: failureRows, width: panel.width, mode: panel.mode }));\n }\n // 留存授予块(--keep-sandbox,见 docs/feature/sandbox/cli.md「run 收尾输出」):\n // 每条给 locator(接 niceeval show)、provider 与实例 id、进入现场的命令,下边框嵌批量清理。\n if (state.kept.length > 0) {\n const keptRows: PanelRow[] = [];\n for (const k of state.kept) {\n keptRows.push({\n kind: \"line\",\n text: `${k.locator} ${k.identity.evalId} #${k.identity.attempt} ${k.verdict} ${k.provider} · ${k.sandboxId}`,\n });\n keptRows.push({\n kind: \"line\",\n text: `${\" \".repeat(stringWidth(k.locator) + 2)}enter: niceeval sandbox enter ${k.sandboxId.slice(0, 12)}`,\n });\n }\n blocks.push(renderPanel({\n title: t(\"feedback.human.keptSandboxesHeader\"),\n meta: `${state.kept.length} kept`,\n footerCommand: \"niceeval sandbox stop --all\",\n rows: keptRows,\n width: panel.width,\n mode: panel.mode,\n }));\n }\n // `WARNINGS`(有诊断才出现,位于 FAILURES 与 NEXT 之间,见 cli.md「人看的结束反馈」):\n // 按 code 汇总本次去重后的诊断,运行中同 code 只完整打印过第一条,这里是「这类事一共\n // 发生了几次」的权威答案。\n const preAttemptCodes = new Set(summary.results.flatMap((result) => result.verdict === \"errored\" && result.locator === undefined && result.error !== undefined\n ? [result.error.code]\n : []));\n const warningsRows = buildWarningsPanelRows(state.diagnostics.filter((diagnostic) => diagnostic.severity !== \"error\" || !preAttemptCodes.has(diagnostic.code ?? diagnostic.key)));\n if (warningsRows) {\n blocks.push(renderPanel({ title: t(\"feedback.human.warningsHeader\"), rows: warningsRows, width: panel.width, mode: panel.mode }));\n }\n const recoveryRows = buildRecoveryPanelRows(state.diagnostics);\n if (recoveryRows) {\n blocks.push(renderPanel({ title: t(\"feedback.human.recoveryHeader\"), rows: recoveryRows, width: panel.width, mode: panel.mode }));\n }\n return blocks.flatMap((block, i) => (i === 0 ? block : [\"\", ...block]));\n}\n/**\n * `FAILURES` 面板的内容:未通过的 attempt 按失败形态分组(见 cli.md「人看的结束反馈」)。\n * `failed` 的组 key 是主失败断言的标题 + 检查方式,`errored`(没有主断言摘要的结构化执行错误)\n * 的组 key 是 `phase · code`;`received`/message 各条不同,不进 key 也不进组行。size > 1 的组\n * 只占一行(右对齐 `×N` + 形态摘要 + 组内首现的代表 locator);size = 1 的组展开成身份行 +\n * 悬挂的单行压缩摘要两行。组按条数降序,超过 `FAILURE_GROUPS_CAP` 收进尾行。\n */\nfunction buildFailuresPanelRows(failures: readonly FailureNotice[], panel: {\n mode: PanelMode;\n width: number;\n}): {\n rows: PanelRow[];\n meta: string;\n} {\n const groups = groupFailuresByShape(failures);\n const contentWidth = panelContentWidth(panel.width, panel.mode);\n let shownAssertionKinds = 0;\n const shown = groups.filter((group) => {\n if (group.representative.fact === undefined)\n return true;\n shownAssertionKinds += 1;\n return shownAssertionKinds <= FAILURE_GROUPS_CAP;\n });\n const omitted = groups.length - shown.length;\n const multi = shown.filter((g) => g.size > 1);\n const countWidth = Math.max(0, ...multi.map((g) => stringWidth(`${FAILURE_SYMBOL} ×${g.size}`)));\n const rows: PanelRow[] = [];\n for (const group of shown) {\n if (group.size === 1) {\n rows.push(...buildSingleFailureGroupRows(group.representative, contentWidth));\n }\n else {\n rows.push(buildMultiFailureGroupRow(group, countWidth));\n }\n }\n if (omitted > 0) {\n rows.push({\n kind: \"line\",\n text: t(\"feedback.human.moreFailureKinds\", { count: omitted }),\n });\n }\n return { rows, meta: t(\"feedback.human.failuresTotalKinds\", { total: failures.length, kinds: groups.length }) };\n}\n/** 一个失败形态组:同一 key 下的全部失败共享同一条 `shapeText`(已经剥掉 `received`/message\n * 这类逐条不同的字段),`representative` 是组内首现的那一条(给 `e.g. <locator>`)。 */\ninterface FailureShapeGroup {\n readonly key: string;\n readonly size: number;\n readonly representative: FailureNotice;\n readonly shapeText: string;\n}\nfunction groupFailuresByShape(failures: readonly FailureNotice[]): FailureShapeGroup[] {\n const groups = new Map<string, {\n size: number;\n representative: FailureNotice;\n shapeText: string;\n }>();\n for (const failure of failures) {\n const { key, shapeText } = failureShapeOf(failure);\n const existing = groups.get(key);\n if (existing) {\n groups.set(key, { ...existing, size: existing.size + 1 });\n }\n else {\n groups.set(key, { size: 1, representative: failure, shapeText });\n }\n }\n return [...groups.entries()]\n .map(([key, g]) => ({ key, ...g }))\n .sort((a, b) => b.size - a.size);\n}\n/** 断言按稳定形态聚合;execution error 的 key 包含 locator,确保不同 Attempt 不会因共享\n * phase/code 而吞掉各自的 Provider message。 */\nfunction failureShapeOf(failure: FailureNotice): {\n key: string;\n shapeText: string;\n} {\n if (failure.fact) {\n const shapeText = compactAssertionSummary({ ...failure.fact, received: undefined, additionalFailures: 0 });\n return { key: `fact\\u0000${failure.fact.title}\\u0000${failure.fact.matcher ?? \"\"}`, shapeText };\n }\n return { key: `errored\\u0000${failure.locator}`, shapeText: \"error\" };\n}\nfunction buildMultiFailureGroupRow(group: FailureShapeGroup, countWidth: number): PanelRow {\n const countToken = padStartDisplay(`${FAILURE_SYMBOL} ×${group.size}`, countWidth);\n return {\n kind: \"line\",\n text: `${countToken} ${group.shapeText} ${t(\"feedback.human.exampleLocator\", { locator: group.representative.locator })}`,\n };\n}\n/** size = 1 组的两行:身份行(`✗ @locator evalId [who]`)+ 悬挂到身份内容起始列的单行压缩\n * 摘要——与 `buildFailureFactLine` 共用同一套 info 组装逻辑,只是拆成两行而不是塞进一行。 */\nfunction buildSingleFailureGroupRows(failure: FailureNotice, contentWidth: number): PanelRow[] {\n const identityLine = `${FAILURE_SYMBOL} ${failure.locator} ${failure.identity.evalId} [${failure.who}]`;\n const indent = stringWidth(`${FAILURE_SYMBOL} `);\n const budget = Math.max(0, contentWidth - indent);\n const rows: PanelRow[] = [{ kind: \"line\", text: identityLine }];\n if (failure.fact) {\n rows.push({ kind: \"line\", text: `${\" \".repeat(indent)}${clipDisplayWidth(fitCompactAssertionSummary(failure.fact, budget), budget)}` });\n }\n else {\n rows.push(...labelledWrappedRows(\"error\", boundedHumanError(failure.reason), contentWidth));\n }\n rows.push(...labelledWrappedRows(\"details\", `niceeval show ${failure.locator}`, contentWidth));\n return rows;\n}\n/** `WARNINGS` 面板:`state.diagnostics` 已经按去重 key 折叠,这里再按对外稳定词法 `code` 二次\n * 聚合。info 由自己的完成面板消费;没有 warning/error 时返回 undefined。 */\nfunction buildWarningsPanelRows(diagnostics: readonly DiagnosticNotice[]): PanelRow[] | undefined {\n if (diagnostics.length === 0)\n return undefined;\n const byCode = new Map<string, {\n count: number;\n message: string;\n severity: \"warning\" | \"error\";\n }>();\n for (const d of diagnostics) {\n if (d.severity === \"info\")\n continue;\n const code = d.code ?? d.key;\n const existing = byCode.get(code);\n if (existing) {\n byCode.set(code, { ...existing, count: existing.count + d.count });\n }\n else {\n byCode.set(code, { count: d.count, message: d.message, severity: d.severity });\n }\n }\n const entries = [...byCode.entries()];\n if (entries.length === 0)\n return undefined;\n const labelWidth = Math.max(0, ...entries.map(([code, v]) => stringWidth(warningCodeLabel(code, v.count))));\n return entries.map(([code, v]) => ({\n kind: \"line\",\n text: `${v.severity === \"error\" ? \"✗\" : \"!\"} ${padDisplay(warningCodeLabel(code, v.count), labelWidth)} ${v.message}`,\n }));\n}\nfunction buildRecoveryPanelRows(diagnostics: readonly DiagnosticNotice[]): PanelRow[] | undefined {\n let locks = 0;\n for (const d of diagnostics) {\n if (d.severity !== \"info\" || d.code !== COORDINATION_RECOVERED_CODE)\n continue;\n if (d.data?.resource === \"case-lock\")\n locks += d.count;\n }\n if (locks === 0)\n return undefined;\n const summary = pluralUnit(locks, \"feedback.human.unit.caseLock\", \"feedback.human.unit.caseLocks\");\n return [{ kind: \"line\", text: `i ${COORDINATION_RECOVERED_CODE} ${summary}` }];\n}\nfunction warningCodeLabel(code: string, count: number): string {\n return count > 1 ? `${code} ×${count}` : code;\n}\n/** `NEXT` 面板只由 receipt 的真实 Run ID 给出 Record 读取命令。 */\nfunction buildReceiptLines(event: DurableFeedbackEvent & {\n type: \"receipt\";\n}, state: RunFeedbackState, panel: {\n mode: PanelMode;\n width: number;\n}): string[] {\n const rows: PanelRow[] = [];\n const published = new Set(event.receipt.runIds);\n const emitted = new Set<string>();\n for (const [experimentId, runId] of state.runIdsByExperiment) {\n if (!published.has(runId))\n continue;\n rows.push({ kind: \"line\", text: experimentId });\n rows.push(...labelledWrappedRows(\"details\", `niceeval show --run ${runId}`, panelContentWidth(panel.width, panel.mode)));\n emitted.add(runId);\n }\n for (const runId of event.receipt.runIds) {\n if (!emitted.has(runId))\n rows.push({ kind: \"line\", text: `details: niceeval show --run ${runId}` });\n }\n if (rows.length === 0) {\n rows.push({ kind: \"line\", text: \"No published Record Runs are available for this invocation.\" });\n }\n return renderPanel({ title: t(\"feedback.human.nextHeader\"), rows, width: panel.width, mode: panel.mode });\n}\nfunction boundedHumanError(message: string): string {\n const safe = stripControl(message).replace(/\\s+/gu, \" \").trim();\n const signalIndexes = [\n safe.search(/\\b[1-5]\\d{2}\\s+[A-Z][A-Za-z -]{2,40}(?:\\s+[—·:-]\\s+[A-Z][A-Z0-9_-]+)?/u),\n safe.search(/\\b[A-Z][A-Z0-9]+(?:_[A-Z0-9]+){1,}\\b/u),\n ].filter((index) => index >= 0);\n // Wrappers often prepend a long command or transport path before the\n // Provider's safe status/code. Focus the Human budget at that first stable\n // signal; the full structured error remains available through details.\n const focused = signalIndexes.length === 0 ? safe : safe.slice(Math.min(...signalIndexes));\n if (utf8Bytes(focused) <= HUMAN_ERROR_TEXT_MAX_BYTES)\n return focused;\n const separator = \" … \";\n const available = HUMAN_ERROR_TEXT_MAX_BYTES - utf8Bytes(separator);\n const head = Math.ceil(available / 2);\n const tail = available - head;\n return `${utf8Prefix(focused, head)}${separator}${utf8Suffix(focused, tail)}`;\n}\nfunction utf8Bytes(value: string): number {\n return new TextEncoder().encode(value).byteLength;\n}\nfunction utf8Prefix(value: string, maximumBytes: number): string {\n let bytes = 0;\n let result = \"\";\n for (const character of value) {\n const nextBytes = utf8Bytes(character);\n if (bytes + nextBytes > maximumBytes)\n break;\n result += character;\n bytes += nextBytes;\n }\n return result;\n}\nfunction utf8Suffix(value: string, maximumBytes: number): string {\n let bytes = 0;\n const result: string[] = [];\n const characters = Array.from(value);\n for (let index = characters.length - 1; index >= 0; index -= 1) {\n const character = characters[index]!;\n const nextBytes = utf8Bytes(character);\n if (bytes + nextBytes > maximumBytes)\n break;\n result.push(character);\n bytes += nextBytes;\n }\n return result.reverse().join(\"\");\n}\nfunction labelledWrappedRows(label: string, text: string, contentWidth: number): PanelRow[] {\n const prefix = ` ${label}: `;\n const continuation = \" \".repeat(stringWidth(prefix));\n const lines = wrapDisplay(text, Math.max(4, contentWidth - stringWidth(prefix)));\n return lines.map((line, index) => ({\n kind: \"line\" as const,\n text: `${index === 0 ? prefix : continuation}${line}`,\n }));\n}\n/** estimated cost 展示:金额前加 `~`,明确是价目表估算(observed 只留在 result.usage.costUSD)。 */\nfunction formatEstimatedCost(value: number | undefined): string {\n const cost = formatCost(value);\n return cost === \"—\" ? cost : `~${cost}`;\n}\n/** tok/cost 一行(不含时长——时长已经嵌在面板上边框右侧的 meta 里,不在正文里重复一遍)。 */\nfunction formatSummaryCostLine(state: RunFeedbackState): string {\n const fullReuse = state.total > 0 && state.total === state.reused;\n if (fullReuse)\n return \"0 new tok · $0.00\";\n const parts: string[] = [];\n if (state.newTokenCount !== undefined)\n parts.push(`${formatTokenCount(state.newTokenCount)} new tok`);\n const cost = formatEstimatedCost(state.estimatedCostUSD);\n if (cost !== \"—\")\n parts.push(cost);\n return parts.join(\" · \");\n}\n// ───────────────────────── 共享:纯格式化 helper ─────────────────────────\n/** \"2m 14s\" / \"54s\" 风格,匹配 cli.md 全部 dashboard/完成页示例;`shared/format.ts` 的\n * `formatDuration` 是 \"2.3m\"/\"120ms\" 风格,服务的是 view/表格场景,不是这里要的格式。 */\nexport function formatElapsed(ms: number): string {\n const totalS = Math.max(0, Math.floor(ms / 1000));\n const m = Math.floor(totalS / 60);\n const s = totalS % 60;\n return m > 0 ? `${m}m ${s}s` : `${s}s`;\n}\n/** \"1.2M tok\" / \"3.4k\" 风格;`table.ts` 的 `formatTokens` 只到 k 档,凑不出 cli.md 完成页\n * 示例里的 \"1.2M tok\"。 */\nexport function formatTokenCount(n: number): string {\n if (n >= 1000000)\n return `${(n / 1000000).toFixed(1)}M`;\n if (n >= 1000)\n return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n/** LifecyclePhase → Human 展示列的人读投影(见 docs/feature/experiments/cli.md「Attempt 阶段」);\n * 机器面(json 的 `phase=` 与落盘)保留精确的点分名,收尾段在 Human 侧合并显示为一档。 */\nfunction phaseLabel(phase: LifecyclePhase): string {\n switch (phase) {\n // 运行级 / 实验级三员不会作为 ActiveAttempt.phase 出现(它们跑的时候没有活跃 attempt),\n // 这里只服务 failure 行的 phase 标注(judge 预检失败、experiment.setup 失败这两类派发前\n // 确定性失败合成的 errored 结果)。\n case \"judge.precheck\":\n return t(\"feedback.phase.judgePrecheck\");\n case \"experiment.setup\":\n return t(\"feedback.phase.experimentSetup\");\n case \"experiment.teardown\":\n return t(\"feedback.phase.teardown\");\n case \"sandbox.queue\":\n return t(\"feedback.phase.sandboxQueue\");\n case \"sandbox.create\":\n return t(\"feedback.phase.sandboxCreate\");\n case \"sandbox.prepare\":\n case \"sandbox.prepare.eval\":\n case \"sandbox.prepare.group\":\n case \"sandbox.prepare.experiment\":\n return t(\"feedback.phase.sandboxPrepare\");\n case \"agent.ensure\":\n return t(\"feedback.phase.agentEnsure\");\n case \"workspace.baseline\":\n return t(\"feedback.phase.workspaceBaseline\");\n case \"agent.setup\":\n return t(\"feedback.phase.agentSetup\");\n case \"telemetry.configure\":\n return t(\"feedback.phase.telemetryConfigure\");\n case \"eval.run\":\n case \"agent.run\": // 嵌套成员:Human 展示不切换顶层阶段\n return t(\"feedback.phase.evalRun\");\n case \"workspace.diff\":\n return t(\"feedback.phase.workspaceDiff\");\n case \"assertions.evaluate\":\n return t(\"feedback.phase.assertions\");\n case \"telemetry.collect\":\n return t(\"feedback.phase.telemetryCollect\");\n case \"agent.teardown\":\n case \"sandbox.cleanup\":\n case \"sandbox.suspend\":\n case \"sandbox.stop\":\n return t(\"feedback.phase.teardown\");\n default: {\n const exhaustive: never = phase;\n return exhaustive;\n }\n }\n}\n/** 实验级钩子的运行级行标签。`phaseLabel` 把 `experiment.teardown` 与其它收尾段合并成\n * 「cleaning up」一档(那是 attempt failure 行的语境);运行级行没有 attempt 语境,必须\n * 自报家门是哪个实验级钩子,所以这里用独立的两个词。 */\nfunction experimentHookLabel(hook: ExperimentHookName): string {\n return hook === \"setup\" ? t(\"feedback.phase.experimentSetup\") : t(\"feedback.phase.experimentTeardown\");\n}\n/** 首行守恒计数的文案(见 cli.md「运行中的 live 面板」)。四项结局恒显示、零值不省略——\n * 「0 errored」是一句有价值的肯定;`elsewhere` 只在非零时出现,没有并发 run 的场景少一项。\n * 行长不是压缩它的理由:首行跟随终端全宽,九项写满仍是一行。两个调用点(live dashboard\n * 首行、非 TTY heartbeat)共用这一份,不各自维护一份键选择逻辑。 */\nfunction countsText(state: RunFeedbackState): string {\n const outcomes = {\n passed: state.passed,\n failed: state.failed,\n errored: state.errored,\n skipped: state.skipped,\n };\n return state.elsewhere > 0\n ? t(\"feedback.human.countsWithElsewhere\", {\n total: state.total,\n reused: state.reused,\n running: state.running,\n elsewhere: state.elsewhere,\n queued: state.queued,\n ...outcomes,\n })\n : t(\"feedback.human.counts\", {\n total: state.total,\n reused: state.reused,\n running: state.running,\n queued: state.queued,\n ...outcomes,\n });\n}\nfunction formatCounts(state: RunFeedbackState): string {\n const counts = countsText(state);\n if (state.estimatedCostUSD === undefined || state.estimatedCostUSD <= 0)\n return counts;\n return `${counts} ${formatEstimatedCost(state.estimatedCostUSD)}`;\n}\n/** 定宽格式化:内容按 `width` 左对齐补空格对齐后面的列;超宽时尾部截断补 `…`(cli.md\n * 「active 行的列序」:身份列「超宽截尾补 `…`」),不是硬切丢字符。`width <= 0` 退化为空串。 */\nfunction padTrunc(s: string, width: number): string {\n if (width <= 0)\n return \"\";\n if (s.length <= width)\n return s.padEnd(width);\n if (width === 1)\n return \"…\";\n return `${s.slice(0, width - 1)}…`;\n}\n// ───────────────────────── TTY:动态 dashboard ─────────────────────────\nfunction createDashboardRenderer(io: FeedbackIO, command: string): FeedbackRenderer {\n // active slot 的稳定顺序:只在这里追加/删除(attempt:start 追加到末尾,\n // attempt:complete/early-exit 删除),phase/detail 变化不改变顺序或成员 ——\n // 可见 attempt 完成前不会因为别的 attempt 更新而换位(checklist「active slots 稳定」)。\n const activeOrder: AttemptKey[] = [];\n // 上一帧写了多少行(供 \\x1B[nA 回跳)与上一帧的完整文本(供「同帧不写」判断)。\n let linesDrawn = 0;\n let lastFrameText: string | undefined;\n // 身份两列(evalId/who)本次运行里\"实际出现过的最长值\"宽度——跨帧单调只放宽不回缩\n // (cli.md「active 行的列序」),存在这个闭包里而不是每次从当前行现算,完成的 attempt\n // 让出 slot 后也不应该让列宽跟着变窄。渲染时还要叠加当帧内容宽算出的封顶(见\n // identityColumnWidths)——封顶随终端 resize 每帧重新从 contentWidth 推导,这里的\n // 「见过的最长值」本身不因为封顶变严就被吃掉,分辨率更宽的下一帧仍能用得上。\n let maxEvalIdWidth = 0;\n let maxWhoWidth = 0;\n /** 身份两列本帧的渲染宽度:观测到的最长值与本帧内容宽算出的 40% / 20% 封顶取较小值。 */\n function identityColumnWidths(contentWidth: number): {\n evalWidth: number;\n whoWidth: number;\n } {\n const evalCap = Math.floor(contentWidth * 0.4);\n const whoCap = Math.floor(contentWidth * 0.2);\n return { evalWidth: Math.min(maxEvalIdWidth, evalCap), whoWidth: Math.min(maxWhoWidth, whoCap) };\n }\n /** 上边框标题 = 本次命令、meta = 已运行时长;下边框 footerCommand = 本次新派发的累计估算成本\n * (docs/feature/experiments/cli.md「运行中的 live 面板」)。ACTIVE 是嵌套 Section 的\n * 同构体裁——一条贯穿框宽的横隔,不是独立的框;非 boxed(非 TTY 或 NO_COLOR)时\n * panel.ts 自动降级成无框文本,dashboard 的覆盖重画机制不因此改变,只是重画的内容\n * 换成了无框版本。 */\n function buildFrameLines(state: RunFeedbackState): string[] {\n // 全量复用没有 active attempt,也没有“本次执行中”状态;plan/reuse 与终局摘要已经完整,\n // 不画一块只有 0 running 的 dashboard。\n if (state.total > 0 && state.total === state.reused)\n return [];\n const capability = panelCapabilityForFeedback(io);\n // live 面板豁免 100 列上限、跟随终端全宽(cli.md「框线体裁」);contentWidth 与下面\n // renderPanel 的 width/capWidth 必须传同一份豁免声明,否则行按这里的宽度排版、框却在\n // renderPanel 内部按另一个宽度钳制,行尾会被框吃掉——这正是 memory/\n // live-dashboard-active-row-width-clamp-mismatch.md 的根因类别。\n const contentWidth = panelContentWidth(capability.width, capability.mode, false);\n const rows: PanelRow[] = [{ kind: \"line\", text: countsText(state) }];\n // FAILURES 分节(cli.md「运行中的 live 面板」):插在 counts 行与 ACTIVE 横隔之间,滚动\n // 保留最近 LIVE_FAILURES_VISIBLE 条本次新发生的失败——state.failures 是「carry(plan 静态\n // 注入)+ fresh(本次事件追加)」按发生序拼起来的同一份清单,fresh 段恒是尾部\n // freshFailureCount 条(carry 只在 \"plan\" 时一次性写入、之后只追加,不重排),因此按长度\n // 切片就能拿到\"本次新发生的失败\",不需要给 FailureNotice 再加一个 origin 标记。横隔 meta\n // 用累计数(如 `12 so far`),不是\"这一帧展示了几条\"。\n const freshFailures = state.failures.slice(Math.max(0, state.failures.length - state.freshFailureCount));\n const maxFailureRows = Math.min(LIVE_FAILURES_VISIBLE, freshFailures.length);\n // 运行级行(judge 预检 + Run activity + 实验钩子 + 用例锁等待)排在 attempt 行前面:\n // 它们解释了为什么后面的 attempt 还停在 queued。预检排最前(发生在任何 attempt 派发\n // 之前),其次共享准备(sandbox.build 等),再是实验钩子,再是锁等待。Map 按插入序迭代,\n // 天然满足稳定 slot。Run activity 不占 attempt active 位。\n const precheck = state.activePrecheck;\n const runActivityRows = [...state.runActivities.values()];\n const hookRows = [...state.experimentHooks.values()];\n // 只有仍在等待(waiting 非空)的实验才占运行级行;窗口已关闭(全部 resolved)的条目只是\n // 给非 TTY 聚合收尾行留的历史计数,TTY 不展示。\n const lockWaitRows = [...state.lockWaits.values()].filter((w) => w.waiting.size > 0);\n // 矮终端先减 ACTIVE 可见项,再减 FAILURES 分节的可见条数(cli.md「运行中的 live 面板」):\n // FAILURES 分节按\"全量意愿\"优先占位,ACTIVE 拿剩下的;只有终端矮到连 FAILURES 分节自己\n // 都放不下时才反过来压缩它。固定开销:上下边框(2)+ counts 行(1)。\n const restBudget = Math.max(0, io.stderr.rows - 3 - DASHBOARD_ROW_RESERVE);\n const failuresDesired = maxFailureRows > 0 ? 1 + maxFailureRows : 0; // 横隔 + 条目\n const shownFailureCount = maxFailureRows > 0 ? Math.min(maxFailureRows, Math.max(0, failuresDesired <= restBudget ? maxFailureRows : restBudget - 1)) : 0;\n if (shownFailureCount > 0) {\n rows.push({\n kind: \"divider\",\n title: t(\"feedback.human.failuresHeader\"),\n meta: t(\"feedback.human.failuresSoFar\", { count: state.freshFailureCount }),\n });\n for (const failure of freshFailures.slice(-shownFailureCount)) {\n rows.push({ kind: \"line\", text: buildFailureFactLine(failure, contentWidth) });\n }\n }\n const failuresRowsUsed = shownFailureCount > 0 ? 1 + shownFailureCount : 0;\n const activeSectionBudget = Math.max(0, restBudget - failuresRowsUsed);\n if (activeOrder.length > 0 ||\n runActivityRows.length > 0 ||\n hookRows.length > 0 ||\n lockWaitRows.length > 0 ||\n precheck) {\n rows.push({ kind: \"divider\", title: t(\"feedback.human.active\") });\n // ACTIVE 横隔自己也占一行,从分给 ACTIVE 小节的预算里再扣一行,剩下的才是内容行数。\n const rowBudget = Math.max(0, activeSectionBudget - 1);\n const precheckCount = precheck ? 1 : 0;\n const total = precheckCount + runActivityRows.length + hookRows.length + lockWaitRows.length + activeOrder.length;\n // 窄/矮终端先减 active slots(减少行数),而不是先压缩单行内容 ——\n // 单行内容的截断在 formatActiveRow 里按 contentWidth 单独处理。\n const showCount = total <= rowBudget ? total : Math.max(0, rowBudget - 1);\n // 先选出本帧真正会显示的行(运行级行恒排在前面,与旧实现一致),再统一量测/定宽——\n // 同一帧内所有行必须共用同一套身份列宽度,不能让前面几行按旧宽度格式化、后面\n // 的行又观测到更长的值再推宽,导致同一帧内本该对齐的列错位。\n const shownPrecheck = precheck && showCount > 0 ? precheck : undefined;\n let remaining = Math.max(0, showCount - (shownPrecheck ? 1 : 0));\n const shownRunActivities = runActivityRows.slice(0, remaining);\n remaining = Math.max(0, remaining - shownRunActivities.length);\n const shownHooks = hookRows.slice(0, remaining);\n remaining = Math.max(0, remaining - shownHooks.length);\n const shownLockWaits = lockWaitRows.slice(0, remaining);\n const shownRunLevel = (shownPrecheck ? 1 : 0) + shownRunActivities.length + shownHooks.length + shownLockWaits.length;\n const shownActive: ActiveAttempt[] = [];\n for (const key of activeOrder) {\n if (shownRunLevel + shownActive.length >= showCount)\n break;\n const active = state.active.get(key);\n if (active)\n shownActive.push(active);\n }\n // 身份列本次运行\"实际出现过的最长值\"只放宽不回缩:运行级行的 label 是拼好的一整块\n // 文本,不是 evalId/who 两个独立字段,不单独参与这里的放宽,只复用下面算出的宽度\n // (cli.md「active 行的列序」:「同一套算法」= 复用同一份结果,不是各自维护一份)。\n for (const active of shownActive) {\n maxEvalIdWidth = Math.max(maxEvalIdWidth, active.identity.evalId.length);\n maxWhoWidth = Math.max(maxWhoWidth, active.who.length);\n }\n const { evalWidth, whoWidth } = identityColumnWidths(contentWidth);\n const activeLines: string[] = [];\n if (shownPrecheck)\n activeLines.push(formatPrecheckRow(shownPrecheck, io, contentWidth));\n for (const activity of shownRunActivities) {\n activeLines.push(formatRunActivityRow(activity, io, contentWidth));\n }\n for (const hookRow of shownHooks) {\n activeLines.push(formatExperimentHookRow(hookRow, io, contentWidth, evalWidth, whoWidth));\n }\n for (const lockWaitRow of shownLockWaits) {\n activeLines.push(formatLockWaitRow(lockWaitRow, io, contentWidth));\n }\n for (const active of shownActive) {\n activeLines.push(formatActiveRow(active, io, contentWidth, evalWidth, whoWidth));\n }\n for (const line of activeLines)\n rows.push({ kind: \"line\", text: line });\n if (total > showCount) {\n rows.push({ kind: \"line\", text: t(\"feedback.human.moreActive\", { count: total - showCount }) });\n }\n }\n const footerCommand = state.estimatedCostUSD !== undefined && state.estimatedCostUSD > 0 ? formatEstimatedCost(state.estimatedCostUSD) : undefined;\n return renderPanel({\n title: command,\n meta: formatElapsed(state.elapsedMs),\n footerCommand,\n rows,\n width: capability.width,\n mode: capability.mode,\n capWidth: false,\n });\n }\n function redraw(state: RunFeedbackState): void {\n const lines = buildFrameLines(state);\n const text = lines.join(\"\\n\");\n if (text === lastFrameText)\n return; // 真实内容没变化,不写(checklist「rendered frame 与上一帧相同则不写」)\n if (lines.length === 0) {\n if (linesDrawn > 0) {\n let out = `\\x1B[${linesDrawn}A`;\n out += \"\\x1B[2K\\n\".repeat(linesDrawn) + `\\x1B[${linesDrawn}A`;\n io.stderr.write(out);\n }\n linesDrawn = 0;\n lastFrameText = text;\n return;\n }\n let out = linesDrawn > 0 ? `\\x1B[${linesDrawn}A` : \"\";\n out += lines.map((l) => `\\x1B[2K${l}`).join(\"\\n\") + \"\\n\";\n // 本帧比上帧短(行完成后折叠、终端拉高)时,清掉下方残留的旧行,与 live.ts 旧实现同一手法。\n const extra = linesDrawn - lines.length;\n if (extra > 0)\n out += \"\\x1B[2K\\n\".repeat(extra) + `\\x1B[${extra}A`;\n io.stderr.write(out);\n linesDrawn = lines.length;\n lastFrameText = text;\n }\n return {\n appendDurable(event, state) {\n // 实验级钩子起止在 TTY 下只驱动运行级 active 行(state.experimentHooks 已由 reducer\n // 更新,coordinator 紧接着的 redrawDynamic 会画出来);成功钩子不写 scrollback 永久行\n // (见 cli.md「实验级 Hook 的显示」)。非 TTY 退化流才逐行追加(见 renderDurableLines)。\n // judge 预检同理:TTY 下只驱动 state.activePrecheck 的运行级 active 行(coordinator 紧接着的\n // redrawDynamic 会画出来),不写 scrollback 永久行(见 cli.md「judge 预检的显示」)。用例锁\n // 等待同理:TTY 下由 state.lockWaits 驱动运行级 active 行(见 cli.md「等待并发 run 的显示」)。\n // Run 级 activity(共享构建等)同理:TTY 下由 state.runActivities 驱动,不占 attempt slot。\n // 失败(verdict failed/errored)同理:TTY 下失败不进 scrollback 流,只更新 state.failures/\n // freshFailureCount,由下一帧 buildFrameLines 的 FAILURES 分节显现(见 cli.md「框线体裁」\n // 「一条失败的多行证据…不进终端,细节的家是 show」)——reducer 已经在 emit() 里同步更新过\n // state,这里的 no-op 只是不写字节;coordinator 仍会围着这次投递做 clear→append→redraw,\n // redraw 读到的是已经含这条失败的最新 state。\n if (event.type === \"experiment-hook\" ||\n event.type === \"precheck\" ||\n event.type === \"lock-wait\" ||\n event.type === \"run-activity\" ||\n event.type === \"failure\") {\n return;\n }\n writeDurable(io, event, state, false);\n },\n activity(text) {\n // 运行级瞬时通知(judge 预检、provider 一次性通知……):coordinator 已按\n // clearDynamic → activity → redrawDynamic 包好顺序,这里只管把这一行落进 scrollback。\n // TTY 下永久事件与 live 面板都在 stderr(见 writeDurable 的流边界注释)。\n io.stderr.write(text.endsWith(\"\\n\") ? text : `${text}\\n`);\n },\n clearDynamic() {\n if (linesDrawn === 0)\n return; // 幂等:coordinator 收尾时会无条件再调一次\n let out = `\\x1B[${linesDrawn}A`;\n out += \"\\x1B[2K\\n\".repeat(linesDrawn) + `\\x1B[${linesDrawn}A`;\n io.stderr.write(out);\n linesDrawn = 0;\n lastFrameText = undefined; // 物理终端已清空,下一帧必须真的重写,不能被「同帧」判断吞掉\n },\n redrawDynamic(state) {\n redraw(state);\n },\n onTick(_event, state) {\n // coordinator 的 tick 周期(默认 250ms = 4fps)已经是重画的硬上限 —— 这里每个 tick 最多\n // 重画一次;elapsed 按整秒渲染进 formatCommandLine,连同「同帧不写」,自然满足\n // 「elapsed 最多每秒变化一次」而不需要单独的节流变量。\n redraw(state);\n },\n onLifecycle(event) {\n if (event.type === \"attempt:start\") {\n const key = encodeAttemptKey(event.identity);\n if (!activeOrder.includes(key))\n activeOrder.push(key);\n }\n else if (event.type === \"attempt:complete\" || event.type === \"attempt:early-exit\") {\n const key = encodeAttemptKey(event.identity);\n const idx = activeOrder.indexOf(key);\n if (idx !== -1)\n activeOrder.splice(idx, 1);\n }\n // attempt:phase / attempt:progress 不改变 activeOrder 成员;下一次 tick 的 redraw()\n // 会从 state.active 读到最新 phase/detail,不需要在这里强制重画(见 checklist\n // 「真实 state 变化合并渲染」—— 逐条 lifecycle 事件不各自触发一次重画)。\n },\n };\n}\n/** active 行的身份两列(evalId/who)按调用方传入的 `evalWidth`/`whoWidth` 定宽——这两个数\n * 是 `createDashboardRenderer` 闭包按「本次运行实际出现过的最长值,封顶内容宽 40% / 20%」\n * 算出来再传进来的(见 `identityColumnWidths`),这个函数本身不比例分配、也不知道 `columns`\n * 的其余部分怎么分。elapsed 固定 6 列右对齐;detail 拿到 `sym + 身份两列 + elapsed + 分隔符`\n * 之后剩下的全部宽度——不是某个比例或固定预留,宽终端因此把整段 phase/detail 露出来\n * (cli.md「active 行的列序」)。 */\nfunction formatActiveRow(active: ActiveAttempt, io: FeedbackIO, columns: number, evalWidth: number, whoWidth: number): string {\n // 时间列从 attempt 派发起算,阶段推进不重置(见 ActiveAttempt.startedAt):这一列是存活性的\n // 唯一证明,归零会被读成「这条 eval 重跑了」。\n const elapsed = formatElapsed(io.clock.now() - active.startedAt).padStart(6);\n const sym = \"● \";\n const evalCol = padTrunc(active.identity.evalId, evalWidth);\n const whoCol = padTrunc(active.who, whoWidth);\n const prefix = `${sym}${evalCol} ${whoCol} ${elapsed} `;\n const budget = Math.max(0, columns - prefix.length);\n const detail = active.detail ? `${phaseLabel(active.phase)}: ${active.detail}` : phaseLabel(active.phase);\n return prefix + detail.slice(0, budget);\n}\n/** 实验级钩子的运行级行:与 attempt 行同一套定宽结果,label 跨过 evalId + 两格间隔 + who\n * 两列的合计宽度(不单独维护第三份\"最长值\"状态——label 是拼好的一整块文本,拆不出\n * evalId/who 两个独立字段,所以只复用 attempt 行算出的宽度,而不是各自决定),elapsed 列\n * 因此与 attempt 行对齐;detail 来自实验级 `ctx.progress`,没有就只留标签行。 */\n/** judge 预检的运行级行:`● prechecking judge config <elapsed>`。预检发生在任何 attempt 派发\n * 之前,此刻没有 attempt 行、也没有实验钩子行(setup 在派发时才跑),它恒是单独一行——所以\n * label 不受身份列宽约束(那时列宽还压在初始最小值,会把标签截成 `p…`),直接用整行宽度。\n * 没有 experimentId、没有 detail:预检只有「在跑」与「跑了多久」两个事实。 */\nfunction formatPrecheckRow(precheck: ActivePrecheck, io: FeedbackIO, columns: number): string {\n const elapsed = formatElapsed(io.clock.now() - precheck.startedAt).padStart(6);\n const sym = \"● \";\n return padTrunc(`${sym}${t(\"feedback.human.precheckJudge\")} ${elapsed}`, columns);\n}\n/** Run 级 activity 的运行级行:`● <producer label> <elapsed>`。\n * label 原样来自 producer,不查 LifecyclePhase 锚点表,也不对 key 做 switch 穷尽。\n * 与预检同理:构建阶段常常还没有任何 attempt 行,身份列宽仍是 0,label 直接用整行宽度。 */\nfunction formatRunActivityRow(activity: ActiveRunActivity, io: FeedbackIO, columns: number): string {\n const elapsed = formatElapsed(io.clock.now() - activity.startedAt).padStart(6);\n const sym = \"● \";\n return padTrunc(`${sym}${activity.label} ${elapsed}`, columns);\n}\nfunction formatExperimentHookRow(hook: ActiveExperimentHook, io: FeedbackIO, columns: number, evalWidth: number, whoWidth: number): string {\n const elapsed = formatElapsed(io.clock.now() - hook.startedAt).padStart(6);\n const sym = \"● \";\n const label = padTrunc(`${experimentHookLabel(hook.hook)} · ${hook.experimentId}${hook.recovery ? \" (recovery)\" : \"\"}`, evalWidth + 2 + whoWidth);\n const prefix = `${sym}${label} ${elapsed} `;\n const budget = Math.max(0, columns - prefix.length);\n return prefix + (hook.detail ?? \"\").slice(0, budget);\n}\n/** 用例锁等待的运行级行:`● waiting on another run · <exp> <elapsed> <n> evals · pid <pid>`\n * (cli.md「等待并发 run 的显示」)。elapsed 从最早一条等待的 startedAt 算(存活性证明,\n * 与其它运行级行同一约定);pid 取最早一条等待对应的持有方——一个实验可能同时撞上多把不同\n * 持有方的锁,这里选一个稳定的代表值展示,不逐条列出(与 earlyExit 代表 attempt 的选法同一\n * 种「挑一个确定性代表」思路)。不吃 evalWidth/whoWidth 身份列宽约束——与 `formatPrecheckRow`\n * 同理:选中用例全在等锁时,本实验没有派发中的 attempt,那两个宽度还压在初始值 0,会把\n * label 截成 \"w…\"(与 memory/live-dashboard-active-row-width-clamp-mismatch.md 同一根因类别,\n * 只是发生在锁等待场景);label 直接用整行宽度。 */\nfunction formatLockWaitRow(wait: ActiveLockWait, io: FeedbackIO, columns: number): string {\n const entries = [...wait.waiting.values()].sort((a, b) => a.startedAt - b.startedAt);\n const earliest = entries[0]!;\n const elapsed = formatElapsed(io.clock.now() - earliest.startedAt).padStart(6);\n const sym = \"● \";\n const label = `${t(\"feedback.human.waitingOnAnotherRun\")} · ${wait.experimentId}`;\n const prefix = `${sym}${label} ${elapsed} `;\n const budget = Math.max(0, columns - prefix.length);\n const detail = t(\"feedback.human.lockWaitDetail\", { count: entries.length, pid: earliest.holderPid ?? \"?\" });\n return padTrunc(prefix + detail.slice(0, budget), columns);\n}\n// ───────────────────────── 非 TTY:human 文案的纯追加流 ─────────────────────────\n//\n// 单一 stdout 有序流(见 memory/exp-output-two-forms-ruling.md 的补充裁决):从 start 到结束\n// 摘要——计划、失败、诊断、运行级瞬时通知、heartbeat、最终摘要——全部落 `stdout`;`stderr` 只留\n// 给启动期用法/配置错误(那些错误发生在 coordinator 存在之前,根本不经过这个 renderer)。这与\n// TTY 变体(live 面板 + 永久事件在 stderr、只有最终摘要在 stdout)刻意不同:非 TTY 没有可覆盖的\n// 动态区域,两个 OS stream 被 CI runner 或 agent 工具层分开缓冲时交错写会打乱真实发生顺序,\n// 单流才能保证事件序就是发生序。\nfunction createPlainRenderer(io: FeedbackIO): FeedbackRenderer {\n // 上一条永久事件的时间戳:heartbeat 只在「连续 30 秒没有永久事件」时才追加一条\n //(见 cli.md「什么动态更新,什么逐条追加」表),failure/diagnostic 出现后立即重新计时。\n let lastDurableAtMs = 0;\n return {\n appendDurable(event, state) {\n lastDurableAtMs = event.at;\n writeDurable(io, event, state, true);\n },\n activity(text) {\n // 运行级瞬时通知按永久行追加(非 TTY 没有可覆盖的动态区域),并重置 heartbeat 计时——\n // 刚有输出就不需要紧跟一条「还活着」。单一 stdout 流,不分流到 stderr。\n lastDurableAtMs = io.clock.now();\n io.stdout.write(text.endsWith(\"\\n\") ? text : `${text}\\n`);\n },\n onTick(event, state) {\n if (event.at - lastDurableAtMs < NON_TTY_HEARTBEAT_IDLE_MS)\n return;\n lastDurableAtMs = event.at;\n io.stdout.write(`${t(\"feedback.human.heartbeat\", { elapsed: formatElapsed(state.elapsedMs), counts: formatCounts(state) })}\\n`);\n },\n // 没有 clearDynamic/redrawDynamic/onLifecycle:非 TTY 退化流不维护动态区域,\n // 不展示 active attempt 的逐次阶段变化,也不逐次输出 provisioning retry/backoff ——\n // 这些行为由「不实现对应可选钩子」天然满足,不需要在这里写 profile 分支。\n };\n}\n// ───────────────────────── `--dry`(human profile):稳定预览,不经 coordinator ─────────────────────────\n/** 一个 (experimentId, evalId) 组合在 `--dry` 预览里的一行,与 cli.ts 里 `matchedByRun` 摊平后\n * 的矩阵、以及 `--dry --json` 的 `ExpPlanRow`(去掉 `reused` 字段)三处同一份数据一一对应——\n * dry 预览同样是「展示」,不该留在 cli.ts(见 docs/feature/experiments/cli.md 与 plan 对\n * 「CLI 只负责解析/构造/退出」的要求)。dry run 不派发 attempt,没有 `RunFeedbackState` 可言,\n * 所以这是独立于 `FeedbackRenderer`/coordinator 的纯函数,与 `renderAgentPlanEnvelope`\n * (agent.ts)同一定位。 */\nexport interface HumanDryPlanRow {\n experimentId: string;\n evalId: string;\n evalGroupId?: string;\n /** 本行计划内的 attempt 总数;混合 `attempts` 的多个 Experiment 不共用 input 的最大值。 */\n attempts?: number;\n /** 该用例正被另一条并行 Invocation 持锁运行(见 docs/feature/experiments/architecture.md\n * 「并发 Invocation:用例锁」);计划行尾如实标注,`--dry` 本身不取锁、不等待。 */\n locked?: boolean;\n /** 本行实际携入的终态结果;只会出现 `passed` / `failed`,供人读面显示已确定判定。 */\n carried?: readonly {\n attempt: number;\n verdict: \"passed\" | \"failed\";\n }[];\n /** 本行要派发的 attempt 卡在哪几道门上(词表见 docs/feature/experiments/cli.md\n * 「`--dry`:计划矩阵与作废原因」);`attempts` 是这组原因覆盖的 0-based 序号。\n * 省略或空数组 = 全部携带(兼容直接调用 formatter 的旧 fixture)。 */\n dispatch?: readonly {\n reason: string;\n attempts?: readonly number[];\n comparison?: HumanFingerprintComparison;\n }[];\n /** previous-result 行对应的历史结果;旧格式 locator 会明确显示为不可接受。 */\n prior?: readonly {\n attempt?: number;\n locator: string;\n verdict: \"passed\" | \"failed\" | \"errored\" | \"skipped\";\n acceptance: \"available\" | \"legacy-locator\";\n evidenceState?: \"local\" | \"borrowed\" | \"dangling\";\n comparison?: HumanFingerprintComparison;\n }[];\n}\nexport interface HumanDryPlanInput {\n /** 矩阵行数 × runs,与 `--dry --json` 的 `ExpPlanDocument.total` 同口径。 */\n totalAttempts: number;\n /** 去重后的候选 eval 数,与 `ExpPlanDocument.evals` 同口径(即 `rows` 里 `evalId` 的去重数,\n * 不是 discover 到的 eval 总数)。 */\n evals: number;\n configs: number;\n attempts: number;\n /** 携带预测的复用 attempt 数;省略或 `0` 时不追加复用摘要行(docs 契约首行示例展示的是\n * 全新派发场景,没有第二行)。 */\n reused?: number;\n rows: readonly HumanDryPlanRow[];\n /** 兼容旧调用方的命令前缀;accept 行现在固定指向每条历史结果的 locator。 */\n command?: string;\n}\n/** 契约首行(docs/feature/experiments/cli.md 开头的 `--dry` 示例):\n * `plan: <total> attempts · <N> eval[s] × <M> config[s] · runs <R>`,单复数随计数变化。\n * 有携带预测时紧跟一行,沿用 `PLAN` 面板缓存摘要既有的 `feedback.human.reuse` 文案(见\n * `buildPlanLines`)而不是为 `--dry` 另造一套词。逐行按 `experimentId`/`evalId` 两列对齐,\n * 第一列按实际出现过的最长值定宽——与 CI/agent 的 dry 预览不同,human 不折叠、不设行数上限:\n * 这条路径历来就是给人逐行读的完整清单。 */\nexport function renderHumanDryPlan(input: HumanDryPlanInput): string {\n const lines = [\n t(\"cli.dry.header\", {\n attempts: pluralUnit(input.totalAttempts, \"cli.dry.unit.attempt\", \"cli.dry.unit.attempts\"),\n evals: pluralUnit(input.evals, \"cli.dry.unit.eval\", \"cli.dry.unit.evals\"),\n configs: pluralUnit(input.configs, \"cli.dry.unit.config\", \"cli.dry.unit.configs\"),\n attemptCount: input.attempts,\n }),\n ];\n if (input.reused) {\n lines.push(t(\"feedback.human.reuse\", {\n reused: input.reused,\n total: input.totalAttempts,\n toRun: Math.max(0, input.totalAttempts - input.reused),\n }));\n }\n const idWidth = Math.max(0, ...input.rows.map((row) => stringWidth(row.experimentId)));\n const evalLabel = (row: HumanDryPlanRow): string => row.evalGroupId === undefined\n ? row.evalId\n : `${row.evalId} [group ${row.evalGroupId}]`;\n const evalWidth = Math.max(0, ...input.rows.map((row) => stringWidth(evalLabel(row))));\n for (const row of input.rows) {\n const label = evalLabel(row);\n const base = `${row.experimentId}${\" \".repeat(idWidth - stringWidth(row.experimentId) + 2)}${label}`;\n // 行尾恒有一个标注:要派发的行逐条给门的原因词,全部携带的行标 carried,\n // 正被别人持锁的行沿用既有的 locked(它回答的是「本次会不会自己跑」,不是哪道门)。\n const suffix = row.locked\n ? t(\"feedback.human.lockedRowSuffix\")\n : dryPlanReasonSuffix(row.dispatch, row.prior, row.carried, row.attempts ?? input.attempts);\n lines.push(`${base}${\" \".repeat(evalWidth - stringWidth(label) + 3)}${suffix}`);\n }\n const previousResultBlocks = renderPreviousResultDeltaGroups(input);\n if (previousResultBlocks.length > 0)\n lines.push(\"\", ...previousResultBlocks);\n return `${lines.join(\"\\n\")}\\n`;\n}\nexport interface HumanCommandPlanOptions {\n readonly isTTY?: boolean;\n readonly noColor?: string;\n readonly width?: number;\n}\nfunction commandPlanOwner(step: CommandPlanStep): string | undefined {\n if (step.owner === undefined)\n return undefined;\n return `owner: ${step.owner.kind}:${step.owner.id}${step.owner.index === undefined ? \"\" : `#${step.owner.index}`}`;\n}\n/** Command-plan 的统一 human sink 不把任何来源的控制字符直接写进终端。 */\nfunction visibleCommandPlanTerminalText(text: string): string {\n let visible = \"\";\n for (const character of text) {\n const codePoint = character.codePointAt(0)!;\n if (character === \"\\t\") {\n visible += \"\\\\t\";\n }\n else if (character === \"\\r\") {\n visible += \"\\\\r\";\n }\n else if (codePoint < 0x20 || (codePoint >= 0x7f && codePoint <= 0x9f)) {\n visible += `\\\\u${codePoint.toString(16).padStart(4, \"0\")}`;\n }\n else {\n visible += character;\n }\n }\n return visible;\n}\nfunction commandPlanExact(step: CommandPlanStep): readonly string[] {\n const command = step.command;\n if (command === undefined)\n return [\"command: exact command unavailable\"];\n const operation = command.kind === \"argv\"\n ? [`command: argv ${JSON.stringify([command.executable, ...command.args])}`]\n : command.script.includes(\"\\n\")\n ? [\n `command: shell · ${command.script.split(\"\\n\").length} lines`,\n ...command.script.split(\"\\n\").map((line) => {\n return line === \"\" ? \" │\" : ` │ ${line}`;\n }),\n ]\n : [`command: shell ${JSON.stringify(command.script)}`];\n const options = [\n command.cwd === undefined ? undefined : `cwd: ${JSON.stringify(command.cwd)}`,\n command.user === undefined ? undefined : `user: ${JSON.stringify(command.user)}`,\n command.timeoutMs === undefined ? undefined : `timeout: ${command.timeoutMs}ms`,\n command.envKeys === undefined ? undefined : `environment keys: ${JSON.stringify(command.envKeys)}`,\n ].filter((value): value is string => value !== undefined);\n return [\n ...operation,\n ...options,\n ...(step.redactions === undefined ? [] : [`redacted: ${step.redactions.join(\", \")}`]),\n ];\n}\nfunction commandPlanTemplate(step: CommandPlanStep): readonly string[] {\n const template = step.template;\n if (template === undefined)\n return [];\n const owner = `${template.owner.kind}:${template.owner.id}`;\n const prefix = [\n `template: ${template.provider}:${template.kind}`,\n `template owner: ${owner}`,\n ];\n if (template.locator._tag === \"Opaque\") {\n return [...prefix, `configured locator: opaque — ${template.locator.reason.summary}`];\n }\n const fields = template.locator.fields\n .map((field) => `${field.name}=${JSON.stringify(field.value)}`)\n .join(\" · \");\n if (template.locator._tag === \"Exact\")\n return [...prefix, `configured locator: exact · ${fields}`];\n const redacted = template.locator.redactions\n .map((entry) => `${entry.field}:${entry.parts.join(\"+\")}`)\n .join(\",\");\n return [...prefix, `configured locator: redacted · ${fields}`, `locator redacted: ${redacted}`];\n}\nfunction commandPlanStepMeta(step: CommandPlanStep): string {\n switch (step.truth) {\n case \"exact\":\n return \"EXACT\";\n case \"conditional\":\n return \"CONDITIONAL\";\n case \"opaque\":\n return \"OPAQUE\";\n case \"known-no-command\":\n return \"NO COMMANDS\";\n }\n}\nfunction commandPlanStepLines(step: CommandPlanStep, position: string): readonly string[] {\n const owner = commandPlanOwner(step);\n const detail = step.truth === \"exact\"\n ? commandPlanExact(step)\n : step.truth === \"conditional\"\n ? [`branches: ${step.children?.length ?? 0} command blocks follow`]\n : step.truth === \"opaque\"\n ? [`reason: ${step.reason?.summary ?? \"runtime callback\"}`]\n : [step.reason === undefined ? \"reason: this lifecycle step has no command\" : `reason: ${step.reason.summary}`];\n return [\n `position: ${position}`,\n ...(owner === undefined ? [] : [owner]),\n ...(step.label === undefined ? [] : [`label: ${step.label}`]),\n ...commandPlanTemplate(step),\n ...detail,\n ...(step.condition === undefined ? [] : [`if: ${step.condition.summary}`]),\n ];\n}\n/** 保留 JSON string 内的连续空格与转义,不用会折叠空白的 prose wrapper。 */\nfunction hardWrapCommandPlanLine(text: string, width: number, continuation = \" \"): string[] {\n const max = Math.max(4, width);\n const lines: string[] = [];\n let line = \"\";\n let used = 0;\n const flush = (): void => {\n lines.push(line);\n line = continuation;\n used = stringWidth(continuation);\n };\n for (const ch of text) {\n const charWidth = charDisplayWidth(ch.codePointAt(0)!);\n if (used > 0 && used + charWidth > max)\n flush();\n line += ch;\n used += charWidth;\n }\n lines.push(line);\n return lines;\n}\nfunction pushCommandPlanLine(target: PanelRow[], text: string, contentWidth: number, continuation = \" \"): void {\n target.push({ kind: \"line\", text: hardWrapCommandPlanLine(text, contentWidth, continuation).join(\"\\n\") });\n}\ninterface CommandPlanPanelCapability {\n readonly width: number;\n readonly mode: PanelMode;\n}\nfunction renderCommandPlanPanel(title: string, meta: string | undefined, lines: readonly string[], capability: CommandPlanPanelCapability): string[] {\n const contentWidth = panelContentWidth(capability.width, capability.mode);\n const rows: PanelRow[] = [];\n for (const line of lines) {\n const visibleLine = visibleCommandPlanTerminalText(line);\n pushCommandPlanLine(rows, visibleLine, contentWidth, visibleLine.startsWith(\" │\") ? \" │ \" : \" \");\n }\n return renderPanel({\n title: visibleCommandPlanTerminalText(title),\n ...(meta === undefined ? {} : { meta: visibleCommandPlanTerminalText(meta) }),\n rows,\n width: capability.width,\n mode: capability.mode,\n });\n}\nfunction renderCommandPlanSteps(target: string[][], steps: readonly CommandPlanStep[], position: string, capability: CommandPlanPanelCapability): void {\n for (const step of steps) {\n target.push(renderCommandPlanPanel(step.phase, commandPlanStepMeta(step), commandPlanStepLines(step, position), capability));\n if ((step.children?.length ?? 0) > 0) {\n const childPosition = `${position} > ${step.phase}${step.label === undefined ? \"\" : ` (${step.label})`}`;\n renderCommandPlanSteps(target, step.children!, childPosition, capability);\n }\n }\n}\nfunction commandPlanLaneLabel(lane: CommandPlanLane): string {\n const ordering = lane.ordering === \"serial-normalized-eval-id\"\n ? \"serial · normalized Eval ID, then attempt\"\n : \"no guaranteed slot order\";\n if (lane.kind !== \"sandbox-reuse\")\n return `lane ${lane.kind}:${lane.id} · ${ordering}`;\n const scope = lane.scope.kind === \"shared\" ? \"shared\" : `eval:${lane.scope.evalId}`;\n return `lane sandbox-reuse:${scope}@${lane.id.slice(-12)} · ${ordering}`;\n}\n/**\n * `niceeval debug` 的人读投影。只呈现保证的局部顺序,不给并发 lane 编造全局序号。\n * TTY 画区域框,NO_COLOR / 非 TTY / 窄终端按全仓 panel 契约退化为 plain。\n */\nexport function renderHumanCommandPlan(plan: CommandPlan, options: HumanCommandPlanOptions): string {\n const capability = panelCapability({\n isTTY: options.isTTY,\n noColor: options.noColor,\n width: options.width,\n });\n const panels: string[][] = [];\n const meta = plan.completeness === \"complete\"\n ? \"COMPLETE\"\n : `PARTIAL · ${plan.opaqueCount} opaque · ${plan.redactedCount} redacted`;\n panels.push(renderCommandPlanPanel(\"COMMAND PLAN\", meta, [\"Guaranteed order is per lane. Different experiments and lanes may interleave at runtime; conditional dispatches may never start.\"], capability));\n for (const experiment of plan.experiments) {\n panels.push(renderCommandPlanPanel(`EXPERIMENT ${experiment.experimentId}`, experiment.activation.toUpperCase(), [\"Contains the lifecycle blocks surrounding every selected lane.\"], capability));\n renderCommandPlanSteps(panels, experiment.beforeLanes, `experiment ${experiment.experimentId} · before lanes`, capability);\n for (const lane of experiment.lanes) {\n const laneLabel = commandPlanLaneLabel(lane);\n panels.push(renderCommandPlanPanel(laneLabel, lane.ordering === \"serial-normalized-eval-id\" ? \"SERIAL\" : \"INDEPENDENT\", [\"Contains the lifecycle blocks for this lane.\"], capability));\n if (lane.kind === \"eval-group\" && lane.beforeSlots.length > 0) {\n renderCommandPlanSteps(panels, lane.beforeSlots, `lane ${lane.kind}:${lane.id} · group lifecycle before slots`, capability);\n }\n const physical = lane.physicalLifecycleTemplate;\n if (physical !== undefined) {\n renderCommandPlanSteps(panels, physical.enter, `lane ${lane.kind}:${lane.id} · physical lifecycle template enter · each physical instance`, capability);\n }\n for (const slot of lane.slots) {\n if (slot.action === \"carried\") {\n panels.push(renderCommandPlanPanel(`SLOT ${slot.evalId} #${slot.attempt}`, \"CARRIED\", [\"No lifecycle commands run for this slot.\"], capability));\n continue;\n }\n panels.push(renderCommandPlanPanel(`SLOT ${slot.evalId} #${slot.attempt}`, \"DISPATCH\", [`if: ${slot.activation?.summary ?? \"admitted\"}`], capability));\n renderCommandPlanSteps(panels, slot.steps, `lane ${lane.kind}:${lane.id} · slot ${slot.evalId} #${slot.attempt}`, capability);\n }\n if (physical !== undefined) {\n renderCommandPlanSteps(panels, physical.exit, `lane ${lane.kind}:${lane.id} · physical lifecycle template exit · each physical instance`, capability);\n }\n if (lane.kind === \"eval-group\" && lane.afterSlots.length > 0) {\n renderCommandPlanSteps(panels, lane.afterSlots, `lane ${lane.kind}:${lane.id} · group lifecycle after slots`, capability);\n }\n }\n renderCommandPlanSteps(panels, experiment.afterLanes, `experiment ${experiment.experimentId} · after lanes`, capability);\n }\n return `${panels.map((panel) => panel.join(\"\\n\")).join(\"\\n\\n\")}\\n`;\n}\n/** previous-result 行逐条列出历史 locator;接受命令永远只影响这一条结果,不按 selector 聚合。 */\nfunction renderPreviousResultDeltaGroups(input: HumanDryPlanInput): string[] {\n const out: string[] = [];\n for (const row of input.rows) {\n if (!row.prior || row.prior.length === 0)\n continue;\n for (const prior of row.prior) {\n const previousResultGroup = row.dispatch?.find((group) => group.reason === \"previous-result\" && group.comparison !== undefined);\n const comparison = prior.comparison ?? previousResultGroup?.comparison;\n const summary = comparison === undefined\n ? \"fingerprint comparison explanation unavailable\"\n : formatFingerprintComparison(comparison);\n out.push(`${row.experimentId} ${row.evalId} previous-result ${prior.verdict}: ${summary}`);\n if (comparison !== undefined)\n out.push(...renderFingerprintComparisonDetails(comparison, \" \"));\n const evidence = prior.evidenceState === \"dangling\" ? \"evidence unavailable\" : \"evidence available\";\n out.push(` prior: ${prior.locator} (${prior.verdict} · ${evidence})`);\n if (prior.evidenceState !== \"dangling\")\n out.push(` review: niceeval show ${prior.locator}`);\n out.push(prior.acceptance === \"available\"\n ? ` accept: niceeval accept ${prior.locator}`\n : \" accept: unavailable (legacy locator; rerun to create an acceptable result)\");\n }\n }\n return out;\n}\n/**\n * `baseline01`…`baseline06` → `baseline 01/02/03/05/06`:同一批受影响的 eval 通常只差编号,\n * 把公共前缀提出来一次,人一眼看得出「缺的是哪几号」。没有公共前缀就逐个列。\n */\nfunction foldIds(ids: string[]): string {\n const sorted = [...ids].sort();\n if (sorted.length < 2)\n return sorted.join(\", \");\n let prefix = sorted[0]!;\n for (const id of sorted) {\n while (prefix !== \"\" && !id.startsWith(prefix))\n prefix = prefix.slice(0, -1);\n if (prefix === \"\")\n break;\n }\n // 公共前缀不许切进一段数字中间:`baseline01`…`baseline06` 的字面公共前缀是 `baseline0`,\n // 折出来的 `1/3/6` 读起来不是编号。退到数字段边界,给出 `baseline 01/03/06`。\n while (prefix !== \"\" && /\\d$/.test(prefix))\n prefix = prefix.slice(0, -1);\n if (prefix === \"\")\n return sorted.join(\", \");\n return `${prefix} ${sorted.map((id) => id.slice(prefix.length)).join(\"/\")}`;\n}\n/**\n * `previous-result: config:judge.model · new` —— 同一行的多组原因按门的出现序连排,旧结果附差异 selector。\n * 当一行有多个 attempt 时,每个派发组带 `N/total`;携入组只在部分携入时带这个分数,避免把\n * `carried` 的来源判定折叠成一个没有 verdict 的总数。\n */\nfunction dryPlanReasonSuffix(dispatch: HumanDryPlanRow[\"dispatch\"], prior: HumanDryPlanRow[\"prior\"], carried: HumanDryPlanRow[\"carried\"] = [], totalAttempts = 1): string {\n const carriedSuffix = carried.length > 0 ? formatCarriedSuffix(carried, totalAttempts) : undefined;\n if (dispatch === undefined || dispatch.length === 0)\n return carriedSuffix ?? \"carried\";\n return [\n ...(carriedSuffix === undefined ? [] : [carriedSuffix]),\n ...dispatch.map((group) => formatDispatchGroup(group, prior, totalAttempts)),\n ].join(\" · \");\n}\nfunction formatCarriedSuffix(carried: NonNullable<HumanDryPlanRow[\"carried\"]>, totalAttempts: number): string {\n if (totalAttempts === 1 && carried.length === 1)\n return `carried (${carried[0]!.verdict})`;\n const verdicts = formatVerdictCounts(carried.map((result) => result.verdict));\n if (carried.length < totalAttempts)\n return `carried ${carried.length}/${totalAttempts} (${verdicts})`;\n return `carried (${verdicts})`;\n}\nfunction formatVerdictCounts(verdicts: readonly (\"passed\" | \"failed\")[]): string {\n const counts = { passed: 0, failed: 0 };\n for (const verdict of verdicts)\n counts[verdict] += 1;\n return ([\"passed\", \"failed\"] as const)\n .filter((verdict) => counts[verdict] > 0)\n .map((verdict) => `${counts[verdict]} ${verdict}`)\n .join(\" · \");\n}\nfunction formatDispatchGroup(group: NonNullable<HumanDryPlanRow[\"dispatch\"]>[number], prior: HumanDryPlanRow[\"prior\"], totalAttempts: number): string {\n const countSuffix = group.attempts !== undefined && totalAttempts > 1\n ? ` ${group.attempts.length}/${totalAttempts}`\n : \"\";\n const comparison = group.comparison;\n const relevantPrior = (prior ?? []).filter((result) => group.attempts === undefined || result.attempt === undefined || group.attempts.includes(result.attempt));\n const previousResultVerdicts = group.reason === \"previous-result\"\n ? ([\"passed\", \"failed\", \"errored\", \"skipped\"] as const).filter((verdict) => relevantPrior.some((result) => result.verdict === verdict))\n : [];\n const reason = previousResultVerdicts.length > 0\n ? `previous-result ${previousResultVerdicts.join(\"/\")}`\n : group.reason;\n if (comparison !== undefined)\n return `${reason}${countSuffix}: ${formatFingerprintComparison(comparison)}`;\n return `${reason}${countSuffix}`;\n}\nfunction formatFingerprintComparison(comparison: NonNullable<HumanDryPlanRow[\"dispatch\"]>[number][\"comparison\"]): string {\n if (comparison === undefined)\n return \"fingerprint comparison explanation unavailable\";\n if (comparison.kind === \"match\")\n return \"fingerprint matches\";\n if (comparison.kind === \"changed\")\n return comparison.deltas.map(formatDryDelta).join(\", \");\n return comparison.diagnostic.summary;\n}\nconst DELTA_COMMON_PREFIX_CAP = 24;\nconst DELTA_DIFF_WINDOW = 56;\nconst DELTA_SINGLE_SIDE_CAP = 80;\n/**\n * Changed 差异的双侧值对齐到第一处不同字符,而不是各自从头独立截断——独立截断在长公共前缀下\n * 会把两侧都截在差异点之前,读者看到的是两份相同的省略串,分不清到底哪里变了。差异点起两侧\n * 各留一个有界窗口,公共前缀过长时压缩显示但保留其尾部作为定位上下文。\n */\nexport function windowChangedDeltaValues(from: string, to: string): [\n string,\n string\n] {\n if (from === to)\n return [from, to];\n const max = Math.min(from.length, to.length);\n let shared = 0;\n while (shared < max && from[shared] === to[shared])\n shared += 1;\n const prefix = shared > DELTA_COMMON_PREFIX_CAP\n ? `…${from.slice(shared - DELTA_COMMON_PREFIX_CAP, shared)}`\n : from.slice(0, shared);\n return [\n `${prefix}${boundedDiffTail(from.slice(shared))}`,\n `${prefix}${boundedDiffTail(to.slice(shared))}`,\n ];\n}\nfunction boundedDiffTail(text: string): string {\n return text.length > DELTA_DIFF_WINDOW ? `${text.slice(0, DELTA_DIFF_WINDOW)}…` : text;\n}\nfunction boundedSingleSide(text: string): string {\n return text.length > DELTA_SINGLE_SIDE_CAP ? `${text.slice(0, DELTA_SINGLE_SIDE_CAP - 1)}…` : text;\n}\nfunction formatDryDelta(delta: {\n selector: string;\n _tag?: \"Added\" | \"Removed\" | \"Changed\" | \"Unknown\";\n kind?: \"added\" | \"removed\" | \"changed\" | \"unknown\";\n from?: string;\n to?: string;\n}): string {\n const kind = delta.kind ?? (delta._tag === \"Added\"\n ? \"added\"\n : delta._tag === \"Removed\"\n ? \"removed\"\n : delta._tag === \"Unknown\"\n ? \"unknown\"\n : delta._tag === \"Changed\"\n ? \"changed\"\n : undefined);\n switch (kind) {\n case \"added\": return `${delta.selector} added (${boundedSingleSide(delta.to ?? \"\")})`;\n case \"removed\": return `${delta.selector} removed (was ${boundedSingleSide(delta.from ?? \"\")})`;\n case \"unknown\": return `${delta.selector}`;\n case \"changed\":\n default: {\n if (delta.from === undefined && delta.to === undefined)\n return delta.selector;\n const [from, to] = windowChangedDeltaValues(delta.from ?? \"\", delta.to ?? \"\");\n return `${delta.selector} changed (${from} → ${to})`;\n }\n }\n}\nconst DIAGNOSTIC_CAUSE_DEPTH_CAP = 4;\nconst DIAGNOSTIC_NODE_CAP = 16;\nconst DIAGNOSTIC_DELTA_CAP = 8;\nfunction renderFingerprintComparisonDetails(comparison: HumanFingerprintComparison, indent: string): string[] {\n if (comparison.kind !== \"unexplained\")\n return [];\n const budget = { nodes: 0 };\n return renderFingerprintDiagnostic(comparison.diagnostic, indent, 0, budget);\n}\nfunction renderFingerprintDiagnostic(diagnostic: Extract<HumanFingerprintComparison, {\n kind: \"unexplained\";\n}>[\"diagnostic\"], indent: string, depth: number, budget: {\n nodes: number;\n}): string[] {\n if (budget.nodes >= DIAGNOSTIC_NODE_CAP)\n return [];\n budget.nodes += 1;\n const lines = [`${indent}${diagnostic.code}: ${diagnostic.summary}`];\n for (const fact of diagnostic.facts ?? []) {\n if (\"value\" in fact) {\n lines.push(`${indent} ${fact.label}: ${formatDiagnosticValue(fact.value)}`);\n }\n else {\n lines.push(`${indent} ${fact.label}: ${formatDiagnosticValue(fact.from)} → ${formatDiagnosticValue(fact.to)}`);\n }\n }\n if (diagnostic.observedDeltas === undefined) {\n lines.push(`${indent} observed inputs: unavailable (comparable manifest inputs were not available)`);\n }\n else if (diagnostic.observedDeltas.length === 0) {\n lines.push(`${indent} observed inputs: no differences in comparable manifest fields`);\n }\n else {\n lines.push(`${indent} observed inputs:`);\n const visible = diagnostic.observedDeltas.slice(0, DIAGNOSTIC_DELTA_CAP);\n for (const delta of visible)\n lines.push(`${indent} ${formatDryDelta(delta)}`);\n if (diagnostic.observedDeltas.length > visible.length) {\n lines.push(`${indent} +${diagnostic.observedDeltas.length - visible.length} more observed deltas`);\n }\n }\n for (const limitation of diagnostic.limitations ?? [])\n lines.push(`${indent} limitation: ${limitation}`);\n const causes = diagnostic.causes ?? [];\n if (causes.length === 0)\n return lines;\n if (depth >= DIAGNOSTIC_CAUSE_DEPTH_CAP) {\n lines.push(`${indent} +${causes.reduce((count, cause) => count + diagnosticNodeCount(cause), 0)} more diagnostic nodes suppressed`);\n return lines;\n }\n for (let index = 0; index < causes.length; index++) {\n const cause = causes[index];\n if (cause === undefined)\n continue;\n if (budget.nodes >= DIAGNOSTIC_NODE_CAP) {\n const remaining = causes.slice(index).reduce((count, rest) => count + diagnosticNodeCount(rest), 0);\n lines.push(`${indent} +${remaining} more diagnostic nodes suppressed`);\n break;\n }\n lines.push(`${indent} cause:`);\n lines.push(...renderFingerprintDiagnostic(cause, `${indent} `, depth + 1, budget));\n }\n return lines;\n}\nfunction diagnosticNodeCount(diagnostic: Extract<HumanFingerprintComparison, {\n kind: \"unexplained\";\n}>[\"diagnostic\"]): number {\n return 1 + (diagnostic.causes ?? []).reduce((count, cause) => count + diagnosticNodeCount(cause), 0);\n}\nfunction formatDiagnosticValue(value: JsonValue): string {\n if (typeof value === \"string\")\n return value;\n return JSON.stringify(value) ?? String(value);\n}\n/** `${n} ${unit}` 的单复数投影;zh 的 singular/plural key 值相同(中文不做语法数变化),\n * 实现照旧走同一条路径,不需要按 locale 分支。 */\nfunction pluralUnit(n: number, singularKey: Parameters<typeof t>[0], pluralKey: Parameters<typeof t>[0]): string {\n return `${n} ${t(n === 1 ? singularKey : pluralKey)}`;\n}\n"]}
|