niceeval 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INDEX.md +4 -2
- package/dist/adapter-usage.cjs.map +1 -1
- package/dist/adapter-usage.d.cts +1 -1
- package/dist/adapter-usage.d.mts +1 -1
- package/dist/adapter-usage.d.ts +1 -1
- package/dist/adapter.cjs +8 -7
- package/dist/adapter.cjs.map +1 -1
- package/dist/adapter.d.cts +21 -21
- package/dist/adapter.d.mts +21 -21
- package/dist/adapter.d.ts +21 -21
- package/dist/agents/{effect-runtime.cjs → agent-effects.cjs} +12 -18
- package/dist/agents/agent-effects.cjs.map +1 -0
- package/dist/agents/agent-effects.d.cts +23 -0
- package/dist/agents/agent-effects.d.mts +23 -0
- package/dist/agents/agent-effects.d.ts +23 -0
- package/dist/agents/agent-effects.js +16 -0
- package/dist/agents/agent-effects.js.map +1 -0
- package/dist/agents/ai-sdk.cjs +1 -1
- package/dist/agents/ai-sdk.cjs.map +1 -1
- package/dist/agents/bub.cjs +31 -18
- package/dist/agents/bub.cjs.map +1 -1
- package/dist/agents/bub.d.cts +9 -12
- package/dist/agents/bub.d.mts +9 -12
- package/dist/agents/bub.d.ts +9 -12
- package/dist/agents/claude-code-native.cjs +2 -2
- package/dist/agents/claude-code-native.cjs.map +1 -1
- package/dist/agents/claude-code.cjs +17 -11
- package/dist/agents/claude-code.cjs.map +1 -1
- package/dist/agents/claude-code.d.cts +11 -11
- package/dist/agents/claude-code.d.mts +11 -11
- package/dist/agents/claude-code.d.ts +11 -11
- package/dist/agents/codex-app-server.cjs +2 -2
- package/dist/agents/codex-app-server.cjs.map +1 -1
- package/dist/agents/codex.cjs +18 -12
- package/dist/agents/codex.cjs.map +1 -1
- package/dist/agents/codex.d.cts +12 -12
- package/dist/agents/codex.d.mts +12 -12
- package/dist/agents/codex.d.ts +12 -12
- package/dist/agents/deepseek-harness.cjs +2 -2
- package/dist/agents/deepseek-harness.cjs.map +1 -1
- package/dist/agents/hermes.cjs +3 -3
- package/dist/agents/hermes.cjs.map +1 -1
- package/dist/agents/index.cjs +3 -3
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +3 -3
- package/dist/agents/index.d.mts +3 -3
- package/dist/agents/index.d.ts +3 -3
- package/dist/agents/index.js +2 -2
- package/dist/agents/index.mjs +2 -2
- package/dist/agents/mcp.cjs.map +1 -1
- package/dist/agents/mcp.d.cts +2 -2
- package/dist/agents/mcp.d.mts +2 -2
- package/dist/agents/mcp.d.ts +2 -2
- package/dist/agents/omp.cjs +2 -2
- package/dist/agents/omp.cjs.map +1 -1
- package/dist/agents/openai-compat.cjs +2 -2
- package/dist/agents/openai-compat.cjs.map +1 -1
- package/dist/agents/openclaw.cjs +3 -3
- package/dist/agents/openclaw.cjs.map +1 -1
- package/dist/agents/opencode.cjs +16 -4
- package/dist/agents/opencode.cjs.map +1 -1
- package/dist/agents/plugin-extensions.cjs +71 -0
- package/dist/agents/plugin-extensions.cjs.map +1 -0
- package/dist/agents/plugin-extensions.d.cts +26 -0
- package/dist/agents/plugin-extensions.d.mts +26 -0
- package/dist/agents/plugin-extensions.d.ts +26 -0
- package/dist/agents/plugin-extensions.js +8 -0
- package/dist/agents/plugin-extensions.js.map +1 -0
- package/dist/agents/post-setup.cjs +14 -3
- package/dist/agents/post-setup.cjs.map +1 -1
- package/dist/agents/post-setup.d.cts +4 -2
- package/dist/agents/post-setup.d.mts +4 -2
- package/dist/agents/post-setup.d.ts +4 -2
- package/dist/agents/post-setup.js +8 -6
- package/dist/agents/sdk-streams.cjs +3 -3
- package/dist/agents/sdk-streams.cjs.map +1 -1
- package/dist/agents/{session-slot.cjs → session-key.cjs} +4 -4
- package/dist/agents/session-key.cjs.map +1 -0
- package/dist/agents/session-key.d.cts +12 -0
- package/dist/agents/session-key.d.mts +12 -0
- package/dist/agents/session-key.d.ts +12 -0
- package/dist/agents/session-key.js +6 -0
- package/dist/agents/session-key.js.map +1 -0
- package/dist/agents/shared.cjs +2 -2
- package/dist/agents/shared.cjs.map +1 -1
- package/dist/agents/shared.d.cts +4 -4
- package/dist/agents/shared.d.mts +4 -4
- package/dist/agents/shared.d.ts +4 -4
- package/dist/agents/skills.cjs.map +1 -1
- package/dist/agents/skills.d.cts +3 -3
- package/dist/agents/skills.d.mts +3 -3
- package/dist/agents/skills.d.ts +3 -3
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +55 -54
- package/dist/agents/types.d.mts +55 -54
- package/dist/agents/types.d.ts +55 -54
- package/dist/agents/ui-message-stream.cjs +4 -4
- package/dist/agents/ui-message-stream.cjs.map +1 -1
- package/dist/agents/unrecognized-events.cjs +32 -0
- package/dist/agents/unrecognized-events.cjs.map +1 -0
- package/dist/agents/unrecognized-events.d.cts +8 -0
- package/dist/agents/unrecognized-events.d.mts +8 -0
- package/dist/agents/unrecognized-events.d.ts +8 -0
- package/dist/agents/unrecognized-events.js +6 -0
- package/dist/agents/unrecognized-events.js.map +1 -0
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +3 -0
- package/dist/assertions/api.d.mts +3 -0
- package/dist/assertions/api.d.ts +3 -0
- package/dist/assertions/collection.cjs +1 -1
- package/dist/assertions/collection.cjs.map +1 -1
- package/dist/assertions/judge.cjs +1 -1
- package/dist/assertions/judge.cjs.map +1 -1
- package/dist/assertions/match.cjs +52 -21
- package/dist/assertions/match.cjs.map +1 -1
- package/dist/assertions/match.d.cts +16 -5
- package/dist/assertions/match.d.mts +16 -5
- package/dist/assertions/match.d.ts +16 -5
- package/dist/assertions/match.js +96 -94
- package/dist/assertions/measurements.cjs +22 -6
- package/dist/assertions/measurements.cjs.map +1 -1
- package/dist/assertions/measurements.d.cts +8 -1
- package/dist/assertions/measurements.d.mts +8 -1
- package/dist/assertions/measurements.d.ts +8 -1
- package/dist/assertions/numeric.cjs +2 -0
- package/dist/assertions/numeric.cjs.map +1 -1
- package/dist/assertions/numeric.d.cts +1 -1
- package/dist/assertions/numeric.d.mts +1 -1
- package/dist/assertions/numeric.d.ts +1 -1
- package/dist/assertions/quantity.cjs +42 -0
- package/dist/assertions/quantity.cjs.map +1 -0
- package/dist/assertions/quantity.d.cts +18 -0
- package/dist/assertions/quantity.d.mts +18 -0
- package/dist/assertions/quantity.d.ts +18 -0
- package/dist/assertions/quantity.js +22 -0
- package/dist/assertions/quantity.js.map +1 -0
- package/dist/assertions/record/attachment.cjs +2 -0
- package/dist/assertions/record/attachment.cjs.map +1 -1
- package/dist/assertions/record/codec.cjs +5 -1
- package/dist/assertions/record/codec.cjs.map +1 -1
- package/dist/assertions/record/model.cjs.map +1 -1
- package/dist/assertions/record/model.d.cts +3 -1
- package/dist/assertions/record/model.d.mts +3 -1
- package/dist/assertions/record/model.d.ts +3 -1
- package/dist/assertions/runtime.cjs +11 -6
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/cli/program.cjs +3 -0
- package/dist/cli/program.cjs.map +1 -1
- package/dist/context/assert-first.cjs +6 -4
- package/dist/context/assert-first.cjs.map +1 -1
- package/dist/context/assert-first.d.cts +9 -3
- package/dist/context/assert-first.d.mts +9 -3
- package/dist/context/assert-first.d.ts +9 -3
- package/dist/context/notes.cjs +47 -0
- package/dist/context/notes.cjs.map +1 -0
- package/dist/context/notes.d.cts +10 -0
- package/dist/context/notes.d.mts +10 -0
- package/dist/context/notes.d.ts +10 -0
- package/dist/context/notes.js +6 -0
- package/dist/context/notes.js.map +1 -0
- package/dist/context/send-failures.cjs +1 -7
- package/dist/context/send-failures.cjs.map +1 -1
- package/dist/context/send-failures.d.cts +2 -3
- package/dist/context/send-failures.d.mts +2 -3
- package/dist/context/send-failures.d.ts +2 -3
- package/dist/context/send-retry.cjs +0 -1
- package/dist/context/send-retry.cjs.map +1 -1
- package/dist/context/send-retry.d.cts +1 -2
- package/dist/context/send-retry.d.mts +1 -2
- package/dist/context/send-retry.d.ts +1 -2
- package/dist/context/session.cjs +10 -17
- package/dist/context/session.cjs.map +1 -1
- package/dist/context/session.d.cts +4 -10
- package/dist/context/session.d.mts +4 -10
- package/dist/context/session.d.ts +4 -10
- package/dist/define.cjs +88 -65
- package/dist/define.cjs.map +1 -1
- package/dist/define.d.cts +3 -3
- package/dist/define.d.mts +3 -3
- package/dist/define.d.ts +3 -3
- package/dist/eval/cli/contribution.cjs +1 -1
- package/dist/eval/cli/contribution.cjs.map +1 -1
- package/dist/eval/host/index.cjs +1 -1
- package/dist/eval/host/index.cjs.map +1 -1
- package/dist/eval/record/evaluation.cjs +1 -1
- package/dist/eval/record/evaluation.cjs.map +1 -1
- package/dist/eval/record/membership-provenance.d.cts +3 -3
- package/dist/eval/record/membership-provenance.d.mts +3 -3
- package/dist/eval/record/membership-provenance.d.ts +3 -3
- package/dist/eval/record/score.cjs +2 -2
- package/dist/eval/record/score.cjs.map +1 -1
- package/dist/eval/record/sealed-assertion.cjs +1 -1
- package/dist/eval/record/sealed-assertion.cjs.map +1 -1
- package/dist/eval/record/verdict.cjs +2 -2
- package/dist/eval/record/verdict.cjs.map +1 -1
- package/dist/expect/index.cjs +10 -1
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +3 -1
- package/dist/expect/index.d.mts +3 -1
- package/dist/expect/index.d.ts +3 -1
- package/dist/expect/index.js +92 -76
- package/dist/expect/index.mjs +92 -76
- package/dist/experiment/host/cli/contribution.cjs +52 -39
- package/dist/experiment/host/cli/contribution.cjs.map +1 -1
- package/dist/experiment/host/cli/contribution.d.cts +18 -4
- package/dist/experiment/host/cli/contribution.d.mts +18 -4
- package/dist/experiment/host/cli/contribution.d.ts +18 -4
- package/dist/experiment/host/cli/contribution.js +2 -2
- package/dist/experiment/host/cli/debug-protocol.cjs +2 -2
- package/dist/experiment/host/cli/debug-protocol.cjs.map +1 -1
- package/dist/experiment/host/cli/debug-protocol.d.cts +2 -2
- package/dist/experiment/host/cli/debug-protocol.d.mts +2 -2
- package/dist/experiment/host/cli/debug-protocol.d.ts +2 -2
- package/dist/experiment/host/cli/output-protocol.cjs +1 -1
- package/dist/experiment/host/cli/output-protocol.cjs.map +1 -1
- package/dist/experiment/host/cli/output-protocol.d.cts +2 -2
- package/dist/experiment/host/cli/output-protocol.d.mts +2 -2
- package/dist/experiment/host/cli/output-protocol.d.ts +2 -2
- package/dist/experiment/host/current.cjs +2 -2
- package/dist/experiment/host/current.cjs.map +1 -1
- package/dist/experiment/host/index.cjs +1 -1
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/operations.cjs +21 -22
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/runtime.cjs +8 -9
- package/dist/experiment/host/runtime.cjs.map +1 -1
- package/dist/experiment/host/runtime.d.cts +3 -3
- package/dist/experiment/host/runtime.d.mts +3 -3
- package/dist/experiment/host/runtime.d.ts +3 -3
- package/dist/experiment/host/teardown.cjs +3 -3
- package/dist/experiment/host/teardown.cjs.map +1 -1
- package/dist/experiment/host/teardown.d.cts +3 -3
- package/dist/experiment/host/teardown.d.mts +3 -3
- package/dist/experiment/host/teardown.d.ts +3 -3
- package/dist/experiment/host/types.cjs.map +1 -1
- package/dist/experiment/host/types.d.cts +19 -19
- package/dist/experiment/host/types.d.mts +19 -19
- package/dist/experiment/host/types.d.ts +19 -19
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/inspection/assertions.cjs +1 -1
- package/dist/inspection/assertions.cjs.map +1 -1
- package/dist/inspection/cli/contribution.cjs +8 -7
- package/dist/inspection/cli/contribution.cjs.map +1 -1
- package/dist/inspection/facts.cjs +4 -4
- package/dist/inspection/facts.cjs.map +1 -1
- package/dist/inspection/index.cjs +1 -5
- package/dist/inspection/index.cjs.map +1 -1
- package/dist/inspection/index.d.cts +1 -2
- package/dist/inspection/index.d.mts +1 -2
- package/dist/inspection/index.d.ts +1 -2
- package/dist/inspection/index.js +20 -26
- package/dist/inspection/lifecycle.cjs +7 -0
- package/dist/inspection/lifecycle.cjs.map +1 -0
- package/dist/inspection/lifecycle.d.cts +4 -0
- package/dist/inspection/lifecycle.d.mts +4 -0
- package/dist/inspection/lifecycle.d.ts +4 -0
- package/dist/inspection/lifecycle.js +6 -0
- package/dist/inspection/lifecycle.js.map +1 -0
- package/dist/inspection/notes.cjs +40 -0
- package/dist/inspection/notes.cjs.map +1 -0
- package/dist/inspection/notes.d.cts +12 -0
- package/dist/inspection/notes.d.mts +12 -0
- package/dist/inspection/notes.d.ts +12 -0
- package/dist/inspection/notes.js +8 -0
- package/dist/inspection/notes.js.map +1 -0
- package/dist/inspection/overview.cjs +12 -15
- package/dist/inspection/overview.cjs.map +1 -1
- package/dist/inspection/overview.d.cts +8 -6
- package/dist/inspection/overview.d.mts +8 -6
- package/dist/inspection/overview.d.ts +8 -6
- package/dist/inspection/planned-attempt.cjs +45 -0
- package/dist/inspection/planned-attempt.cjs.map +1 -0
- package/dist/inspection/planned-attempt.d.cts +109 -0
- package/dist/inspection/planned-attempt.d.mts +109 -0
- package/dist/inspection/planned-attempt.d.ts +109 -0
- package/dist/inspection/planned-attempt.js +24 -0
- package/dist/inspection/planned-attempt.js.map +1 -0
- package/dist/inspection/project-result.cjs +5 -5
- package/dist/inspection/project-result.cjs.map +1 -1
- package/dist/inspection/project-result.d.cts +58 -57
- package/dist/inspection/project-result.d.mts +58 -57
- package/dist/inspection/project-result.d.ts +58 -57
- package/dist/inspection/project-result.js +4 -4
- package/dist/inspection/project.cjs +3 -3
- package/dist/inspection/project.cjs.map +1 -1
- package/dist/inspection/protocol-values.cjs +1 -1
- package/dist/inspection/protocol-values.cjs.map +1 -1
- package/dist/inspection/protocol-values.d.cts +1 -1
- package/dist/inspection/protocol-values.d.mts +1 -1
- package/dist/inspection/protocol-values.d.ts +1 -1
- package/dist/inspection/protocol.cjs +8 -8
- package/dist/inspection/protocol.cjs.map +1 -1
- package/dist/inspection/protocol.d.cts +237 -219
- package/dist/inspection/protocol.d.mts +237 -219
- package/dist/inspection/protocol.d.ts +237 -219
- package/dist/inspection/public.cjs +1 -5
- package/dist/inspection/public.cjs.map +1 -1
- package/dist/inspection/public.d.cts +1 -2
- package/dist/inspection/public.d.mts +1 -2
- package/dist/inspection/public.d.ts +1 -2
- package/dist/inspection/public.js +14 -20
- package/dist/inspection/public.mjs +166 -129
- package/dist/inspection/query.cjs +1 -1
- package/dist/inspection/query.cjs.map +1 -1
- package/dist/inspection/results.cjs +61 -52
- package/dist/inspection/results.cjs.map +1 -1
- package/dist/inspection/results.d.cts +157 -140
- package/dist/inspection/results.d.mts +157 -140
- package/dist/inspection/results.d.ts +157 -140
- package/dist/inspection/select.cjs +33 -28
- package/dist/inspection/select.cjs.map +1 -1
- package/dist/inspection/source.cjs +1 -1
- package/dist/inspection/source.cjs.map +1 -1
- package/dist/inspection/sources.cjs +2 -2
- package/dist/inspection/sources.cjs.map +1 -1
- package/dist/inspection/trace.cjs +9 -8
- package/dist/inspection/trace.cjs.map +1 -1
- package/dist/inspection/trace.d.cts +4 -4
- package/dist/inspection/trace.d.mts +4 -4
- package/dist/inspection/trace.d.ts +4 -4
- package/dist/loaders/index.cjs +7 -279
- package/dist/loaders/index.cjs.map +1 -1
- package/dist/loaders/index.d.cts +2 -95
- package/dist/loaders/index.d.mts +2 -95
- package/dist/loaders/index.d.ts +2 -95
- package/dist/loaders/index.js +10 -12
- package/dist/loaders/index.mjs +10 -12
- package/dist/loaders/runtime.cjs +283 -0
- package/dist/loaders/runtime.cjs.map +1 -0
- package/dist/loaders/runtime.d.cts +95 -0
- package/dist/loaders/runtime.d.mts +95 -0
- package/dist/loaders/runtime.d.ts +95 -0
- package/dist/loaders/runtime.js +16 -0
- package/dist/loaders/runtime.js.map +1 -0
- package/dist/migrations/judge-provider.md +6 -6
- package/dist/{model-slots.cjs → model-roles.cjs} +12 -12
- package/dist/{model-slots.cjs.map → model-roles.cjs.map} +1 -1
- package/dist/{model-slots.d.cts → model-roles.d.cts} +10 -10
- package/dist/{model-slots.d.mts → model-roles.d.mts} +10 -10
- package/dist/{model-slots.d.ts → model-roles.d.ts} +10 -10
- package/dist/model-roles.js +14 -0
- package/dist/model-roles.js.map +1 -0
- package/dist/o11y/adapter-usage-projection.cjs +9 -8
- package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
- package/dist/o11y/adapter-usage-projection.d.cts +23 -15
- package/dist/o11y/adapter-usage-projection.d.mts +23 -15
- package/dist/o11y/adapter-usage-projection.d.ts +23 -15
- package/dist/o11y/cache-read.cjs +14 -14
- package/dist/o11y/cache-read.cjs.map +1 -1
- package/dist/o11y/cache-read.d.cts +5 -5
- package/dist/o11y/cache-read.d.mts +5 -5
- package/dist/o11y/cache-read.d.ts +5 -5
- package/dist/o11y/derive.cjs.map +1 -1
- package/dist/o11y/derive.d.cts +2 -2
- package/dist/o11y/derive.d.mts +2 -2
- package/dist/o11y/derive.d.ts +2 -2
- package/dist/o11y/eval-usage.cjs +9 -9
- package/dist/o11y/eval-usage.cjs.map +1 -1
- package/dist/o11y/eval-usage.d.cts +7 -7
- package/dist/o11y/eval-usage.d.mts +7 -7
- package/dist/o11y/eval-usage.d.ts +7 -7
- package/dist/o11y/parsers/bub.cjs +57 -81
- package/dist/o11y/parsers/bub.cjs.map +1 -1
- package/dist/o11y/parsers/index.cjs.map +1 -1
- package/dist/o11y/parsers/index.d.cts +2 -0
- package/dist/o11y/parsers/index.d.mts +2 -0
- package/dist/o11y/parsers/index.d.ts +2 -0
- package/dist/o11y/parsers/opencode.cjs +129 -217
- package/dist/o11y/parsers/opencode.cjs.map +1 -1
- package/dist/o11y/parsers/opencode.d.cts +2 -5
- package/dist/o11y/parsers/opencode.d.mts +2 -5
- package/dist/o11y/parsers/opencode.d.ts +2 -5
- package/dist/o11y/types.cjs.map +1 -1
- package/dist/o11y/types.d.cts +1 -1
- package/dist/o11y/types.d.mts +1 -1
- package/dist/o11y/types.d.ts +1 -1
- package/dist/plugin/contracts.cjs +170 -120
- package/dist/plugin/contracts.cjs.map +1 -1
- package/dist/plugin/contracts.d.cts +102 -90
- package/dist/plugin/contracts.d.mts +102 -90
- package/dist/plugin/contracts.d.ts +102 -90
- package/dist/plugin/contracts.js +16 -12
- package/dist/plugin/index.cjs.map +1 -1
- package/dist/plugin/index.d.cts +1 -1
- package/dist/plugin/index.d.mts +1 -1
- package/dist/plugin/index.d.ts +1 -1
- package/dist/plugin/link.cjs +69 -64
- package/dist/plugin/link.cjs.map +1 -1
- package/dist/plugin/link.d.cts +5 -3
- package/dist/plugin/link.d.mts +5 -3
- package/dist/plugin/link.d.ts +5 -3
- package/dist/plugin/link.js +12 -8
- package/dist/record/codec/seal-manifest.d.cts +3 -3
- package/dist/record/codec/seal-manifest.d.mts +3 -3
- package/dist/record/codec/seal-manifest.d.ts +3 -3
- package/dist/record/family/attempt-note/definition.cjs +12 -0
- package/dist/record/family/attempt-note/definition.cjs.map +1 -0
- package/dist/record/family/attempt-note/definition.d.cts +6 -0
- package/dist/record/family/attempt-note/definition.d.mts +6 -0
- package/dist/record/family/attempt-note/definition.d.ts +6 -0
- package/dist/record/family/attempt-note/definition.js +6 -0
- package/dist/record/family/attempt-note/definition.js.map +1 -0
- package/dist/record/family/attempt-note/persistence.cjs +10 -0
- package/dist/record/family/attempt-note/persistence.cjs.map +1 -0
- package/dist/record/family/attempt-note/persistence.d.cts +6 -0
- package/dist/record/family/attempt-note/persistence.d.mts +6 -0
- package/dist/record/family/attempt-note/persistence.d.ts +6 -0
- package/dist/record/family/attempt-note/persistence.js +6 -0
- package/dist/record/family/attempt-note/persistence.js.map +1 -0
- package/dist/record/family/attempt-note/schema.cjs +20 -0
- package/dist/record/family/attempt-note/schema.cjs.map +1 -0
- package/dist/record/family/attempt-note/schema.d.cts +21 -0
- package/dist/record/family/attempt-note/schema.d.mts +21 -0
- package/dist/record/family/attempt-note/schema.d.ts +21 -0
- package/dist/record/family/attempt-note/schema.js +10 -0
- package/dist/record/family/attempt-note/schema.js.map +1 -0
- package/dist/record/family/catalog.cjs +32 -29
- package/dist/record/family/catalog.cjs.map +1 -1
- package/dist/record/family/catalog.d.cts +7 -2
- package/dist/record/family/catalog.d.mts +7 -2
- package/dist/record/family/catalog.d.ts +7 -2
- package/dist/record/family/current.cjs +48 -45
- package/dist/record/family/current.cjs.map +1 -1
- package/dist/record/family/current.d.cts +15 -0
- package/dist/record/family/current.d.mts +15 -0
- package/dist/record/family/current.d.ts +15 -0
- package/dist/record/model/index.js +66 -64
- package/dist/record/model/run-context.cjs +9 -3
- package/dist/record/model/run-context.cjs.map +1 -1
- package/dist/record/model/run-context.d.cts +9 -2
- package/dist/record/model/run-context.d.mts +9 -2
- package/dist/record/model/run-context.d.ts +9 -2
- package/dist/record/model/run-context.js +8 -6
- package/dist/record/model/seal-manifest.d.cts +1 -1
- package/dist/record/model/seal-manifest.d.mts +1 -1
- package/dist/record/model/seal-manifest.d.ts +1 -1
- package/dist/run/cli/contribution.cjs +6 -32
- package/dist/run/cli/contribution.cjs.map +1 -1
- package/dist/run/host/runtime.cjs +1 -1
- package/dist/run/host/runtime.cjs.map +1 -1
- package/dist/run/storage/sqlite.cjs +7 -7
- package/dist/run/storage/sqlite.cjs.map +1 -1
- package/dist/runner/adapter-usage.cjs +5 -3
- package/dist/runner/adapter-usage.cjs.map +1 -1
- package/dist/runner/adapter-usage.d.cts +2 -2
- package/dist/runner/adapter-usage.d.mts +2 -2
- package/dist/runner/adapter-usage.d.ts +2 -2
- package/dist/runner/adoption.cjs +9 -12
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/attempt-notes.cjs +8 -0
- package/dist/runner/attempt-notes.cjs.map +1 -0
- package/dist/runner/attempt-notes.d.cts +4 -0
- package/dist/runner/attempt-notes.d.mts +4 -0
- package/dist/runner/attempt-notes.d.ts +4 -0
- package/dist/runner/attempt-notes.js +8 -0
- package/dist/runner/attempt-notes.js.map +1 -0
- package/dist/runner/attempt.cjs +61 -73
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/attempt.d.cts +3 -3
- package/dist/runner/attempt.d.mts +3 -3
- package/dist/runner/attempt.d.ts +3 -3
- package/dist/runner/command-plan.cjs +21 -26
- package/dist/runner/command-plan.cjs.map +1 -1
- package/dist/runner/command-plan.d.cts +4 -4
- package/dist/runner/command-plan.d.mts +4 -4
- package/dist/runner/command-plan.d.ts +4 -4
- package/dist/runner/command-plan.js +4 -4
- package/dist/runner/config-identity.cjs.map +1 -1
- package/dist/runner/config-identity.d.cts +2 -2
- package/dist/runner/config-identity.d.mts +2 -2
- package/dist/runner/config-identity.d.ts +2 -2
- package/dist/runner/discover.cjs +6 -6
- package/dist/runner/discover.cjs.map +1 -1
- package/dist/runner/eval-selection.cjs +2 -2
- package/dist/runner/eval-selection.cjs.map +1 -1
- package/dist/runner/eval-selection.d.cts +2 -2
- package/dist/runner/eval-selection.d.mts +2 -2
- package/dist/runner/eval-selection.d.ts +2 -2
- package/dist/runner/feedback/human.cjs +1 -1
- package/dist/runner/feedback/human.cjs.map +1 -1
- package/dist/runner/feedback/json.cjs +4 -2
- package/dist/runner/feedback/json.cjs.map +1 -1
- package/dist/runner/feedback/json.d.cts +1 -1
- package/dist/runner/feedback/json.d.mts +1 -1
- package/dist/runner/feedback/json.d.ts +1 -1
- package/dist/runner/feedback/sink.cjs +1 -1
- package/dist/runner/feedback/sink.cjs.map +1 -1
- package/dist/runner/feedback/sink.d.cts +1 -1
- package/dist/runner/feedback/sink.d.mts +1 -1
- package/dist/runner/feedback/sink.d.ts +1 -1
- package/dist/runner/fingerprint.cjs +1 -1
- package/dist/runner/fingerprint.cjs.map +1 -1
- package/dist/runner/project-target.cjs.map +1 -1
- package/dist/runner/project-target.d.cts +2 -2
- package/dist/runner/project-target.d.mts +2 -2
- package/dist/runner/project-target.d.ts +2 -2
- package/dist/runner/record/attachments.cjs +2 -2
- package/dist/runner/record/attachments.cjs.map +1 -1
- package/dist/runner/record/planning.cjs +8 -2
- package/dist/runner/record/planning.cjs.map +1 -1
- package/dist/runner/record.cjs +2 -0
- package/dist/runner/record.cjs.map +1 -1
- package/dist/runner/report.cjs +3 -3
- package/dist/runner/report.cjs.map +1 -1
- package/dist/runner/report.d.cts +1 -1
- package/dist/runner/report.d.mts +1 -1
- package/dist/runner/report.d.ts +1 -1
- package/dist/runner/reuse-plan.cjs +2 -2
- package/dist/runner/reuse-plan.cjs.map +1 -1
- package/dist/runner/run.cjs +10 -45
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/sandbox-pool.cjs +1 -2
- package/dist/runner/sandbox-pool.cjs.map +1 -1
- package/dist/runner/setup-prefix-preparation.cjs +1 -1
- package/dist/runner/setup-prefix-preparation.cjs.map +1 -1
- package/dist/runner/teardown-registry.cjs +2 -2
- package/dist/runner/teardown-registry.cjs.map +1 -1
- package/dist/runner/teardown-registry.d.cts +1 -1
- package/dist/runner/teardown-registry.d.mts +1 -1
- package/dist/runner/teardown-registry.d.ts +1 -1
- package/dist/runner/types.cjs +4 -4
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +64 -93
- package/dist/runner/types.d.mts +64 -93
- package/dist/runner/types.d.ts +64 -93
- package/dist/runner/types.js +2 -2
- package/dist/sandbox/action.cjs +1 -1
- package/dist/sandbox/action.cjs.map +1 -1
- package/dist/sandbox/cli/contribution.cjs +17 -14
- package/dist/sandbox/cli/contribution.cjs.map +1 -1
- package/dist/sandbox/cli/contribution.d.cts +1 -1
- package/dist/sandbox/cli/contribution.d.mts +1 -1
- package/dist/sandbox/cli/contribution.d.ts +1 -1
- package/dist/sandbox/commands.cjs +1 -1
- package/dist/sandbox/commands.cjs.map +1 -1
- package/dist/sandbox/commands.d.cts +1 -1
- package/dist/sandbox/commands.d.mts +1 -1
- package/dist/sandbox/commands.d.ts +1 -1
- package/dist/sandbox/compose.cjs +2 -2
- package/dist/sandbox/compose.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.cjs +5 -9
- package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
- package/dist/sandbox/docker-profile/registry.d.cts +0 -3
- package/dist/sandbox/docker-profile/registry.d.mts +0 -3
- package/dist/sandbox/docker-profile/registry.d.ts +0 -3
- package/dist/sandbox/docker-profile/registry.js +6 -12
- package/dist/sandbox/docker-profile/runtime.cjs +1 -1
- package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.cjs +12 -16
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.d.cts +2 -6
- package/dist/sandbox/docker-profile/schema.d.mts +2 -6
- package/dist/sandbox/docker-profile/schema.d.ts +2 -6
- package/dist/sandbox/docker-profile/schema.js +24 -32
- package/dist/sandbox/incus.cjs +2 -2
- package/dist/sandbox/incus.cjs.map +1 -1
- package/dist/sandbox/index.cjs +4 -35
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +4 -8
- package/dist/sandbox/index.d.mts +4 -8
- package/dist/sandbox/index.d.ts +4 -8
- package/dist/sandbox/index.js +116 -172
- package/dist/sandbox/index.mjs +116 -172
- package/dist/sandbox/layer.cjs +3 -3
- package/dist/sandbox/layer.cjs.map +1 -1
- package/dist/sandbox/link.cjs +5 -0
- package/dist/sandbox/link.cjs.map +1 -1
- package/dist/sandbox/link.d.cts +3 -0
- package/dist/sandbox/link.d.mts +3 -0
- package/dist/sandbox/link.d.ts +3 -0
- package/dist/sandbox/runtime.cjs +9 -4
- package/dist/sandbox/runtime.cjs.map +1 -1
- package/dist/shared/failure-class.cjs +5 -5
- package/dist/shared/failure-class.cjs.map +1 -1
- package/dist/shared/failure-class.d.cts +4 -10
- package/dist/shared/failure-class.d.mts +4 -10
- package/dist/shared/failure-class.d.ts +4 -10
- package/dist/shared/types.cjs.map +1 -1
- package/dist/shared/types.d.cts +1 -1
- package/dist/shared/types.d.mts +1 -1
- package/dist/shared/types.d.ts +1 -1
- package/dist/show/contribution.cjs +17 -2
- package/dist/show/contribution.cjs.map +1 -1
- package/dist/show/contribution.d.cts +14 -0
- package/dist/show/contribution.d.mts +14 -0
- package/dist/show/contribution.d.ts +14 -0
- package/dist/show/model.cjs +8 -5
- package/dist/show/model.cjs.map +1 -1
- package/dist/show/model.d.cts +11 -8
- package/dist/show/model.d.mts +11 -8
- package/dist/show/model.d.ts +11 -8
- package/dist/show/render.cjs +34 -22
- package/dist/show/render.cjs.map +1 -1
- package/dist/sources/projector.cjs +1 -1
- package/dist/sources/projector.cjs.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +2 -2
- package/dist/view/app-dist/.vite/manifest.json +2 -2
- package/dist/view/app-dist/assets/{index-B3ijZRph.js → index-CxrOUvHC.js} +17 -17
- package/dist/view/app-dist/assets/{quality-cost-scatter-B--DfJ9s.js → quality-cost-scatter-B6Aiss7x.js} +1 -1
- package/dist/view/app-dist/index.html +1 -1
- package/dist/view/cli/contribution.cjs +1 -1
- package/dist/view/cli/contribution.cjs.map +1 -1
- package/dist/view/function-runtime.mjs +318 -121
- package/dist/view/http-protocol.d.cts +1 -1
- package/dist/view/http-protocol.d.mts +1 -1
- package/dist/view/http-protocol.d.ts +1 -1
- package/dist/view/inspection-host.cjs +2 -2
- package/dist/view/inspection-host.cjs.map +1 -1
- package/dist/view/inspection-host.d.cts +349 -331
- package/dist/view/inspection-host.d.mts +349 -331
- package/dist/view/inspection-host.d.ts +349 -331
- package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +6 -6
- package/docs-site/zh/examples/integrations/claude-sdk.mdx +5 -5
- package/docs-site/zh/examples/integrations/codex-sdk.mdx +4 -4
- package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
- package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
- package/docs-site/zh/explanation/adapter.mdx +6 -6
- package/docs-site/zh/explanation/assert.mdx +7 -7
- package/docs-site/zh/explanation/drive.mdx +4 -4
- package/docs-site/zh/explanation/hitl.mdx +2 -2
- package/docs-site/zh/explanation/judge.mdx +2 -2
- package/docs-site/zh/introduction.mdx +2 -2
- package/docs-site/zh/reference/builtin-agents.mdx +46 -49
- package/docs-site/zh/reference/cli.mdx +16 -14
- package/docs-site/zh/reference/define-agent.mdx +19 -19
- package/docs-site/zh/reference/define-config.mdx +7 -15
- package/docs-site/zh/reference/define-eval.mdx +20 -14
- package/docs-site/zh/reference/define-experiment.mdx +18 -39
- package/docs-site/zh/reference/events.mdx +1 -1
- package/docs-site/zh/reference/expect.mdx +21 -0
- package/docs-site/zh/reference/official-adapters.mdx +12 -5
- package/docs-site/zh/troubleshooting/debugging.mdx +2 -2
- package/docs-site/zh/troubleshooting/recover-after-kill.mdx +1 -1
- package/docs-site/zh/tutorials/agent-onboarding.mdx +2 -2
- package/docs-site/zh/tutorials/authoring.mdx +2 -2
- package/docs-site/zh/tutorials/compare-runs.mdx +1 -1
- package/docs-site/zh/tutorials/concurrency.mdx +8 -8
- package/docs-site/zh/tutorials/configuration.mdx +5 -5
- package/docs-site/zh/tutorials/control-run-cost.mdx +19 -19
- package/docs-site/zh/tutorials/eval-groups.mdx +1 -1
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +5 -5
- package/docs-site/zh/tutorials/experiment-services.mdx +32 -32
- package/docs-site/zh/tutorials/handle-execution-failures.mdx +2 -28
- package/docs-site/zh/tutorials/plugins.mdx +49 -143
- package/docs-site/zh/tutorials/sandbox-agent.mdx +1 -1
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +7 -7
- package/docs-site/zh/tutorials/upgrade-0-18.mdx +1 -1
- package/docs-site/zh/tutorials/upgrade-0-19.mdx +121 -0
- package/docs-site/zh/tutorials/upgrade-0-20.mdx +12 -0
- package/docs-site/zh/tutorials/verify-judge.mdx +2 -2
- package/docs-site/zh/tutorials/viewing-results.mdx +2 -2
- package/docs-site/zh/tutorials/write-experiment.mdx +1 -1
- package/docs-site/zh/tutorials/write-send.mdx +13 -13
- package/package.json +1 -1
- package/dist/agents/effect-runtime.cjs.map +0 -1
- package/dist/agents/effect-runtime.d.cts +0 -29
- package/dist/agents/effect-runtime.d.mts +0 -29
- package/dist/agents/effect-runtime.d.ts +0 -29
- package/dist/agents/effect-runtime.js +0 -16
- package/dist/agents/effect-runtime.js.map +0 -1
- package/dist/agents/session-slot.cjs.map +0 -1
- package/dist/agents/session-slot.d.cts +0 -12
- package/dist/agents/session-slot.d.mts +0 -12
- package/dist/agents/session-slot.d.ts +0 -12
- package/dist/agents/session-slot.js +0 -6
- package/dist/agents/session-slot.js.map +0 -1
- package/dist/model-slots.js +0 -14
- package/dist/model-slots.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-identity.js","sourceRoot":"","sources":["config-identity.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResolvedModelSlots } from \"../model-slots.ts\";\n// 配置身份的字段级投影:`configHash` 的哈希输入本身,加上「同一份输入怎样按字段路径比对」。\n//\n// 哈希只回答「等不等」,回答不了「哪里变了」。`--accept config:<字段路径>` 与 `--dry` 的逐条\n// 作废原因都要后一个答案,而两侧必须来自同一份字段集合——configHash 里有的字段,这里就能按\n// 点路径指名;这里指不出来的路径,`--accept` 也就没有对应的差异可授权。\n//\n// 历史侧的同名投影从落盘重建(`ExperimentRunInfo` + 结果顶层的 adapter/model),这正是\n// 「进 configHash 的字段必须落进 run.json」那条规则存在的理由。\nimport type { LinkedRunPlan } from \"../sandbox/plan.ts\";\nimport { sandboxLayerIdentityFor } from \"../sandbox/link.ts\";\nimport type { AgentIdentity, AgentInstaller } from \"../agents/types.ts\";\nimport type { EvalResult, JsonValue, ResolvedJudgeConfig } from \"../types.ts\";\nimport type { AgentRun } from \"./types.ts\";\nimport { adapterIdentity } from \"../adapter.ts\";\nimport type { AdapterIdentity } from \"../record/model/run-context.ts\";\n/**\n * 一次运行的**配置身份**:`computeConfigHash` 的哈希输入,字段集合与\n * docs/feature/experiments/cache.md「指纹:两个哈希嵌套」逐字对应。\n *\n * 可选配置必须真的省略键,而不是写入 `undefined` 或一个 Omitted 哨兵;否则未声明配置会\n * 无端改变基础 configHash。新增公开配置字段时只在这里裁决一次「进不进 configHash」。\n */\nexport interface ConfigIdentity {\n readonly models?: {\n readonly version: 1;\n readonly slots: ResolvedModelSlots;\n };\n readonly adapter: AdapterIdentity;\n readonly model: DeclaredConfigValue<string>;\n readonly reasoningEffort: DeclaredConfigValue<string>;\n readonly flags: Readonly<globalThis.Record<string, JsonValue>>;\n /** Credential-free Experiment Plugin and receiver behavior. */\n readonly plugins: JsonValue;\n readonly sandboxReuse: boolean;\n /** Stable public key for the shared-state mutex, never a secret or stored state. */\n readonly sharedState?: string;\n /** Experiment 作者 layer 身份;物理 provider plan 属于逐 Eval fingerprint,不进入 Run 级身份。 */\n readonly sandboxLayer: JsonValue;\n readonly judgeRuntime: JudgeConfigIdentity;\n /** 声明顺序、精确 installer 配对、安装模式与计划目标平台的完整静态身份。 */\n readonly agentInstalls: readonly JsonValue[];\n}\nexport type DeclaredConfigValue<Value> = {\n readonly _tag: \"Omitted\";\n} | {\n readonly _tag: \"Configured\";\n readonly value: Value;\n};\nexport type JudgeConfigIdentity = {\n readonly _tag: \"Unconfigured\";\n} | {\n readonly _tag: \"Configured\";\n readonly provider: ResolvedJudgeConfig[\"provider\"];\n readonly model: string;\n readonly baseUrl: string;\n readonly credential: ResolvedJudgeConfig[\"credential\"];\n readonly timeoutMs: number;\n readonly maxResponseBytes: number;\n readonly supportsImages?: boolean;\n readonly protocol: ResolvedJudgeConfig[\"protocol\"];\n};\n/** manifest 相减得出的一条具名差异;`selector` 原样可复制进 `--accept`。 */\nexport type ConfigFieldDelta = {\n readonly _tag: \"Added\";\n readonly selector: string;\n readonly from?: never;\n readonly to: string;\n} | {\n readonly _tag: \"Removed\";\n readonly selector: string;\n readonly from: string;\n readonly to?: never;\n} | {\n readonly _tag: \"Changed\";\n readonly selector: string;\n readonly from: string;\n readonly to: string;\n};\nexport function addedConfigField(selector: string, to: string): ConfigFieldDelta {\n return Object.freeze({ _tag: \"Added\", selector, to });\n}\nexport function removedConfigField(selector: string, from: string): ConfigFieldDelta {\n return Object.freeze({ _tag: \"Removed\", selector, from });\n}\nexport function changedConfigField(selector: string, from: string, to: string): ConfigFieldDelta {\n return Object.freeze({ _tag: \"Changed\", selector, from, to });\n}\nfunction freezeJson<Value extends JsonValue>(value: Value): Value {\n if (value === null || typeof value !== \"object\")\n return value;\n if (Array.isArray(value)) {\n return Object.freeze(value.map((entry) => freezeJson(entry))) as Value;\n }\n return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, freezeJson(entry)]))) as Value;\n}\nfunction freezeConfigIdentity(identity: ConfigIdentity): ConfigIdentity {\n const { sharedState, ...withoutSharedState } = identity;\n return Object.freeze({\n ...withoutSharedState,\n adapter: Object.freeze({ ...identity.adapter }),\n ...(identity.models === undefined ? {} : { models: Object.freeze({\n version: 1 as const,\n slots: Object.freeze(Object.fromEntries(Object.entries(identity.models.slots).map(([key, value]) => [key, Object.freeze({ ...value })]))),\n }) }),\n model: Object.freeze(identity.model),\n reasoningEffort: Object.freeze(identity.reasoningEffort),\n flags: freezeJson({ ...identity.flags }),\n plugins: freezeJson(identity.plugins),\n ...(sharedState === undefined ? {} : { sharedState }),\n sandboxLayer: freezeJson(identity.sandboxLayer),\n judgeRuntime: identity.judgeRuntime._tag === \"Unconfigured\"\n ? Object.freeze({ _tag: \"Unconfigured\" as const })\n : Object.freeze({\n _tag: \"Configured\" as const,\n provider: identity.judgeRuntime.provider,\n model: identity.judgeRuntime.model,\n baseUrl: identity.judgeRuntime.baseUrl,\n credential: Object.freeze({ ...identity.judgeRuntime.credential }),\n timeoutMs: Object.freeze(identity.judgeRuntime.timeoutMs),\n maxResponseBytes: Object.freeze(identity.judgeRuntime.maxResponseBytes),\n ...(identity.judgeRuntime.supportsImages === true ? { supportsImages: true } : {}),\n protocol: Object.freeze({ ...identity.judgeRuntime.protocol }),\n }),\n agentInstalls: Object.freeze(identity.agentInstalls.map((entry) => freezeJson(entry))),\n });\n}\nfunction sameAgentIdentity(left: AgentIdentity, right: AgentIdentity): boolean {\n return left.agent === right.agent && left.version === right.version && left.revision === right.revision;\n}\nfunction installerIdentity(installer: AgentInstaller | undefined): JsonValue {\n if (installer === undefined)\n return { _tag: \"Missing\" };\n return {\n _tag: \"Matched\",\n identity: {\n agent: installer.identity.agent,\n version: installer.identity.version,\n revision: installer.identity.revision,\n },\n installMode: installer.installMode,\n platforms: installer.platforms === undefined\n ? { _tag: \"All\" }\n : { _tag: \"Listed\", values: [...installer.platforms] },\n };\n}\n/** 计划期一次性冻结全部 ensure/installer 配对;运行事实与 staged digest 不反写配置身份。 */\nexport function agentInstallPlansForRun(run: AgentRun): readonly JsonValue[] {\n if (run.adapter.kind === \"custom\")\n return Object.freeze([]);\n const agent = run.agent;\n if (agent === undefined)\n throw new Error(\"Agent AdapterRun requires its Agent execution implementation.\");\n if (agent.kind === \"direct\")\n return Object.freeze([]);\n return Object.freeze(agent.ensure.map((ensure, index) => freezeJson({\n order: index,\n ensure: {\n agent: ensure.identity.agent,\n version: ensure.identity.version,\n revision: ensure.identity.revision,\n },\n installer: installerIdentity(agent.installers.find((candidate) => sameAgentIdentity(candidate.identity, ensure.identity))),\n })));\n}\nfunction declaredString(value: string | undefined): DeclaredConfigValue<string> {\n return value === undefined ? { _tag: \"Omitted\" } : { _tag: \"Configured\", value };\n}\nfunction judgeIdentity(judge: ResolvedJudgeConfig | undefined): JudgeConfigIdentity {\n return judge === undefined\n ? { _tag: \"Unconfigured\" }\n : {\n _tag: \"Configured\",\n provider: judge.provider,\n model: judge.model,\n baseUrl: judge.baseUrl,\n credential: judge.credential,\n timeoutMs: judge.timeoutMs,\n maxResponseBytes: judge.maxResponseBytes,\n ...(judge.supportsImages === true ? { supportsImages: true } : {}),\n protocol: judge.protocol,\n };\n}\n/** 本次解析后配置的身份投影。 */\nexport function configIdentityForRun(run: AgentRun, plan: LinkedRunPlan, judge: ResolvedJudgeConfig | undefined = undefined): ConfigIdentity {\n return freezeConfigIdentity({\n adapter: adapterIdentity(run.adapter),\n ...(run.adapter.kind === \"custom\" ? { models: { version: 1 as const, slots: run.models ?? Object.freeze({}) } } : {}),\n model: declaredString(run.model),\n reasoningEffort: declaredString(run.reasoningEffort),\n flags: run.flags,\n plugins: run.pluginBehavior ?? [],\n sandboxReuse: run.sandboxReuse ?? false,\n ...(run.sharedState === undefined ? {} : { sharedState: run.sharedState.key }),\n sandboxLayer: sandboxLayerIdentityFor(plan.pair, \"experiment\"),\n judgeRuntime: judgeIdentity(judge),\n agentInstalls: agentInstallPlansForRun(run),\n });\n}\n/**\n * 历史条目的同一份投影,从落盘重建。缺 `ExperimentRunInfo`(第三方 harness 写的结果)时\n * 配置面无从重算,返回 `undefined`——差异算不出就如实算不出,不猜。\n */\nexport function configIdentityFromResult(result: EvalResult): ConfigIdentity | undefined {\n const exp = result.experiment;\n if (exp === undefined)\n return undefined;\n return freezeConfigIdentity({\n adapter: result.adapter,\n ...(exp.models === undefined ? {} : { models: { version: 1 as const, slots: exp.models } }),\n model: declaredString(result.model),\n reasoningEffort: declaredString(exp.reasoningEffort),\n flags: exp.flags ?? {},\n plugins: exp.plugins ?? [],\n sandboxReuse: exp.sandboxReuse ?? false,\n ...(exp.sharedState === undefined ? {} : { sharedState: exp.sharedState.key }),\n sandboxLayer: exp.sandboxLayer,\n judgeRuntime: judgeIdentity(exp.judgeRuntime),\n agentInstalls: exp.agentInstalls,\n });\n}\n/**\n * 身份 → 字段路径表。真正未声明的配置不会生成对象键或字段路径。\n */\nfunction flatten(identity: ConfigIdentity): Map<string, JsonValue> {\n const out = new Map<string, JsonValue>();\n const put = (path: string, value: JsonValue): void => { out.set(path, value); };\n const putDeclared = <Value extends JsonValue>(path: string, value: DeclaredConfigValue<Value>): void => {\n if (value._tag === \"Configured\")\n put(path, value.value);\n };\n put(\"adapter.name\", identity.adapter.name);\n put(\"adapter.contract\", identity.adapter.contract);\n put(\"adapter.behaviorRevision\", identity.adapter.behaviorRevision);\n if (identity.adapter.cleanupTimeoutMs !== undefined)\n put(\"adapter.cleanupTimeoutMs\", identity.adapter.cleanupTimeoutMs);\n if (identity.models !== undefined) {\n put(\"models.version\", identity.models.version);\n for (const [slot, selection] of Object.entries(identity.models.slots)) {\n put(`models.${slot}.model`, selection.model);\n put(`models.${slot}.reasoningEffort`, selection.reasoningEffort);\n }\n }\n putDeclared(\"model\", identity.model);\n putDeclared(\"reasoningEffort\", identity.reasoningEffort);\n put(\"sandboxReuse\", identity.sandboxReuse);\n if (identity.sharedState !== undefined)\n put(\"sharedState.key\", identity.sharedState);\n for (const [key, value] of Object.entries(identity.flags))\n put(`flags.${key}`, value);\n put(\"plugins\", identity.plugins);\n put(\"sandboxLayer\", identity.sandboxLayer);\n if (identity.judgeRuntime._tag === \"Configured\") {\n put(\"judgeRuntime.provider\", identity.judgeRuntime.provider);\n put(\"judgeRuntime.model\", identity.judgeRuntime.model);\n put(\"judgeRuntime.baseUrl\", identity.judgeRuntime.baseUrl);\n put(\"judgeRuntime.credential.kind\", identity.judgeRuntime.credential.kind);\n if (identity.judgeRuntime.credential.kind === \"environment\")\n put(\"judgeRuntime.credential.name\", identity.judgeRuntime.credential.name);\n put(\"judgeRuntime.timeoutMs\", identity.judgeRuntime.timeoutMs);\n put(\"judgeRuntime.maxResponseBytes\", identity.judgeRuntime.maxResponseBytes);\n if (identity.judgeRuntime.supportsImages === true)\n put(\"judgeRuntime.supportsImages\", true);\n put(\"judgeRuntime.protocol.kind\", identity.judgeRuntime.protocol.kind);\n put(\"judgeRuntime.protocol.revision\", identity.judgeRuntime.protocol.revision);\n if (identity.judgeRuntime.protocol.kind === \"chat-completions\")\n put(\"judgeRuntime.protocol.maxOutputTokens\", identity.judgeRuntime.protocol.maxOutputTokens);\n }\n put(\"agentInstalls\", [...identity.agentInstalls]);\n return out;\n}\n/**\n * 身份的字段路径投影,供 manifest 的配置面落盘(见 `runner/manifest.ts`)。与差异比对读的是\n * 同一个 `flatten`:清单里指得出的路径,`--accept config:<路径>` 就授权得了,两侧不可能分叉。\n */\nexport function configIdentityPaths(identity: ConfigIdentity): Array<[\n string,\n JsonValue\n]> {\n return [...flatten(identity)];\n}\n/** 值的字符串投影:差异明细与 `carriedAccepting` 留痕共用完整值,有界呈现是人读 renderer(`feedback/human.ts`)的职责,不在构造点做。 */\nfunction serializeValue(value: JsonValue): string {\n return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n/**\n * 历史侧与本次侧的字段级差异,按 selector 字典序。键的增删同样是一条差异。\n */\nexport function configDeltas(historical: ConfigIdentity, current: ConfigIdentity): ConfigFieldDelta[] {\n const from = flatten(historical);\n const to = flatten(current);\n const paths = [...new Set([...from.keys(), ...to.keys()])].sort();\n const out: ConfigFieldDelta[] = [];\n for (const path of paths) {\n const hasFrom = from.has(path);\n const hasTo = to.has(path);\n if (hasFrom && hasTo && JSON.stringify(from.get(path)) === JSON.stringify(to.get(path)))\n continue;\n const fromValue = from.get(path);\n const toValue = to.get(path);\n if (hasFrom && fromValue === undefined)\n throw new Error(`Missing historical config value for ${path}.`);\n if (hasTo && toValue === undefined)\n throw new Error(`Missing current config value for ${path}.`);\n const selector = `config:${path}`;\n if (!hasFrom)\n out.push(addedConfigField(selector, serializeValue(toValue!)));\n else if (!hasTo)\n out.push(removedConfigField(selector, serializeValue(fromValue!)));\n else\n out.push(changedConfigField(selector, serializeValue(fromValue!), serializeValue(toValue!)));\n }\n return out;\n}\n/**\n * 反事实身份:把本次身份里**被授权的那些字段**换回历史值,其余原样。\n *\n * 换出来的身份再算一次指纹,与历史条目落盘的那个相等,才证明「两侧只差这些被授权的字段」——\n * 授权因此不是绕开判据,而是把判据挪到一个明确写下来的口径上重算一次。\n *\n * `sandbox` / `judge` 是整对象进哈希的分组:键在不在本身改变字节,逐字段拼回去会造出两侧都\n * 不存在的形状。分组内**每一条**差异都被授权才整体换回历史对象,否则保持本次值——那样指纹\n * 自然对不上,条目照常重跑,不会静默跨过没被授权的那半。\n */\nexport function counterfactualConfigIdentity(current: ConfigIdentity, historical: ConfigIdentity, accepted: ReadonlySet<string>): ConfigIdentity {\n const differing = new Set(configDeltas(historical, current).map((d) => d.selector));\n const flags: globalThis.Record<string, JsonValue> = { ...current.flags };\n for (const selector of accepted) {\n if (!selector.startsWith(\"config:flags.\"))\n continue;\n const key = selector.slice(\"config:flags.\".length);\n if (Object.hasOwn(historical.flags, key)) {\n const value = historical.flags[key];\n if (value === undefined)\n throw new Error(`Missing historical flag value for ${key}.`);\n flags[key] = value;\n }\n else\n delete flags[key];\n }\n let sandboxLayer = current.sandboxLayer;\n let plugins = current.plugins;\n let judgeRuntime = current.judgeRuntime;\n let agentInstalls = current.agentInstalls;\n let adapter = current.adapter;\n let models = current.models;\n const rollbackGroups: readonly (\"adapter\" | \"sandboxLayer\" | \"plugins\" | \"judgeRuntime\" | \"agentInstalls\" | \"models\")[] = [\n \"adapter\", \"sandboxLayer\", \"plugins\", \"judgeRuntime\", \"agentInstalls\", \"models\",\n ];\n for (const group of rollbackGroups) {\n const paths = [...differing].filter((selector) => selector === `config:${group}` || selector.startsWith(`config:${group}.`));\n if (paths.length === 0 || !paths.every((selector) => accepted.has(selector)))\n continue;\n if (group === \"adapter\")\n adapter = historical.adapter;\n else if (group === \"sandboxLayer\")\n sandboxLayer = historical.sandboxLayer;\n else if (group === \"plugins\")\n plugins = historical.plugins;\n else if (group === \"judgeRuntime\")\n judgeRuntime = historical.judgeRuntime;\n else if (group === \"models\")\n models = historical.models;\n else\n agentInstalls = historical.agentInstalls;\n }\n const sharedState = accepted.has(\"config:sharedState.key\") ? historical.sharedState : current.sharedState;\n return freezeConfigIdentity({\n adapter,\n ...(models === undefined ? {} : { models }),\n model: accepted.has(\"config:model\") ? historical.model : current.model,\n reasoningEffort: accepted.has(\"config:reasoningEffort\")\n ? historical.reasoningEffort\n : current.reasoningEffort,\n flags,\n plugins,\n sandboxReuse: accepted.has(\"config:sandboxReuse\") ? historical.sandboxReuse : current.sandboxReuse,\n ...(sharedState === undefined ? {} : { sharedState }),\n sandboxLayer,\n judgeRuntime,\n agentInstalls,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"config-identity.js","sourceRoot":"","sources":["config-identity.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResolvedModelRoles } from \"../model-roles.ts\";\n// 配置身份的字段级投影:`configHash` 的哈希输入本身,加上「同一份输入怎样按字段路径比对」。\n//\n// 哈希只回答「等不等」,回答不了「哪里变了」。`--accept config:<字段路径>` 与 `--dry` 的逐条\n// 作废原因都要后一个答案,而两侧必须来自同一份字段集合——configHash 里有的字段,这里就能按\n// 点路径指名;这里指不出来的路径,`--accept` 也就没有对应的差异可授权。\n//\n// 历史侧的同名投影从落盘重建(`ExperimentRunInfo` + 结果顶层的 adapter/model),这正是\n// 「进 configHash 的字段必须落进 run.json」那条规则存在的理由。\nimport type { LinkedRunPlan } from \"../sandbox/plan.ts\";\nimport { sandboxLayerIdentityFor } from \"../sandbox/link.ts\";\nimport type { AgentIdentity, AgentInstaller } from \"../agents/types.ts\";\nimport type { EvalResult, JsonValue, ResolvedJudgeConfig } from \"../types.ts\";\nimport type { AgentRun } from \"./types.ts\";\nimport { adapterIdentity } from \"../adapter.ts\";\nimport type { AdapterIdentity } from \"../record/model/run-context.ts\";\n/**\n * 一次运行的**配置身份**:`computeConfigHash` 的哈希输入,字段集合与\n * docs/feature/experiments/cache.md「指纹:两个哈希嵌套」逐字对应。\n *\n * 可选配置必须真的省略键,而不是写入 `undefined` 或一个 Omitted 哨兵;否则未声明配置会\n * 无端改变基础 configHash。新增公开配置字段时只在这里裁决一次「进不进 configHash」。\n */\nexport interface ConfigIdentity {\n readonly models?: {\n readonly version: 1;\n readonly slots: ResolvedModelRoles;\n };\n readonly adapter: AdapterIdentity;\n readonly model: DeclaredConfigValue<string>;\n readonly reasoningEffort: DeclaredConfigValue<string>;\n readonly flags: Readonly<globalThis.Record<string, JsonValue>>;\n /** Credential-free Experiment Plugin and receiver behavior. */\n readonly plugins: JsonValue;\n readonly sandboxReuse: boolean;\n /** Stable public key for the shared-state mutex, never a secret or stored state. */\n readonly sharedState?: string;\n /** Experiment 作者 layer 身份;物理 provider plan 属于逐 Eval fingerprint,不进入 Run 级身份。 */\n readonly sandboxLayer: JsonValue;\n readonly judgeRuntime: JudgeConfigIdentity;\n /** 声明顺序、精确 installer 配对、安装模式与计划目标平台的完整静态身份。 */\n readonly agentInstalls: readonly JsonValue[];\n}\nexport type DeclaredConfigValue<Value> = {\n readonly _tag: \"Omitted\";\n} | {\n readonly _tag: \"Configured\";\n readonly value: Value;\n};\nexport type JudgeConfigIdentity = {\n readonly _tag: \"Unconfigured\";\n} | {\n readonly _tag: \"Configured\";\n readonly provider: ResolvedJudgeConfig[\"provider\"];\n readonly model: string;\n readonly baseUrl: string;\n readonly credential: ResolvedJudgeConfig[\"credential\"];\n readonly timeoutMs: number;\n readonly maxResponseBytes: number;\n readonly supportsImages?: boolean;\n readonly protocol: ResolvedJudgeConfig[\"protocol\"];\n};\n/** manifest 相减得出的一条具名差异;`selector` 原样可复制进 `--accept`。 */\nexport type ConfigFieldDelta = {\n readonly _tag: \"Added\";\n readonly selector: string;\n readonly from?: never;\n readonly to: string;\n} | {\n readonly _tag: \"Removed\";\n readonly selector: string;\n readonly from: string;\n readonly to?: never;\n} | {\n readonly _tag: \"Changed\";\n readonly selector: string;\n readonly from: string;\n readonly to: string;\n};\nexport function addedConfigField(selector: string, to: string): ConfigFieldDelta {\n return Object.freeze({ _tag: \"Added\", selector, to });\n}\nexport function removedConfigField(selector: string, from: string): ConfigFieldDelta {\n return Object.freeze({ _tag: \"Removed\", selector, from });\n}\nexport function changedConfigField(selector: string, from: string, to: string): ConfigFieldDelta {\n return Object.freeze({ _tag: \"Changed\", selector, from, to });\n}\nfunction freezeJson<Value extends JsonValue>(value: Value): Value {\n if (value === null || typeof value !== \"object\")\n return value;\n if (Array.isArray(value)) {\n return Object.freeze(value.map((entry) => freezeJson(entry))) as Value;\n }\n return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, freezeJson(entry)]))) as Value;\n}\nfunction freezeConfigIdentity(identity: ConfigIdentity): ConfigIdentity {\n const { sharedState, ...withoutSharedState } = identity;\n return Object.freeze({\n ...withoutSharedState,\n adapter: Object.freeze({ ...identity.adapter }),\n ...(identity.models === undefined ? {} : { models: Object.freeze({\n version: 1 as const,\n slots: Object.freeze(Object.fromEntries(Object.entries(identity.models.slots).map(([key, value]) => [key, Object.freeze({ ...value })]))),\n }) }),\n model: Object.freeze(identity.model),\n reasoningEffort: Object.freeze(identity.reasoningEffort),\n flags: freezeJson({ ...identity.flags }),\n plugins: freezeJson(identity.plugins),\n ...(sharedState === undefined ? {} : { sharedState }),\n sandboxLayer: freezeJson(identity.sandboxLayer),\n judgeRuntime: identity.judgeRuntime._tag === \"Unconfigured\"\n ? Object.freeze({ _tag: \"Unconfigured\" as const })\n : Object.freeze({\n _tag: \"Configured\" as const,\n provider: identity.judgeRuntime.provider,\n model: identity.judgeRuntime.model,\n baseUrl: identity.judgeRuntime.baseUrl,\n credential: Object.freeze({ ...identity.judgeRuntime.credential }),\n timeoutMs: Object.freeze(identity.judgeRuntime.timeoutMs),\n maxResponseBytes: Object.freeze(identity.judgeRuntime.maxResponseBytes),\n ...(identity.judgeRuntime.supportsImages === true ? { supportsImages: true } : {}),\n protocol: Object.freeze({ ...identity.judgeRuntime.protocol }),\n }),\n agentInstalls: Object.freeze(identity.agentInstalls.map((entry) => freezeJson(entry))),\n });\n}\nfunction sameAgentIdentity(left: AgentIdentity, right: AgentIdentity): boolean {\n return left.agent === right.agent && left.version === right.version && left.revision === right.revision;\n}\nfunction installerIdentity(installer: AgentInstaller | undefined): JsonValue {\n if (installer === undefined)\n return { _tag: \"Missing\" };\n return {\n _tag: \"Matched\",\n identity: {\n agent: installer.identity.agent,\n version: installer.identity.version,\n revision: installer.identity.revision,\n },\n installMode: installer.installMode,\n platforms: installer.platforms === undefined\n ? { _tag: \"All\" }\n : { _tag: \"Listed\", values: [...installer.platforms] },\n };\n}\n/** 计划期一次性冻结全部 ensure/installer 配对;运行事实与 staged digest 不反写配置身份。 */\nexport function agentInstallPlansForRun(run: AgentRun): readonly JsonValue[] {\n if (run.adapter.kind === \"custom\")\n return Object.freeze([]);\n const agent = run.agent;\n if (agent === undefined)\n throw new Error(\"Agent AdapterRun requires its Agent execution implementation.\");\n if (agent.kind === \"direct\")\n return Object.freeze([]);\n return Object.freeze(agent.ensure.map((ensure, index) => freezeJson({\n order: index,\n ensure: {\n agent: ensure.identity.agent,\n version: ensure.identity.version,\n revision: ensure.identity.revision,\n },\n installer: installerIdentity(agent.installers.find((candidate) => sameAgentIdentity(candidate.identity, ensure.identity))),\n })));\n}\nfunction declaredString(value: string | undefined): DeclaredConfigValue<string> {\n return value === undefined ? { _tag: \"Omitted\" } : { _tag: \"Configured\", value };\n}\nfunction judgeIdentity(judge: ResolvedJudgeConfig | undefined): JudgeConfigIdentity {\n return judge === undefined\n ? { _tag: \"Unconfigured\" }\n : {\n _tag: \"Configured\",\n provider: judge.provider,\n model: judge.model,\n baseUrl: judge.baseUrl,\n credential: judge.credential,\n timeoutMs: judge.timeoutMs,\n maxResponseBytes: judge.maxResponseBytes,\n ...(judge.supportsImages === true ? { supportsImages: true } : {}),\n protocol: judge.protocol,\n };\n}\n/** 本次解析后配置的身份投影。 */\nexport function configIdentityForRun(run: AgentRun, plan: LinkedRunPlan, judge: ResolvedJudgeConfig | undefined = undefined): ConfigIdentity {\n return freezeConfigIdentity({\n adapter: adapterIdentity(run.adapter),\n ...(run.adapter.kind === \"custom\" ? { models: { version: 1 as const, slots: run.models ?? Object.freeze({}) } } : {}),\n model: declaredString(run.model),\n reasoningEffort: declaredString(run.reasoningEffort),\n flags: run.flags,\n plugins: run.pluginBehavior ?? [],\n sandboxReuse: run.sandboxReuse ?? false,\n ...(run.sharedState === undefined ? {} : { sharedState: run.sharedState.key }),\n sandboxLayer: sandboxLayerIdentityFor(plan.pair, \"experiment\"),\n judgeRuntime: judgeIdentity(judge),\n agentInstalls: agentInstallPlansForRun(run),\n });\n}\n/**\n * 历史条目的同一份投影,从落盘重建。缺 `ExperimentRunInfo`(第三方 harness 写的结果)时\n * 配置面无从重算,返回 `undefined`——差异算不出就如实算不出,不猜。\n */\nexport function configIdentityFromResult(result: EvalResult): ConfigIdentity | undefined {\n const exp = result.experiment;\n if (exp === undefined)\n return undefined;\n return freezeConfigIdentity({\n adapter: result.adapter,\n ...(exp.models === undefined ? {} : { models: { version: 1 as const, slots: exp.models } }),\n model: declaredString(result.model),\n reasoningEffort: declaredString(exp.reasoningEffort),\n flags: exp.flags ?? {},\n plugins: exp.plugins ?? [],\n sandboxReuse: exp.sandboxReuse ?? false,\n ...(exp.sharedState === undefined ? {} : { sharedState: exp.sharedState.key }),\n sandboxLayer: exp.sandboxLayer,\n judgeRuntime: judgeIdentity(exp.judgeRuntime),\n agentInstalls: exp.agentInstalls,\n });\n}\n/**\n * 身份 → 字段路径表。真正未声明的配置不会生成对象键或字段路径。\n */\nfunction flatten(identity: ConfigIdentity): Map<string, JsonValue> {\n const out = new Map<string, JsonValue>();\n const put = (path: string, value: JsonValue): void => { out.set(path, value); };\n const putDeclared = <Value extends JsonValue>(path: string, value: DeclaredConfigValue<Value>): void => {\n if (value._tag === \"Configured\")\n put(path, value.value);\n };\n put(\"adapter.name\", identity.adapter.name);\n put(\"adapter.contract\", identity.adapter.contract);\n put(\"adapter.behaviorRevision\", identity.adapter.behaviorRevision);\n if (identity.adapter.cleanupTimeoutMs !== undefined)\n put(\"adapter.cleanupTimeoutMs\", identity.adapter.cleanupTimeoutMs);\n if (identity.models !== undefined) {\n put(\"models.version\", identity.models.version);\n for (const [slot, selection] of Object.entries(identity.models.slots)) {\n put(`models.${slot}.model`, selection.model);\n put(`models.${slot}.reasoningEffort`, selection.reasoningEffort);\n }\n }\n putDeclared(\"model\", identity.model);\n putDeclared(\"reasoningEffort\", identity.reasoningEffort);\n put(\"sandboxReuse\", identity.sandboxReuse);\n if (identity.sharedState !== undefined)\n put(\"sharedState.key\", identity.sharedState);\n for (const [key, value] of Object.entries(identity.flags))\n put(`flags.${key}`, value);\n put(\"plugins\", identity.plugins);\n put(\"sandboxLayer\", identity.sandboxLayer);\n if (identity.judgeRuntime._tag === \"Configured\") {\n put(\"judgeRuntime.provider\", identity.judgeRuntime.provider);\n put(\"judgeRuntime.model\", identity.judgeRuntime.model);\n put(\"judgeRuntime.baseUrl\", identity.judgeRuntime.baseUrl);\n put(\"judgeRuntime.credential.kind\", identity.judgeRuntime.credential.kind);\n if (identity.judgeRuntime.credential.kind === \"environment\")\n put(\"judgeRuntime.credential.name\", identity.judgeRuntime.credential.name);\n put(\"judgeRuntime.timeoutMs\", identity.judgeRuntime.timeoutMs);\n put(\"judgeRuntime.maxResponseBytes\", identity.judgeRuntime.maxResponseBytes);\n if (identity.judgeRuntime.supportsImages === true)\n put(\"judgeRuntime.supportsImages\", true);\n put(\"judgeRuntime.protocol.kind\", identity.judgeRuntime.protocol.kind);\n put(\"judgeRuntime.protocol.revision\", identity.judgeRuntime.protocol.revision);\n if (identity.judgeRuntime.protocol.kind === \"chat-completions\")\n put(\"judgeRuntime.protocol.maxOutputTokens\", identity.judgeRuntime.protocol.maxOutputTokens);\n }\n put(\"agentInstalls\", [...identity.agentInstalls]);\n return out;\n}\n/**\n * 身份的字段路径投影,供 manifest 的配置面落盘(见 `runner/manifest.ts`)。与差异比对读的是\n * 同一个 `flatten`:清单里指得出的路径,`--accept config:<路径>` 就授权得了,两侧不可能分叉。\n */\nexport function configIdentityPaths(identity: ConfigIdentity): Array<[\n string,\n JsonValue\n]> {\n return [...flatten(identity)];\n}\n/** 值的字符串投影:差异明细与 `carriedAccepting` 留痕共用完整值,有界呈现是人读 renderer(`feedback/human.ts`)的职责,不在构造点做。 */\nfunction serializeValue(value: JsonValue): string {\n return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n/**\n * 历史侧与本次侧的字段级差异,按 selector 字典序。键的增删同样是一条差异。\n */\nexport function configDeltas(historical: ConfigIdentity, current: ConfigIdentity): ConfigFieldDelta[] {\n const from = flatten(historical);\n const to = flatten(current);\n const paths = [...new Set([...from.keys(), ...to.keys()])].sort();\n const out: ConfigFieldDelta[] = [];\n for (const path of paths) {\n const hasFrom = from.has(path);\n const hasTo = to.has(path);\n if (hasFrom && hasTo && JSON.stringify(from.get(path)) === JSON.stringify(to.get(path)))\n continue;\n const fromValue = from.get(path);\n const toValue = to.get(path);\n if (hasFrom && fromValue === undefined)\n throw new Error(`Missing historical config value for ${path}.`);\n if (hasTo && toValue === undefined)\n throw new Error(`Missing current config value for ${path}.`);\n const selector = `config:${path}`;\n if (!hasFrom)\n out.push(addedConfigField(selector, serializeValue(toValue!)));\n else if (!hasTo)\n out.push(removedConfigField(selector, serializeValue(fromValue!)));\n else\n out.push(changedConfigField(selector, serializeValue(fromValue!), serializeValue(toValue!)));\n }\n return out;\n}\n/**\n * 反事实身份:把本次身份里**被授权的那些字段**换回历史值,其余原样。\n *\n * 换出来的身份再算一次指纹,与历史条目落盘的那个相等,才证明「两侧只差这些被授权的字段」——\n * 授权因此不是绕开判据,而是把判据挪到一个明确写下来的口径上重算一次。\n *\n * `sandbox` / `judge` 是整对象进哈希的分组:键在不在本身改变字节,逐字段拼回去会造出两侧都\n * 不存在的形状。分组内**每一条**差异都被授权才整体换回历史对象,否则保持本次值——那样指纹\n * 自然对不上,条目照常重跑,不会静默跨过没被授权的那半。\n */\nexport function counterfactualConfigIdentity(current: ConfigIdentity, historical: ConfigIdentity, accepted: ReadonlySet<string>): ConfigIdentity {\n const differing = new Set(configDeltas(historical, current).map((d) => d.selector));\n const flags: globalThis.Record<string, JsonValue> = { ...current.flags };\n for (const selector of accepted) {\n if (!selector.startsWith(\"config:flags.\"))\n continue;\n const key = selector.slice(\"config:flags.\".length);\n if (Object.hasOwn(historical.flags, key)) {\n const value = historical.flags[key];\n if (value === undefined)\n throw new Error(`Missing historical flag value for ${key}.`);\n flags[key] = value;\n }\n else\n delete flags[key];\n }\n let sandboxLayer = current.sandboxLayer;\n let plugins = current.plugins;\n let judgeRuntime = current.judgeRuntime;\n let agentInstalls = current.agentInstalls;\n let adapter = current.adapter;\n let models = current.models;\n const rollbackGroups: readonly (\"adapter\" | \"sandboxLayer\" | \"plugins\" | \"judgeRuntime\" | \"agentInstalls\" | \"models\")[] = [\n \"adapter\", \"sandboxLayer\", \"plugins\", \"judgeRuntime\", \"agentInstalls\", \"models\",\n ];\n for (const group of rollbackGroups) {\n const paths = [...differing].filter((selector) => selector === `config:${group}` || selector.startsWith(`config:${group}.`));\n if (paths.length === 0 || !paths.every((selector) => accepted.has(selector)))\n continue;\n if (group === \"adapter\")\n adapter = historical.adapter;\n else if (group === \"sandboxLayer\")\n sandboxLayer = historical.sandboxLayer;\n else if (group === \"plugins\")\n plugins = historical.plugins;\n else if (group === \"judgeRuntime\")\n judgeRuntime = historical.judgeRuntime;\n else if (group === \"models\")\n models = historical.models;\n else\n agentInstalls = historical.agentInstalls;\n }\n const sharedState = accepted.has(\"config:sharedState.key\") ? historical.sharedState : current.sharedState;\n return freezeConfigIdentity({\n adapter,\n ...(models === undefined ? {} : { models }),\n model: accepted.has(\"config:model\") ? historical.model : current.model,\n reasoningEffort: accepted.has(\"config:reasoningEffort\")\n ? historical.reasoningEffort\n : current.reasoningEffort,\n flags,\n plugins,\n sandboxReuse: accepted.has(\"config:sandboxReuse\") ? historical.sandboxReuse : current.sandboxReuse,\n ...(sharedState === undefined ? {} : { sharedState }),\n sandboxLayer,\n judgeRuntime,\n agentInstalls,\n });\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ResolvedModelRoles } from "../model-roles.cjs";
|
|
2
2
|
import type { LinkedRunPlan } from "../sandbox/plan.cjs";
|
|
3
3
|
import type { EvalResult, JsonValue, ResolvedJudgeConfig } from "../types.cjs";
|
|
4
4
|
import type { AgentRun } from "./types.cjs";
|
|
@@ -13,7 +13,7 @@ import type { AdapterIdentity } from "../record/model/run-context.cjs";
|
|
|
13
13
|
export interface ConfigIdentity {
|
|
14
14
|
readonly models?: {
|
|
15
15
|
readonly version: 1;
|
|
16
|
-
readonly slots:
|
|
16
|
+
readonly slots: ResolvedModelRoles;
|
|
17
17
|
};
|
|
18
18
|
readonly adapter: AdapterIdentity;
|
|
19
19
|
readonly model: DeclaredConfigValue<string>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ResolvedModelRoles } from "../model-roles.mjs";
|
|
2
2
|
import type { LinkedRunPlan } from "../sandbox/plan.mjs";
|
|
3
3
|
import type { EvalResult, JsonValue, ResolvedJudgeConfig } from "../types.mjs";
|
|
4
4
|
import type { AgentRun } from "./types.mjs";
|
|
@@ -13,7 +13,7 @@ import type { AdapterIdentity } from "../record/model/run-context.mjs";
|
|
|
13
13
|
export interface ConfigIdentity {
|
|
14
14
|
readonly models?: {
|
|
15
15
|
readonly version: 1;
|
|
16
|
-
readonly slots:
|
|
16
|
+
readonly slots: ResolvedModelRoles;
|
|
17
17
|
};
|
|
18
18
|
readonly adapter: AdapterIdentity;
|
|
19
19
|
readonly model: DeclaredConfigValue<string>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ResolvedModelRoles } from "../model-roles.js";
|
|
2
2
|
import type { LinkedRunPlan } from "../sandbox/plan.js";
|
|
3
3
|
import type { EvalResult, JsonValue, ResolvedJudgeConfig } from "../types.js";
|
|
4
4
|
import type { AgentRun } from "./types.js";
|
|
@@ -13,7 +13,7 @@ import type { AdapterIdentity } from "../record/model/run-context.js";
|
|
|
13
13
|
export interface ConfigIdentity {
|
|
14
14
|
readonly models?: {
|
|
15
15
|
readonly version: 1;
|
|
16
|
-
readonly slots:
|
|
16
|
+
readonly slots: ResolvedModelRoles;
|
|
17
17
|
};
|
|
18
18
|
readonly adapter: AdapterIdentity;
|
|
19
19
|
readonly model: DeclaredConfigValue<string>;
|
package/dist/runner/discover.cjs
CHANGED
|
@@ -12,7 +12,7 @@ const effect_1 = require("effect");
|
|
|
12
12
|
const util_ts_1 = require("../util.cjs");
|
|
13
13
|
const eval_source_ts_1 = require("./eval-source.cjs");
|
|
14
14
|
const aggregate_ts_1 = require("../shared/aggregate.cjs");
|
|
15
|
-
const
|
|
15
|
+
const runtime_ts_1 = require("../loaders/runtime.cjs");
|
|
16
16
|
const fresh_import_ts_1 = require("../fresh-import.cjs");
|
|
17
17
|
const layer_ts_1 = require("../sandbox/layer.cjs");
|
|
18
18
|
const link_ts_1 = require("../sandbox/link.cjs");
|
|
@@ -165,7 +165,7 @@ function validDatasetKey(key) {
|
|
|
165
165
|
function isEvalDefinitionArray(exported) {
|
|
166
166
|
return Array.isArray(exported);
|
|
167
167
|
}
|
|
168
|
-
// @concord-code
|
|
168
|
+
// @concord-code
|
|
169
169
|
// @concord-implements docs/feature/eval/use-case/dataset-fanout.md
|
|
170
170
|
function expandEvalExport(exported, entry, root) {
|
|
171
171
|
if ((0, types_ts_1.isEvalDefinition)(exported)) {
|
|
@@ -238,7 +238,7 @@ function discoverEvalEntry(entry, root, load = cachedModuleLoader) {
|
|
|
238
238
|
const fileLabel = (0, node_path_1.relative)(root, entry.file).split(node_path_1.sep).join("/");
|
|
239
239
|
return effect_1.Effect.gen(function* () {
|
|
240
240
|
const captured = yield* effect_1.Effect.tryPromise({
|
|
241
|
-
try: () => (0,
|
|
241
|
+
try: () => (0, runtime_ts_1.captureLoadedFiles)(() => load(entry.file)),
|
|
242
242
|
catch: (cause) => issue(fileLabel, "discovery.import-failed", causeMessage(cause), ["Fix module loading and loader declarations."], cause),
|
|
243
243
|
});
|
|
244
244
|
const module = yield* decodeEvalModule(captured.value, fileLabel);
|
|
@@ -485,7 +485,7 @@ function normalizeEvalGroupSource(content) {
|
|
|
485
485
|
return output === "" ? content : output + content.slice(cursor);
|
|
486
486
|
}
|
|
487
487
|
/** Discovery remains in Effect through selection/planning; an adapter host closes it. */
|
|
488
|
-
// @concord-code
|
|
488
|
+
// @concord-code
|
|
489
489
|
// @concord-implements docs/feature/eval-groups/architecture.md
|
|
490
490
|
// @concord-implements docs/feature/eval-groups/library.md
|
|
491
491
|
function discoverEvals(root, options = {}) {
|
|
@@ -607,7 +607,7 @@ function discoverEvals(root, options = {}) {
|
|
|
607
607
|
return discoverWith(cachedModuleLoader);
|
|
608
608
|
return effect_1.Effect.scoped((0, fresh_import_ts_1.acquireFreshImportGeneration)(root).pipe(effect_1.Effect.flatMap((fresh) => discoverWith(fresh.import))));
|
|
609
609
|
}
|
|
610
|
-
// @concord-code
|
|
610
|
+
// @concord-code
|
|
611
611
|
// @concord-implements docs/feature/experiments/library.md
|
|
612
612
|
function discoverExperimentFile(file, root, experimentsDir, load = cachedModuleLoader) {
|
|
613
613
|
const fileLabel = (0, node_path_1.relative)(root, file).split(node_path_1.sep).join("/");
|
|
@@ -629,7 +629,7 @@ function discoverExperimentFile(file, root, experimentsDir, load = cachedModuleL
|
|
|
629
629
|
});
|
|
630
630
|
}
|
|
631
631
|
/** Discovery remains in Effect through selection/planning; an adapter host closes it. */
|
|
632
|
-
// @concord-code
|
|
632
|
+
// @concord-code
|
|
633
633
|
// @concord-implements docs/feature/experiments/README.md
|
|
634
634
|
// @concord-implements docs/feature/experiments/library.md
|
|
635
635
|
function discoverExperiments(root, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["discover.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file ne-runner-discovery\n// @concord-implements docs/feature/experiments/architecture.md\n// @concord-implements docs/feature/eval-groups/architecture.md\n// @concord-implements docs/feature/eval-groups/library.md\n// @concord-implements docs/feature/eval/use-case/dataset-fanout.md\n// Discovery is the only boundary where executable modules enter the typed runner.\n// Dynamic imports are decoded immediately; every later stage receives branded, immutable definitions.\nimport { existsSync } from \"node:fs\";\nimport { readdir } from \"node:fs/promises\";\nimport { basename, dirname, join, relative, resolve, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Data, Effect, Option, Schema } from \"effect\";\nimport { pad4 } from \"../util.ts\";\nimport { assertNoHiddenInputLeaks, captureEvalSource, folderEntryBaseId, type HiddenInput, type LeakGateHints, } from \"./eval-source.ts\";\nimport { evalPrefixPredicate } from \"../shared/aggregate.ts\";\nimport { captureLoadedFiles, type LoaderCaptureOrigin, type LoaderCapturePaths, } from \"../loaders/index.ts\";\nimport { acquireFreshImportGeneration, importProjectModule, type FreshImportGeneration } from \"../fresh-import.ts\";\nimport { sandboxLayerStateOf, type SandboxLayer } from \"../sandbox/layer.ts\";\nimport { sandboxLayerDefinitionIdentity } from \"../sandbox/link.ts\";\nimport { discoverEval, discoverExperiment, isEvalDefinition, isExperimentDefinition, isEvalGroupDefinition, } from \"../types.ts\";\nimport type { AnyEvalDefinition, DiscoveredEval, DiscoveredExperiment, ExperimentDefinition, EvalGroupDefinition, } from \"../types.ts\";\nimport { digestOf } from \"../sandbox/identity.ts\";\nimport { captureSourceClosure } from \"./source-closure.ts\";\nimport { splitByEvaluationKind } from \"./eval-selection.ts\";\nconst SKIP_DIRS = new Set([\"node_modules\", \".git\", \".niceeval\", \"dist\", \".next\"]);\nexport type DiscoveryIssueCode = \"discovery.filesystem\" | \"discovery.duplicate-id\" | \"discovery.import-failed\" | \"discovery.invalid-export\" | \"eval-group-member-unresolved\" | \"eval-group-member-overlap\" | \"eval-group-member-layer\" | \"eval-group-evaluation-kind-mixed\" | \"discovery.invalid-dataset-key\" | \"discovery.source-capture-failed\" | \"discovery.leak-gate-failed\";\nexport interface DiscoveryIssue {\n readonly file: string;\n readonly code: DiscoveryIssueCode;\n readonly message: string;\n readonly actions: readonly string[];\n /** Retained in-process for structured error assistance; never persisted. */\n readonly cause?: unknown;\n}\n/** Discovery reports the whole invalid batch, rather than stopping at the first bad file. */\nexport class DiscoveryError extends Data.TaggedError(\"DiscoveryError\")<{\n readonly message: string;\n readonly issues: readonly DiscoveryIssue[];\n}> {\n}\ninterface EvalEntry {\n readonly file: string;\n readonly baseId: string;\n readonly kind: \"file\" | \"folder\";\n}\ntype EvalModuleExport = AnyEvalDefinition | readonly AnyEvalDefinition[] | Readonly<globalThis.Record<string, AnyEvalDefinition>>;\ninterface EvalModule {\n readonly default: EvalModuleExport;\n}\ninterface ExperimentModule {\n readonly default?: ExperimentDefinition;\n}\ninterface EvalGroupModule {\n readonly default: EvalGroupDefinition;\n}\nconst EvalDefinitionSchema = Schema.declare(isEvalDefinition, {\n identifier: \"EvalDefinition\",\n description: \"a value returned by defineEval() or defineScoreEval()\",\n});\nconst EvalModuleSchema: Schema.Schema<EvalModule> = Schema.Struct({\n default: Schema.Union([\n Schema.toType(EvalDefinitionSchema),\n Schema.Array(Schema.toType(EvalDefinitionSchema)),\n Schema.Record(Schema.String, Schema.toType(EvalDefinitionSchema)),\n ]),\n});\nconst ExperimentDefinitionSchema = Schema.declare(isExperimentDefinition, {\n identifier: \"ExperimentDefinition\",\n description: \"a value returned by defineExperiment()\",\n});\nconst ExperimentModuleSchema: Schema.Schema<ExperimentModule> = Schema.Struct({\n default: Schema.optional(Schema.toType(ExperimentDefinitionSchema)),\n});\nconst EvalGroupModuleSchema: Schema.Schema<EvalGroupModule> = Schema.Struct({\n default: Schema.toType(Schema.declare(isEvalGroupDefinition, { identifier: \"EvalGroupDefinition\" })),\n});\nfunction discoveryError(issues: readonly DiscoveryIssue[]): DiscoveryError {\n const frozenIssues = Object.freeze(issues.map((issue) => Object.freeze({\n ...issue,\n actions: Object.freeze([...issue.actions]),\n })));\n return new DiscoveryError({\n message: frozenIssues.map((issue) => `${issue.code} ${issue.file}: ${issue.message} Actions: ${issue.actions.join(\" \")}`).join(\"\\n\"),\n issues: frozenIssues,\n });\n}\nfunction issue(file: string, code: DiscoveryIssueCode, message: string, actions: readonly string[], cause?: unknown): DiscoveryError {\n return discoveryError([{ file, code, message, actions, ...(cause === undefined ? {} : { cause }) }]);\n}\nfunction causeMessage(cause: unknown): string {\n return cause instanceof Error ? cause.message : String(cause);\n}\ntype DiscoveryModuleLoader = (file: string) => Promise<unknown>;\nconst cachedModuleLoader: DiscoveryModuleLoader = importProjectModule;\nfunction importModule(file: string, root: string, kind: \"eval\" | \"experiment\", load: DiscoveryModuleLoader = cachedModuleLoader): Effect.Effect<unknown, DiscoveryError> {\n return Effect.tryPromise({\n try: () => load(file),\n catch: (cause) => issue(relative(root, file), \"discovery.import-failed\", `Top-level ${kind} module evaluation failed: ${causeMessage(cause)}`, [`Move resource work into the selected ${kind} body.`, \"Fix the reported top-level exception.\"], cause),\n });\n}\nfunction decodeEvalModule(value: unknown, file: string): Effect.Effect<EvalModule, DiscoveryError> {\n return Schema.decodeUnknownEffect(Schema.toType(EvalModuleSchema), { errors: \"all\" })(value).pipe(Effect.mapError((error) => issue(file, \"discovery.invalid-export\", String(error), [\"Default-export defineEval()/defineScoreEval() output, an array of those outputs, or a keyed record of those outputs.\"])));\n}\nfunction decodeExperimentModule(value: unknown, file: string): Effect.Effect<ExperimentModule, DiscoveryError> {\n return Schema.decodeUnknownEffect(Schema.toType(ExperimentModuleSchema), { errors: \"all\" })(value).pipe(Effect.mapError((error) => issue(file, \"discovery.invalid-export\", String(error), [\"Default-export defineExperiment({...}) instead of a plain object.\"])));\n}\nfunction decodeEvalGroupModule(value: unknown, file: string): Effect.Effect<EvalGroupModule, DiscoveryError> {\n return Schema.decodeUnknownEffect(Schema.toType(EvalGroupModuleSchema), { errors: \"all\" })(value).pipe(Effect.mapError((error) => issue(file, \"discovery.invalid-export\", String(error), [\n \"Default-export defineEvalGroup({ evals: [definition, ...] }).\",\n ])));\n}\nfunction collectAll<A, B>(values: readonly A[], f: (value: A) => Effect.Effect<B, DiscoveryError>): Effect.Effect<readonly B[], DiscoveryError> {\n return Effect.partition(values, f, { concurrency: 1 }).pipe(Effect.flatMap(([errors, groups]) => errors.length > 0\n ? Effect.fail(discoveryError(errors.flatMap((error) => error.issues)))\n : Effect.succeed(Object.freeze(groups))));\n}\nfunction walkFiles(dir: string, root: string, match: (name: string) => boolean): Effect.Effect<readonly string[], DiscoveryError> {\n const readDirectory = (current: string, allowAbsent: boolean) => Effect.tryPromise({\n try: async () => {\n try {\n return await readdir(current, { withFileTypes: true });\n }\n catch (cause) {\n if (allowAbsent && isMissingPath(cause))\n return undefined;\n throw cause;\n }\n },\n catch: (cause) => issue(relative(root, current) || \".\", \"discovery.filesystem\", causeMessage(cause), [\"Check that the discovery directory is readable.\"]),\n });\n const walk = (current: string, allowAbsent: boolean): Effect.Effect<readonly string[], DiscoveryError> => Effect.suspend(() => readDirectory(current, allowAbsent).pipe(Effect.flatMap((entries) => {\n if (entries === undefined)\n return Effect.succeed(Object.freeze([]));\n return Effect.forEach(entries, (entry) => {\n const full = join(current, entry.name);\n if (entry.isDirectory()) {\n return SKIP_DIRS.has(entry.name)\n ? Effect.succeed([])\n : walk(full, false);\n }\n return entry.isFile() && match(entry.name)\n ? Effect.succeed([full])\n : Effect.succeed([]);\n }, { concurrency: 1 }).pipe(Effect.map((groups) => Object.freeze(groups.flat())));\n })));\n return walk(dir, true).pipe(Effect.map((files) => Object.freeze([...files].sort())));\n}\nfunction isMissingPath(cause: unknown): boolean {\n return typeof cause === \"object\" && cause !== null && \"code\" in cause &&\n (cause as {\n readonly code?: unknown;\n }).code === \"ENOENT\";\n}\nfunction isFolderEntryName(name: string): boolean {\n return name === \"eval.ts\" || name === \"eval.tsx\";\n}\nfunction isFileEntryName(name: string): boolean {\n return name.endsWith(\".eval.ts\") || name.endsWith(\".eval.tsx\");\n}\nfunction collectEvalEntries(evalsDir: string, root: string): Effect.Effect<readonly EvalEntry[], DiscoveryError> {\n return walkFiles(evalsDir, root, (name) => isFileEntryName(name) || isFolderEntryName(name)).pipe(Effect.flatMap((files) => {\n const entries = files.map((file): EvalEntry => {\n const name = basename(file);\n if (isFolderEntryName(name)) {\n const relDir = relative(evalsDir, dirname(file)).split(sep).join(\"/\");\n return {\n file,\n baseId: folderEntryBaseId(relDir === \"\" ? \".\" : relDir),\n kind: \"folder\",\n };\n }\n return {\n file,\n baseId: relative(evalsDir, file).replace(/\\.eval\\.tsx?$/, \"\").split(sep).join(\"/\"),\n kind: \"file\",\n };\n });\n const byId = new Map<string, EvalEntry[]>();\n for (const entry of entries)\n byId.set(entry.baseId, [...(byId.get(entry.baseId) ?? []), entry]);\n const duplicates = [...byId.entries()].flatMap(([id, owners]) => owners.length < 2 ? [] : [{\n file: owners.map((owner) => relative(root, owner.file).split(sep).join(\"/\")).join(\", \"),\n code: \"discovery.duplicate-id\" as const,\n message: `Duplicate eval id ${JSON.stringify(id)}: multiple entries map to the same id.`,\n actions: Object.freeze([\"Keep either the file entry or the folder entry for this id.\"]),\n }]);\n return duplicates.length > 0\n ? Effect.fail(discoveryError(duplicates))\n : Effect.succeed(Object.freeze(entries));\n }));\n}\nfunction validDatasetKey(key: string): boolean {\n return key.length > 0 && key !== \".\" && key !== \"..\" && !key.includes(\"/\") && !key.includes(\"\\\\\") &&\n !/[\\u0000-\\u001f\\u007f]/.test(key);\n}\nfunction isEvalDefinitionArray(exported: EvalModuleExport): exported is readonly AnyEvalDefinition[] {\n return Array.isArray(exported);\n}\n// @concord-code ne-runner-expand-eval-export\n// @concord-implements docs/feature/eval/use-case/dataset-fanout.md\nfunction expandEvalExport(exported: EvalModuleExport, entry: EvalEntry, root: string): Effect.Effect<readonly {\n readonly id: string;\n readonly definition: AnyEvalDefinition;\n}[], DiscoveryError> {\n if (isEvalDefinition(exported)) {\n return Effect.succeed(Object.freeze([{ id: entry.baseId, definition: exported }]));\n }\n if (isEvalDefinitionArray(exported)) {\n return Effect.succeed(Object.freeze(exported.map((definition, index) => ({\n id: `${entry.baseId}/${pad4(index)}`,\n definition,\n }))));\n }\n // `Array.isArray` does not narrow readonly arrays; the array branch above has already returned.\n const dataset = exported;\n const invalidKeys = Object.keys(dataset).filter((key) => !validDatasetKey(key));\n if (invalidKeys.length > 0) {\n return Effect.fail(discoveryError(invalidKeys.map((key) => ({\n file: relative(root, entry.file),\n code: \"discovery.invalid-dataset-key\" as const,\n message: `Invalid keyed eval dataset key ${JSON.stringify(key)}.`,\n actions: Object.freeze([\"Use a non-empty path segment without slash, backslash, dot segments, or control characters.\"]),\n }))));\n }\n return Effect.succeed(Object.freeze(Object.keys(dataset).sort().map((key) => ({\n id: `${entry.baseId}/${key}`,\n definition: dataset[key]!,\n }))));\n}\nfunction leakGateHintsForLayer(layer: SandboxLayer | undefined, baseDir: string, file: string): Effect.Effect<Option.Option<LeakGateHints>, DiscoveryError> {\n if (layer === undefined)\n return Effect.succeed(Option.none());\n const state = sandboxLayerStateOf(layer);\n if (!(\"template\" in state))\n return Effect.succeed(Option.none());\n const leakGate = state.template.leakGate;\n if (leakGate._tag === \"None\")\n return Effect.succeed(Option.none());\n if (leakGate._tag === \"Dockerfile\") {\n const contextDir = leakGate.context._tag === \"Url\"\n ? fileURLToPath(leakGate.context.value)\n : resolve(baseDir, leakGate.context.value);\n return Effect.succeed(Option.some({ buildContexts: [{ contextDir, label: \"dockerfile\" }] }));\n }\n const composeFile = leakGate.file._tag === \"Url\" ? new URL(leakGate.file.value) : leakGate.file.value;\n return Effect.tryPromise({\n try: () => __niceevalDynamicImport(\"../sandbox/compose.cjs\"),\n catch: (cause) => issue(file, \"discovery.leak-gate-failed\", causeMessage(cause), [\"Fix the Docker Compose declaration used by this eval SandboxLayer.\"]),\n }).pipe(Effect.flatMap(({ leakGateHintsFromComposeFile }) => leakGateHintsFromComposeFile(composeFile, {\n mainService: leakGate.workspaceService,\n baseDir,\n }).pipe(Effect.mapError((cause) => issue(file, \"discovery.leak-gate-failed\", causeMessage(cause), [\"Fix the Docker Compose declaration used by this eval SandboxLayer.\"])))), Effect.map(({ hints }) => Option.some(hints)));\n}\nfunction runLeakGate(definition: AnyEvalDefinition, input: {\n readonly evalId: string;\n readonly file: string;\n readonly baseDir: string;\n readonly criteriaPaths: readonly string[];\n readonly privatePaths: readonly string[];\n}): Effect.Effect<void, DiscoveryError> {\n const hidden: readonly HiddenInput[] = Object.freeze([\n ...input.criteriaPaths.map((path) => ({ path, kind: \"verifier\" as const })),\n ...input.privatePaths.map((path) => ({ path, kind: \"private\" as const })),\n ]);\n if (hidden.length === 0)\n return Effect.void;\n return leakGateHintsForLayer(definition.sandbox, input.baseDir, input.file).pipe(Effect.flatMap(Option.match({\n onNone: () => Effect.void,\n onSome: (hints) => assertNoHiddenInputLeaks({\n hidden,\n buildContexts: hints.buildContexts,\n bindMounts: hints.bindMounts,\n evalId: input.evalId,\n }).pipe(Effect.mapError((cause) => issue(input.file, \"discovery.leak-gate-failed\", causeMessage(cause), [\"Remove hidden verifier/private inputs from the sandbox build context or bind mounts.\"]))),\n })));\n}\ninterface DiscoveredEvalEntry {\n readonly sourcePath: string;\n readonly evals: readonly DiscoveredEval[];\n readonly origins: readonly LoaderCaptureOrigin[];\n readonly unattributed: LoaderCapturePaths;\n}\nfunction discoverEvalEntry(entry: EvalEntry, root: string, load: DiscoveryModuleLoader = cachedModuleLoader): Effect.Effect<DiscoveredEvalEntry, DiscoveryError> {\n const fileLabel = relative(root, entry.file).split(sep).join(\"/\");\n return Effect.gen(function* () {\n const captured = yield* Effect.tryPromise({\n try: () => captureLoadedFiles(() => load(entry.file)),\n catch: (cause) => issue(fileLabel, \"discovery.import-failed\", causeMessage(cause), [\"Fix module loading and loader declarations.\"], cause),\n });\n const module = yield* decodeEvalModule(captured.value, fileLabel);\n const expanded = yield* expandEvalExport(module.default, entry, root);\n const source = yield* Effect.tryPromise({\n try: () => captureEvalSource(entry.file, { root }),\n catch: (cause) => issue(fileLabel, \"discovery.source-capture-failed\", causeMessage(cause), [\"Make the eval source file readable.\"]),\n });\n const loaderDataPaths = Object.freeze([...captured.paths]);\n const criteriaPaths = Object.freeze([...captured.criteriaPaths]);\n const privatePaths = Object.freeze([...captured.privatePaths]);\n const baseDir = dirname(entry.file);\n return Object.freeze({\n sourcePath: entry.file,\n evals: Object.freeze(expanded.map(({ id, definition }) => discoverEval(definition, {\n id,\n baseDir,\n sourcePath: entry.file,\n source,\n loaderDataPaths,\n criteriaPaths,\n privatePaths,\n definition,\n }))),\n origins: captured.origins,\n unattributed: captured.unattributed,\n });\n });\n}\ninterface LoaderPathBuckets {\n readonly data: Set<string>;\n readonly criteria: Set<string>;\n readonly private: Set<string>;\n}\nfunction emptyLoaderPathBuckets(): LoaderPathBuckets {\n return { data: new Set<string>(), criteria: new Set<string>(), private: new Set<string>() };\n}\nfunction addLoaderPaths(target: LoaderPathBuckets, source: LoaderCapturePaths): void {\n source.paths.forEach((path) => target.data.add(path));\n source.criteriaPaths.forEach((path) => target.criteria.add(path));\n source.privatePaths.forEach((path) => target.private.add(path));\n}\nfunction directLoaderPaths(evalDef: DiscoveredEval): LoaderCaptureOrigin {\n return {\n sourcePath: evalDef.sourcePath,\n paths: evalDef.loaderDataPaths,\n criteriaPaths: evalDef.criteriaPaths,\n privatePaths: evalDef.privatePaths,\n };\n}\nfunction withLoaderProvenance(evalDef: DiscoveredEval, paths: LoaderPathBuckets): DiscoveredEval {\n return discoverEval(evalDef.definition, {\n id: evalDef.id,\n baseDir: evalDef.baseDir,\n sourcePath: evalDef.sourcePath,\n source: evalDef.source,\n loaderDataPaths: Object.freeze([...paths.data].sort()),\n criteriaPaths: Object.freeze([...paths.criteria].sort()),\n privatePaths: Object.freeze([...paths.private].sort()),\n definition: evalDef.definition,\n });\n}\n/**\n * A namespaced fresh graph evaluates a shared helper just once. Attribute the\n * helper's loader registrations to every entry whose static closure contains\n * that helper, so later entries retain the same data/criteria/private surface\n * without evaluating the module again.\n */\nfunction propagateLoaderProvenance(entries: readonly DiscoveredEvalEntry[], root: string): Effect.Effect<readonly DiscoveredEval[], DiscoveryError> {\n return Effect.tryPromise({\n try: async () => {\n const originPaths = new Map<string, LoaderPathBuckets>();\n const conservative = emptyLoaderPathBuckets();\n for (const entry of entries) {\n addLoaderPaths(conservative, entry.unattributed);\n for (const origin of entry.origins) {\n const buckets = originPaths.get(resolve(origin.sourcePath)) ?? emptyLoaderPathBuckets();\n originPaths.set(resolve(origin.sourcePath), buckets);\n addLoaderPaths(buckets, origin);\n }\n }\n const evals: DiscoveredEval[] = [];\n for (const entry of entries) {\n const buckets = emptyLoaderPathBuckets();\n // A host may omit user frames from Error.stack. Conservative union is\n // deliberate: extra invalidation/leak checks are safe; lost provenance\n // is not.\n addLoaderPaths(buckets, {\n paths: [...conservative.data],\n criteriaPaths: [...conservative.criteria],\n privatePaths: [...conservative.private],\n });\n // Keep the old direct capture as a conservative fallback when a host\n // omits call-site frames from Error.stack.\n for (const evalDef of entry.evals)\n addLoaderPaths(buckets, directLoaderPaths(evalDef));\n const closure = await captureSourceClosure(entry.sourcePath, { root });\n const modules = new Set(closure.map(([path]) => resolve(root, path)));\n for (const [modulePath, registered] of originPaths) {\n if (modules.has(modulePath))\n addLoaderPaths(buckets, {\n paths: [...registered.data],\n criteriaPaths: [...registered.criteria],\n privatePaths: [...registered.private],\n });\n }\n evals.push(...entry.evals.map((evalDef) => withLoaderProvenance(evalDef, buckets)));\n }\n return Object.freeze(evals);\n },\n catch: (cause) => issue(relative(root, join(root, \"evals\")) || \"evals\", \"discovery.source-capture-failed\", causeMessage(cause), [\"Make every Eval entry and its static project-local imports readable.\"]),\n });\n}\nfunction matchingArrayClose(source: string, start: number): number | undefined {\n let depth = 0;\n let quote: \"'\" | '\"' | \"`\" | undefined;\n let escaped = false;\n let lineComment = false;\n let blockComment = false;\n for (let index = start; index < source.length; index++) {\n const char = source[index]!;\n const next = source[index + 1];\n if (lineComment) {\n if (char === \"\\n\")\n lineComment = false;\n continue;\n }\n if (blockComment) {\n if (char === \"*\" && next === \"/\") {\n blockComment = false;\n index++;\n }\n continue;\n }\n if (quote !== undefined) {\n if (!escaped && char === quote)\n quote = undefined;\n escaped = !escaped && char === \"\\\\\";\n continue;\n }\n if (char === \"/\" && next === \"/\") {\n lineComment = true;\n index++;\n continue;\n }\n if (char === \"/\" && next === \"*\") {\n blockComment = true;\n index++;\n continue;\n }\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n escaped = false;\n continue;\n }\n if (char === \"[\")\n depth++;\n if (char === \"]\") {\n depth--;\n if (depth === 0)\n return index;\n }\n }\n return undefined;\n}\nfunction splitArrayElements(source: string): readonly string[] | undefined {\n const parts: string[] = [];\n let start = 0;\n let depth = 0;\n let quote: \"'\" | '\"' | \"`\" | undefined;\n let escaped = false;\n let lineComment = false;\n let blockComment = false;\n for (let index = 0; index < source.length; index++) {\n const char = source[index]!;\n const next = source[index + 1];\n if (lineComment) {\n if (char === \"\\n\")\n lineComment = false;\n continue;\n }\n if (blockComment) {\n if (char === \"*\" && next === \"/\") {\n blockComment = false;\n index++;\n }\n continue;\n }\n if (quote !== undefined) {\n if (!escaped && char === quote)\n quote = undefined;\n escaped = !escaped && char === \"\\\\\";\n continue;\n }\n if (char === \"/\" && next === \"/\") {\n lineComment = true;\n index++;\n continue;\n }\n if (char === \"/\" && next === \"*\") {\n blockComment = true;\n index++;\n continue;\n }\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n escaped = false;\n continue;\n }\n if (char === \"(\" || char === \"{\" || char === \"[\")\n depth++;\n if (char === \")\" || char === \"}\" || char === \"]\")\n depth--;\n if (char === \",\" && depth === 0) {\n const part = source.slice(start, index).trim();\n if (part === \"\")\n return undefined;\n parts.push(part);\n start = index + 1;\n }\n }\n const last = source.slice(start).trim();\n if (last !== \"\")\n parts.push(last);\n return parts;\n}\n/**\n * `evals` is a closed set. Normalize only inline array spelling in the Group\n * entry before its source participates in the definition hash; all other\n * source remains byte-sensitive, including opaque commands and hooks.\n */\nfunction normalizeEvalGroupSource(content: string): string {\n let output = \"\";\n let cursor = 0;\n const property = /\\bevals\\s*:\\s*\\[/g;\n for (let found = property.exec(content); found !== null; found = property.exec(content)) {\n const bracket = found.index + found[0].lastIndexOf(\"[\");\n const close = matchingArrayClose(content, bracket);\n if (close === undefined)\n return content;\n const elements = splitArrayElements(content.slice(bracket + 1, close));\n if (elements === undefined)\n return content;\n output += content.slice(cursor, bracket + 1);\n output += elements.toSorted((left, right) => left.localeCompare(right)).join(\",\");\n cursor = close;\n property.lastIndex = close + 1;\n }\n return output === \"\" ? content : output + content.slice(cursor);\n}\n/** Discovery remains in Effect through selection/planning; an adapter host closes it. */\n// @concord-code ne-runner-discover-evals\n// @concord-implements docs/feature/eval-groups/architecture.md\n// @concord-implements docs/feature/eval-groups/library.md\nexport function discoverEvals(root: string, options: {\n freshImport?: boolean;\n generation?: FreshImportGeneration;\n} = {}): Effect.Effect<readonly DiscoveredEval[], DiscoveryError> {\n const dir = join(root, \"evals\");\n const discoverWith = (load: DiscoveryModuleLoader): Effect.Effect<readonly DiscoveredEval[], DiscoveryError> => Effect.gen(function* () {\n const entries = yield* collectEvalEntries(dir, root);\n const discoveredEntries = yield* collectAll(entries, (entry) => discoverEvalEntry(entry, root, load));\n const evals = yield* propagateLoaderProvenance(discoveredEntries, root);\n const [leakErrors] = yield* Effect.partition(evals, (evalDef) => runLeakGate(evalDef.definition, {\n evalId: evalDef.id,\n file: relative(root, evalDef.sourcePath).split(sep).join(\"/\"),\n baseDir: evalDef.baseDir,\n criteriaPaths: evalDef.criteriaPaths,\n privatePaths: evalDef.privatePaths,\n }), { concurrency: 1 });\n if (leakErrors.length > 0)\n return yield* Effect.fail(discoveryError(leakErrors.flatMap((error) => error.issues)));\n const files = yield* walkFiles(dir, root, (name) => name === \"eval-group.ts\");\n const groupEntries = files.map((file) => {\n const id = relative(dir, dirname(file)).split(sep).join(\"/\");\n return { file, id };\n });\n const groupIdIssues: DiscoveryIssue[] = [];\n const groupsById = new Map<string, typeof groupEntries>();\n for (const entry of groupEntries)\n groupsById.set(entry.id, [...(groupsById.get(entry.id) ?? []), entry]);\n for (const [id, owners] of groupsById) {\n if (id.length === 0) {\n groupIdIssues.push({ file: owners.map((owner) => relative(root, owner.file).split(sep).join(\"/\")).join(\", \"), code: \"discovery.invalid-export\", message: \"Eval Group id must not be empty.\", actions: [\"Put eval-group.ts in a named subdirectory under evals/.\"] });\n }\n else if (owners.length > 1) {\n groupIdIssues.push({ file: owners.map((owner) => relative(root, owner.file).split(sep).join(\"/\")).join(\", \"), code: \"discovery.duplicate-id\", message: `Duplicate eval group id ${JSON.stringify(id)}: multiple entries map to the same id.`, actions: [\"Keep one eval-group.ts for this group path.\"] });\n }\n }\n if (groupIdIssues.length > 0)\n return yield* Effect.fail(discoveryError(groupIdIssues));\n const claimed = new Map<AnyEvalDefinition, string>();\n const annotated = new Map<AnyEvalDefinition, DiscoveredEval>();\n const issues: DiscoveryIssue[] = [];\n const memberSourcePaths = new Set(evals.map((item) => item.sourcePath));\n for (const { file, id } of groupEntries) {\n const label = relative(root, file).split(sep).join(\"/\");\n const imported = yield* importModule(file, root, \"eval\", load);\n const module = yield* decodeEvalGroupModule(imported, label);\n const resolved = module.default.evals.map((definition) => evals.filter((item) => item.definition === definition));\n // `evals` is a closed set, not an author-defined business sequence. The\n // scheduler and fingerprint use the normalized Eval ID order everywhere.\n const evalIds = resolved.flatMap((matches) => matches.map((item) => item.id)).toSorted();\n const evaluationKinds = splitByEvaluationKind(resolved.flatMap((matches) => matches.length === 1 ? matches : []));\n if (evaluationKinds.pass.length > 0 && evaluationKinds.score.length > 0) {\n issues.push({\n file: label,\n code: \"eval-group-evaluation-kind-mixed\",\n message: `Eval Group ${JSON.stringify(id)} contains both pass and score Evals. ` +\n `pass (${evaluationKinds.pass.length}): ${evaluationKinds.pass.join(\", \")}; ` +\n `score (${evaluationKinds.score.length}): ${evaluationKinds.score.join(\", \")}.`,\n actions: [\"Split the Eval Group into one pass Group and one score Group.\"],\n });\n }\n const groupSources = yield* Effect.tryPromise({\n try: async () => (await captureSourceClosure(file, { root, stopPaths: memberSourcePaths })).map(([path, content]) => [\n path,\n path === label ? normalizeEvalGroupSource(content) : content,\n ] as const),\n catch: (cause) => issue(label, \"discovery.source-capture-failed\", causeMessage(cause), [\"Make the Eval Group entry and its project-local helper modules readable.\"]),\n });\n const definitionHash = digestOf({\n // Group declaration order is deliberately not an input. The group file\n // may reorder its closed `evals` set without changing behavior. Other\n // Group source stays in the hash, so opaque command/hook behavior and\n // helper code still invalidate fingerprints when it changes.\n version: 5,\n id,\n evalIds,\n layer: sandboxLayerDefinitionIdentity(module.default.sandbox),\n onUnavailable: module.default.onUnavailable,\n sources: groupSources.map(([path, content]) => ({ path, content })),\n });\n module.default.evals.forEach((definition, index) => {\n const matches = resolved[index]!;\n if (matches.length !== 1) {\n issues.push({ file: label, code: \"eval-group-member-unresolved\", message: `Eval Group ${JSON.stringify(id)} member ${index} resolves to ${matches.length} discovered Evals.`, actions: [\"Import the exact default definition object from an eval entry.\"] });\n return;\n }\n const member = matches[0]!;\n const prior = claimed.get(definition);\n if (prior !== undefined) {\n issues.push({ file: label, code: \"eval-group-member-overlap\", message: `Eval ${JSON.stringify(member.id)} in Eval Group ${JSON.stringify(id)} is already claimed by Eval Group ${JSON.stringify(prior)}.`, actions: [\"List each Eval exactly once in one group.\"] });\n return;\n }\n const state = member.sandbox === undefined ? undefined : sandboxLayerStateOf(member.sandbox);\n if (state?.kind === \"template-bearing\" || (state?.setupHooks.length ?? 0) > 0 || (state?.teardownHooks.length ?? 0) > 0) {\n issues.push({ file: label, code: \"eval-group-member-layer\", message: `Eval ${JSON.stringify(member.id)} in Eval Group ${JSON.stringify(id)} owns a template or lifecycle hook.`, actions: [\"Move the template and lifecycle hooks to the Experiment or Eval Group; keep only prepare commands on the Eval.\"] });\n return;\n }\n claimed.set(definition, id);\n annotated.set(definition, discoverEval(definition, {\n ...member,\n evalGroup: Object.freeze({\n id,\n evalIds: Object.freeze(evalIds),\n definitionHash,\n sandbox: module.default.sandbox,\n onUnavailable: module.default.onUnavailable,\n plugins: Object.freeze([...(module.default.plugins ?? [])]),\n sourcePath: file,\n baseDir: dirname(file),\n }),\n }));\n });\n }\n if (issues.length > 0)\n return yield* Effect.fail(discoveryError(issues));\n return Object.freeze(evals.map((item) => annotated.get(item.definition) ?? item));\n });\n if (options.generation !== undefined)\n return discoverWith(options.generation.import);\n if (!options.freshImport)\n return discoverWith(cachedModuleLoader);\n return Effect.scoped(acquireFreshImportGeneration(root).pipe(Effect.flatMap((fresh) => discoverWith(fresh.import))));\n}\n// @concord-code ne-runner-discover-experiment-file\n// @concord-implements docs/feature/experiments/library.md\nfunction discoverExperimentFile(file: string, root: string, experimentsDir: string, load: DiscoveryModuleLoader = cachedModuleLoader): Effect.Effect<readonly DiscoveredExperiment[], DiscoveryError> {\n const fileLabel = relative(root, file).split(sep).join(\"/\");\n return Effect.gen(function* () {\n const imported = yield* importModule(file, root, \"experiment\", load);\n const module = yield* decodeExperimentModule(imported, fileLabel);\n if (module.default === undefined)\n return Object.freeze([]);\n const id = relative(experimentsDir, file)\n .replace(/\\.ts$/, \"\")\n .replace(/\\.experiment$/, \"\")\n .split(sep)\n .join(\"/\");\n return Object.freeze([discoverExperiment(module.default, {\n id,\n baseDir: dirname(file),\n sourcePath: file,\n })]);\n });\n}\n/** Discovery remains in Effect through selection/planning; an adapter host closes it. */\n// @concord-code ne-runner-discover-experiments\n// @concord-implements docs/feature/experiments/README.md\n// @concord-implements docs/feature/experiments/library.md\nexport function discoverExperiments(root: string, options: {\n freshImport?: boolean;\n generation?: FreshImportGeneration;\n} = {}): Effect.Effect<readonly DiscoveredExperiment[], DiscoveryError> {\n const dir = join(root, \"experiments\");\n const discoverWith = (load: DiscoveryModuleLoader): Effect.Effect<readonly DiscoveredExperiment[], DiscoveryError> => walkFiles(dir, root, (name) => name.endsWith(\".ts\") && !name.endsWith(\".d.ts\")).pipe(Effect.flatMap((files) => Effect.partition(files, (file) => discoverExperimentFile(file, root, dir, load), { concurrency: 1 })), Effect.flatMap(([errors, groups]) => errors.length > 0\n ? Effect.fail(discoveryError(errors.flatMap((error) => error.issues)))\n : Effect.succeed(Object.freeze(groups.flat()))));\n if (options.generation !== undefined)\n return discoverWith(options.generation.import);\n if (!options.freshImport)\n return discoverWith(cachedModuleLoader);\n return Effect.scoped(acquireFreshImportGeneration(root).pipe(Effect.flatMap((fresh) => discoverWith(fresh.import))));\n}\n/** eval id 的裸字面前缀过滤;exp 与固定读取面共用 shared helper。 */\nexport function makeFilter(patterns: string[]): (id: string) => boolean {\n return evalPrefixPredicate(patterns.length > 0 ? patterns : undefined);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["discover.ts"],"names":[],"mappings":"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","sourcesContent":["// @concord-file\n// @concord-implements docs/feature/experiments/architecture.md\n// @concord-implements docs/feature/eval-groups/architecture.md\n// @concord-implements docs/feature/eval-groups/library.md\n// @concord-implements docs/feature/eval/use-case/dataset-fanout.md\n// Discovery is the only boundary where executable modules enter the typed runner.\n// Dynamic imports are decoded immediately; every later stage receives branded, immutable definitions.\nimport { existsSync } from \"node:fs\";\nimport { readdir } from \"node:fs/promises\";\nimport { basename, dirname, join, relative, resolve, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Data, Effect, Option, Schema } from \"effect\";\nimport { pad4 } from \"../util.ts\";\nimport { assertNoHiddenInputLeaks, captureEvalSource, folderEntryBaseId, type HiddenInput, type LeakGateHints, } from \"./eval-source.ts\";\nimport { evalPrefixPredicate } from \"../shared/aggregate.ts\";\nimport { captureLoadedFiles, type LoaderCaptureOrigin, type LoaderCapturePaths, } from \"../loaders/runtime.ts\";\nimport { acquireFreshImportGeneration, importProjectModule, type FreshImportGeneration } from \"../fresh-import.ts\";\nimport { sandboxLayerStateOf, type SandboxLayer } from \"../sandbox/layer.ts\";\nimport { sandboxLayerDefinitionIdentity } from \"../sandbox/link.ts\";\nimport { discoverEval, discoverExperiment, isEvalDefinition, isExperimentDefinition, isEvalGroupDefinition, } from \"../types.ts\";\nimport type { AnyEvalDefinition, DiscoveredEval, DiscoveredExperiment, ExperimentDefinition, EvalGroupDefinition, } from \"../types.ts\";\nimport { digestOf } from \"../sandbox/identity.ts\";\nimport { captureSourceClosure } from \"./source-closure.ts\";\nimport { splitByEvaluationKind } from \"./eval-selection.ts\";\nconst SKIP_DIRS = new Set([\"node_modules\", \".git\", \".niceeval\", \"dist\", \".next\"]);\nexport type DiscoveryIssueCode = \"discovery.filesystem\" | \"discovery.duplicate-id\" | \"discovery.import-failed\" | \"discovery.invalid-export\" | \"eval-group-member-unresolved\" | \"eval-group-member-overlap\" | \"eval-group-member-layer\" | \"eval-group-evaluation-kind-mixed\" | \"discovery.invalid-dataset-key\" | \"discovery.source-capture-failed\" | \"discovery.leak-gate-failed\";\nexport interface DiscoveryIssue {\n readonly file: string;\n readonly code: DiscoveryIssueCode;\n readonly message: string;\n readonly actions: readonly string[];\n /** Retained in-process for structured error assistance; never persisted. */\n readonly cause?: unknown;\n}\n/** Discovery reports the whole invalid batch, rather than stopping at the first bad file. */\nexport class DiscoveryError extends Data.TaggedError(\"DiscoveryError\")<{\n readonly message: string;\n readonly issues: readonly DiscoveryIssue[];\n}> {\n}\ninterface EvalEntry {\n readonly file: string;\n readonly baseId: string;\n readonly kind: \"file\" | \"folder\";\n}\ntype EvalModuleExport = AnyEvalDefinition | readonly AnyEvalDefinition[] | Readonly<globalThis.Record<string, AnyEvalDefinition>>;\ninterface EvalModule {\n readonly default: EvalModuleExport;\n}\ninterface ExperimentModule {\n readonly default?: ExperimentDefinition;\n}\ninterface EvalGroupModule {\n readonly default: EvalGroupDefinition;\n}\nconst EvalDefinitionSchema = Schema.declare(isEvalDefinition, {\n identifier: \"EvalDefinition\",\n description: \"a value returned by defineEval() or defineScoreEval()\",\n});\nconst EvalModuleSchema: Schema.Schema<EvalModule> = Schema.Struct({\n default: Schema.Union([\n Schema.toType(EvalDefinitionSchema),\n Schema.Array(Schema.toType(EvalDefinitionSchema)),\n Schema.Record(Schema.String, Schema.toType(EvalDefinitionSchema)),\n ]),\n});\nconst ExperimentDefinitionSchema = Schema.declare(isExperimentDefinition, {\n identifier: \"ExperimentDefinition\",\n description: \"a value returned by defineExperiment()\",\n});\nconst ExperimentModuleSchema: Schema.Schema<ExperimentModule> = Schema.Struct({\n default: Schema.optional(Schema.toType(ExperimentDefinitionSchema)),\n});\nconst EvalGroupModuleSchema: Schema.Schema<EvalGroupModule> = Schema.Struct({\n default: Schema.toType(Schema.declare(isEvalGroupDefinition, { identifier: \"EvalGroupDefinition\" })),\n});\nfunction discoveryError(issues: readonly DiscoveryIssue[]): DiscoveryError {\n const frozenIssues = Object.freeze(issues.map((issue) => Object.freeze({\n ...issue,\n actions: Object.freeze([...issue.actions]),\n })));\n return new DiscoveryError({\n message: frozenIssues.map((issue) => `${issue.code} ${issue.file}: ${issue.message} Actions: ${issue.actions.join(\" \")}`).join(\"\\n\"),\n issues: frozenIssues,\n });\n}\nfunction issue(file: string, code: DiscoveryIssueCode, message: string, actions: readonly string[], cause?: unknown): DiscoveryError {\n return discoveryError([{ file, code, message, actions, ...(cause === undefined ? {} : { cause }) }]);\n}\nfunction causeMessage(cause: unknown): string {\n return cause instanceof Error ? cause.message : String(cause);\n}\ntype DiscoveryModuleLoader = (file: string) => Promise<unknown>;\nconst cachedModuleLoader: DiscoveryModuleLoader = importProjectModule;\nfunction importModule(file: string, root: string, kind: \"eval\" | \"experiment\", load: DiscoveryModuleLoader = cachedModuleLoader): Effect.Effect<unknown, DiscoveryError> {\n return Effect.tryPromise({\n try: () => load(file),\n catch: (cause) => issue(relative(root, file), \"discovery.import-failed\", `Top-level ${kind} module evaluation failed: ${causeMessage(cause)}`, [`Move resource work into the selected ${kind} body.`, \"Fix the reported top-level exception.\"], cause),\n });\n}\nfunction decodeEvalModule(value: unknown, file: string): Effect.Effect<EvalModule, DiscoveryError> {\n return Schema.decodeUnknownEffect(Schema.toType(EvalModuleSchema), { errors: \"all\" })(value).pipe(Effect.mapError((error) => issue(file, \"discovery.invalid-export\", String(error), [\"Default-export defineEval()/defineScoreEval() output, an array of those outputs, or a keyed record of those outputs.\"])));\n}\nfunction decodeExperimentModule(value: unknown, file: string): Effect.Effect<ExperimentModule, DiscoveryError> {\n return Schema.decodeUnknownEffect(Schema.toType(ExperimentModuleSchema), { errors: \"all\" })(value).pipe(Effect.mapError((error) => issue(file, \"discovery.invalid-export\", String(error), [\"Default-export defineExperiment({...}) instead of a plain object.\"])));\n}\nfunction decodeEvalGroupModule(value: unknown, file: string): Effect.Effect<EvalGroupModule, DiscoveryError> {\n return Schema.decodeUnknownEffect(Schema.toType(EvalGroupModuleSchema), { errors: \"all\" })(value).pipe(Effect.mapError((error) => issue(file, \"discovery.invalid-export\", String(error), [\n \"Default-export defineEvalGroup({ evals: [definition, ...] }).\",\n ])));\n}\nfunction collectAll<A, B>(values: readonly A[], f: (value: A) => Effect.Effect<B, DiscoveryError>): Effect.Effect<readonly B[], DiscoveryError> {\n return Effect.partition(values, f, { concurrency: 1 }).pipe(Effect.flatMap(([errors, groups]) => errors.length > 0\n ? Effect.fail(discoveryError(errors.flatMap((error) => error.issues)))\n : Effect.succeed(Object.freeze(groups))));\n}\nfunction walkFiles(dir: string, root: string, match: (name: string) => boolean): Effect.Effect<readonly string[], DiscoveryError> {\n const readDirectory = (current: string, allowAbsent: boolean) => Effect.tryPromise({\n try: async () => {\n try {\n return await readdir(current, { withFileTypes: true });\n }\n catch (cause) {\n if (allowAbsent && isMissingPath(cause))\n return undefined;\n throw cause;\n }\n },\n catch: (cause) => issue(relative(root, current) || \".\", \"discovery.filesystem\", causeMessage(cause), [\"Check that the discovery directory is readable.\"]),\n });\n const walk = (current: string, allowAbsent: boolean): Effect.Effect<readonly string[], DiscoveryError> => Effect.suspend(() => readDirectory(current, allowAbsent).pipe(Effect.flatMap((entries) => {\n if (entries === undefined)\n return Effect.succeed(Object.freeze([]));\n return Effect.forEach(entries, (entry) => {\n const full = join(current, entry.name);\n if (entry.isDirectory()) {\n return SKIP_DIRS.has(entry.name)\n ? Effect.succeed([])\n : walk(full, false);\n }\n return entry.isFile() && match(entry.name)\n ? Effect.succeed([full])\n : Effect.succeed([]);\n }, { concurrency: 1 }).pipe(Effect.map((groups) => Object.freeze(groups.flat())));\n })));\n return walk(dir, true).pipe(Effect.map((files) => Object.freeze([...files].sort())));\n}\nfunction isMissingPath(cause: unknown): boolean {\n return typeof cause === \"object\" && cause !== null && \"code\" in cause &&\n (cause as {\n readonly code?: unknown;\n }).code === \"ENOENT\";\n}\nfunction isFolderEntryName(name: string): boolean {\n return name === \"eval.ts\" || name === \"eval.tsx\";\n}\nfunction isFileEntryName(name: string): boolean {\n return name.endsWith(\".eval.ts\") || name.endsWith(\".eval.tsx\");\n}\nfunction collectEvalEntries(evalsDir: string, root: string): Effect.Effect<readonly EvalEntry[], DiscoveryError> {\n return walkFiles(evalsDir, root, (name) => isFileEntryName(name) || isFolderEntryName(name)).pipe(Effect.flatMap((files) => {\n const entries = files.map((file): EvalEntry => {\n const name = basename(file);\n if (isFolderEntryName(name)) {\n const relDir = relative(evalsDir, dirname(file)).split(sep).join(\"/\");\n return {\n file,\n baseId: folderEntryBaseId(relDir === \"\" ? \".\" : relDir),\n kind: \"folder\",\n };\n }\n return {\n file,\n baseId: relative(evalsDir, file).replace(/\\.eval\\.tsx?$/, \"\").split(sep).join(\"/\"),\n kind: \"file\",\n };\n });\n const byId = new Map<string, EvalEntry[]>();\n for (const entry of entries)\n byId.set(entry.baseId, [...(byId.get(entry.baseId) ?? []), entry]);\n const duplicates = [...byId.entries()].flatMap(([id, owners]) => owners.length < 2 ? [] : [{\n file: owners.map((owner) => relative(root, owner.file).split(sep).join(\"/\")).join(\", \"),\n code: \"discovery.duplicate-id\" as const,\n message: `Duplicate eval id ${JSON.stringify(id)}: multiple entries map to the same id.`,\n actions: Object.freeze([\"Keep either the file entry or the folder entry for this id.\"]),\n }]);\n return duplicates.length > 0\n ? Effect.fail(discoveryError(duplicates))\n : Effect.succeed(Object.freeze(entries));\n }));\n}\nfunction validDatasetKey(key: string): boolean {\n return key.length > 0 && key !== \".\" && key !== \"..\" && !key.includes(\"/\") && !key.includes(\"\\\\\") &&\n !/[\\u0000-\\u001f\\u007f]/.test(key);\n}\nfunction isEvalDefinitionArray(exported: EvalModuleExport): exported is readonly AnyEvalDefinition[] {\n return Array.isArray(exported);\n}\n// @concord-code\n// @concord-implements docs/feature/eval/use-case/dataset-fanout.md\nfunction expandEvalExport(exported: EvalModuleExport, entry: EvalEntry, root: string): Effect.Effect<readonly {\n readonly id: string;\n readonly definition: AnyEvalDefinition;\n}[], DiscoveryError> {\n if (isEvalDefinition(exported)) {\n return Effect.succeed(Object.freeze([{ id: entry.baseId, definition: exported }]));\n }\n if (isEvalDefinitionArray(exported)) {\n return Effect.succeed(Object.freeze(exported.map((definition, index) => ({\n id: `${entry.baseId}/${pad4(index)}`,\n definition,\n }))));\n }\n // `Array.isArray` does not narrow readonly arrays; the array branch above has already returned.\n const dataset = exported;\n const invalidKeys = Object.keys(dataset).filter((key) => !validDatasetKey(key));\n if (invalidKeys.length > 0) {\n return Effect.fail(discoveryError(invalidKeys.map((key) => ({\n file: relative(root, entry.file),\n code: \"discovery.invalid-dataset-key\" as const,\n message: `Invalid keyed eval dataset key ${JSON.stringify(key)}.`,\n actions: Object.freeze([\"Use a non-empty path segment without slash, backslash, dot segments, or control characters.\"]),\n }))));\n }\n return Effect.succeed(Object.freeze(Object.keys(dataset).sort().map((key) => ({\n id: `${entry.baseId}/${key}`,\n definition: dataset[key]!,\n }))));\n}\nfunction leakGateHintsForLayer(layer: SandboxLayer | undefined, baseDir: string, file: string): Effect.Effect<Option.Option<LeakGateHints>, DiscoveryError> {\n if (layer === undefined)\n return Effect.succeed(Option.none());\n const state = sandboxLayerStateOf(layer);\n if (!(\"template\" in state))\n return Effect.succeed(Option.none());\n const leakGate = state.template.leakGate;\n if (leakGate._tag === \"None\")\n return Effect.succeed(Option.none());\n if (leakGate._tag === \"Dockerfile\") {\n const contextDir = leakGate.context._tag === \"Url\"\n ? fileURLToPath(leakGate.context.value)\n : resolve(baseDir, leakGate.context.value);\n return Effect.succeed(Option.some({ buildContexts: [{ contextDir, label: \"dockerfile\" }] }));\n }\n const composeFile = leakGate.file._tag === \"Url\" ? new URL(leakGate.file.value) : leakGate.file.value;\n return Effect.tryPromise({\n try: () => __niceevalDynamicImport(\"../sandbox/compose.cjs\"),\n catch: (cause) => issue(file, \"discovery.leak-gate-failed\", causeMessage(cause), [\"Fix the Docker Compose declaration used by this eval SandboxLayer.\"]),\n }).pipe(Effect.flatMap(({ leakGateHintsFromComposeFile }) => leakGateHintsFromComposeFile(composeFile, {\n mainService: leakGate.workspaceService,\n baseDir,\n }).pipe(Effect.mapError((cause) => issue(file, \"discovery.leak-gate-failed\", causeMessage(cause), [\"Fix the Docker Compose declaration used by this eval SandboxLayer.\"])))), Effect.map(({ hints }) => Option.some(hints)));\n}\nfunction runLeakGate(definition: AnyEvalDefinition, input: {\n readonly evalId: string;\n readonly file: string;\n readonly baseDir: string;\n readonly criteriaPaths: readonly string[];\n readonly privatePaths: readonly string[];\n}): Effect.Effect<void, DiscoveryError> {\n const hidden: readonly HiddenInput[] = Object.freeze([\n ...input.criteriaPaths.map((path) => ({ path, kind: \"verifier\" as const })),\n ...input.privatePaths.map((path) => ({ path, kind: \"private\" as const })),\n ]);\n if (hidden.length === 0)\n return Effect.void;\n return leakGateHintsForLayer(definition.sandbox, input.baseDir, input.file).pipe(Effect.flatMap(Option.match({\n onNone: () => Effect.void,\n onSome: (hints) => assertNoHiddenInputLeaks({\n hidden,\n buildContexts: hints.buildContexts,\n bindMounts: hints.bindMounts,\n evalId: input.evalId,\n }).pipe(Effect.mapError((cause) => issue(input.file, \"discovery.leak-gate-failed\", causeMessage(cause), [\"Remove hidden verifier/private inputs from the sandbox build context or bind mounts.\"]))),\n })));\n}\ninterface DiscoveredEvalEntry {\n readonly sourcePath: string;\n readonly evals: readonly DiscoveredEval[];\n readonly origins: readonly LoaderCaptureOrigin[];\n readonly unattributed: LoaderCapturePaths;\n}\nfunction discoverEvalEntry(entry: EvalEntry, root: string, load: DiscoveryModuleLoader = cachedModuleLoader): Effect.Effect<DiscoveredEvalEntry, DiscoveryError> {\n const fileLabel = relative(root, entry.file).split(sep).join(\"/\");\n return Effect.gen(function* () {\n const captured = yield* Effect.tryPromise({\n try: () => captureLoadedFiles(() => load(entry.file)),\n catch: (cause) => issue(fileLabel, \"discovery.import-failed\", causeMessage(cause), [\"Fix module loading and loader declarations.\"], cause),\n });\n const module = yield* decodeEvalModule(captured.value, fileLabel);\n const expanded = yield* expandEvalExport(module.default, entry, root);\n const source = yield* Effect.tryPromise({\n try: () => captureEvalSource(entry.file, { root }),\n catch: (cause) => issue(fileLabel, \"discovery.source-capture-failed\", causeMessage(cause), [\"Make the eval source file readable.\"]),\n });\n const loaderDataPaths = Object.freeze([...captured.paths]);\n const criteriaPaths = Object.freeze([...captured.criteriaPaths]);\n const privatePaths = Object.freeze([...captured.privatePaths]);\n const baseDir = dirname(entry.file);\n return Object.freeze({\n sourcePath: entry.file,\n evals: Object.freeze(expanded.map(({ id, definition }) => discoverEval(definition, {\n id,\n baseDir,\n sourcePath: entry.file,\n source,\n loaderDataPaths,\n criteriaPaths,\n privatePaths,\n definition,\n }))),\n origins: captured.origins,\n unattributed: captured.unattributed,\n });\n });\n}\ninterface LoaderPathBuckets {\n readonly data: Set<string>;\n readonly criteria: Set<string>;\n readonly private: Set<string>;\n}\nfunction emptyLoaderPathBuckets(): LoaderPathBuckets {\n return { data: new Set<string>(), criteria: new Set<string>(), private: new Set<string>() };\n}\nfunction addLoaderPaths(target: LoaderPathBuckets, source: LoaderCapturePaths): void {\n source.paths.forEach((path) => target.data.add(path));\n source.criteriaPaths.forEach((path) => target.criteria.add(path));\n source.privatePaths.forEach((path) => target.private.add(path));\n}\nfunction directLoaderPaths(evalDef: DiscoveredEval): LoaderCaptureOrigin {\n return {\n sourcePath: evalDef.sourcePath,\n paths: evalDef.loaderDataPaths,\n criteriaPaths: evalDef.criteriaPaths,\n privatePaths: evalDef.privatePaths,\n };\n}\nfunction withLoaderProvenance(evalDef: DiscoveredEval, paths: LoaderPathBuckets): DiscoveredEval {\n return discoverEval(evalDef.definition, {\n id: evalDef.id,\n baseDir: evalDef.baseDir,\n sourcePath: evalDef.sourcePath,\n source: evalDef.source,\n loaderDataPaths: Object.freeze([...paths.data].sort()),\n criteriaPaths: Object.freeze([...paths.criteria].sort()),\n privatePaths: Object.freeze([...paths.private].sort()),\n definition: evalDef.definition,\n });\n}\n/**\n * A namespaced fresh graph evaluates a shared helper just once. Attribute the\n * helper's loader registrations to every entry whose static closure contains\n * that helper, so later entries retain the same data/criteria/private surface\n * without evaluating the module again.\n */\nfunction propagateLoaderProvenance(entries: readonly DiscoveredEvalEntry[], root: string): Effect.Effect<readonly DiscoveredEval[], DiscoveryError> {\n return Effect.tryPromise({\n try: async () => {\n const originPaths = new Map<string, LoaderPathBuckets>();\n const conservative = emptyLoaderPathBuckets();\n for (const entry of entries) {\n addLoaderPaths(conservative, entry.unattributed);\n for (const origin of entry.origins) {\n const buckets = originPaths.get(resolve(origin.sourcePath)) ?? emptyLoaderPathBuckets();\n originPaths.set(resolve(origin.sourcePath), buckets);\n addLoaderPaths(buckets, origin);\n }\n }\n const evals: DiscoveredEval[] = [];\n for (const entry of entries) {\n const buckets = emptyLoaderPathBuckets();\n // A host may omit user frames from Error.stack. Conservative union is\n // deliberate: extra invalidation/leak checks are safe; lost provenance\n // is not.\n addLoaderPaths(buckets, {\n paths: [...conservative.data],\n criteriaPaths: [...conservative.criteria],\n privatePaths: [...conservative.private],\n });\n // Keep the old direct capture as a conservative fallback when a host\n // omits call-site frames from Error.stack.\n for (const evalDef of entry.evals)\n addLoaderPaths(buckets, directLoaderPaths(evalDef));\n const closure = await captureSourceClosure(entry.sourcePath, { root });\n const modules = new Set(closure.map(([path]) => resolve(root, path)));\n for (const [modulePath, registered] of originPaths) {\n if (modules.has(modulePath))\n addLoaderPaths(buckets, {\n paths: [...registered.data],\n criteriaPaths: [...registered.criteria],\n privatePaths: [...registered.private],\n });\n }\n evals.push(...entry.evals.map((evalDef) => withLoaderProvenance(evalDef, buckets)));\n }\n return Object.freeze(evals);\n },\n catch: (cause) => issue(relative(root, join(root, \"evals\")) || \"evals\", \"discovery.source-capture-failed\", causeMessage(cause), [\"Make every Eval entry and its static project-local imports readable.\"]),\n });\n}\nfunction matchingArrayClose(source: string, start: number): number | undefined {\n let depth = 0;\n let quote: \"'\" | '\"' | \"`\" | undefined;\n let escaped = false;\n let lineComment = false;\n let blockComment = false;\n for (let index = start; index < source.length; index++) {\n const char = source[index]!;\n const next = source[index + 1];\n if (lineComment) {\n if (char === \"\\n\")\n lineComment = false;\n continue;\n }\n if (blockComment) {\n if (char === \"*\" && next === \"/\") {\n blockComment = false;\n index++;\n }\n continue;\n }\n if (quote !== undefined) {\n if (!escaped && char === quote)\n quote = undefined;\n escaped = !escaped && char === \"\\\\\";\n continue;\n }\n if (char === \"/\" && next === \"/\") {\n lineComment = true;\n index++;\n continue;\n }\n if (char === \"/\" && next === \"*\") {\n blockComment = true;\n index++;\n continue;\n }\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n escaped = false;\n continue;\n }\n if (char === \"[\")\n depth++;\n if (char === \"]\") {\n depth--;\n if (depth === 0)\n return index;\n }\n }\n return undefined;\n}\nfunction splitArrayElements(source: string): readonly string[] | undefined {\n const parts: string[] = [];\n let start = 0;\n let depth = 0;\n let quote: \"'\" | '\"' | \"`\" | undefined;\n let escaped = false;\n let lineComment = false;\n let blockComment = false;\n for (let index = 0; index < source.length; index++) {\n const char = source[index]!;\n const next = source[index + 1];\n if (lineComment) {\n if (char === \"\\n\")\n lineComment = false;\n continue;\n }\n if (blockComment) {\n if (char === \"*\" && next === \"/\") {\n blockComment = false;\n index++;\n }\n continue;\n }\n if (quote !== undefined) {\n if (!escaped && char === quote)\n quote = undefined;\n escaped = !escaped && char === \"\\\\\";\n continue;\n }\n if (char === \"/\" && next === \"/\") {\n lineComment = true;\n index++;\n continue;\n }\n if (char === \"/\" && next === \"*\") {\n blockComment = true;\n index++;\n continue;\n }\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n escaped = false;\n continue;\n }\n if (char === \"(\" || char === \"{\" || char === \"[\")\n depth++;\n if (char === \")\" || char === \"}\" || char === \"]\")\n depth--;\n if (char === \",\" && depth === 0) {\n const part = source.slice(start, index).trim();\n if (part === \"\")\n return undefined;\n parts.push(part);\n start = index + 1;\n }\n }\n const last = source.slice(start).trim();\n if (last !== \"\")\n parts.push(last);\n return parts;\n}\n/**\n * `evals` is a closed set. Normalize only inline array spelling in the Group\n * entry before its source participates in the definition hash; all other\n * source remains byte-sensitive, including opaque commands and hooks.\n */\nfunction normalizeEvalGroupSource(content: string): string {\n let output = \"\";\n let cursor = 0;\n const property = /\\bevals\\s*:\\s*\\[/g;\n for (let found = property.exec(content); found !== null; found = property.exec(content)) {\n const bracket = found.index + found[0].lastIndexOf(\"[\");\n const close = matchingArrayClose(content, bracket);\n if (close === undefined)\n return content;\n const elements = splitArrayElements(content.slice(bracket + 1, close));\n if (elements === undefined)\n return content;\n output += content.slice(cursor, bracket + 1);\n output += elements.toSorted((left, right) => left.localeCompare(right)).join(\",\");\n cursor = close;\n property.lastIndex = close + 1;\n }\n return output === \"\" ? content : output + content.slice(cursor);\n}\n/** Discovery remains in Effect through selection/planning; an adapter host closes it. */\n// @concord-code\n// @concord-implements docs/feature/eval-groups/architecture.md\n// @concord-implements docs/feature/eval-groups/library.md\nexport function discoverEvals(root: string, options: {\n freshImport?: boolean;\n generation?: FreshImportGeneration;\n} = {}): Effect.Effect<readonly DiscoveredEval[], DiscoveryError> {\n const dir = join(root, \"evals\");\n const discoverWith = (load: DiscoveryModuleLoader): Effect.Effect<readonly DiscoveredEval[], DiscoveryError> => Effect.gen(function* () {\n const entries = yield* collectEvalEntries(dir, root);\n const discoveredEntries = yield* collectAll(entries, (entry) => discoverEvalEntry(entry, root, load));\n const evals = yield* propagateLoaderProvenance(discoveredEntries, root);\n const [leakErrors] = yield* Effect.partition(evals, (evalDef) => runLeakGate(evalDef.definition, {\n evalId: evalDef.id,\n file: relative(root, evalDef.sourcePath).split(sep).join(\"/\"),\n baseDir: evalDef.baseDir,\n criteriaPaths: evalDef.criteriaPaths,\n privatePaths: evalDef.privatePaths,\n }), { concurrency: 1 });\n if (leakErrors.length > 0)\n return yield* Effect.fail(discoveryError(leakErrors.flatMap((error) => error.issues)));\n const files = yield* walkFiles(dir, root, (name) => name === \"eval-group.ts\");\n const groupEntries = files.map((file) => {\n const id = relative(dir, dirname(file)).split(sep).join(\"/\");\n return { file, id };\n });\n const groupIdIssues: DiscoveryIssue[] = [];\n const groupsById = new Map<string, typeof groupEntries>();\n for (const entry of groupEntries)\n groupsById.set(entry.id, [...(groupsById.get(entry.id) ?? []), entry]);\n for (const [id, owners] of groupsById) {\n if (id.length === 0) {\n groupIdIssues.push({ file: owners.map((owner) => relative(root, owner.file).split(sep).join(\"/\")).join(\", \"), code: \"discovery.invalid-export\", message: \"Eval Group id must not be empty.\", actions: [\"Put eval-group.ts in a named subdirectory under evals/.\"] });\n }\n else if (owners.length > 1) {\n groupIdIssues.push({ file: owners.map((owner) => relative(root, owner.file).split(sep).join(\"/\")).join(\", \"), code: \"discovery.duplicate-id\", message: `Duplicate eval group id ${JSON.stringify(id)}: multiple entries map to the same id.`, actions: [\"Keep one eval-group.ts for this group path.\"] });\n }\n }\n if (groupIdIssues.length > 0)\n return yield* Effect.fail(discoveryError(groupIdIssues));\n const claimed = new Map<AnyEvalDefinition, string>();\n const annotated = new Map<AnyEvalDefinition, DiscoveredEval>();\n const issues: DiscoveryIssue[] = [];\n const memberSourcePaths = new Set(evals.map((item) => item.sourcePath));\n for (const { file, id } of groupEntries) {\n const label = relative(root, file).split(sep).join(\"/\");\n const imported = yield* importModule(file, root, \"eval\", load);\n const module = yield* decodeEvalGroupModule(imported, label);\n const resolved = module.default.evals.map((definition) => evals.filter((item) => item.definition === definition));\n // `evals` is a closed set, not an author-defined business sequence. The\n // scheduler and fingerprint use the normalized Eval ID order everywhere.\n const evalIds = resolved.flatMap((matches) => matches.map((item) => item.id)).toSorted();\n const evaluationKinds = splitByEvaluationKind(resolved.flatMap((matches) => matches.length === 1 ? matches : []));\n if (evaluationKinds.pass.length > 0 && evaluationKinds.score.length > 0) {\n issues.push({\n file: label,\n code: \"eval-group-evaluation-kind-mixed\",\n message: `Eval Group ${JSON.stringify(id)} contains both pass and score Evals. ` +\n `pass (${evaluationKinds.pass.length}): ${evaluationKinds.pass.join(\", \")}; ` +\n `score (${evaluationKinds.score.length}): ${evaluationKinds.score.join(\", \")}.`,\n actions: [\"Split the Eval Group into one pass Group and one score Group.\"],\n });\n }\n const groupSources = yield* Effect.tryPromise({\n try: async () => (await captureSourceClosure(file, { root, stopPaths: memberSourcePaths })).map(([path, content]) => [\n path,\n path === label ? normalizeEvalGroupSource(content) : content,\n ] as const),\n catch: (cause) => issue(label, \"discovery.source-capture-failed\", causeMessage(cause), [\"Make the Eval Group entry and its project-local helper modules readable.\"]),\n });\n const definitionHash = digestOf({\n // Group declaration order is deliberately not an input. The group file\n // may reorder its closed `evals` set without changing behavior. Other\n // Group source stays in the hash, so opaque command/hook behavior and\n // helper code still invalidate fingerprints when it changes.\n version: 5,\n id,\n evalIds,\n layer: sandboxLayerDefinitionIdentity(module.default.sandbox),\n onUnavailable: module.default.onUnavailable,\n sources: groupSources.map(([path, content]) => ({ path, content })),\n });\n module.default.evals.forEach((definition, index) => {\n const matches = resolved[index]!;\n if (matches.length !== 1) {\n issues.push({ file: label, code: \"eval-group-member-unresolved\", message: `Eval Group ${JSON.stringify(id)} member ${index} resolves to ${matches.length} discovered Evals.`, actions: [\"Import the exact default definition object from an eval entry.\"] });\n return;\n }\n const member = matches[0]!;\n const prior = claimed.get(definition);\n if (prior !== undefined) {\n issues.push({ file: label, code: \"eval-group-member-overlap\", message: `Eval ${JSON.stringify(member.id)} in Eval Group ${JSON.stringify(id)} is already claimed by Eval Group ${JSON.stringify(prior)}.`, actions: [\"List each Eval exactly once in one group.\"] });\n return;\n }\n const state = member.sandbox === undefined ? undefined : sandboxLayerStateOf(member.sandbox);\n if (state?.kind === \"template-bearing\" || (state?.setupHooks.length ?? 0) > 0 || (state?.teardownHooks.length ?? 0) > 0) {\n issues.push({ file: label, code: \"eval-group-member-layer\", message: `Eval ${JSON.stringify(member.id)} in Eval Group ${JSON.stringify(id)} owns a template or lifecycle hook.`, actions: [\"Move the template and lifecycle hooks to the Experiment or Eval Group; keep only prepare commands on the Eval.\"] });\n return;\n }\n claimed.set(definition, id);\n annotated.set(definition, discoverEval(definition, {\n ...member,\n evalGroup: Object.freeze({\n id,\n evalIds: Object.freeze(evalIds),\n definitionHash,\n sandbox: module.default.sandbox,\n onUnavailable: module.default.onUnavailable,\n plugins: Object.freeze([...(module.default.plugins ?? [])]),\n sourcePath: file,\n baseDir: dirname(file),\n }),\n }));\n });\n }\n if (issues.length > 0)\n return yield* Effect.fail(discoveryError(issues));\n return Object.freeze(evals.map((item) => annotated.get(item.definition) ?? item));\n });\n if (options.generation !== undefined)\n return discoverWith(options.generation.import);\n if (!options.freshImport)\n return discoverWith(cachedModuleLoader);\n return Effect.scoped(acquireFreshImportGeneration(root).pipe(Effect.flatMap((fresh) => discoverWith(fresh.import))));\n}\n// @concord-code\n// @concord-implements docs/feature/experiments/library.md\nfunction discoverExperimentFile(file: string, root: string, experimentsDir: string, load: DiscoveryModuleLoader = cachedModuleLoader): Effect.Effect<readonly DiscoveredExperiment[], DiscoveryError> {\n const fileLabel = relative(root, file).split(sep).join(\"/\");\n return Effect.gen(function* () {\n const imported = yield* importModule(file, root, \"experiment\", load);\n const module = yield* decodeExperimentModule(imported, fileLabel);\n if (module.default === undefined)\n return Object.freeze([]);\n const id = relative(experimentsDir, file)\n .replace(/\\.ts$/, \"\")\n .replace(/\\.experiment$/, \"\")\n .split(sep)\n .join(\"/\");\n return Object.freeze([discoverExperiment(module.default, {\n id,\n baseDir: dirname(file),\n sourcePath: file,\n })]);\n });\n}\n/** Discovery remains in Effect through selection/planning; an adapter host closes it. */\n// @concord-code\n// @concord-implements docs/feature/experiments/README.md\n// @concord-implements docs/feature/experiments/library.md\nexport function discoverExperiments(root: string, options: {\n freshImport?: boolean;\n generation?: FreshImportGeneration;\n} = {}): Effect.Effect<readonly DiscoveredExperiment[], DiscoveryError> {\n const dir = join(root, \"experiments\");\n const discoverWith = (load: DiscoveryModuleLoader): Effect.Effect<readonly DiscoveredExperiment[], DiscoveryError> => walkFiles(dir, root, (name) => name.endsWith(\".ts\") && !name.endsWith(\".d.ts\")).pipe(Effect.flatMap((files) => Effect.partition(files, (file) => discoverExperimentFile(file, root, dir, load), { concurrency: 1 })), Effect.flatMap(([errors, groups]) => errors.length > 0\n ? Effect.fail(discoveryError(errors.flatMap((error) => error.issues)))\n : Effect.succeed(Object.freeze(groups.flat()))));\n if (options.generation !== undefined)\n return discoverWith(options.generation.import);\n if (!options.freshImport)\n return discoverWith(cachedModuleLoader);\n return Effect.scoped(acquireFreshImportGeneration(root).pipe(Effect.flatMap((fresh) => discoverWith(fresh.import))));\n}\n/** eval id 的裸字面前缀过滤;exp 与固定读取面共用 shared helper。 */\nexport function makeFilter(patterns: string[]): (id: string) => boolean {\n return evalPrefixPredicate(patterns.length > 0 ? patterns : undefined);\n}\n"]}
|