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
|
@@ -20,6 +20,13 @@ export interface MatchDiagnostic {
|
|
|
20
20
|
readonly id: string;
|
|
21
21
|
};
|
|
22
22
|
readonly children?: readonly MatchDiagnosticChild[];
|
|
23
|
+
/** Collection matchers retain only a bounded, representative candidate set. */
|
|
24
|
+
readonly truncation?: {
|
|
25
|
+
readonly code: "diagnostic-truncated";
|
|
26
|
+
readonly reason: "sampled";
|
|
27
|
+
readonly captured: number;
|
|
28
|
+
readonly knownTotal: number;
|
|
29
|
+
};
|
|
23
30
|
}
|
|
24
31
|
export interface MatchDiagnosticChild {
|
|
25
32
|
readonly index: number;
|
|
@@ -20,6 +20,13 @@ export interface MatchDiagnostic {
|
|
|
20
20
|
readonly id: string;
|
|
21
21
|
};
|
|
22
22
|
readonly children?: readonly MatchDiagnosticChild[];
|
|
23
|
+
/** Collection matchers retain only a bounded, representative candidate set. */
|
|
24
|
+
readonly truncation?: {
|
|
25
|
+
readonly code: "diagnostic-truncated";
|
|
26
|
+
readonly reason: "sampled";
|
|
27
|
+
readonly captured: number;
|
|
28
|
+
readonly knownTotal: number;
|
|
29
|
+
};
|
|
23
30
|
}
|
|
24
31
|
export interface MatchDiagnosticChild {
|
|
25
32
|
readonly index: number;
|
|
@@ -20,6 +20,13 @@ export interface MatchDiagnostic {
|
|
|
20
20
|
readonly id: string;
|
|
21
21
|
};
|
|
22
22
|
readonly children?: readonly MatchDiagnosticChild[];
|
|
23
|
+
/** Collection matchers retain only a bounded, representative candidate set. */
|
|
24
|
+
readonly truncation?: {
|
|
25
|
+
readonly code: "diagnostic-truncated";
|
|
26
|
+
readonly reason: "sampled";
|
|
27
|
+
readonly captured: number;
|
|
28
|
+
readonly knownTotal: number;
|
|
29
|
+
};
|
|
23
30
|
}
|
|
24
31
|
export interface MatchDiagnosticChild {
|
|
25
32
|
readonly index: number;
|
|
@@ -6,8 +6,10 @@ exports.encodeAssertionResult = encodeAssertionResult;
|
|
|
6
6
|
exports.encodeSealedAssertionEntry = encodeSealedAssertionEntry;
|
|
7
7
|
exports.createAssertionsAttachmentProducer = createAssertionsAttachmentProducer;
|
|
8
8
|
exports.defineAssertionsProjector = defineAssertionsProjector;
|
|
9
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
10
|
const effect_1 = require("effect");
|
|
10
11
|
const index_ts_1 = require("../../record/attachment/index.cjs");
|
|
12
|
+
const identifiers_ts_1 = require("../../record/codec/identifiers.cjs");
|
|
11
13
|
const codec_ts_1 = require("./codec.cjs");
|
|
12
14
|
const producer_ts_1 = require("./producer.cjs");
|
|
13
15
|
/**
|
|
@@ -155,11 +157,29 @@ function encodeCriterion(criterion) {
|
|
|
155
157
|
}
|
|
156
158
|
function encodeMaterial(material) {
|
|
157
159
|
switch (material.kind) {
|
|
158
|
-
case "snapshot":
|
|
160
|
+
case "snapshot": {
|
|
161
|
+
const value = encodeSnapshotValue(material.value);
|
|
162
|
+
const bytes = new TextEncoder().encode(JSON.stringify(value));
|
|
163
|
+
const inline = effect_1.Schema.decodeUnknownEither(codec_ts_1.BoundedJsonValueSchema, codec_ts_1.AssertionsExactParseOptions)(value);
|
|
164
|
+
if (bytes.byteLength > 32 * 1024 || effect_1.Either.isLeft(inline)) {
|
|
165
|
+
const digest = effect_1.Schema.decodeUnknownEither(identifiers_ts_1.Sha256DigestSchema)((0, node_crypto_1.createHash)("sha256").update(bytes).digest("hex"));
|
|
166
|
+
if (effect_1.Either.isLeft(digest)) {
|
|
167
|
+
throw new Error("Assertions snapshot produced an invalid SHA-256 digest");
|
|
168
|
+
}
|
|
169
|
+
return Object.freeze({
|
|
170
|
+
kind: "blob",
|
|
171
|
+
source: (0, index_ts_1.makeRecordBlobSource)(effect_1.Stream.succeed(bytes)),
|
|
172
|
+
encoding: "utf-8",
|
|
173
|
+
byteLength: bytes.byteLength,
|
|
174
|
+
sha256: digest.right,
|
|
175
|
+
preview: `JSON Assertion material stored as a ${bytes.byteLength}-byte blob`,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
159
178
|
return Object.freeze({
|
|
160
179
|
kind: "snapshot",
|
|
161
|
-
value:
|
|
180
|
+
value: inline.right,
|
|
162
181
|
});
|
|
182
|
+
}
|
|
163
183
|
case "record-attachment":
|
|
164
184
|
return Object.freeze({
|
|
165
185
|
// The durable Assertions closure cannot hold a capability into the
|
|
@@ -403,12 +423,20 @@ function createAssertionsAttachmentProducer(config) {
|
|
|
403
423
|
seal(sealInput = {}) {
|
|
404
424
|
if (sealed !== undefined)
|
|
405
425
|
return sealed;
|
|
406
|
-
const
|
|
426
|
+
const sourceSites = Object.freeze([...(sealInput.sourceSites ?? [])]);
|
|
427
|
+
const emptyEntriesBytes = new TextEncoder().encode(JSON.stringify({ entries: [] })).byteLength;
|
|
428
|
+
const sourceSitesFramingBytes = new TextEncoder().encode(JSON.stringify({
|
|
429
|
+
entries: [],
|
|
430
|
+
sourceSites,
|
|
431
|
+
})).byteLength - emptyEntriesBytes;
|
|
432
|
+
const document = documentBuilder.seal({
|
|
433
|
+
maximumBytes: codec_ts_1.MAX_ASSERTION_DOCUMENT_BYTES - sourceSitesFramingBytes,
|
|
434
|
+
});
|
|
407
435
|
if (effect_1.Either.isLeft(document)) {
|
|
408
436
|
sealed = effect_1.Either.left(document.left);
|
|
409
437
|
return sealed;
|
|
410
438
|
}
|
|
411
|
-
const write = (0, index_ts_1.makeFixedRecordAttachmentWrite)(config.write, (blobs) => materializeDocument(sources, document.right.entries,
|
|
439
|
+
const write = (0, index_ts_1.makeFixedRecordAttachmentWrite)(config.write, (blobs) => materializeDocument(sources, document.right.entries, sourceSites, blobs));
|
|
412
440
|
const closure = (0, index_ts_1.validateRecordAttachmentWrite)(write);
|
|
413
441
|
if (effect_1.Either.isLeft(closure)) {
|
|
414
442
|
throw new Error("Assertions producer generated an invalid RecordAttachment closure");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["attachment.ts"],"names":[],"mappings":"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","sourcesContent":["import { Either, Schema } from \"effect\";\nimport { makeFixedRecordAttachmentWrite, validateRecordAttachmentWrite, type FixedAttachmentWriteSpec, type RecordAttachmentBlobBuilder, type RecordAttachmentBlobDraft, type RecordAttachmentPayloadSnapshot, type RecordAttachmentWrite, type RecordBlobRef, type RecordBlobSource, } from \"../../record/attachment/index.ts\";\nimport type { AssertionSourceSite, AssertionsAttachment, } from \"../../record/family/assertions.ts\";\nimport type { Sha256Digest } from \"../../record/model/identifiers.ts\";\nimport type { AssertionCoverage, AssertionCriterion, AssertionLimitation, AssertionMaterial, AssertionResult, AssertionSnapshotObject, AssertionSnapshotValue, SealedAssertionEntry, } from \"../api.ts\";\nimport { AssertionEntryIdSchema, AssertionsExactParseOptions, BoundedJsonObjectSchema, createAssertionsRecordSchemas, isBoundedJsonObject, projectAssertionsDocument, type ThirdPartyCriterionRegistry, } from \"./codec.ts\";\nimport { createAssertionsDocumentBuilder, type AssertionEntryInput, type AssertionsDocumentBuilder, type AssertionsEntryIdSource, type AssertionsProducerError, } from \"./producer.ts\";\nimport type { AssertionEntryId, AssertionEntry, AssertionEntryOuter, AssertionCoverage as RecordAssertionCoverage, AssertionLimitation as RecordAssertionLimitation, AssertionMaterial as RecordAssertionMaterial, AssertionsDocumentOuter, AssertionsProjection, BoundedJsonObject, BoundedJsonValue, SealedAssertionResult, WritableCriterionEnvelope, } from \"./model.ts\";\n/**\n * The Record attachment runtime keeps the real ref authority private. This\n * positional schema only lets the Assertions schema carry a package ref;\n * generic Record closure validation still rejects every ref not minted by the\n * current Attachment builder.\n */\nconst RecordBlobRefPositionSchema: Schema.Schema<RecordBlobRef, RecordBlobRef, never> = Schema.declare<RecordBlobRef>((value): value is RecordBlobRef => typeof value === \"object\" && value !== null);\n/**\n * Producer preflight needs to validate the strict writer document before the\n * real Attachment builder exists. This is deliberately not a RecordBlobRef:\n * final payloads replace it with a ref minted by `blobs.add` below.\n */\ninterface AssertionsProvisionalBlobRef {\n readonly kind: \"assertions-provisional-blob-ref\";\n}\nconst AssertionsProvisionalBlobRefSchema: Schema.Schema<AssertionsProvisionalBlobRef> = Schema.Struct({\n kind: Schema.Literal(\"assertions-provisional-blob-ref\"),\n});\nexport const assertionsRecordSchemas = createAssertionsRecordSchemas(RecordBlobRefPositionSchema);\nconst assertionsProducerSchemas = createAssertionsRecordSchemas(AssertionsProvisionalBlobRefSchema);\n/** Complete payload-order projection required by Record's closure validator. */\nexport function assertionBlobRefs(document: AssertionsDocumentOuter<RecordBlobRef>): readonly RecordBlobRef[] {\n const refs: RecordBlobRef[] = [];\n const collect = (material: RecordAssertionMaterial<RecordBlobRef>): void => {\n if (material.kind === \"blob\")\n refs.push(material.ref);\n };\n for (const entry of document.entries) {\n collect(entry.subject);\n for (const material of entry.evidence)\n collect(material);\n }\n return Object.freeze(refs);\n}\nexport type AssertionMaterialInput<E, R> = {\n readonly kind: \"snapshot\";\n readonly value: BoundedJsonValue;\n} | {\n readonly kind: \"blob\";\n readonly source: RecordBlobSource<E, R>;\n readonly encoding: \"utf-8\" | \"binary\";\n readonly byteLength: number;\n /** Digest declared by the producer and checked against sealed bytes. */\n readonly sha256: Sha256Digest;\n readonly preview: string;\n};\nexport interface AssertionsAttachmentEntryInput<E, R> {\n readonly display: AssertionEntryInput<RecordBlobRef>[\"display\"];\n readonly criterion: AssertionEntryInput<RecordBlobRef>[\"criterion\"];\n readonly subject: AssertionMaterialInput<E, R>;\n readonly evidence: readonly AssertionMaterialInput<E, R>[];\n readonly coverage: AssertionEntryInput<RecordBlobRef>[\"coverage\"];\n readonly limitations: AssertionEntryInput<RecordBlobRef>[\"limitations\"];\n readonly result: AssertionEntryInput<RecordBlobRef>[\"result\"];\n}\nfunction encodeSnapshotValue(value: AssertionSnapshotValue): BoundedJsonValue {\n if (value === null || typeof value === \"boolean\" || typeof value === \"number\" || typeof value === \"string\") {\n return value;\n }\n if (Array.isArray(value)) {\n return Object.freeze(value.map(encodeSnapshotValue));\n }\n const encoded: globalThis.Record<string, BoundedJsonValue> = {};\n for (const [key, nested] of Object.entries(value)) {\n encoded[key] = encodeSnapshotValue(nested);\n }\n return Object.freeze(encoded);\n}\nfunction encodeSnapshotObject(value: AssertionSnapshotObject): BoundedJsonObject {\n const encoded: globalThis.Record<string, BoundedJsonValue> = {};\n for (const [key, nested] of Object.entries(value)) {\n encoded[key] = encodeSnapshotValue(nested);\n }\n return Object.freeze(encoded);\n}\nfunction encodeCriterion(criterion: AssertionCriterion): WritableCriterionEnvelope {\n switch (criterion.kind) {\n case \"value-match\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"value-match/v1\" as const,\n data: Object.freeze({ subject: criterion.subject }),\n });\n case \"scope-status\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"scope-status/v1\" as const,\n data: Object.freeze({ scope: criterion.scope, assertion: criterion.assertion }),\n });\n case \"occurrence\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"occurrence/v1\" as const,\n data: Object.freeze({\n scope: criterion.scope,\n occurrence: criterion.occurrence,\n assertion: criterion.assertion,\n ...(criterion.matcher === undefined ? {} : { matcher: criterion.matcher }),\n ...(criterion.quantifier === undefined\n ? {}\n : {\n quantifier: criterion.quantifier.kind === \"absent\"\n ? Object.freeze({ kind: \"absent\" as const })\n : Object.freeze({ kind: criterion.quantifier.kind, count: criterion.quantifier.count }),\n }),\n }),\n });\n case \"judge-measurement\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"judge-measurement/v1\" as const,\n data: Object.freeze({ recipe: criterion.recipe, scale: criterion.scale }),\n });\n case \"sandbox-result\": {\n switch (criterion.operation) {\n case \"changed-paths\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({ operation: \"changed-paths\" as const, paths: Object.freeze([...criterion.paths]) }),\n });\n case \"no-changes\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({ operation: \"no-changes\" as const }),\n });\n case \"file-changed\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({\n operation: \"file-changed\" as const,\n path: criterion.path,\n ...(criterion.status === undefined ? {} : { status: criterion.status }),\n ...(criterion.before === undefined ? {} : { before: criterion.before }),\n ...(criterion.after === undefined ? {} : { after: criterion.after }),\n }),\n });\n case \"file-deleted\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({ operation: \"file-deleted\" as const, path: criterion.path }),\n });\n case \"not-in-diff\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({\n operation: \"not-in-diff\" as const,\n pattern: criterion.pattern,\n flags: criterion.flags,\n content: criterion.content,\n }),\n });\n }\n }\n case \"direct-score\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"direct-score/v1\" as const,\n data: Object.freeze({ source: criterion.source }),\n });\n case \"third-party\":\n return Object.freeze({\n name: criterion.name,\n schemaId: criterion.schemaId,\n data: encodeSnapshotValue(criterion.data),\n });\n }\n}\nfunction encodeMaterial(material: AssertionMaterial): AssertionMaterialInput<never, never> {\n switch (material.kind) {\n case \"snapshot\":\n return Object.freeze({\n kind: \"snapshot\" as const,\n value: encodeSnapshotValue(material.value),\n });\n case \"record-attachment\":\n return Object.freeze({\n // The durable Assertions closure cannot hold a capability into the\n // File Changes family. Keep only the already-safe display material.\n kind: \"snapshot\" as const,\n value: Object.freeze({\n kind: \"file-changes\",\n preview: material.preview,\n }),\n });\n }\n}\nfunction encodeCoverage(coverage: AssertionCoverage): AssertionCoverage {\n switch (coverage.state) {\n case \"complete\":\n return Object.freeze({ state: \"complete\" as const });\n case \"partial\":\n return Object.freeze({ state: \"partial\" as const, reason: coverage.reason });\n case \"unavailable\":\n return Object.freeze({ state: \"unavailable\" as const, reason: coverage.reason });\n case \"not-applicable\":\n return Object.freeze({ state: \"not-applicable\" as const, reason: coverage.reason });\n }\n}\nfunction encodeLimitations(limitations: readonly AssertionLimitation[]): readonly AssertionLimitation[] {\n return Object.freeze(limitations.map((limitation): AssertionLimitation => {\n switch (limitation.kind) {\n case \"redacted\":\n return Object.freeze({ kind: \"redacted\" as const, fieldCount: limitation.fieldCount });\n case \"sampled\":\n return Object.freeze({\n kind: \"sampled\" as const,\n captured: limitation.captured,\n ...(limitation.knownTotal === undefined ? {} : { knownTotal: limitation.knownTotal }),\n });\n case \"truncated\":\n return Object.freeze({ kind: \"truncated\" as const, omittedBytes: limitation.omittedBytes });\n case \"provider-limited\":\n return Object.freeze({ kind: \"provider-limited\" as const });\n }\n }));\n}\nexport function encodeAssertionResult(result: AssertionResult): SealedAssertionResult {\n const diagnostic = result.diagnostic === undefined\n ? {}\n : { diagnostic: encodeSnapshotObject(result.diagnostic) };\n switch (result.state) {\n case \"matched\":\n return Object.freeze({\n state: \"matched\" as const,\n gate: result.gate,\n score: result.score.state === \"earned\"\n ? Object.freeze({ state: \"earned\" as const, points: result.score.points, earned: result.score.earned })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n case \"mismatched\":\n return Object.freeze({\n state: \"mismatched\" as const,\n reason: result.reason,\n gate: result.gate,\n score: result.score.state === \"earned\"\n ? Object.freeze({ state: \"earned\" as const, points: result.score.points, earned: result.score.earned })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n case \"unavailable\":\n return Object.freeze({\n state: \"unavailable\" as const,\n reason: result.reason,\n gate: result.gate,\n score: result.score.state === \"unavailable\"\n ? Object.freeze({ state: \"unavailable\" as const, points: result.score.points, reason: result.score.reason })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n case \"errored\":\n return Object.freeze({\n state: \"errored\" as const,\n reason: result.reason,\n gate: result.gate,\n score: result.score.state === \"unavailable\"\n ? Object.freeze({ state: \"unavailable\" as const, points: result.score.points, reason: result.score.reason })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n case \"not-applicable\":\n return Object.freeze({\n state: \"not-applicable\" as const,\n reason: result.reason,\n gate: result.gate,\n score: result.score.state === \"unavailable\"\n ? Object.freeze({ state: \"unavailable\" as const, points: result.score.points, reason: result.score.reason })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n }\n}\n/** Private Runtime → durable Assertions codec bridge. */\nexport function encodeSealedAssertionEntry(entry: SealedAssertionEntry): AssertionsAttachmentEntryInput<never, never> {\n return Object.freeze({\n display: Object.freeze({\n ...(entry.display.key === undefined ? {} : { key: entry.display.key }),\n ...(entry.display.label === undefined ? {} : { label: entry.display.label }),\n groupPath: Object.freeze([...entry.display.groupPath]),\n }),\n criterion: encodeCriterion(entry.criterion),\n subject: encodeMaterial(entry.subject),\n evidence: Object.freeze(entry.evidence.map(encodeMaterial)),\n coverage: encodeCoverage(entry.coverage),\n limitations: encodeLimitations(entry.limitations),\n result: encodeAssertionResult(entry.result),\n });\n}\nexport interface AssertionsAttachmentProducer<E, R> {\n readonly append: (entry: AssertionsAttachmentEntryInput<E, R>) => Either.Either<AssertionEntryId, AssertionsProducerError>;\n readonly seal: (input?: AssertionsAttachmentSealInput) => Either.Either<RecordAttachmentWrite<\"attempt\", E, R>, AssertionsProducerError>;\n}\nexport interface AssertionsAttachmentSealInput {\n /** Semantic joins to origin-Run Sources, embedded in this fixed family. */\n readonly sourceSites?: readonly AssertionSourceSite[];\n}\nfunction makeProvisionalBlobRef(): AssertionsProvisionalBlobRef {\n return Object.freeze({ kind: \"assertions-provisional-blob-ref\" });\n}\nfunction provisionalMaterial<E, R>(material: AssertionMaterialInput<E, R>): RecordAssertionMaterial<AssertionsProvisionalBlobRef> {\n switch (material.kind) {\n case \"snapshot\":\n return Object.freeze({ kind: \"snapshot\", value: material.value });\n case \"blob\":\n return Object.freeze({\n kind: \"blob\",\n ref: makeProvisionalBlobRef(),\n encoding: material.encoding,\n byteLength: material.byteLength,\n sha256: material.sha256,\n preview: material.preview,\n });\n }\n}\nfunction provisionalEntry<E, R>(entry: AssertionsAttachmentEntryInput<E, R>): AssertionEntryInput<AssertionsProvisionalBlobRef> {\n return Object.freeze({\n display: entry.display,\n criterion: entry.criterion,\n subject: provisionalMaterial(entry.subject),\n evidence: Object.freeze(entry.evidence.map(provisionalMaterial)),\n coverage: entry.coverage,\n limitations: entry.limitations,\n result: entry.result,\n });\n}\ninterface AssertionsAttachmentEntrySources<E, R> {\n readonly subject: AssertionMaterialInput<E, R>;\n readonly evidence: readonly AssertionMaterialInput<E, R>[];\n}\nfunction captureEntrySources<E, R>(entry: AssertionsAttachmentEntryInput<E, R>): AssertionsAttachmentEntrySources<E, R> {\n return Object.freeze({\n subject: entry.subject,\n evidence: Object.freeze([...entry.evidence]),\n });\n}\nfunction materializeMaterial<E, R>(material: RecordAssertionMaterial<AssertionsProvisionalBlobRef>, source: AssertionMaterialInput<E, R>, blobs: RecordAttachmentBlobBuilder, drafts: RecordAttachmentBlobDraft<E, R>[]): RecordAssertionMaterial<RecordBlobRef> {\n if (material.kind === \"snapshot\") {\n if (source.kind !== \"snapshot\") {\n throw new Error(\"Assertions producer changed a sealed material kind\");\n }\n return Object.freeze({ kind: \"snapshot\", value: material.value });\n }\n if (source.kind !== \"blob\") {\n throw new Error(\"Assertions producer changed a sealed material kind\");\n }\n const draft = blobs.add(source.source);\n drafts.push(draft);\n return Object.freeze({\n kind: \"blob\",\n ref: draft.ref,\n encoding: material.encoding,\n byteLength: material.byteLength,\n sha256: material.sha256,\n preview: material.preview,\n });\n}\nfunction outerCriterion(criterion: AssertionEntry<AssertionsProvisionalBlobRef>[\"criterion\"]): AssertionEntryOuter<RecordBlobRef>[\"criterion\"] {\n // Effect's structural decoder reads fields before a trailing filter. Keep\n // the descriptor-aware raw check in front so accessors are never executed.\n if (!isBoundedJsonObject(criterion)) {\n throw new Error(\"An Assertions v1 writer criterion must be bounded JSON\");\n }\n const decoded = Schema.decodeUnknownEither(BoundedJsonObjectSchema, AssertionsExactParseOptions)(criterion);\n if (Either.isLeft(decoded)) {\n throw new Error(\"An Assertions v1 writer criterion must be bounded JSON\");\n }\n return decoded.right;\n}\nfunction materializeDocument<E, R>(sources: readonly AssertionsAttachmentEntrySources<E, R>[], sealedEntries: readonly AssertionEntry<AssertionsProvisionalBlobRef>[], sourceSites: readonly AssertionSourceSite[], blobs: RecordAttachmentBlobBuilder): {\n readonly payload: AssertionsAttachment;\n readonly blobs: readonly RecordAttachmentBlobDraft<E, R>[];\n} {\n const drafts: RecordAttachmentBlobDraft<E, R>[] = [];\n const materializedEntries: AssertionEntryOuter<RecordBlobRef>[] = [];\n for (const [index, sealed] of sealedEntries.entries()) {\n const source = sources[index];\n if (source === undefined) {\n throw new Error(\"Assertions producer lost a sealed entry source\");\n }\n if (source.evidence.length !== sealed.evidence.length) {\n throw new Error(\"Assertions producer changed sealed evidence cardinality\");\n }\n materializedEntries.push(Object.freeze({\n entryId: sealed.entryId,\n display: sealed.display,\n criterion: outerCriterion(sealed.criterion),\n subject: materializeMaterial(sealed.subject, source.subject, blobs, drafts),\n evidence: Object.freeze(sealed.evidence.map((material, evidenceIndex) => {\n const evidenceSource = source.evidence[evidenceIndex];\n if (evidenceSource === undefined) {\n throw new Error(\"Assertions producer lost a sealed evidence source\");\n }\n return materializeMaterial(material, evidenceSource, blobs, drafts);\n })),\n coverage: sealed.coverage,\n limitations: sealed.limitations,\n result: sealed.result,\n }));\n }\n return Object.freeze({\n payload: Object.freeze({\n entries: Object.freeze(materializedEntries),\n // Source sites are joined into this fixed family by the runner's source\n // capture before final sealing. A producer with no captured site writes\n // the exact empty sequence instead of another durable family.\n sourceSites: Object.freeze([...sourceSites]),\n }),\n blobs: Object.freeze(drafts),\n });\n}\n/**\n * Collects completed facts in declaration order, then mints every blob ref\n * inside one generic RecordAttachment write. Callers never receive a raw ref,\n * path, key, or bytes channel, so cross-Attachment closure is impossible.\n */\nexport function createAssertionsAttachmentProducer<E, R>(config: {\n readonly entryIds: AssertionsEntryIdSource;\n /** Injected by the fixed catalog consumer to avoid a catalog initialization cycle. */\n readonly write: FixedAttachmentWriteSpec<\"attempt\", AssertionsAttachment>;\n}): AssertionsAttachmentProducer<E, R> {\n const documentBuilder: AssertionsDocumentBuilder<AssertionsProvisionalBlobRef> = createAssertionsDocumentBuilder({\n documentSchema: assertionsProducerSchemas.document,\n entryIds: config.entryIds,\n });\n const sources: AssertionsAttachmentEntrySources<E, R>[] = [];\n let sealed: Either.Either<RecordAttachmentWrite<\"attempt\", E, R>, AssertionsProducerError> | undefined;\n const producer: AssertionsAttachmentProducer<E, R> = {\n append(entry) {\n const appended = documentBuilder.append(provisionalEntry(entry));\n if (Either.isRight(appended))\n sources.push(captureEntrySources(entry));\n return appended;\n },\n seal(sealInput: AssertionsAttachmentSealInput = {}) {\n if (sealed !== undefined)\n return sealed;\n const document = documentBuilder.seal();\n if (Either.isLeft(document)) {\n sealed = Either.left(document.left);\n return sealed;\n }\n const write = makeFixedRecordAttachmentWrite(config.write, (blobs) => materializeDocument(sources, document.right.entries, sealInput.sourceSites ?? Object.freeze([]), blobs));\n const closure = validateRecordAttachmentWrite(write);\n if (Either.isLeft(closure)) {\n throw new Error(\"Assertions producer generated an invalid RecordAttachment closure\");\n }\n sealed = Either.right(write);\n return sealed;\n },\n };\n return Object.freeze(producer);\n}\nexport interface AssertionsProjectorDefinition {\n readonly write: FixedAttachmentWriteSpec<\"attempt\", AssertionsAttachment>;\n readonly project: (value: RecordAttachmentPayloadSnapshot<AssertionsAttachment>) => AssertionsProjection<RecordBlobRef>;\n}\n/** Typed, synchronous projection over one already-materialized Attachment value. */\nexport function defineAssertionsProjector(registry: ThirdPartyCriterionRegistry, write: FixedAttachmentWriteSpec<\"attempt\", AssertionsAttachment>): AssertionsProjectorDefinition {\n return Object.freeze({\n write,\n project(value: RecordAttachmentPayloadSnapshot<AssertionsAttachment>) {\n return projectAssertionsDocument(value, registry);\n },\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["attachment.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { Either, Schema, Stream } from \"effect\";\nimport { makeFixedRecordAttachmentWrite, makeRecordBlobSource, validateRecordAttachmentWrite, type FixedAttachmentWriteSpec, type RecordAttachmentBlobBuilder, type RecordAttachmentBlobDraft, type RecordAttachmentPayloadSnapshot, type RecordAttachmentWrite, type RecordBlobRef, type RecordBlobSource, } from \"../../record/attachment/index.ts\";\nimport { Sha256DigestSchema } from \"../../record/codec/identifiers.ts\";\nimport type { AssertionSourceSite, AssertionsAttachment, } from \"../../record/family/assertions.ts\";\nimport type { Sha256Digest } from \"../../record/model/identifiers.ts\";\nimport type { AssertionCoverage, AssertionCriterion, AssertionLimitation, AssertionMaterial, AssertionResult, AssertionSnapshotObject, AssertionSnapshotValue, SealedAssertionEntry, } from \"../api.ts\";\nimport { AssertionEntryIdSchema, AssertionsExactParseOptions, BoundedJsonObjectSchema, BoundedJsonValueSchema, MAX_ASSERTION_DOCUMENT_BYTES, createAssertionsRecordSchemas, isBoundedJsonObject, projectAssertionsDocument, type ThirdPartyCriterionRegistry, } from \"./codec.ts\";\nimport { createAssertionsDocumentBuilder, type AssertionEntryInput, type AssertionsDocumentBuilder, type AssertionsEntryIdSource, type AssertionsProducerError, } from \"./producer.ts\";\nimport type { AssertionEntryId, AssertionEntry, AssertionEntryOuter, AssertionCoverage as RecordAssertionCoverage, AssertionLimitation as RecordAssertionLimitation, AssertionMaterial as RecordAssertionMaterial, AssertionsDocumentOuter, AssertionsProjection, BoundedJsonObject, BoundedJsonValue, SealedAssertionResult, WritableCriterionEnvelope, } from \"./model.ts\";\n/**\n * The Record attachment runtime keeps the real ref authority private. This\n * positional schema only lets the Assertions schema carry a package ref;\n * generic Record closure validation still rejects every ref not minted by the\n * current Attachment builder.\n */\nconst RecordBlobRefPositionSchema: Schema.Schema<RecordBlobRef, RecordBlobRef, never> = Schema.declare<RecordBlobRef>((value): value is RecordBlobRef => typeof value === \"object\" && value !== null);\n/**\n * Producer preflight needs to validate the strict writer document before the\n * real Attachment builder exists. This is deliberately not a RecordBlobRef:\n * final payloads replace it with a ref minted by `blobs.add` below.\n */\ninterface AssertionsProvisionalBlobRef {\n readonly kind: \"assertions-provisional-blob-ref\";\n}\nconst AssertionsProvisionalBlobRefSchema: Schema.Schema<AssertionsProvisionalBlobRef> = Schema.Struct({\n kind: Schema.Literal(\"assertions-provisional-blob-ref\"),\n});\nexport const assertionsRecordSchemas = createAssertionsRecordSchemas(RecordBlobRefPositionSchema);\nconst assertionsProducerSchemas = createAssertionsRecordSchemas(AssertionsProvisionalBlobRefSchema);\n/** Complete payload-order projection required by Record's closure validator. */\nexport function assertionBlobRefs(document: AssertionsDocumentOuter<RecordBlobRef>): readonly RecordBlobRef[] {\n const refs: RecordBlobRef[] = [];\n const collect = (material: RecordAssertionMaterial<RecordBlobRef>): void => {\n if (material.kind === \"blob\")\n refs.push(material.ref);\n };\n for (const entry of document.entries) {\n collect(entry.subject);\n for (const material of entry.evidence)\n collect(material);\n }\n return Object.freeze(refs);\n}\nexport type AssertionMaterialInput<E, R> = {\n readonly kind: \"snapshot\";\n readonly value: BoundedJsonValue;\n} | {\n readonly kind: \"blob\";\n readonly source: RecordBlobSource<E, R>;\n readonly encoding: \"utf-8\" | \"binary\";\n readonly byteLength: number;\n /** Digest declared by the producer and checked against sealed bytes. */\n readonly sha256: Sha256Digest;\n readonly preview: string;\n};\nexport interface AssertionsAttachmentEntryInput<E, R> {\n readonly display: AssertionEntryInput<RecordBlobRef>[\"display\"];\n readonly criterion: AssertionEntryInput<RecordBlobRef>[\"criterion\"];\n readonly subject: AssertionMaterialInput<E, R>;\n readonly evidence: readonly AssertionMaterialInput<E, R>[];\n readonly coverage: AssertionEntryInput<RecordBlobRef>[\"coverage\"];\n readonly limitations: AssertionEntryInput<RecordBlobRef>[\"limitations\"];\n readonly result: AssertionEntryInput<RecordBlobRef>[\"result\"];\n}\nfunction encodeSnapshotValue(value: AssertionSnapshotValue): BoundedJsonValue {\n if (value === null || typeof value === \"boolean\" || typeof value === \"number\" || typeof value === \"string\") {\n return value;\n }\n if (Array.isArray(value)) {\n return Object.freeze(value.map(encodeSnapshotValue));\n }\n const encoded: globalThis.Record<string, BoundedJsonValue> = {};\n for (const [key, nested] of Object.entries(value)) {\n encoded[key] = encodeSnapshotValue(nested);\n }\n return Object.freeze(encoded);\n}\nfunction encodeSnapshotObject(value: AssertionSnapshotObject): BoundedJsonObject {\n const encoded: globalThis.Record<string, BoundedJsonValue> = {};\n for (const [key, nested] of Object.entries(value)) {\n encoded[key] = encodeSnapshotValue(nested);\n }\n return Object.freeze(encoded);\n}\nfunction encodeCriterion(criterion: AssertionCriterion): WritableCriterionEnvelope {\n switch (criterion.kind) {\n case \"value-match\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"value-match/v1\" as const,\n data: Object.freeze({ subject: criterion.subject }),\n });\n case \"scope-status\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"scope-status/v1\" as const,\n data: Object.freeze({ scope: criterion.scope, assertion: criterion.assertion }),\n });\n case \"occurrence\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"occurrence/v1\" as const,\n data: Object.freeze({\n scope: criterion.scope,\n occurrence: criterion.occurrence,\n assertion: criterion.assertion,\n ...(criterion.matcher === undefined ? {} : { matcher: criterion.matcher }),\n ...(criterion.quantifier === undefined\n ? {}\n : {\n quantifier: criterion.quantifier.kind === \"absent\"\n ? Object.freeze({ kind: \"absent\" as const })\n : Object.freeze({ kind: criterion.quantifier.kind, count: criterion.quantifier.count }),\n }),\n }),\n });\n case \"judge-measurement\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"judge-measurement/v1\" as const,\n data: Object.freeze({ recipe: criterion.recipe, scale: criterion.scale }),\n });\n case \"sandbox-result\": {\n switch (criterion.operation) {\n case \"changed-paths\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({ operation: \"changed-paths\" as const, paths: Object.freeze([...criterion.paths]) }),\n });\n case \"no-changes\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({ operation: \"no-changes\" as const }),\n });\n case \"file-changed\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({\n operation: \"file-changed\" as const,\n path: criterion.path,\n ...(criterion.status === undefined ? {} : { status: criterion.status }),\n ...(criterion.before === undefined ? {} : { before: criterion.before }),\n ...(criterion.after === undefined ? {} : { after: criterion.after }),\n }),\n });\n case \"file-deleted\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({ operation: \"file-deleted\" as const, path: criterion.path }),\n });\n case \"not-in-diff\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"sandbox-result/v1\" as const,\n data: Object.freeze({\n operation: \"not-in-diff\" as const,\n pattern: criterion.pattern,\n flags: criterion.flags,\n content: criterion.content,\n }),\n });\n }\n }\n case \"direct-score\":\n return Object.freeze({\n kind: \"builtin\" as const,\n id: \"direct-score/v1\" as const,\n data: Object.freeze({ source: criterion.source }),\n });\n case \"third-party\":\n return Object.freeze({\n name: criterion.name,\n schemaId: criterion.schemaId,\n data: encodeSnapshotValue(criterion.data),\n });\n }\n}\nfunction encodeMaterial(material: AssertionMaterial): AssertionMaterialInput<never, never> {\n switch (material.kind) {\n case \"snapshot\": {\n const value = encodeSnapshotValue(material.value);\n const bytes = new TextEncoder().encode(JSON.stringify(value));\n const inline = Schema.decodeUnknownEither(BoundedJsonValueSchema, AssertionsExactParseOptions)(value);\n if (bytes.byteLength > 32 * 1024 || Either.isLeft(inline)) {\n const digest = Schema.decodeUnknownEither(Sha256DigestSchema)(createHash(\"sha256\").update(bytes).digest(\"hex\"));\n if (Either.isLeft(digest)) {\n throw new Error(\"Assertions snapshot produced an invalid SHA-256 digest\");\n }\n return Object.freeze({\n kind: \"blob\" as const,\n source: makeRecordBlobSource(Stream.succeed(bytes)),\n encoding: \"utf-8\" as const,\n byteLength: bytes.byteLength,\n sha256: digest.right,\n preview: `JSON Assertion material stored as a ${bytes.byteLength}-byte blob`,\n });\n }\n return Object.freeze({\n kind: \"snapshot\" as const,\n value: inline.right,\n });\n }\n case \"record-attachment\":\n return Object.freeze({\n // The durable Assertions closure cannot hold a capability into the\n // File Changes family. Keep only the already-safe display material.\n kind: \"snapshot\" as const,\n value: Object.freeze({\n kind: \"file-changes\",\n preview: material.preview,\n }),\n });\n }\n}\nfunction encodeCoverage(coverage: AssertionCoverage): AssertionCoverage {\n switch (coverage.state) {\n case \"complete\":\n return Object.freeze({ state: \"complete\" as const });\n case \"partial\":\n return Object.freeze({ state: \"partial\" as const, reason: coverage.reason });\n case \"unavailable\":\n return Object.freeze({ state: \"unavailable\" as const, reason: coverage.reason });\n case \"not-applicable\":\n return Object.freeze({ state: \"not-applicable\" as const, reason: coverage.reason });\n }\n}\nfunction encodeLimitations(limitations: readonly AssertionLimitation[]): readonly AssertionLimitation[] {\n return Object.freeze(limitations.map((limitation): AssertionLimitation => {\n switch (limitation.kind) {\n case \"redacted\":\n return Object.freeze({ kind: \"redacted\" as const, fieldCount: limitation.fieldCount });\n case \"sampled\":\n return Object.freeze({\n kind: \"sampled\" as const,\n captured: limitation.captured,\n ...(limitation.knownTotal === undefined ? {} : { knownTotal: limitation.knownTotal }),\n });\n case \"truncated\":\n return Object.freeze({ kind: \"truncated\" as const, omittedBytes: limitation.omittedBytes });\n case \"provider-limited\":\n return Object.freeze({ kind: \"provider-limited\" as const });\n }\n }));\n}\nexport function encodeAssertionResult(result: AssertionResult): SealedAssertionResult {\n const diagnostic = result.diagnostic === undefined\n ? {}\n : { diagnostic: encodeSnapshotObject(result.diagnostic) };\n switch (result.state) {\n case \"matched\":\n return Object.freeze({\n state: \"matched\" as const,\n gate: result.gate,\n score: result.score.state === \"earned\"\n ? Object.freeze({ state: \"earned\" as const, points: result.score.points, earned: result.score.earned })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n case \"mismatched\":\n return Object.freeze({\n state: \"mismatched\" as const,\n reason: result.reason,\n gate: result.gate,\n score: result.score.state === \"earned\"\n ? Object.freeze({ state: \"earned\" as const, points: result.score.points, earned: result.score.earned })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n case \"unavailable\":\n return Object.freeze({\n state: \"unavailable\" as const,\n reason: result.reason,\n gate: result.gate,\n score: result.score.state === \"unavailable\"\n ? Object.freeze({ state: \"unavailable\" as const, points: result.score.points, reason: result.score.reason })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n case \"errored\":\n return Object.freeze({\n state: \"errored\" as const,\n reason: result.reason,\n gate: result.gate,\n score: result.score.state === \"unavailable\"\n ? Object.freeze({ state: \"unavailable\" as const, points: result.score.points, reason: result.score.reason })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n case \"not-applicable\":\n return Object.freeze({\n state: \"not-applicable\" as const,\n reason: result.reason,\n gate: result.gate,\n score: result.score.state === \"unavailable\"\n ? Object.freeze({ state: \"unavailable\" as const, points: result.score.points, reason: result.score.reason })\n : Object.freeze({ state: \"not-scored\" as const }),\n ...diagnostic,\n });\n }\n}\n/** Private Runtime → durable Assertions codec bridge. */\nexport function encodeSealedAssertionEntry(entry: SealedAssertionEntry): AssertionsAttachmentEntryInput<never, never> {\n return Object.freeze({\n display: Object.freeze({\n ...(entry.display.key === undefined ? {} : { key: entry.display.key }),\n ...(entry.display.label === undefined ? {} : { label: entry.display.label }),\n groupPath: Object.freeze([...entry.display.groupPath]),\n }),\n criterion: encodeCriterion(entry.criterion),\n subject: encodeMaterial(entry.subject),\n evidence: Object.freeze(entry.evidence.map(encodeMaterial)),\n coverage: encodeCoverage(entry.coverage),\n limitations: encodeLimitations(entry.limitations),\n result: encodeAssertionResult(entry.result),\n });\n}\nexport interface AssertionsAttachmentProducer<E, R> {\n readonly append: (entry: AssertionsAttachmentEntryInput<E, R>) => Either.Either<AssertionEntryId, AssertionsProducerError>;\n readonly seal: (input?: AssertionsAttachmentSealInput) => Either.Either<RecordAttachmentWrite<\"attempt\", E, R>, AssertionsProducerError>;\n}\nexport interface AssertionsAttachmentSealInput {\n /** Semantic joins to origin-Run Sources, embedded in this fixed family. */\n readonly sourceSites?: readonly AssertionSourceSite[];\n}\nfunction makeProvisionalBlobRef(): AssertionsProvisionalBlobRef {\n return Object.freeze({ kind: \"assertions-provisional-blob-ref\" });\n}\nfunction provisionalMaterial<E, R>(material: AssertionMaterialInput<E, R>): RecordAssertionMaterial<AssertionsProvisionalBlobRef> {\n switch (material.kind) {\n case \"snapshot\":\n return Object.freeze({ kind: \"snapshot\", value: material.value });\n case \"blob\":\n return Object.freeze({\n kind: \"blob\",\n ref: makeProvisionalBlobRef(),\n encoding: material.encoding,\n byteLength: material.byteLength,\n sha256: material.sha256,\n preview: material.preview,\n });\n }\n}\nfunction provisionalEntry<E, R>(entry: AssertionsAttachmentEntryInput<E, R>): AssertionEntryInput<AssertionsProvisionalBlobRef> {\n return Object.freeze({\n display: entry.display,\n criterion: entry.criterion,\n subject: provisionalMaterial(entry.subject),\n evidence: Object.freeze(entry.evidence.map(provisionalMaterial)),\n coverage: entry.coverage,\n limitations: entry.limitations,\n result: entry.result,\n });\n}\ninterface AssertionsAttachmentEntrySources<E, R> {\n readonly subject: AssertionMaterialInput<E, R>;\n readonly evidence: readonly AssertionMaterialInput<E, R>[];\n}\nfunction captureEntrySources<E, R>(entry: AssertionsAttachmentEntryInput<E, R>): AssertionsAttachmentEntrySources<E, R> {\n return Object.freeze({\n subject: entry.subject,\n evidence: Object.freeze([...entry.evidence]),\n });\n}\nfunction materializeMaterial<E, R>(material: RecordAssertionMaterial<AssertionsProvisionalBlobRef>, source: AssertionMaterialInput<E, R>, blobs: RecordAttachmentBlobBuilder, drafts: RecordAttachmentBlobDraft<E, R>[]): RecordAssertionMaterial<RecordBlobRef> {\n if (material.kind === \"snapshot\") {\n if (source.kind !== \"snapshot\") {\n throw new Error(\"Assertions producer changed a sealed material kind\");\n }\n return Object.freeze({ kind: \"snapshot\", value: material.value });\n }\n if (source.kind !== \"blob\") {\n throw new Error(\"Assertions producer changed a sealed material kind\");\n }\n const draft = blobs.add(source.source);\n drafts.push(draft);\n return Object.freeze({\n kind: \"blob\",\n ref: draft.ref,\n encoding: material.encoding,\n byteLength: material.byteLength,\n sha256: material.sha256,\n preview: material.preview,\n });\n}\nfunction outerCriterion(criterion: AssertionEntry<AssertionsProvisionalBlobRef>[\"criterion\"]): AssertionEntryOuter<RecordBlobRef>[\"criterion\"] {\n // Effect's structural decoder reads fields before a trailing filter. Keep\n // the descriptor-aware raw check in front so accessors are never executed.\n if (!isBoundedJsonObject(criterion)) {\n throw new Error(\"An Assertions v1 writer criterion must be bounded JSON\");\n }\n const decoded = Schema.decodeUnknownEither(BoundedJsonObjectSchema, AssertionsExactParseOptions)(criterion);\n if (Either.isLeft(decoded)) {\n throw new Error(\"An Assertions v1 writer criterion must be bounded JSON\");\n }\n return decoded.right;\n}\nfunction materializeDocument<E, R>(sources: readonly AssertionsAttachmentEntrySources<E, R>[], sealedEntries: readonly AssertionEntry<AssertionsProvisionalBlobRef>[], sourceSites: readonly AssertionSourceSite[], blobs: RecordAttachmentBlobBuilder): {\n readonly payload: AssertionsAttachment;\n readonly blobs: readonly RecordAttachmentBlobDraft<E, R>[];\n} {\n const drafts: RecordAttachmentBlobDraft<E, R>[] = [];\n const materializedEntries: AssertionEntryOuter<RecordBlobRef>[] = [];\n for (const [index, sealed] of sealedEntries.entries()) {\n const source = sources[index];\n if (source === undefined) {\n throw new Error(\"Assertions producer lost a sealed entry source\");\n }\n if (source.evidence.length !== sealed.evidence.length) {\n throw new Error(\"Assertions producer changed sealed evidence cardinality\");\n }\n materializedEntries.push(Object.freeze({\n entryId: sealed.entryId,\n display: sealed.display,\n criterion: outerCriterion(sealed.criterion),\n subject: materializeMaterial(sealed.subject, source.subject, blobs, drafts),\n evidence: Object.freeze(sealed.evidence.map((material, evidenceIndex) => {\n const evidenceSource = source.evidence[evidenceIndex];\n if (evidenceSource === undefined) {\n throw new Error(\"Assertions producer lost a sealed evidence source\");\n }\n return materializeMaterial(material, evidenceSource, blobs, drafts);\n })),\n coverage: sealed.coverage,\n limitations: sealed.limitations,\n result: sealed.result,\n }));\n }\n return Object.freeze({\n payload: Object.freeze({\n entries: Object.freeze(materializedEntries),\n // Source sites are joined into this fixed family by the runner's source\n // capture before final sealing. A producer with no captured site writes\n // the exact empty sequence instead of another durable family.\n sourceSites: Object.freeze([...sourceSites]),\n }),\n blobs: Object.freeze(drafts),\n });\n}\n/**\n * Collects completed facts in declaration order, then mints every blob ref\n * inside one generic RecordAttachment write. Callers never receive a raw ref,\n * path, key, or bytes channel, so cross-Attachment closure is impossible.\n */\nexport function createAssertionsAttachmentProducer<E, R>(config: {\n readonly entryIds: AssertionsEntryIdSource;\n /** Injected by the fixed catalog consumer to avoid a catalog initialization cycle. */\n readonly write: FixedAttachmentWriteSpec<\"attempt\", AssertionsAttachment>;\n}): AssertionsAttachmentProducer<E, R> {\n const documentBuilder: AssertionsDocumentBuilder<AssertionsProvisionalBlobRef> = createAssertionsDocumentBuilder({\n documentSchema: assertionsProducerSchemas.document,\n entryIds: config.entryIds,\n });\n const sources: AssertionsAttachmentEntrySources<E, R>[] = [];\n let sealed: Either.Either<RecordAttachmentWrite<\"attempt\", E, R>, AssertionsProducerError> | undefined;\n const producer: AssertionsAttachmentProducer<E, R> = {\n append(entry) {\n const appended = documentBuilder.append(provisionalEntry(entry));\n if (Either.isRight(appended))\n sources.push(captureEntrySources(entry));\n return appended;\n },\n seal(sealInput: AssertionsAttachmentSealInput = {}) {\n if (sealed !== undefined)\n return sealed;\n const sourceSites = Object.freeze([...(sealInput.sourceSites ?? [])]);\n const emptyEntriesBytes = new TextEncoder().encode(JSON.stringify({ entries: [] })).byteLength;\n const sourceSitesFramingBytes = new TextEncoder().encode(JSON.stringify({\n entries: [],\n sourceSites,\n })).byteLength - emptyEntriesBytes;\n const document = documentBuilder.seal({\n maximumBytes: MAX_ASSERTION_DOCUMENT_BYTES - sourceSitesFramingBytes,\n });\n if (Either.isLeft(document)) {\n sealed = Either.left(document.left);\n return sealed;\n }\n const write = makeFixedRecordAttachmentWrite(config.write, (blobs) => materializeDocument(sources, document.right.entries, sourceSites, blobs));\n const closure = validateRecordAttachmentWrite(write);\n if (Either.isLeft(closure)) {\n throw new Error(\"Assertions producer generated an invalid RecordAttachment closure\");\n }\n sealed = Either.right(write);\n return sealed;\n },\n };\n return Object.freeze(producer);\n}\nexport interface AssertionsProjectorDefinition {\n readonly write: FixedAttachmentWriteSpec<\"attempt\", AssertionsAttachment>;\n readonly project: (value: RecordAttachmentPayloadSnapshot<AssertionsAttachment>) => AssertionsProjection<RecordBlobRef>;\n}\n/** Typed, synchronous projection over one already-materialized Attachment value. */\nexport function defineAssertionsProjector(registry: ThirdPartyCriterionRegistry, write: FixedAttachmentWriteSpec<\"attempt\", AssertionsAttachment>): AssertionsProjectorDefinition {\n return Object.freeze({\n write,\n project(value: RecordAttachmentPayloadSnapshot<AssertionsAttachment>) {\n return projectAssertionsDocument(value, registry);\n },\n });\n}\n"]}
|
|
@@ -15,6 +15,12 @@ const catalog_ts_1 = require("../../record/family/catalog.cjs");
|
|
|
15
15
|
const file_changes_ts_1 = require("../../record/family/file-changes.cjs");
|
|
16
16
|
const workspace_diff_ts_1 = require("../workspace-diff.cjs");
|
|
17
17
|
const encoder = new TextEncoder();
|
|
18
|
+
// Producer retention is deliberately tighter than the v1 decoder ceiling.
|
|
19
|
+
// Existing Records with up to 10,000 changes remain readable, while new
|
|
20
|
+
// captures avoid multiplying schema encode/write/read validation work during
|
|
21
|
+
// publication.
|
|
22
|
+
const MAXIMUM_PRODUCED_CHANGES_PER_WINDOW = 1000;
|
|
23
|
+
const MAXIMUM_PRODUCED_CHANGES_PER_ATTACHMENT = 1000;
|
|
18
24
|
const blobBudgetProjection = Object.freeze({
|
|
19
25
|
"$niceeval.record.blob-ref": true,
|
|
20
26
|
});
|
|
@@ -240,16 +246,16 @@ function structuralCapture(source) {
|
|
|
240
246
|
}
|
|
241
247
|
}
|
|
242
248
|
const prepared = changes.map(prepareChange);
|
|
243
|
-
if (prepared.length >
|
|
244
|
-
limitations.push(capLimitation("change", prepared.length -
|
|
249
|
+
if (prepared.length > MAXIMUM_PRODUCED_CHANGES_PER_WINDOW) {
|
|
250
|
+
limitations.push(capLimitation("change", prepared.length - MAXIMUM_PRODUCED_CHANGES_PER_WINDOW, windowId));
|
|
245
251
|
}
|
|
246
252
|
preparedWindows.push(Object.freeze({
|
|
247
253
|
windowId,
|
|
248
254
|
sequence: index + 1,
|
|
249
|
-
changes: freezeArray(prepared.slice(0,
|
|
255
|
+
changes: freezeArray(prepared.slice(0, MAXIMUM_PRODUCED_CHANGES_PER_WINDOW)),
|
|
250
256
|
}));
|
|
251
257
|
}
|
|
252
|
-
let remainingChanges =
|
|
258
|
+
let remainingChanges = MAXIMUM_PRODUCED_CHANGES_PER_ATTACHMENT;
|
|
253
259
|
const capturedWindows = preparedWindows.map((window) => {
|
|
254
260
|
const retained = Math.min(window.changes.length, remainingChanges);
|
|
255
261
|
if (retained < window.changes.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["diff.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { Either, Schema, Stream } from \"effect\";\nimport { makeFixedRecordAttachmentWrite, makeRecordBlobSource, validateRecordAttachmentWrite, type RecordAttachmentBlobDraft, type RecordAttachmentWrite, } from \"../../record/attachment/index.ts\";\nimport { makeRecordBlobRef } from \"../../record/attachment/internal.ts\";\nimport { RecordExactParseOptions } from \"../../record/codec/core.ts\";\nimport { fileChangesRecordFamily } from \"../../record/family/catalog.ts\";\nimport { FileChangesAttachmentSchema, FileChangesLimits, fileChangesCollectionLimitationKey, type FileChangesAttachment, type FileChangesAttribution, type FileChangesCollectionLimitation, type FileChangesCollectionState, } from \"../../record/family/file-changes.ts\";\nimport { agentSendWindowId, type AgentWorkspaceDiff, type AgentWorkspaceDiffEndpoint, type AgentWorkspaceDiffPolicy, type AgentWorkspaceDiffWindow, type AgentWorkspaceDiffWindowChange, } from \"../workspace-diff.ts\";\ntype CaptureTextRevision = {\n readonly kind: \"text\";\n readonly sha256: string;\n readonly byteLength: number;\n readonly content: {\n readonly state: \"available\";\n readonly text: string;\n } | {\n readonly state: \"omitted\";\n readonly reason: \"collection-cap\";\n };\n};\ntype CaptureRevision = CaptureTextRevision | {\n readonly kind: \"elided\";\n readonly reason: \"binary\" | \"oversized-text\";\n readonly byteLength: number;\n} | {\n readonly kind: \"unavailable\";\n readonly reason: \"unsupported-input\" | \"capture-failed\" | \"capture-interrupted\";\n};\ntype CaptureEndpoint = {\n readonly state: \"absent\";\n} | {\n readonly state: \"present\";\n readonly revision: CaptureRevision;\n};\ninterface PreparedChange {\n readonly path: string;\n readonly kind: \"created\" | \"modified\" | \"deleted\";\n readonly before: CaptureEndpoint;\n readonly after: CaptureEndpoint;\n /** Not durable: it lets JSON truncation account only for retained bad endpoints. */\n readonly unsupportedEndpointCount: number;\n}\ninterface CapturedChange extends PreparedChange {\n readonly changeId: string;\n}\ninterface CapturedWindow {\n readonly windowId: string;\n readonly sequence: number;\n readonly changes: readonly CapturedChange[];\n}\n/**\n * Attempt-owned frozen File Changes input. Change ids are minted exactly here,\n * before Record preflight or any write/retry can allocate blob refs.\n */\nexport interface FileChangesCapture {\n readonly attribution: FileChangesAttribution;\n readonly collection: FileChangesCollectionState;\n readonly windows: readonly CapturedWindow[];\n}\nexport interface CreateFileChangesCaptureInput {\n readonly document: AgentWorkspaceDiff;\n /** Collector-stage facts observed by the caller before this capture freezes. */\n readonly limitations?: readonly FileChangesCollectionLimitation[];\n}\ninterface CaptureDocumentSource {\n readonly attribution: \"agent-send-window-endpoints\";\n readonly policy: AgentWorkspaceDiffPolicy;\n readonly windows: readonly AgentWorkspaceDiffWindow[];\n}\nconst encoder = new TextEncoder();\nconst blobBudgetProjection = Object.freeze({\n \"$niceeval.record.blob-ref\": true,\n});\nconst captureSchemaBlobRef = makeRecordBlobRef();\nfunction compareAscii(left: string, right: string): number {\n return left === right ? 0 : left < right ? -1 : 1;\n}\nfunction freezeArray<Value>(values: readonly Value[]): readonly Value[] {\n return Object.freeze([...values]);\n}\nfunction nextChangeId(): string {\n return `fc_${randomUUID().replaceAll(\"-\", \"\")}`;\n}\nfunction sha256(bytes: Uint8Array): string {\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\nfunction canonicalStrings(values: readonly string[]): readonly string[] {\n return freezeArray([...new Set(values)].sort(compareAscii));\n}\nfunction captureAttribution(policy: AgentWorkspaceDiffPolicy): FileChangesAttribution {\n return Object.freeze({\n kind: \"agent-send-window-endpoints\" as const,\n policy: Object.freeze({\n defaultPolicy: policy.defaultPolicy,\n include: canonicalStrings(policy.include),\n ignore: canonicalStrings(policy.ignore),\n }),\n }) as FileChangesAttribution;\n}\nfunction limitationKeyWithoutCount(limitation: Extract<FileChangesCollectionLimitation, {\n readonly code: \"collection-cap-reached\";\n}>): string {\n return [limitation.code, limitation.target, limitation.atWindowId ?? \"\"].join(\"\\u0000\");\n}\n/** Merge count-bearing limitations while keeping exact failures deterministically unique. */\nfunction canonicalLimitations(values: readonly FileChangesCollectionLimitation[]): readonly FileChangesCollectionLimitation[] {\n const exact = new Map<string, FileChangesCollectionLimitation>();\n const caps = new Map<string, Extract<FileChangesCollectionLimitation, {\n readonly code: \"collection-cap-reached\";\n }>>();\n let unsupported = 0;\n for (const limitation of values) {\n switch (limitation.code) {\n case \"capture-failed\":\n case \"capture-interrupted\": {\n exact.set(fileChangesCollectionLimitationKey(limitation), limitation);\n break;\n }\n case \"collection-cap-reached\": {\n const key = limitationKeyWithoutCount(limitation);\n const prior = caps.get(key);\n caps.set(key, Object.freeze({\n ...limitation,\n omittedAtLeast: (prior?.omittedAtLeast ?? 0) + limitation.omittedAtLeast,\n }));\n break;\n }\n case \"unsupported-input\":\n unsupported += limitation.omittedAtLeast;\n break;\n }\n }\n if (unsupported > 0) {\n exact.set(\"unsupported-input\\u0000endpoint-metadata\", Object.freeze({\n code: \"unsupported-input\" as const,\n target: \"endpoint-metadata\" as const,\n omittedAtLeast: unsupported,\n }));\n }\n const merged = [...exact.values(), ...caps.values()];\n return freezeArray(merged.sort((left, right) => compareAscii(fileChangesCollectionLimitationKey(left), fileChangesCollectionLimitationKey(right))));\n}\nfunction collectionState(limitations: readonly FileChangesCollectionLimitation[]): FileChangesCollectionState {\n const canonical = canonicalLimitations(limitations);\n return canonical.length === 0\n ? Object.freeze({ state: \"complete\" as const, limitations: Object.freeze([]) }) as FileChangesCollectionState\n : Object.freeze({ state: \"partial\" as const, limitations: canonical }) as FileChangesCollectionState;\n}\nfunction capLimitation(target: \"window\" | \"change\" | \"content-blob\" | \"content-byte\" | \"json-byte\", omittedAtLeast: number, atWindowId: string | null): FileChangesCollectionLimitation {\n return Object.freeze({\n code: \"collection-cap-reached\" as const,\n target,\n omittedAtLeast,\n atWindowId,\n });\n}\nfunction unsupportedInputLimitation(omittedAtLeast: number): FileChangesCollectionLimitation {\n return Object.freeze({\n code: \"unsupported-input\" as const,\n target: \"endpoint-metadata\" as const,\n omittedAtLeast,\n });\n}\nfunction endpointIsPresent(endpoint: AgentWorkspaceDiffEndpoint): boolean {\n return endpoint.state !== \"absent\";\n}\nfunction sourceChangeIsCoherent(change: AgentWorkspaceDiffWindowChange): boolean {\n const beforePresent = endpointIsPresent(change.before);\n const afterPresent = endpointIsPresent(change.after);\n switch (change.status) {\n case \"added\":\n return !beforePresent && afterPresent;\n case \"modified\":\n return beforePresent && afterPresent;\n case \"deleted\":\n return beforePresent && !afterPresent;\n }\n}\nfunction endpointForCapture(endpoint: AgentWorkspaceDiffEndpoint): {\n readonly endpoint: CaptureEndpoint;\n readonly unsupportedEndpointCount: number;\n} {\n switch (endpoint.state) {\n case \"absent\":\n return Object.freeze({ endpoint: Object.freeze({ state: \"absent\" as const }), unsupportedEndpointCount: 0 });\n case \"text\": {\n if (typeof endpoint.text !== \"string\") {\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({ kind: \"unavailable\" as const, reason: \"unsupported-input\" as const }),\n }),\n unsupportedEndpointCount: 1,\n });\n }\n const content = encoder.encode(endpoint.text);\n if (content.byteLength > FileChangesLimits.maximumTextRevisionBytes) {\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"elided\" as const,\n reason: \"oversized-text\" as const,\n byteLength: content.byteLength,\n }),\n }),\n unsupportedEndpointCount: 0,\n });\n }\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"text\" as const,\n sha256: sha256(content),\n byteLength: content.byteLength,\n content: Object.freeze({ state: \"available\" as const, text: endpoint.text }),\n }),\n }),\n unsupportedEndpointCount: 0,\n });\n }\n case \"elided\": {\n const byteLength = endpoint.bytes;\n if ((endpoint.reason !== \"binary\" && endpoint.reason !== \"oversized-text\")\n || !Number.isSafeInteger(byteLength)\n || byteLength === undefined\n || byteLength < 0) {\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({ kind: \"unavailable\" as const, reason: \"unsupported-input\" as const }),\n }),\n unsupportedEndpointCount: 1,\n });\n }\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"elided\" as const,\n reason: endpoint.reason,\n byteLength,\n }),\n }),\n unsupportedEndpointCount: 0,\n });\n }\n }\n}\nfunction prepareChange(change: AgentWorkspaceDiffWindowChange): PreparedChange {\n if (!sourceChangeIsCoherent(change)) {\n throw new Error(\"File Changes collector received an incoherent send-window endpoint transition\");\n }\n const before = endpointForCapture(change.before);\n const after = endpointForCapture(change.after);\n const kind = change.status === \"added\"\n ? \"created\" as const\n : change.status === \"deleted\"\n ? \"deleted\" as const\n : \"modified\" as const;\n return Object.freeze({\n path: change.path,\n kind,\n before: before.endpoint,\n after: after.endpoint,\n unsupportedEndpointCount: before.unsupportedEndpointCount + after.unsupportedEndpointCount,\n });\n}\nfunction captureWindowId(window: AgentWorkspaceDiffWindow): string {\n const identity = window.identity;\n if (!Number.isSafeInteger(identity.turn)\n || identity.turn <= 0\n || (identity.session !== undefined && (!Number.isSafeInteger(identity.session) || identity.session <= 0))) {\n throw new Error(\"File Changes collector received an invalid send-window identity\");\n }\n return agentSendWindowId(identity);\n}\nfunction structuralCapture(source: CaptureDocumentSource): {\n readonly windows: readonly CapturedWindow[];\n readonly limitations: readonly FileChangesCollectionLimitation[];\n} {\n const limitations: FileChangesCollectionLimitation[] = [];\n const retainedWindowCount = Math.min(source.windows.length, FileChangesLimits.maximumWindows);\n if (source.windows.length > retainedWindowCount) {\n const firstOmitted = source.windows[retainedWindowCount];\n limitations.push(capLimitation(\"window\", source.windows.length - retainedWindowCount, firstOmitted === undefined ? null : captureWindowId(firstOmitted)));\n }\n const windowIds = new Set<string>();\n const preparedWindows: Array<{\n readonly windowId: string;\n readonly sequence: number;\n readonly changes: readonly PreparedChange[];\n }> = [];\n for (let index = 0; index < retainedWindowCount; index += 1) {\n const sourceWindow = source.windows[index]!;\n const windowId = captureWindowId(sourceWindow);\n if (windowIds.has(windowId)) {\n throw new Error(\"File Changes collector received duplicate send-window ids\");\n }\n windowIds.add(windowId);\n const changes = [...sourceWindow.changes]\n .sort((left, right) => compareAscii(left.path, right.path));\n for (let changeIndex = 1; changeIndex < changes.length; changeIndex += 1) {\n if (changes[changeIndex - 1]!.path === changes[changeIndex]!.path) {\n throw new Error(`File Changes collector received duplicate path ${JSON.stringify(changes[changeIndex]!.path)} in ${windowId}`);\n }\n }\n const prepared = changes.map(prepareChange);\n if (prepared.length > FileChangesLimits.maximumChangesPerWindow) {\n limitations.push(capLimitation(\"change\", prepared.length - FileChangesLimits.maximumChangesPerWindow, windowId));\n }\n preparedWindows.push(Object.freeze({\n windowId,\n sequence: index + 1,\n changes: freezeArray(prepared.slice(0, FileChangesLimits.maximumChangesPerWindow)),\n }));\n }\n let remainingChanges = FileChangesLimits.maximumRetainedChanges;\n const capturedWindows = preparedWindows.map((window) => {\n const retained = Math.min(window.changes.length, remainingChanges);\n if (retained < window.changes.length) {\n limitations.push(capLimitation(\"change\", window.changes.length - retained, window.windowId));\n }\n remainingChanges -= retained;\n return Object.freeze({\n windowId: window.windowId,\n sequence: window.sequence,\n changes: freezeArray(window.changes.slice(0, retained).map((change) => Object.freeze({\n ...change,\n changeId: nextChangeId(),\n }))),\n });\n });\n return Object.freeze({ windows: freezeArray(capturedWindows), limitations: freezeArray(limitations) });\n}\nfunction unsupportedLimitationsFor(windows: readonly CapturedWindow[]): readonly FileChangesCollectionLimitation[] {\n const unsupported = windows.reduce((total, window) => total + window.changes.reduce((windowTotal, change) => windowTotal + change.unsupportedEndpointCount, 0), 0);\n return unsupported === 0 ? Object.freeze([]) : Object.freeze([unsupportedInputLimitation(unsupported)]);\n}\nfunction omitTextContent(endpoint: CaptureEndpoint): CaptureEndpoint {\n if (endpoint.state !== \"present\"\n || endpoint.revision.kind !== \"text\"\n || endpoint.revision.content.state !== \"available\") {\n return endpoint;\n }\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n ...endpoint.revision,\n content: Object.freeze({ state: \"omitted\" as const, reason: \"collection-cap\" as const }),\n }),\n });\n}\nfunction withBlobCaps(windows: readonly CapturedWindow[]): {\n readonly windows: readonly CapturedWindow[];\n readonly limitations: readonly FileChangesCollectionLimitation[];\n} {\n let blobCount = 0;\n let totalBytes = 0;\n const limitations: FileChangesCollectionLimitation[] = [];\n const consume = (endpoint: CaptureEndpoint, windowId: string): CaptureEndpoint => {\n if (endpoint.state !== \"present\"\n || endpoint.revision.kind !== \"text\"\n || endpoint.revision.content.state !== \"available\") {\n return endpoint;\n }\n if (endpoint.revision.byteLength > FileChangesLimits.maximumBlobBytes) {\n throw new Error(\"File Changes producer retained a text revision beyond its blob limit\");\n }\n if (blobCount >= FileChangesLimits.maximumBlobs) {\n limitations.push(capLimitation(\"content-blob\", 1, windowId));\n return omitTextContent(endpoint);\n }\n if (totalBytes + endpoint.revision.byteLength > FileChangesLimits.maximumTotalBlobBytes) {\n limitations.push(capLimitation(\"content-byte\", 1, windowId));\n return omitTextContent(endpoint);\n }\n blobCount += 1;\n totalBytes += endpoint.revision.byteLength;\n return endpoint;\n };\n const capped = windows.map((window) => Object.freeze({\n ...window,\n changes: freezeArray(window.changes.map((change) => Object.freeze({\n ...change,\n before: consume(change.before, window.windowId),\n after: consume(change.after, window.windowId),\n }))),\n }));\n return Object.freeze({ windows: freezeArray(capped), limitations: freezeArray(limitations) });\n}\nfunction previewEndpoint(endpoint: CaptureEndpoint): unknown {\n if (endpoint.state === \"absent\")\n return Object.freeze({ state: \"absent\" as const });\n const revision = endpoint.revision;\n switch (revision.kind) {\n case \"text\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"text\" as const,\n sha256: revision.sha256,\n byteLength: revision.byteLength,\n content: revision.content.state === \"available\"\n ? Object.freeze({ state: \"available\" as const, ref: blobBudgetProjection })\n : Object.freeze({ state: \"omitted\" as const, reason: \"collection-cap\" as const }),\n }),\n });\n case \"elided\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"elided\" as const,\n reason: revision.reason,\n byteLength: revision.byteLength,\n }),\n });\n case \"unavailable\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({ kind: \"unavailable\" as const, reason: revision.reason }),\n });\n }\n}\nfunction previewPayload(capture: FileChangesCapture): unknown {\n return Object.freeze({\n \"attribution-data\": capture.attribution,\n \"collection-data\": capture.collection,\n \"windows-data\": freezeArray(capture.windows.map((window) => Object.freeze({\n windowId: window.windowId,\n sequence: window.sequence,\n changes: freezeArray(window.changes.map((change) => Object.freeze({\n changeId: change.changeId,\n path: change.path,\n kind: change.kind,\n before: previewEndpoint(change.before),\n after: previewEndpoint(change.after),\n }))),\n }))),\n });\n}\nfunction jsonByteLength(capture: FileChangesCapture): number {\n const text = JSON.stringify(previewPayload(capture));\n if (text === undefined)\n throw new Error(\"File Changes producer could not serialize its JSON budget projection\");\n return encoder.encode(text).byteLength;\n}\nfunction trimLastChange(windows: readonly CapturedWindow[]): {\n readonly windows: readonly CapturedWindow[];\n readonly atWindowId: string;\n} | undefined {\n for (let windowIndex = windows.length - 1; windowIndex >= 0; windowIndex -= 1) {\n const window = windows[windowIndex]!;\n if (window.changes.length === 0)\n continue;\n const next = [...windows];\n next[windowIndex] = Object.freeze({\n ...window,\n changes: freezeArray(window.changes.slice(0, -1)),\n });\n return Object.freeze({ windows: freezeArray(next), atWindowId: window.windowId });\n }\n return undefined;\n}\nfunction captureFrom(source: CaptureDocumentSource, callerLimitations: readonly FileChangesCollectionLimitation[]): FileChangesCapture {\n if (source.attribution !== \"agent-send-window-endpoints\") {\n throw new Error(\"File Changes capture received an unsupported workspace attribution\");\n }\n const attribution = captureAttribution(source.policy);\n const structural = structuralCapture(source);\n let windows = structural.windows;\n let jsonOmitted = 0;\n let jsonAtWindowId: string | null = null;\n for (;;) {\n const blobCapped = withBlobCaps(windows);\n const limitations = [\n ...callerLimitations,\n ...structural.limitations,\n ...unsupportedLimitationsFor(windows),\n ...blobCapped.limitations,\n ...(jsonOmitted === 0 ? [] : [capLimitation(\"json-byte\", jsonOmitted, jsonAtWindowId)]),\n ];\n const capture = Object.freeze({\n attribution,\n collection: collectionState(limitations),\n windows: blobCapped.windows,\n }) as FileChangesCapture;\n if (jsonByteLength(capture) <= FileChangesLimits.maximumPayloadJsonBytes) {\n assertFileChangesCaptureSchema(capture);\n return capture;\n }\n const trimmed = trimLastChange(windows);\n if (trimmed === undefined) {\n throw new Error(\"File Changes producer cannot fit its structural payload within the JSON budget\");\n }\n windows = trimmed.windows;\n jsonOmitted += 1;\n // Trimming walks backward, so the final removed entry is the first omitted prefix entry.\n jsonAtWindowId = trimmed.atWindowId;\n }\n}\n/** Freeze a normal or partial collector result before any Record preflight/write. */\nexport function createFileChangesCapture(input: CreateFileChangesCaptureInput): FileChangesCapture {\n return captureFrom(input.document, input.limitations ?? Object.freeze([]));\n}\n/** A started collector may have no safe export prefix but must still publish an honest partial capture. */\nexport function createEmptyFileChangesCapture(input: {\n readonly policy: AgentWorkspaceDiffPolicy;\n readonly limitations: readonly FileChangesCollectionLimitation[];\n}): FileChangesCapture {\n return captureFrom(Object.freeze({\n attribution: \"agent-send-window-endpoints\" as const,\n policy: input.policy,\n windows: Object.freeze([]),\n }), input.limitations);\n}\nfunction durableEndpoint(endpoint: CaptureEndpoint, availableContent: (revision: Extract<CaptureRevision, {\n readonly kind: \"text\";\n}>) => unknown): unknown {\n if (endpoint.state === \"absent\")\n return Object.freeze({ state: \"absent\" as const });\n const revision = endpoint.revision;\n switch (revision.kind) {\n case \"text\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"text\" as const,\n sha256: revision.sha256,\n byteLength: revision.byteLength,\n content: revision.content.state === \"available\"\n ? availableContent(revision)\n : Object.freeze({ state: \"omitted\" as const, reason: \"collection-cap\" as const }),\n }),\n });\n case \"elided\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"elided\" as const,\n reason: revision.reason,\n byteLength: revision.byteLength,\n }),\n });\n case \"unavailable\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({ kind: \"unavailable\" as const, reason: revision.reason }),\n });\n }\n}\nfunction assertFileChangesCaptureSchema(capture: FileChangesCapture): void {\n const preview = Object.freeze({\n attribution: capture.attribution,\n collection: capture.collection,\n windows: freezeArray(capture.windows.map((window) => Object.freeze({\n windowId: window.windowId,\n sequence: window.sequence,\n changes: freezeArray(window.changes.map((change) => Object.freeze({\n changeId: change.changeId,\n path: change.path,\n kind: change.kind,\n before: durableEndpoint(change.before, () => Object.freeze({\n state: \"available\" as const,\n ref: captureSchemaBlobRef,\n })),\n after: durableEndpoint(change.after, () => Object.freeze({\n state: \"available\" as const,\n ref: captureSchemaBlobRef,\n })),\n }))),\n }))),\n });\n const decoded = Schema.validateEither(FileChangesAttachmentSchema, RecordExactParseOptions)(preview);\n if (Either.isLeft(decoded)) {\n throw new Error(\"File Changes producer generated an invalid fixed-family capture\");\n }\n}\n/** Convert a frozen capture to a fresh Record write without minting another change id. */\nexport function createFileChangesCaptureAttachmentWrite(capture: FileChangesCapture): RecordAttachmentWrite<\"attempt\", never, never> {\n const write = makeFixedRecordAttachmentWrite(fileChangesRecordFamily.write, (blobs) => {\n const drafts: RecordAttachmentBlobDraft<never, never>[] = [];\n const availableContent = (revision: Extract<CaptureRevision, {\n readonly kind: \"text\";\n }>): unknown => {\n const content = encoder.encode(revision.content.state === \"available\" ? revision.content.text : \"\");\n if (revision.content.state !== \"available\"\n || content.byteLength !== revision.byteLength\n || sha256(content) !== revision.sha256) {\n throw new Error(\"File Changes producer lost frozen text revision integrity\");\n }\n const draft = blobs.add(makeRecordBlobSource(Stream.succeed(content)));\n drafts.push(draft);\n return Object.freeze({ state: \"available\" as const, ref: draft.ref });\n };\n const payload = Object.freeze({\n attribution: capture.attribution,\n collection: capture.collection,\n windows: freezeArray(capture.windows.map((window) => Object.freeze({\n windowId: window.windowId,\n sequence: window.sequence,\n changes: freezeArray(window.changes.map((change) => Object.freeze({\n changeId: change.changeId,\n path: change.path,\n kind: change.kind,\n before: durableEndpoint(change.before, availableContent),\n after: durableEndpoint(change.after, availableContent),\n }))),\n }))),\n });\n const decoded = Schema.validateEither(FileChangesAttachmentSchema, RecordExactParseOptions)(payload);\n if (Either.isLeft(decoded)) {\n throw new Error(\"File Changes producer generated an invalid fixed-family payload\");\n }\n return Object.freeze({ payload: decoded.right, blobs: freezeArray(drafts) });\n });\n const closure = validateRecordAttachmentWrite(write);\n if (Either.isLeft(closure)) {\n throw new Error(\"File Changes producer generated an invalid owner-local closure\");\n }\n return write;\n}\n/** Preflight validates the same frozen ids and closure shape that the Attempt writer will publish. */\nexport function assertFileChangesCaptureRecordable(capture: FileChangesCapture): void {\n createFileChangesCaptureAttachmentWrite(capture);\n}\n/** Internal assertion-seal bridge; Runner itself retains the frozen capture, never this convenience path. */\nexport function createAgentWorkspaceDiffAttachmentWrite(document: AgentWorkspaceDiff): RecordAttachmentWrite<\"attempt\", never, never> {\n return createFileChangesCaptureAttachmentWrite(createFileChangesCapture({ document }));\n}\n/** Pure projection for consumers already holding a decoded durable payload. */\nexport function projectFileChangesAttachment(payload: FileChangesAttachment): FileChangesAttachment {\n return Object.freeze({\n attribution: payload.attribution,\n collection: payload.collection,\n windows: freezeArray(payload.windows),\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["diff.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { Either, Schema, Stream } from \"effect\";\nimport { makeFixedRecordAttachmentWrite, makeRecordBlobSource, validateRecordAttachmentWrite, type RecordAttachmentBlobDraft, type RecordAttachmentWrite, } from \"../../record/attachment/index.ts\";\nimport { makeRecordBlobRef } from \"../../record/attachment/internal.ts\";\nimport { RecordExactParseOptions } from \"../../record/codec/core.ts\";\nimport { fileChangesRecordFamily } from \"../../record/family/catalog.ts\";\nimport { FileChangesAttachmentSchema, FileChangesLimits, fileChangesCollectionLimitationKey, type FileChangesAttachment, type FileChangesAttribution, type FileChangesCollectionLimitation, type FileChangesCollectionState, } from \"../../record/family/file-changes.ts\";\nimport { agentSendWindowId, type AgentWorkspaceDiff, type AgentWorkspaceDiffEndpoint, type AgentWorkspaceDiffPolicy, type AgentWorkspaceDiffWindow, type AgentWorkspaceDiffWindowChange, } from \"../workspace-diff.ts\";\ntype CaptureTextRevision = {\n readonly kind: \"text\";\n readonly sha256: string;\n readonly byteLength: number;\n readonly content: {\n readonly state: \"available\";\n readonly text: string;\n } | {\n readonly state: \"omitted\";\n readonly reason: \"collection-cap\";\n };\n};\ntype CaptureRevision = CaptureTextRevision | {\n readonly kind: \"elided\";\n readonly reason: \"binary\" | \"oversized-text\";\n readonly byteLength: number;\n} | {\n readonly kind: \"unavailable\";\n readonly reason: \"unsupported-input\" | \"capture-failed\" | \"capture-interrupted\";\n};\ntype CaptureEndpoint = {\n readonly state: \"absent\";\n} | {\n readonly state: \"present\";\n readonly revision: CaptureRevision;\n};\ninterface PreparedChange {\n readonly path: string;\n readonly kind: \"created\" | \"modified\" | \"deleted\";\n readonly before: CaptureEndpoint;\n readonly after: CaptureEndpoint;\n /** Not durable: it lets JSON truncation account only for retained bad endpoints. */\n readonly unsupportedEndpointCount: number;\n}\ninterface CapturedChange extends PreparedChange {\n readonly changeId: string;\n}\ninterface CapturedWindow {\n readonly windowId: string;\n readonly sequence: number;\n readonly changes: readonly CapturedChange[];\n}\n/**\n * Attempt-owned frozen File Changes input. Change ids are minted exactly here,\n * before Record preflight or any write/retry can allocate blob refs.\n */\nexport interface FileChangesCapture {\n readonly attribution: FileChangesAttribution;\n readonly collection: FileChangesCollectionState;\n readonly windows: readonly CapturedWindow[];\n}\nexport interface CreateFileChangesCaptureInput {\n readonly document: AgentWorkspaceDiff;\n /** Collector-stage facts observed by the caller before this capture freezes. */\n readonly limitations?: readonly FileChangesCollectionLimitation[];\n}\ninterface CaptureDocumentSource {\n readonly attribution: \"agent-send-window-endpoints\";\n readonly policy: AgentWorkspaceDiffPolicy;\n readonly windows: readonly AgentWorkspaceDiffWindow[];\n}\nconst encoder = new TextEncoder();\n// Producer retention is deliberately tighter than the v1 decoder ceiling.\n// Existing Records with up to 10,000 changes remain readable, while new\n// captures avoid multiplying schema encode/write/read validation work during\n// publication.\nconst MAXIMUM_PRODUCED_CHANGES_PER_WINDOW = 1000;\nconst MAXIMUM_PRODUCED_CHANGES_PER_ATTACHMENT = 1000;\nconst blobBudgetProjection = Object.freeze({\n \"$niceeval.record.blob-ref\": true,\n});\nconst captureSchemaBlobRef = makeRecordBlobRef();\nfunction compareAscii(left: string, right: string): number {\n return left === right ? 0 : left < right ? -1 : 1;\n}\nfunction freezeArray<Value>(values: readonly Value[]): readonly Value[] {\n return Object.freeze([...values]);\n}\nfunction nextChangeId(): string {\n return `fc_${randomUUID().replaceAll(\"-\", \"\")}`;\n}\nfunction sha256(bytes: Uint8Array): string {\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\nfunction canonicalStrings(values: readonly string[]): readonly string[] {\n return freezeArray([...new Set(values)].sort(compareAscii));\n}\nfunction captureAttribution(policy: AgentWorkspaceDiffPolicy): FileChangesAttribution {\n return Object.freeze({\n kind: \"agent-send-window-endpoints\" as const,\n policy: Object.freeze({\n defaultPolicy: policy.defaultPolicy,\n include: canonicalStrings(policy.include),\n ignore: canonicalStrings(policy.ignore),\n }),\n }) as FileChangesAttribution;\n}\nfunction limitationKeyWithoutCount(limitation: Extract<FileChangesCollectionLimitation, {\n readonly code: \"collection-cap-reached\";\n}>): string {\n return [limitation.code, limitation.target, limitation.atWindowId ?? \"\"].join(\"\\u0000\");\n}\n/** Merge count-bearing limitations while keeping exact failures deterministically unique. */\nfunction canonicalLimitations(values: readonly FileChangesCollectionLimitation[]): readonly FileChangesCollectionLimitation[] {\n const exact = new Map<string, FileChangesCollectionLimitation>();\n const caps = new Map<string, Extract<FileChangesCollectionLimitation, {\n readonly code: \"collection-cap-reached\";\n }>>();\n let unsupported = 0;\n for (const limitation of values) {\n switch (limitation.code) {\n case \"capture-failed\":\n case \"capture-interrupted\": {\n exact.set(fileChangesCollectionLimitationKey(limitation), limitation);\n break;\n }\n case \"collection-cap-reached\": {\n const key = limitationKeyWithoutCount(limitation);\n const prior = caps.get(key);\n caps.set(key, Object.freeze({\n ...limitation,\n omittedAtLeast: (prior?.omittedAtLeast ?? 0) + limitation.omittedAtLeast,\n }));\n break;\n }\n case \"unsupported-input\":\n unsupported += limitation.omittedAtLeast;\n break;\n }\n }\n if (unsupported > 0) {\n exact.set(\"unsupported-input\\u0000endpoint-metadata\", Object.freeze({\n code: \"unsupported-input\" as const,\n target: \"endpoint-metadata\" as const,\n omittedAtLeast: unsupported,\n }));\n }\n const merged = [...exact.values(), ...caps.values()];\n return freezeArray(merged.sort((left, right) => compareAscii(fileChangesCollectionLimitationKey(left), fileChangesCollectionLimitationKey(right))));\n}\nfunction collectionState(limitations: readonly FileChangesCollectionLimitation[]): FileChangesCollectionState {\n const canonical = canonicalLimitations(limitations);\n return canonical.length === 0\n ? Object.freeze({ state: \"complete\" as const, limitations: Object.freeze([]) }) as FileChangesCollectionState\n : Object.freeze({ state: \"partial\" as const, limitations: canonical }) as FileChangesCollectionState;\n}\nfunction capLimitation(target: \"window\" | \"change\" | \"content-blob\" | \"content-byte\" | \"json-byte\", omittedAtLeast: number, atWindowId: string | null): FileChangesCollectionLimitation {\n return Object.freeze({\n code: \"collection-cap-reached\" as const,\n target,\n omittedAtLeast,\n atWindowId,\n });\n}\nfunction unsupportedInputLimitation(omittedAtLeast: number): FileChangesCollectionLimitation {\n return Object.freeze({\n code: \"unsupported-input\" as const,\n target: \"endpoint-metadata\" as const,\n omittedAtLeast,\n });\n}\nfunction endpointIsPresent(endpoint: AgentWorkspaceDiffEndpoint): boolean {\n return endpoint.state !== \"absent\";\n}\nfunction sourceChangeIsCoherent(change: AgentWorkspaceDiffWindowChange): boolean {\n const beforePresent = endpointIsPresent(change.before);\n const afterPresent = endpointIsPresent(change.after);\n switch (change.status) {\n case \"added\":\n return !beforePresent && afterPresent;\n case \"modified\":\n return beforePresent && afterPresent;\n case \"deleted\":\n return beforePresent && !afterPresent;\n }\n}\nfunction endpointForCapture(endpoint: AgentWorkspaceDiffEndpoint): {\n readonly endpoint: CaptureEndpoint;\n readonly unsupportedEndpointCount: number;\n} {\n switch (endpoint.state) {\n case \"absent\":\n return Object.freeze({ endpoint: Object.freeze({ state: \"absent\" as const }), unsupportedEndpointCount: 0 });\n case \"text\": {\n if (typeof endpoint.text !== \"string\") {\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({ kind: \"unavailable\" as const, reason: \"unsupported-input\" as const }),\n }),\n unsupportedEndpointCount: 1,\n });\n }\n const content = encoder.encode(endpoint.text);\n if (content.byteLength > FileChangesLimits.maximumTextRevisionBytes) {\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"elided\" as const,\n reason: \"oversized-text\" as const,\n byteLength: content.byteLength,\n }),\n }),\n unsupportedEndpointCount: 0,\n });\n }\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"text\" as const,\n sha256: sha256(content),\n byteLength: content.byteLength,\n content: Object.freeze({ state: \"available\" as const, text: endpoint.text }),\n }),\n }),\n unsupportedEndpointCount: 0,\n });\n }\n case \"elided\": {\n const byteLength = endpoint.bytes;\n if ((endpoint.reason !== \"binary\" && endpoint.reason !== \"oversized-text\")\n || !Number.isSafeInteger(byteLength)\n || byteLength === undefined\n || byteLength < 0) {\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({ kind: \"unavailable\" as const, reason: \"unsupported-input\" as const }),\n }),\n unsupportedEndpointCount: 1,\n });\n }\n return Object.freeze({\n endpoint: Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"elided\" as const,\n reason: endpoint.reason,\n byteLength,\n }),\n }),\n unsupportedEndpointCount: 0,\n });\n }\n }\n}\nfunction prepareChange(change: AgentWorkspaceDiffWindowChange): PreparedChange {\n if (!sourceChangeIsCoherent(change)) {\n throw new Error(\"File Changes collector received an incoherent send-window endpoint transition\");\n }\n const before = endpointForCapture(change.before);\n const after = endpointForCapture(change.after);\n const kind = change.status === \"added\"\n ? \"created\" as const\n : change.status === \"deleted\"\n ? \"deleted\" as const\n : \"modified\" as const;\n return Object.freeze({\n path: change.path,\n kind,\n before: before.endpoint,\n after: after.endpoint,\n unsupportedEndpointCount: before.unsupportedEndpointCount + after.unsupportedEndpointCount,\n });\n}\nfunction captureWindowId(window: AgentWorkspaceDiffWindow): string {\n const identity = window.identity;\n if (!Number.isSafeInteger(identity.turn)\n || identity.turn <= 0\n || (identity.session !== undefined && (!Number.isSafeInteger(identity.session) || identity.session <= 0))) {\n throw new Error(\"File Changes collector received an invalid send-window identity\");\n }\n return agentSendWindowId(identity);\n}\nfunction structuralCapture(source: CaptureDocumentSource): {\n readonly windows: readonly CapturedWindow[];\n readonly limitations: readonly FileChangesCollectionLimitation[];\n} {\n const limitations: FileChangesCollectionLimitation[] = [];\n const retainedWindowCount = Math.min(source.windows.length, FileChangesLimits.maximumWindows);\n if (source.windows.length > retainedWindowCount) {\n const firstOmitted = source.windows[retainedWindowCount];\n limitations.push(capLimitation(\"window\", source.windows.length - retainedWindowCount, firstOmitted === undefined ? null : captureWindowId(firstOmitted)));\n }\n const windowIds = new Set<string>();\n const preparedWindows: Array<{\n readonly windowId: string;\n readonly sequence: number;\n readonly changes: readonly PreparedChange[];\n }> = [];\n for (let index = 0; index < retainedWindowCount; index += 1) {\n const sourceWindow = source.windows[index]!;\n const windowId = captureWindowId(sourceWindow);\n if (windowIds.has(windowId)) {\n throw new Error(\"File Changes collector received duplicate send-window ids\");\n }\n windowIds.add(windowId);\n const changes = [...sourceWindow.changes]\n .sort((left, right) => compareAscii(left.path, right.path));\n for (let changeIndex = 1; changeIndex < changes.length; changeIndex += 1) {\n if (changes[changeIndex - 1]!.path === changes[changeIndex]!.path) {\n throw new Error(`File Changes collector received duplicate path ${JSON.stringify(changes[changeIndex]!.path)} in ${windowId}`);\n }\n }\n const prepared = changes.map(prepareChange);\n if (prepared.length > MAXIMUM_PRODUCED_CHANGES_PER_WINDOW) {\n limitations.push(capLimitation(\"change\", prepared.length - MAXIMUM_PRODUCED_CHANGES_PER_WINDOW, windowId));\n }\n preparedWindows.push(Object.freeze({\n windowId,\n sequence: index + 1,\n changes: freezeArray(prepared.slice(0, MAXIMUM_PRODUCED_CHANGES_PER_WINDOW)),\n }));\n }\n let remainingChanges = MAXIMUM_PRODUCED_CHANGES_PER_ATTACHMENT;\n const capturedWindows = preparedWindows.map((window) => {\n const retained = Math.min(window.changes.length, remainingChanges);\n if (retained < window.changes.length) {\n limitations.push(capLimitation(\"change\", window.changes.length - retained, window.windowId));\n }\n remainingChanges -= retained;\n return Object.freeze({\n windowId: window.windowId,\n sequence: window.sequence,\n changes: freezeArray(window.changes.slice(0, retained).map((change) => Object.freeze({\n ...change,\n changeId: nextChangeId(),\n }))),\n });\n });\n return Object.freeze({ windows: freezeArray(capturedWindows), limitations: freezeArray(limitations) });\n}\nfunction unsupportedLimitationsFor(windows: readonly CapturedWindow[]): readonly FileChangesCollectionLimitation[] {\n const unsupported = windows.reduce((total, window) => total + window.changes.reduce((windowTotal, change) => windowTotal + change.unsupportedEndpointCount, 0), 0);\n return unsupported === 0 ? Object.freeze([]) : Object.freeze([unsupportedInputLimitation(unsupported)]);\n}\nfunction omitTextContent(endpoint: CaptureEndpoint): CaptureEndpoint {\n if (endpoint.state !== \"present\"\n || endpoint.revision.kind !== \"text\"\n || endpoint.revision.content.state !== \"available\") {\n return endpoint;\n }\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n ...endpoint.revision,\n content: Object.freeze({ state: \"omitted\" as const, reason: \"collection-cap\" as const }),\n }),\n });\n}\nfunction withBlobCaps(windows: readonly CapturedWindow[]): {\n readonly windows: readonly CapturedWindow[];\n readonly limitations: readonly FileChangesCollectionLimitation[];\n} {\n let blobCount = 0;\n let totalBytes = 0;\n const limitations: FileChangesCollectionLimitation[] = [];\n const consume = (endpoint: CaptureEndpoint, windowId: string): CaptureEndpoint => {\n if (endpoint.state !== \"present\"\n || endpoint.revision.kind !== \"text\"\n || endpoint.revision.content.state !== \"available\") {\n return endpoint;\n }\n if (endpoint.revision.byteLength > FileChangesLimits.maximumBlobBytes) {\n throw new Error(\"File Changes producer retained a text revision beyond its blob limit\");\n }\n if (blobCount >= FileChangesLimits.maximumBlobs) {\n limitations.push(capLimitation(\"content-blob\", 1, windowId));\n return omitTextContent(endpoint);\n }\n if (totalBytes + endpoint.revision.byteLength > FileChangesLimits.maximumTotalBlobBytes) {\n limitations.push(capLimitation(\"content-byte\", 1, windowId));\n return omitTextContent(endpoint);\n }\n blobCount += 1;\n totalBytes += endpoint.revision.byteLength;\n return endpoint;\n };\n const capped = windows.map((window) => Object.freeze({\n ...window,\n changes: freezeArray(window.changes.map((change) => Object.freeze({\n ...change,\n before: consume(change.before, window.windowId),\n after: consume(change.after, window.windowId),\n }))),\n }));\n return Object.freeze({ windows: freezeArray(capped), limitations: freezeArray(limitations) });\n}\nfunction previewEndpoint(endpoint: CaptureEndpoint): unknown {\n if (endpoint.state === \"absent\")\n return Object.freeze({ state: \"absent\" as const });\n const revision = endpoint.revision;\n switch (revision.kind) {\n case \"text\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"text\" as const,\n sha256: revision.sha256,\n byteLength: revision.byteLength,\n content: revision.content.state === \"available\"\n ? Object.freeze({ state: \"available\" as const, ref: blobBudgetProjection })\n : Object.freeze({ state: \"omitted\" as const, reason: \"collection-cap\" as const }),\n }),\n });\n case \"elided\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"elided\" as const,\n reason: revision.reason,\n byteLength: revision.byteLength,\n }),\n });\n case \"unavailable\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({ kind: \"unavailable\" as const, reason: revision.reason }),\n });\n }\n}\nfunction previewPayload(capture: FileChangesCapture): unknown {\n return Object.freeze({\n \"attribution-data\": capture.attribution,\n \"collection-data\": capture.collection,\n \"windows-data\": freezeArray(capture.windows.map((window) => Object.freeze({\n windowId: window.windowId,\n sequence: window.sequence,\n changes: freezeArray(window.changes.map((change) => Object.freeze({\n changeId: change.changeId,\n path: change.path,\n kind: change.kind,\n before: previewEndpoint(change.before),\n after: previewEndpoint(change.after),\n }))),\n }))),\n });\n}\nfunction jsonByteLength(capture: FileChangesCapture): number {\n const text = JSON.stringify(previewPayload(capture));\n if (text === undefined)\n throw new Error(\"File Changes producer could not serialize its JSON budget projection\");\n return encoder.encode(text).byteLength;\n}\nfunction trimLastChange(windows: readonly CapturedWindow[]): {\n readonly windows: readonly CapturedWindow[];\n readonly atWindowId: string;\n} | undefined {\n for (let windowIndex = windows.length - 1; windowIndex >= 0; windowIndex -= 1) {\n const window = windows[windowIndex]!;\n if (window.changes.length === 0)\n continue;\n const next = [...windows];\n next[windowIndex] = Object.freeze({\n ...window,\n changes: freezeArray(window.changes.slice(0, -1)),\n });\n return Object.freeze({ windows: freezeArray(next), atWindowId: window.windowId });\n }\n return undefined;\n}\nfunction captureFrom(source: CaptureDocumentSource, callerLimitations: readonly FileChangesCollectionLimitation[]): FileChangesCapture {\n if (source.attribution !== \"agent-send-window-endpoints\") {\n throw new Error(\"File Changes capture received an unsupported workspace attribution\");\n }\n const attribution = captureAttribution(source.policy);\n const structural = structuralCapture(source);\n let windows = structural.windows;\n let jsonOmitted = 0;\n let jsonAtWindowId: string | null = null;\n for (;;) {\n const blobCapped = withBlobCaps(windows);\n const limitations = [\n ...callerLimitations,\n ...structural.limitations,\n ...unsupportedLimitationsFor(windows),\n ...blobCapped.limitations,\n ...(jsonOmitted === 0 ? [] : [capLimitation(\"json-byte\", jsonOmitted, jsonAtWindowId)]),\n ];\n const capture = Object.freeze({\n attribution,\n collection: collectionState(limitations),\n windows: blobCapped.windows,\n }) as FileChangesCapture;\n if (jsonByteLength(capture) <= FileChangesLimits.maximumPayloadJsonBytes) {\n assertFileChangesCaptureSchema(capture);\n return capture;\n }\n const trimmed = trimLastChange(windows);\n if (trimmed === undefined) {\n throw new Error(\"File Changes producer cannot fit its structural payload within the JSON budget\");\n }\n windows = trimmed.windows;\n jsonOmitted += 1;\n // Trimming walks backward, so the final removed entry is the first omitted prefix entry.\n jsonAtWindowId = trimmed.atWindowId;\n }\n}\n/** Freeze a normal or partial collector result before any Record preflight/write. */\nexport function createFileChangesCapture(input: CreateFileChangesCaptureInput): FileChangesCapture {\n return captureFrom(input.document, input.limitations ?? Object.freeze([]));\n}\n/** A started collector may have no safe export prefix but must still publish an honest partial capture. */\nexport function createEmptyFileChangesCapture(input: {\n readonly policy: AgentWorkspaceDiffPolicy;\n readonly limitations: readonly FileChangesCollectionLimitation[];\n}): FileChangesCapture {\n return captureFrom(Object.freeze({\n attribution: \"agent-send-window-endpoints\" as const,\n policy: input.policy,\n windows: Object.freeze([]),\n }), input.limitations);\n}\nfunction durableEndpoint(endpoint: CaptureEndpoint, availableContent: (revision: Extract<CaptureRevision, {\n readonly kind: \"text\";\n}>) => unknown): unknown {\n if (endpoint.state === \"absent\")\n return Object.freeze({ state: \"absent\" as const });\n const revision = endpoint.revision;\n switch (revision.kind) {\n case \"text\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"text\" as const,\n sha256: revision.sha256,\n byteLength: revision.byteLength,\n content: revision.content.state === \"available\"\n ? availableContent(revision)\n : Object.freeze({ state: \"omitted\" as const, reason: \"collection-cap\" as const }),\n }),\n });\n case \"elided\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({\n kind: \"elided\" as const,\n reason: revision.reason,\n byteLength: revision.byteLength,\n }),\n });\n case \"unavailable\":\n return Object.freeze({\n state: \"present\" as const,\n revision: Object.freeze({ kind: \"unavailable\" as const, reason: revision.reason }),\n });\n }\n}\nfunction assertFileChangesCaptureSchema(capture: FileChangesCapture): void {\n const preview = Object.freeze({\n attribution: capture.attribution,\n collection: capture.collection,\n windows: freezeArray(capture.windows.map((window) => Object.freeze({\n windowId: window.windowId,\n sequence: window.sequence,\n changes: freezeArray(window.changes.map((change) => Object.freeze({\n changeId: change.changeId,\n path: change.path,\n kind: change.kind,\n before: durableEndpoint(change.before, () => Object.freeze({\n state: \"available\" as const,\n ref: captureSchemaBlobRef,\n })),\n after: durableEndpoint(change.after, () => Object.freeze({\n state: \"available\" as const,\n ref: captureSchemaBlobRef,\n })),\n }))),\n }))),\n });\n const decoded = Schema.validateEither(FileChangesAttachmentSchema, RecordExactParseOptions)(preview);\n if (Either.isLeft(decoded)) {\n throw new Error(\"File Changes producer generated an invalid fixed-family capture\");\n }\n}\n/** Convert a frozen capture to a fresh Record write without minting another change id. */\nexport function createFileChangesCaptureAttachmentWrite(capture: FileChangesCapture): RecordAttachmentWrite<\"attempt\", never, never> {\n const write = makeFixedRecordAttachmentWrite(fileChangesRecordFamily.write, (blobs) => {\n const drafts: RecordAttachmentBlobDraft<never, never>[] = [];\n const availableContent = (revision: Extract<CaptureRevision, {\n readonly kind: \"text\";\n }>): unknown => {\n const content = encoder.encode(revision.content.state === \"available\" ? revision.content.text : \"\");\n if (revision.content.state !== \"available\"\n || content.byteLength !== revision.byteLength\n || sha256(content) !== revision.sha256) {\n throw new Error(\"File Changes producer lost frozen text revision integrity\");\n }\n const draft = blobs.add(makeRecordBlobSource(Stream.succeed(content)));\n drafts.push(draft);\n return Object.freeze({ state: \"available\" as const, ref: draft.ref });\n };\n const payload = Object.freeze({\n attribution: capture.attribution,\n collection: capture.collection,\n windows: freezeArray(capture.windows.map((window) => Object.freeze({\n windowId: window.windowId,\n sequence: window.sequence,\n changes: freezeArray(window.changes.map((change) => Object.freeze({\n changeId: change.changeId,\n path: change.path,\n kind: change.kind,\n before: durableEndpoint(change.before, availableContent),\n after: durableEndpoint(change.after, availableContent),\n }))),\n }))),\n });\n const decoded = Schema.validateEither(FileChangesAttachmentSchema, RecordExactParseOptions)(payload);\n if (Either.isLeft(decoded)) {\n throw new Error(\"File Changes producer generated an invalid fixed-family payload\");\n }\n return Object.freeze({ payload: decoded.right, blobs: freezeArray(drafts) });\n });\n const closure = validateRecordAttachmentWrite(write);\n if (Either.isLeft(closure)) {\n throw new Error(\"File Changes producer generated an invalid owner-local closure\");\n }\n return write;\n}\n/** Preflight validates the same frozen ids and closure shape that the Attempt writer will publish. */\nexport function assertFileChangesCaptureRecordable(capture: FileChangesCapture): void {\n createFileChangesCaptureAttachmentWrite(capture);\n}\n/** Internal assertion-seal bridge; Runner itself retains the frozen capture, never this convenience path. */\nexport function createAgentWorkspaceDiffAttachmentWrite(document: AgentWorkspaceDiff): RecordAttachmentWrite<\"attempt\", never, never> {\n return createFileChangesCaptureAttachmentWrite(createFileChangesCapture({ document }));\n}\n/** Pure projection for consumers already holding a decoded durable payload. */\nexport function projectFileChangesAttachment(payload: FileChangesAttachment): FileChangesAttachment {\n return Object.freeze({\n attribution: payload.attribution,\n collection: payload.collection,\n windows: freezeArray(payload.windows),\n });\n}\n"]}
|