@prismatic-io/lux 0.0.2-preview.4 → 0.0.2-preview.40
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/lib/answerers/claude-code/index.d.ts +15 -3
- package/lib/answerers/claude-code/index.d.ts.map +1 -1
- package/lib/answerers/claude-code/index.js +6 -5
- package/lib/answerers/claude-code/index.js.map +1 -1
- package/lib/answerers/persona/index.d.ts +44 -5
- package/lib/answerers/persona/index.d.ts.map +1 -1
- package/lib/answerers/persona/index.js +60 -34
- package/lib/answerers/persona/index.js.map +1 -1
- package/lib/answerers/terminal/index.d.ts +9 -3
- package/lib/answerers/terminal/index.d.ts.map +1 -1
- package/lib/answerers/terminal/index.js +6 -4
- package/lib/answerers/terminal/index.js.map +1 -1
- package/lib/assertions/authoring.d.ts +2 -2
- package/lib/assertions/authoring.d.ts.map +1 -1
- package/lib/assertions/authoring.js.map +1 -1
- package/lib/assertions/core/command-exits-zero.d.ts +5 -2
- package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
- package/lib/assertions/core/command-exits-zero.js +59 -14
- package/lib/assertions/core/command-exits-zero.js.map +1 -1
- package/lib/assertions/core/event-checks.d.ts +3 -0
- package/lib/assertions/core/event-checks.d.ts.map +1 -1
- package/lib/assertions/core/event-checks.js +49 -3
- package/lib/assertions/core/event-checks.js.map +1 -1
- package/lib/assertions/core/file-checks.d.ts +6 -0
- package/lib/assertions/core/file-checks.d.ts.map +1 -1
- package/lib/assertions/core/index.d.ts.map +1 -1
- package/lib/assertions/core/index.js +2 -1
- package/lib/assertions/core/index.js.map +1 -1
- package/lib/assertions/core/json-pointer-equals.d.ts +1 -0
- package/lib/assertions/core/json-pointer-equals.d.ts.map +1 -1
- package/lib/assertions/core/output-checks.d.ts +3 -0
- package/lib/assertions/core/output-checks.d.ts.map +1 -1
- package/lib/assertions/core/predicate.d.ts +1 -0
- package/lib/assertions/core/predicate.d.ts.map +1 -1
- package/lib/assertions/core/resource-checks.d.ts +25 -0
- package/lib/assertions/core/resource-checks.d.ts.map +1 -1
- package/lib/assertions/core/resource-checks.js +35 -5
- package/lib/assertions/core/resource-checks.js.map +1 -1
- package/lib/assertions/core/safe-regex.d.ts.map +1 -1
- package/lib/assertions/core/safe-regex.js +7 -1
- package/lib/assertions/core/safe-regex.js.map +1 -1
- package/lib/assertions/rubric/evidence.d.ts +88 -0
- package/lib/assertions/rubric/evidence.d.ts.map +1 -0
- package/lib/assertions/rubric/evidence.js +75 -0
- package/lib/assertions/rubric/evidence.js.map +1 -0
- package/lib/assertions/rubric/index.d.ts +88 -34
- package/lib/assertions/rubric/index.d.ts.map +1 -1
- package/lib/assertions/rubric/index.js +59 -43
- package/lib/assertions/rubric/index.js.map +1 -1
- package/lib/assertions/rubric/internal.d.ts +30 -5
- package/lib/assertions/rubric/internal.d.ts.map +1 -1
- package/lib/assertions/rubric/internal.js +203 -41
- package/lib/assertions/rubric/internal.js.map +1 -1
- package/lib/authoring.d.ts +37 -2
- package/lib/authoring.d.ts.map +1 -1
- package/lib/authoring.js +36 -1
- package/lib/authoring.js.map +1 -1
- package/lib/cli/bin.js +2 -13
- package/lib/cli/bin.js.map +1 -1
- package/lib/cli/command-runtime.d.ts +3 -3
- package/lib/cli/command-runtime.d.ts.map +1 -1
- package/lib/cli/command-runtime.js +17 -6
- package/lib/cli/command-runtime.js.map +1 -1
- package/lib/cli/doctor.d.ts +55 -0
- package/lib/cli/doctor.d.ts.map +1 -0
- package/lib/cli/doctor.js +14 -0
- package/lib/cli/doctor.js.map +1 -0
- package/lib/cli/harness-plan.d.ts +27 -0
- package/lib/cli/harness-plan.d.ts.map +1 -0
- package/lib/cli/harness-plan.js +75 -0
- package/lib/cli/harness-plan.js.map +1 -0
- package/lib/cli/init-templates.d.ts +11 -0
- package/lib/cli/init-templates.d.ts.map +1 -0
- package/lib/cli/init-templates.js +215 -0
- package/lib/cli/init-templates.js.map +1 -0
- package/lib/cli/init.d.ts +10 -0
- package/lib/cli/init.d.ts.map +1 -1
- package/lib/cli/init.js +34 -173
- package/lib/cli/init.js.map +1 -1
- package/lib/cli/output-schemas.d.ts +1412 -0
- package/lib/cli/output-schemas.d.ts.map +1 -0
- package/lib/cli/output-schemas.js +94 -0
- package/lib/cli/output-schemas.js.map +1 -0
- package/lib/cli/program.d.ts +140 -12
- package/lib/cli/program.d.ts.map +1 -1
- package/lib/cli/program.js +783 -650
- package/lib/cli/program.js.map +1 -1
- package/lib/cli/render/format.d.ts.map +1 -1
- package/lib/cli/render/format.js +1 -1
- package/lib/cli/render/format.js.map +1 -1
- package/lib/cli/render/reporter.d.ts.map +1 -1
- package/lib/cli/render/reporter.js +35 -8
- package/lib/cli/render/reporter.js.map +1 -1
- package/lib/cli/run-options.d.ts +19 -4
- package/lib/cli/run-options.d.ts.map +1 -1
- package/lib/cli/run-options.js +100 -19
- package/lib/cli/run-options.js.map +1 -1
- package/lib/cli/view.d.ts +15 -0
- package/lib/cli/view.d.ts.map +1 -0
- package/lib/cli/view.js +168 -0
- package/lib/cli/view.js.map +1 -0
- package/lib/container/driver.d.ts +27 -0
- package/lib/container/driver.d.ts.map +1 -0
- package/lib/container/driver.js +199 -0
- package/lib/container/driver.js.map +1 -0
- package/lib/container/paths.d.ts +3 -0
- package/lib/container/paths.d.ts.map +1 -0
- package/lib/container/paths.js +27 -0
- package/lib/container/paths.js.map +1 -0
- package/lib/container/protocol.d.ts +12 -0
- package/lib/container/protocol.d.ts.map +1 -0
- package/lib/container/protocol.js +38 -0
- package/lib/container/protocol.js.map +1 -0
- package/lib/container/resources.d.ts +14 -0
- package/lib/container/resources.d.ts.map +1 -0
- package/lib/container/resources.js +141 -0
- package/lib/container/resources.js.map +1 -0
- package/lib/container/worker.d.ts +2 -0
- package/lib/container/worker.d.ts.map +1 -0
- package/lib/container/worker.js +85 -0
- package/lib/container/worker.js.map +1 -0
- package/lib/core/action-events.d.ts +29 -0
- package/lib/core/action-events.d.ts.map +1 -0
- package/lib/core/action-events.js +51 -0
- package/lib/core/action-events.js.map +1 -0
- package/lib/core/agent-activity.d.ts +49 -0
- package/lib/core/agent-activity.d.ts.map +1 -0
- package/lib/core/agent-activity.js +206 -0
- package/lib/core/agent-activity.js.map +1 -0
- package/lib/core/agent-environment.d.ts +5 -0
- package/lib/core/agent-environment.d.ts.map +1 -0
- package/lib/core/agent-environment.js +47 -0
- package/lib/core/agent-environment.js.map +1 -0
- package/lib/core/agent-events.d.ts +26 -0
- package/lib/core/agent-events.d.ts.map +1 -0
- package/lib/core/agent-events.js +13 -0
- package/lib/core/agent-events.js.map +1 -0
- package/lib/core/annotation.d.ts +6 -2
- package/lib/core/annotation.d.ts.map +1 -1
- package/lib/core/annotation.js +2 -1
- package/lib/core/annotation.js.map +1 -1
- package/lib/core/answerer.d.ts +12 -0
- package/lib/core/answerer.d.ts.map +1 -1
- package/lib/core/answerer.js +2 -0
- package/lib/core/answerer.js.map +1 -1
- package/lib/core/artifact-evidence.d.ts +6 -1
- package/lib/core/artifact-evidence.d.ts.map +1 -1
- package/lib/core/artifact-evidence.js +27 -6
- package/lib/core/artifact-evidence.js.map +1 -1
- package/lib/core/assertion.d.ts +10 -4
- package/lib/core/assertion.d.ts.map +1 -1
- package/lib/core/assertion.js +8 -2
- package/lib/core/assertion.js.map +1 -1
- package/lib/core/case-defaults.d.ts +16 -0
- package/lib/core/case-defaults.d.ts.map +1 -0
- package/lib/core/case-defaults.js +42 -0
- package/lib/core/case-defaults.js.map +1 -0
- package/lib/core/case.d.ts +120 -6
- package/lib/core/case.d.ts.map +1 -1
- package/lib/core/case.js +51 -5
- package/lib/core/case.js.map +1 -1
- package/lib/core/command-verification.d.ts +10 -0
- package/lib/core/command-verification.d.ts.map +1 -0
- package/lib/core/command-verification.js +66 -0
- package/lib/core/command-verification.js.map +1 -0
- package/lib/core/driver-execution.d.ts +83 -0
- package/lib/core/driver-execution.d.ts.map +1 -0
- package/lib/core/driver-execution.js +72 -0
- package/lib/core/driver-execution.js.map +1 -0
- package/lib/core/driver-metrics.d.ts +98 -0
- package/lib/core/driver-metrics.d.ts.map +1 -0
- package/lib/core/driver-metrics.js +36 -0
- package/lib/core/driver-metrics.js.map +1 -0
- package/lib/core/driver.d.ts +64 -0
- package/lib/core/driver.d.ts.map +1 -1
- package/lib/core/driver.js +28 -0
- package/lib/core/driver.js.map +1 -1
- package/lib/core/duration.d.ts +5 -0
- package/lib/core/duration.d.ts.map +1 -0
- package/lib/core/duration.js +49 -0
- package/lib/core/duration.js.map +1 -0
- package/lib/core/environment.d.ts +18 -0
- package/lib/core/environment.d.ts.map +1 -0
- package/lib/core/environment.js +21 -0
- package/lib/core/environment.js.map +1 -0
- package/lib/core/evaluation-clusters.d.ts +17 -0
- package/lib/core/evaluation-clusters.d.ts.map +1 -0
- package/lib/core/evaluation-clusters.js +23 -0
- package/lib/core/evaluation-clusters.js.map +1 -0
- package/lib/core/events.d.ts +34 -0
- package/lib/core/events.d.ts.map +1 -1
- package/lib/core/events.js +11 -2
- package/lib/core/events.js.map +1 -1
- package/lib/core/experiment.d.ts +33 -2
- package/lib/core/experiment.d.ts.map +1 -1
- package/lib/core/experiment.js +40 -19
- package/lib/core/experiment.js.map +1 -1
- package/lib/core/file-tree.d.ts +7 -0
- package/lib/core/file-tree.d.ts.map +1 -0
- package/lib/core/file-tree.js +35 -0
- package/lib/core/file-tree.js.map +1 -0
- package/lib/core/global-id.d.ts +6 -0
- package/lib/core/global-id.d.ts.map +1 -0
- package/lib/core/global-id.js +17 -0
- package/lib/core/global-id.js.map +1 -0
- package/lib/core/harness-catalog.d.ts +35 -0
- package/lib/core/harness-catalog.d.ts.map +1 -0
- package/lib/core/harness-catalog.js +45 -0
- package/lib/core/harness-catalog.js.map +1 -0
- package/lib/core/harness-catalogs/antigravity.d.ts +11 -0
- package/lib/core/harness-catalogs/antigravity.d.ts.map +1 -0
- package/lib/core/harness-catalogs/antigravity.js +23 -0
- package/lib/core/harness-catalogs/antigravity.js.map +1 -0
- package/lib/core/harness-catalogs/claude-code.d.ts +12 -0
- package/lib/core/harness-catalogs/claude-code.d.ts.map +1 -0
- package/lib/core/harness-catalogs/claude-code.js +24 -0
- package/lib/core/harness-catalogs/claude-code.js.map +1 -0
- package/lib/core/harness-catalogs/codex.d.ts +11 -0
- package/lib/core/harness-catalogs/codex.d.ts.map +1 -0
- package/lib/core/harness-catalogs/codex.js +26 -0
- package/lib/core/harness-catalogs/codex.js.map +1 -0
- package/lib/core/harness-catalogs/copilot.d.ts +29 -0
- package/lib/core/harness-catalogs/copilot.d.ts.map +1 -0
- package/lib/core/harness-catalogs/copilot.js +45 -0
- package/lib/core/harness-catalogs/copilot.js.map +1 -0
- package/lib/core/harness-catalogs/cursor.d.ts +2 -0
- package/lib/core/harness-catalogs/cursor.d.ts.map +1 -0
- package/lib/core/harness-catalogs/cursor.js +13 -0
- package/lib/core/harness-catalogs/cursor.js.map +1 -0
- package/lib/core/harness-catalogs/grok-build.d.ts +7 -0
- package/lib/core/harness-catalogs/grok-build.d.ts.map +1 -0
- package/lib/core/harness-catalogs/grok-build.js +18 -0
- package/lib/core/harness-catalogs/grok-build.js.map +1 -0
- package/lib/core/harness-catalogs/index.d.ts +73 -0
- package/lib/core/harness-catalogs/index.d.ts.map +1 -0
- package/lib/core/harness-catalogs/index.js +17 -0
- package/lib/core/harness-catalogs/index.js.map +1 -0
- package/lib/core/harness-matrix.d.ts +154 -0
- package/lib/core/harness-matrix.d.ts.map +1 -0
- package/lib/core/harness-matrix.js +204 -0
- package/lib/core/harness-matrix.js.map +1 -0
- package/lib/core/index.d.ts +12 -0
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +12 -0
- package/lib/core/index.js.map +1 -1
- package/lib/core/lifecycle-fixtures.d.ts.map +1 -1
- package/lib/core/lifecycle-fixtures.js +4 -2
- package/lib/core/lifecycle-fixtures.js.map +1 -1
- package/lib/core/model-cli.d.ts +9 -11
- package/lib/core/model-cli.d.ts.map +1 -1
- package/lib/core/model-cli.js +39 -22
- package/lib/core/model-cli.js.map +1 -1
- package/lib/core/platform-process.d.ts +7 -2
- package/lib/core/platform-process.d.ts.map +1 -1
- package/lib/core/platform-process.js +54 -16
- package/lib/core/platform-process.js.map +1 -1
- package/lib/core/reference-defaults.d.ts +5 -0
- package/lib/core/reference-defaults.d.ts.map +1 -0
- package/lib/core/reference-defaults.js +42 -0
- package/lib/core/reference-defaults.js.map +1 -0
- package/lib/core/rubric.d.ts +1 -0
- package/lib/core/rubric.d.ts.map +1 -1
- package/lib/core/run.d.ts +292 -1
- package/lib/core/run.d.ts.map +1 -1
- package/lib/core/run.js +27 -0
- package/lib/core/run.js.map +1 -1
- package/lib/core/secure-copy.d.ts.map +1 -0
- package/lib/core/secure-copy.js.map +1 -0
- package/lib/core/usage.d.ts +5 -0
- package/lib/core/usage.d.ts.map +1 -1
- package/lib/core/usage.js +3 -0
- package/lib/core/usage.js.map +1 -1
- package/lib/core/wire.d.ts +11 -0
- package/lib/core/wire.d.ts.map +1 -1
- package/lib/drivers/antigravity/artifacts.d.ts +2 -0
- package/lib/drivers/antigravity/artifacts.d.ts.map +1 -0
- package/lib/drivers/antigravity/artifacts.js +33 -0
- package/lib/drivers/antigravity/artifacts.js.map +1 -0
- package/lib/drivers/antigravity/config.d.ts +88 -0
- package/lib/drivers/antigravity/config.d.ts.map +1 -0
- package/lib/drivers/antigravity/config.js +87 -0
- package/lib/drivers/antigravity/config.js.map +1 -0
- package/lib/drivers/antigravity/events.d.ts +4 -0
- package/lib/drivers/antigravity/events.d.ts.map +1 -0
- package/lib/drivers/antigravity/events.js +241 -0
- package/lib/drivers/antigravity/events.js.map +1 -0
- package/lib/drivers/antigravity/index.d.ts +114 -0
- package/lib/drivers/antigravity/index.d.ts.map +1 -0
- package/lib/drivers/antigravity/index.js +113 -0
- package/lib/drivers/antigravity/index.js.map +1 -0
- package/lib/drivers/antigravity/runtime.d.ts +7 -0
- package/lib/drivers/antigravity/runtime.d.ts.map +1 -0
- package/lib/drivers/antigravity/runtime.js +83 -0
- package/lib/drivers/antigravity/runtime.js.map +1 -0
- package/lib/drivers/claude-code/deferred-process.d.ts +17 -0
- package/lib/drivers/claude-code/deferred-process.d.ts.map +1 -0
- package/lib/drivers/claude-code/deferred-process.js +108 -0
- package/lib/drivers/claude-code/deferred-process.js.map +1 -0
- package/lib/drivers/claude-code/index.d.ts +187 -10
- package/lib/drivers/claude-code/index.d.ts.map +1 -1
- package/lib/drivers/claude-code/index.js +197 -252
- package/lib/drivers/claude-code/index.js.map +1 -1
- package/lib/drivers/claude-code/isolation.d.ts +8 -0
- package/lib/drivers/claude-code/isolation.d.ts.map +1 -0
- package/lib/drivers/claude-code/isolation.js +199 -0
- package/lib/drivers/claude-code/isolation.js.map +1 -0
- package/lib/drivers/claude-code/parse-events.d.ts.map +1 -1
- package/lib/drivers/claude-code/parse-events.js +73 -8
- package/lib/drivers/claude-code/parse-events.js.map +1 -1
- package/lib/drivers/codex/app-events.d.ts +9 -2
- package/lib/drivers/codex/app-events.d.ts.map +1 -1
- package/lib/drivers/codex/app-events.js +104 -12
- package/lib/drivers/codex/app-events.js.map +1 -1
- package/lib/drivers/codex/config.d.ts +69 -5
- package/lib/drivers/codex/config.d.ts.map +1 -1
- package/lib/drivers/codex/config.js +48 -8
- package/lib/drivers/codex/config.js.map +1 -1
- package/lib/drivers/codex/exec-events.d.ts +4 -0
- package/lib/drivers/codex/exec-events.d.ts.map +1 -0
- package/lib/drivers/codex/exec-events.js +230 -0
- package/lib/drivers/codex/exec-events.js.map +1 -0
- package/lib/drivers/codex/index.d.ts +142 -4
- package/lib/drivers/codex/index.d.ts.map +1 -1
- package/lib/drivers/codex/index.js +114 -276
- package/lib/drivers/codex/index.js.map +1 -1
- package/lib/drivers/copilot/config.d.ts +84 -0
- package/lib/drivers/copilot/config.d.ts.map +1 -0
- package/lib/drivers/copilot/config.js +57 -0
- package/lib/drivers/copilot/config.js.map +1 -0
- package/lib/drivers/copilot/index.d.ts +107 -0
- package/lib/drivers/copilot/index.d.ts.map +1 -0
- package/lib/drivers/copilot/index.js +268 -0
- package/lib/drivers/copilot/index.js.map +1 -0
- package/lib/drivers/cursor/config.d.ts +28 -0
- package/lib/drivers/cursor/config.d.ts.map +1 -0
- package/lib/drivers/cursor/config.js +28 -0
- package/lib/drivers/cursor/config.js.map +1 -0
- package/lib/drivers/cursor/index.d.ts +44 -0
- package/lib/drivers/cursor/index.d.ts.map +1 -0
- package/lib/drivers/cursor/index.js +286 -0
- package/lib/drivers/cursor/index.js.map +1 -0
- package/lib/drivers/cursor/interaction.d.ts +6 -0
- package/lib/drivers/cursor/interaction.d.ts.map +1 -0
- package/lib/drivers/cursor/interaction.js +55 -0
- package/lib/drivers/cursor/interaction.js.map +1 -0
- package/lib/drivers/grok-build/config.d.ts +68 -0
- package/lib/drivers/grok-build/config.d.ts.map +1 -0
- package/lib/drivers/grok-build/config.js +40 -0
- package/lib/drivers/grok-build/config.js.map +1 -0
- package/lib/drivers/grok-build/index.d.ts +87 -0
- package/lib/drivers/grok-build/index.d.ts.map +1 -0
- package/lib/drivers/grok-build/index.js +293 -0
- package/lib/drivers/grok-build/index.js.map +1 -0
- package/lib/drivers/mcp/index.d.ts +37 -4
- package/lib/drivers/mcp/index.d.ts.map +1 -1
- package/lib/drivers/mcp/index.js +25 -11
- package/lib/drivers/mcp/index.js.map +1 -1
- package/lib/drivers/shared/acp-events.d.ts +15 -0
- package/lib/drivers/shared/acp-events.d.ts.map +1 -0
- package/lib/drivers/shared/acp-events.js +83 -0
- package/lib/drivers/shared/acp-events.js.map +1 -0
- package/lib/drivers/shared/acp-interaction.d.ts +7 -0
- package/lib/drivers/shared/acp-interaction.d.ts.map +1 -0
- package/lib/drivers/shared/acp-interaction.js +20 -0
- package/lib/drivers/shared/acp-interaction.js.map +1 -0
- package/lib/drivers/shared/acp-session.d.ts +4 -0
- package/lib/drivers/shared/acp-session.d.ts.map +1 -0
- package/lib/drivers/shared/acp-session.js +23 -0
- package/lib/drivers/shared/acp-session.js.map +1 -0
- package/lib/drivers/shared/acp-transport.d.ts +40 -0
- package/lib/drivers/shared/acp-transport.d.ts.map +1 -0
- package/lib/drivers/shared/acp-transport.js +152 -0
- package/lib/drivers/shared/acp-transport.js.map +1 -0
- package/lib/drivers/shared/artifacts.d.ts.map +1 -1
- package/lib/drivers/shared/artifacts.js +3 -2
- package/lib/drivers/shared/artifacts.js.map +1 -1
- package/lib/drivers/shared/experiment-behavior.d.ts +13 -0
- package/lib/drivers/shared/experiment-behavior.d.ts.map +1 -0
- package/lib/drivers/shared/experiment-behavior.js +200 -0
- package/lib/drivers/shared/experiment-behavior.js.map +1 -0
- package/lib/drivers/shared/experiment-policy.d.ts +4 -0
- package/lib/drivers/shared/experiment-policy.d.ts.map +1 -0
- package/lib/drivers/shared/experiment-policy.js +144 -0
- package/lib/drivers/shared/experiment-policy.js.map +1 -0
- package/lib/drivers/shared/skills.d.ts +3 -0
- package/lib/drivers/shared/skills.d.ts.map +1 -0
- package/lib/drivers/shared/skills.js +73 -0
- package/lib/drivers/shared/skills.js.map +1 -0
- package/lib/drivers/subprocess/index.d.ts +39 -4
- package/lib/drivers/subprocess/index.d.ts.map +1 -1
- package/lib/drivers/subprocess/index.js +56 -12
- package/lib/drivers/subprocess/index.js.map +1 -1
- package/lib/index.d.ts +24 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +20 -5
- package/lib/index.js.map +1 -1
- package/lib/optimization/reflective.d.ts +3 -1
- package/lib/optimization/reflective.d.ts.map +1 -1
- package/lib/optimization/reflective.js +3 -2
- package/lib/optimization/reflective.js.map +1 -1
- package/lib/orchestrator/annotation-loader.d.ts +6 -2
- package/lib/orchestrator/annotation-loader.d.ts.map +1 -1
- package/lib/orchestrator/annotation-loader.js +8 -0
- package/lib/orchestrator/annotation-loader.js.map +1 -1
- package/lib/orchestrator/annotation-store.d.ts.map +1 -1
- package/lib/orchestrator/annotation-store.js +16 -2
- package/lib/orchestrator/annotation-store.js.map +1 -1
- package/lib/orchestrator/artifact-origin.d.ts +3 -0
- package/lib/orchestrator/artifact-origin.d.ts.map +1 -0
- package/lib/orchestrator/artifact-origin.js +40 -0
- package/lib/orchestrator/artifact-origin.js.map +1 -0
- package/lib/orchestrator/campaign-lifecycle.d.ts +1 -0
- package/lib/orchestrator/campaign-lifecycle.d.ts.map +1 -1
- package/lib/orchestrator/campaign-lifecycle.js +4 -1
- package/lib/orchestrator/campaign-lifecycle.js.map +1 -1
- package/lib/orchestrator/candidates.d.ts.map +1 -1
- package/lib/orchestrator/candidates.js +3 -2
- package/lib/orchestrator/candidates.js.map +1 -1
- package/lib/orchestrator/compare.d.ts +23 -6
- package/lib/orchestrator/compare.d.ts.map +1 -1
- package/lib/orchestrator/compare.js +45 -12
- package/lib/orchestrator/compare.js.map +1 -1
- package/lib/orchestrator/comparison-identity.d.ts.map +1 -1
- package/lib/orchestrator/comparison-identity.js +2 -0
- package/lib/orchestrator/comparison-identity.js.map +1 -1
- package/lib/orchestrator/config.d.ts +180 -1
- package/lib/orchestrator/config.d.ts.map +1 -1
- package/lib/orchestrator/config.js +21 -2
- package/lib/orchestrator/config.js.map +1 -1
- package/lib/orchestrator/discover.d.ts +1 -0
- package/lib/orchestrator/discover.d.ts.map +1 -1
- package/lib/orchestrator/discover.js +7 -1
- package/lib/orchestrator/discover.js.map +1 -1
- package/lib/orchestrator/doctor.d.ts +1 -0
- package/lib/orchestrator/doctor.d.ts.map +1 -1
- package/lib/orchestrator/doctor.js +134 -69
- package/lib/orchestrator/doctor.js.map +1 -1
- package/lib/orchestrator/driver-capabilities.d.ts +4 -0
- package/lib/orchestrator/driver-capabilities.d.ts.map +1 -0
- package/lib/orchestrator/driver-capabilities.js +13 -0
- package/lib/orchestrator/driver-capabilities.js.map +1 -0
- package/lib/orchestrator/driver-identity.d.ts +5 -0
- package/lib/orchestrator/driver-identity.d.ts.map +1 -0
- package/lib/orchestrator/driver-identity.js +51 -0
- package/lib/orchestrator/driver-identity.js.map +1 -0
- package/lib/orchestrator/experiment-context.d.ts +51 -3
- package/lib/orchestrator/experiment-context.d.ts.map +1 -1
- package/lib/orchestrator/experiment-context.js +2 -1
- package/lib/orchestrator/experiment-context.js.map +1 -1
- package/lib/orchestrator/experiment-contracts.d.ts +31 -1
- package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
- package/lib/orchestrator/experiment-corpus.d.ts +2 -1
- package/lib/orchestrator/experiment-corpus.d.ts.map +1 -1
- package/lib/orchestrator/experiment-corpus.js +28 -22
- package/lib/orchestrator/experiment-corpus.js.map +1 -1
- package/lib/orchestrator/experiment-effects.d.ts +33 -0
- package/lib/orchestrator/experiment-effects.d.ts.map +1 -0
- package/lib/orchestrator/experiment-effects.js +46 -0
- package/lib/orchestrator/experiment-effects.js.map +1 -0
- package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
- package/lib/orchestrator/experiment-evaluation.js +70 -5
- package/lib/orchestrator/experiment-evaluation.js.map +1 -1
- package/lib/orchestrator/experiment-identity.d.ts +3 -0
- package/lib/orchestrator/experiment-identity.d.ts.map +1 -1
- package/lib/orchestrator/experiment-identity.js +22 -33
- package/lib/orchestrator/experiment-identity.js.map +1 -1
- package/lib/orchestrator/experiment-loader.d.ts +8 -3
- package/lib/orchestrator/experiment-loader.d.ts.map +1 -1
- package/lib/orchestrator/experiment-preflight.d.ts +3 -0
- package/lib/orchestrator/experiment-preflight.d.ts.map +1 -0
- package/lib/orchestrator/experiment-preflight.js +21 -0
- package/lib/orchestrator/experiment-preflight.js.map +1 -0
- package/lib/orchestrator/experiment-report.d.ts +91 -1
- package/lib/orchestrator/experiment-report.d.ts.map +1 -1
- package/lib/orchestrator/experiment-report.js +9 -1
- package/lib/orchestrator/experiment-report.js.map +1 -1
- package/lib/orchestrator/experiment-runs.d.ts +63 -2
- package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
- package/lib/orchestrator/experiment-runs.js +13 -5
- package/lib/orchestrator/experiment-runs.js.map +1 -1
- package/lib/orchestrator/experiment-runtime-identity.d.ts +0 -16
- package/lib/orchestrator/experiment-runtime-identity.d.ts.map +1 -1
- package/lib/orchestrator/experiment-runtime-identity.js +5 -220
- package/lib/orchestrator/experiment-runtime-identity.js.map +1 -1
- package/lib/orchestrator/experiment-selection.d.ts.map +1 -1
- package/lib/orchestrator/experiment-selection.js +151 -43
- package/lib/orchestrator/experiment-selection.js.map +1 -1
- package/lib/orchestrator/experiment.d.ts +3 -3
- package/lib/orchestrator/experiment.d.ts.map +1 -1
- package/lib/orchestrator/experiment.js +26 -21
- package/lib/orchestrator/experiment.js.map +1 -1
- package/lib/orchestrator/fixture-identity.d.ts +1 -0
- package/lib/orchestrator/fixture-identity.d.ts.map +1 -1
- package/lib/orchestrator/fixture-identity.js +6 -1
- package/lib/orchestrator/fixture-identity.js.map +1 -1
- package/lib/orchestrator/fs-read.d.ts +1 -6
- package/lib/orchestrator/fs-read.d.ts.map +1 -1
- package/lib/orchestrator/fs-read.js +2 -32
- package/lib/orchestrator/fs-read.js.map +1 -1
- package/lib/orchestrator/grader-experiment.d.ts +23 -5
- package/lib/orchestrator/grader-experiment.d.ts.map +1 -1
- package/lib/orchestrator/grader-experiment.js +54 -9
- package/lib/orchestrator/grader-experiment.js.map +1 -1
- package/lib/orchestrator/grading.d.ts +1 -0
- package/lib/orchestrator/grading.d.ts.map +1 -1
- package/lib/orchestrator/grading.js +41 -33
- package/lib/orchestrator/grading.js.map +1 -1
- package/lib/orchestrator/harness-catalog-drift.d.ts +22 -0
- package/lib/orchestrator/harness-catalog-drift.d.ts.map +1 -0
- package/lib/orchestrator/harness-catalog-drift.js +90 -0
- package/lib/orchestrator/harness-catalog-drift.js.map +1 -0
- package/lib/orchestrator/harness-registry.d.ts +4 -0
- package/lib/orchestrator/harness-registry.d.ts.map +1 -0
- package/lib/orchestrator/harness-registry.js +5 -0
- package/lib/orchestrator/harness-registry.js.map +1 -0
- package/lib/orchestrator/index.d.ts +1 -1
- package/lib/orchestrator/index.d.ts.map +1 -1
- package/lib/orchestrator/index.js +1 -1
- package/lib/orchestrator/index.js.map +1 -1
- package/lib/orchestrator/list-runs.d.ts +8 -1
- package/lib/orchestrator/list-runs.d.ts.map +1 -1
- package/lib/orchestrator/list-runs.js +83 -18
- package/lib/orchestrator/list-runs.js.map +1 -1
- package/lib/orchestrator/optimization-lifecycle.d.ts.map +1 -1
- package/lib/orchestrator/optimization-lifecycle.js +3 -1
- package/lib/orchestrator/optimization-lifecycle.js.map +1 -1
- package/lib/orchestrator/orchestrator.d.ts +17 -2
- package/lib/orchestrator/orchestrator.d.ts.map +1 -1
- package/lib/orchestrator/orchestrator.js +55 -177
- package/lib/orchestrator/orchestrator.js.map +1 -1
- package/lib/orchestrator/paired-effects.d.ts +34 -0
- package/lib/orchestrator/paired-effects.d.ts.map +1 -0
- package/lib/orchestrator/paired-effects.js +164 -0
- package/lib/orchestrator/paired-effects.js.map +1 -0
- package/lib/orchestrator/profile.d.ts +4 -0
- package/lib/orchestrator/profile.d.ts.map +1 -0
- package/lib/orchestrator/profile.js +10 -0
- package/lib/orchestrator/profile.js.map +1 -0
- package/lib/orchestrator/provenance.d.ts +5 -1
- package/lib/orchestrator/provenance.d.ts.map +1 -1
- package/lib/orchestrator/provenance.js +16 -3
- package/lib/orchestrator/provenance.js.map +1 -1
- package/lib/orchestrator/regrade.d.ts +4 -2
- package/lib/orchestrator/regrade.d.ts.map +1 -1
- package/lib/orchestrator/rubric-loader.js +1 -1
- package/lib/orchestrator/rubric-loader.js.map +1 -1
- package/lib/orchestrator/run-dir.d.ts +2 -0
- package/lib/orchestrator/run-dir.d.ts.map +1 -1
- package/lib/orchestrator/run-dir.js +1 -1
- package/lib/orchestrator/run-dir.js.map +1 -1
- package/lib/orchestrator/run-execution.d.ts +3 -0
- package/lib/orchestrator/run-execution.d.ts.map +1 -1
- package/lib/orchestrator/run-execution.js +64 -10
- package/lib/orchestrator/run-execution.js.map +1 -1
- package/lib/orchestrator/run-lifecycle.d.ts +1 -0
- package/lib/orchestrator/run-lifecycle.d.ts.map +1 -1
- package/lib/orchestrator/run-lifecycle.js +3 -2
- package/lib/orchestrator/run-lifecycle.js.map +1 -1
- package/lib/orchestrator/run-workspace.d.ts +10 -0
- package/lib/orchestrator/run-workspace.d.ts.map +1 -0
- package/lib/orchestrator/run-workspace.js +58 -0
- package/lib/orchestrator/run-workspace.js.map +1 -0
- package/lib/orchestrator/suite-compare.d.ts +37 -0
- package/lib/orchestrator/suite-compare.d.ts.map +1 -1
- package/lib/orchestrator/suite-compare.js +44 -22
- package/lib/orchestrator/suite-compare.js.map +1 -1
- package/lib/orchestrator/suite-runs.d.ts +6 -1
- package/lib/orchestrator/suite-runs.d.ts.map +1 -1
- package/lib/orchestrator/suite-runs.js +14 -2
- package/lib/orchestrator/suite-runs.js.map +1 -1
- package/lib/orchestrator/suite-summary.d.ts +79 -0
- package/lib/orchestrator/suite-summary.d.ts.map +1 -1
- package/lib/orchestrator/suite-summary.js +67 -14
- package/lib/orchestrator/suite-summary.js.map +1 -1
- package/lib/previewer/artifacts.d.ts +25 -0
- package/lib/previewer/artifacts.d.ts.map +1 -0
- package/lib/previewer/artifacts.js +180 -0
- package/lib/previewer/artifacts.js.map +1 -0
- package/lib/previewer/server.d.ts +111 -0
- package/lib/previewer/server.d.ts.map +1 -0
- package/lib/previewer/server.js +559 -0
- package/lib/previewer/server.js.map +1 -0
- package/package.json +4 -2
- package/skills/lux-answerer/SKILL.md +2 -2
- package/src/answerers/claude-code/index.ts +6 -5
- package/src/answerers/persona/index.ts +75 -34
- package/src/answerers/terminal/index.ts +7 -11
- package/src/assertions/authoring.ts +2 -0
- package/src/assertions/core/command-exits-zero.ts +82 -17
- package/src/assertions/core/event-checks.ts +64 -3
- package/src/assertions/core/index.ts +2 -0
- package/src/assertions/core/resource-checks.ts +38 -5
- package/src/assertions/core/safe-regex.ts +16 -6
- package/src/assertions/rubric/evidence.ts +85 -0
- package/src/assertions/rubric/index.ts +63 -46
- package/src/assertions/rubric/internal.ts +256 -41
- package/src/authoring.ts +346 -2
- package/src/cli/bin.ts +2 -12
- package/src/cli/command-runtime.ts +20 -9
- package/src/cli/doctor.ts +17 -0
- package/src/cli/harness-plan.ts +123 -0
- package/src/cli/init-templates.ts +238 -0
- package/src/cli/init.ts +53 -184
- package/src/cli/output-schemas.ts +109 -0
- package/src/cli/program.ts +697 -730
- package/src/cli/render/format.ts +1 -1
- package/src/cli/render/reporter.ts +36 -8
- package/src/cli/run-options.ts +131 -25
- package/src/cli/view.ts +129 -0
- package/src/container/driver.ts +213 -0
- package/src/container/paths.ts +29 -0
- package/src/container/protocol.ts +48 -0
- package/src/container/resources.ts +165 -0
- package/src/container/worker.ts +107 -0
- package/src/core/action-events.ts +59 -0
- package/src/core/agent-activity.ts +236 -0
- package/src/core/agent-environment.ts +64 -0
- package/src/core/agent-events.ts +17 -0
- package/src/core/annotation.ts +2 -1
- package/src/core/answerer.ts +9 -0
- package/src/core/artifact-evidence.ts +40 -5
- package/src/core/assertion.ts +8 -2
- package/src/core/case-defaults.ts +65 -0
- package/src/core/case.ts +79 -8
- package/src/core/command-verification.ts +74 -0
- package/src/core/driver-execution.ts +84 -0
- package/src/core/driver-metrics.ts +51 -0
- package/src/core/driver.ts +76 -0
- package/src/core/duration.ts +52 -0
- package/src/core/environment.ts +22 -0
- package/src/core/evaluation-clusters.ts +35 -0
- package/src/core/events.ts +13 -2
- package/src/core/experiment.ts +71 -25
- package/src/core/file-tree.ts +35 -0
- package/src/core/global-id.ts +26 -0
- package/src/core/harness-catalog.ts +100 -0
- package/src/core/harness-catalogs/antigravity.ts +24 -0
- package/src/core/harness-catalogs/claude-code.ts +25 -0
- package/src/core/harness-catalogs/codex.ts +27 -0
- package/src/core/harness-catalogs/copilot.ts +46 -0
- package/src/core/harness-catalogs/cursor.ts +13 -0
- package/src/core/harness-catalogs/grok-build.ts +19 -0
- package/src/core/harness-catalogs/index.ts +31 -0
- package/src/core/harness-matrix.ts +316 -0
- package/src/core/index.ts +12 -0
- package/src/core/lifecycle-fixtures.ts +4 -2
- package/src/core/model-cli.ts +60 -26
- package/src/core/platform-process.ts +65 -16
- package/src/core/reference-defaults.ts +47 -0
- package/src/core/run.ts +31 -0
- package/src/core/usage.ts +8 -0
- package/src/drivers/antigravity/README.md +171 -0
- package/src/drivers/antigravity/artifacts.ts +37 -0
- package/src/drivers/antigravity/config.ts +92 -0
- package/src/drivers/antigravity/events.ts +290 -0
- package/src/drivers/antigravity/index.ts +132 -0
- package/src/drivers/antigravity/runtime.ts +94 -0
- package/src/drivers/claude-code/deferred-process.ts +118 -0
- package/src/drivers/claude-code/index.ts +227 -281
- package/src/drivers/claude-code/isolation.ts +228 -0
- package/src/drivers/claude-code/parse-events.ts +98 -12
- package/src/drivers/codex/app-events.ts +126 -16
- package/src/drivers/codex/config.ts +59 -8
- package/src/drivers/codex/exec-events.ts +258 -0
- package/src/drivers/codex/index.ts +146 -312
- package/src/drivers/copilot/README.md +60 -0
- package/src/drivers/copilot/config.ts +61 -0
- package/src/drivers/copilot/index.ts +310 -0
- package/src/drivers/cursor/README.md +66 -0
- package/src/drivers/cursor/config.ts +31 -0
- package/src/drivers/cursor/index.ts +326 -0
- package/src/drivers/cursor/interaction.ts +74 -0
- package/src/drivers/grok-build/README.md +112 -0
- package/src/drivers/grok-build/config.ts +43 -0
- package/src/drivers/grok-build/index.ts +331 -0
- package/src/drivers/mcp/index.ts +25 -11
- package/src/drivers/shared/acp-events.ts +94 -0
- package/src/drivers/shared/acp-interaction.ts +27 -0
- package/src/drivers/shared/acp-session.ts +40 -0
- package/src/drivers/shared/acp-transport.ts +187 -0
- package/src/drivers/shared/artifacts.ts +6 -2
- package/src/drivers/shared/experiment-behavior.ts +217 -0
- package/src/drivers/shared/experiment-policy.ts +196 -0
- package/src/drivers/shared/skills.ts +74 -0
- package/src/drivers/subprocess/index.ts +55 -12
- package/src/index.ts +117 -6
- package/src/optimization/reflective.ts +3 -2
- package/src/orchestrator/annotation-loader.ts +10 -0
- package/src/orchestrator/annotation-store.ts +24 -3
- package/src/orchestrator/artifact-origin.ts +50 -0
- package/src/orchestrator/campaign-lifecycle.ts +5 -1
- package/src/orchestrator/candidates.ts +3 -2
- package/src/orchestrator/compare.ts +62 -13
- package/src/orchestrator/comparison-identity.ts +2 -0
- package/src/orchestrator/config.ts +23 -1
- package/src/orchestrator/discover.ts +8 -1
- package/src/orchestrator/doctor.ts +211 -65
- package/src/orchestrator/driver-capabilities.ts +21 -0
- package/src/orchestrator/driver-identity.ts +69 -0
- package/src/orchestrator/experiment-context.ts +5 -3
- package/src/orchestrator/experiment-corpus.ts +58 -37
- package/src/orchestrator/experiment-effects.ts +63 -0
- package/src/orchestrator/experiment-evaluation.ts +88 -10
- package/src/orchestrator/experiment-identity.ts +57 -48
- package/src/orchestrator/experiment-preflight.ts +27 -0
- package/src/orchestrator/experiment-report.ts +21 -1
- package/src/orchestrator/experiment-runs.ts +11 -4
- package/src/orchestrator/experiment-runtime-identity.ts +5 -243
- package/src/orchestrator/experiment-selection.ts +178 -18
- package/src/orchestrator/experiment.ts +29 -29
- package/src/orchestrator/fixture-identity.ts +9 -1
- package/src/orchestrator/fs-read.ts +2 -32
- package/src/orchestrator/grader-experiment.ts +74 -13
- package/src/orchestrator/grading.ts +60 -31
- package/src/orchestrator/harness-catalog-drift.ts +132 -0
- package/src/orchestrator/harness-registry.ts +12 -0
- package/src/orchestrator/index.ts +1 -0
- package/src/orchestrator/list-runs.ts +102 -18
- package/src/orchestrator/optimization-lifecycle.ts +4 -1
- package/src/orchestrator/orchestrator.ts +105 -224
- package/src/orchestrator/paired-effects.ts +214 -0
- package/src/orchestrator/profile.ts +24 -0
- package/src/orchestrator/provenance.ts +23 -3
- package/src/orchestrator/rubric-loader.ts +1 -1
- package/src/orchestrator/run-dir.ts +8 -1
- package/src/orchestrator/run-execution.ts +75 -10
- package/src/orchestrator/run-lifecycle.ts +4 -2
- package/src/orchestrator/run-workspace.ts +62 -0
- package/src/orchestrator/suite-compare.ts +47 -23
- package/src/orchestrator/suite-runs.ts +13 -2
- package/src/orchestrator/suite-summary.ts +129 -15
- package/src/previewer/artifacts.ts +221 -0
- package/src/previewer/server.ts +789 -0
- package/viewer/app.css +2111 -0
- package/viewer/app.js +627 -0
- package/viewer/artifact-view.js +48 -0
- package/viewer/charts.js +98 -0
- package/viewer/detail.js +1266 -0
- package/viewer/format.js +129 -0
- package/viewer/index.html +151 -0
- package/lib/cli/skills.d.ts +0 -38
- package/lib/cli/skills.d.ts.map +0 -1
- package/lib/cli/skills.js +0 -84
- package/lib/cli/skills.js.map +0 -1
- package/lib/drivers/shared/secure-copy.d.ts.map +0 -1
- package/lib/drivers/shared/secure-copy.js.map +0 -1
- package/skills/lux/SKILL.md +0 -89
- package/skills/lux/references/cli.md +0 -125
- package/skills/lux/references/eval-authoring.md +0 -257
- package/src/cli/skills.ts +0 -129
- /package/lib/{drivers/shared → core}/secure-copy.d.ts +0 -0
- /package/lib/{drivers/shared → core}/secure-copy.js +0 -0
- /package/src/{drivers/shared → core}/secure-copy.ts +0 -0
package/src/core/driver.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import type { DriverExecution } from "./driver-execution.js";
|
|
2
3
|
import type { EventHandler } from "./emitter.js";
|
|
3
4
|
import type { Answer, Done, ErrorEvent, Interrupt, Progress, ReadyState } from "./events.js";
|
|
5
|
+
import type { ReasoningEffort } from "./harness-catalog.js";
|
|
4
6
|
import type { FixtureValueBinding } from "./lifecycle-hooks.js";
|
|
5
7
|
|
|
6
8
|
export const ArtifactSchema = z.object({
|
|
@@ -11,6 +13,8 @@ export const ArtifactSchema = z.object({
|
|
|
11
13
|
* Consumers resolve `path` against this before falling back to the default.
|
|
12
14
|
*/
|
|
13
15
|
root: z.exactOptional(z.string()),
|
|
16
|
+
/** Assigned by Lux against fixture bytes frozen before the subject starts. */
|
|
17
|
+
origin: z.exactOptional(z.enum(["generated", "modified", "fixture"])),
|
|
14
18
|
contentType: z.exactOptional(z.string()),
|
|
15
19
|
size: z.exactOptional(z.number()),
|
|
16
20
|
meta: z.exactOptional(z.record(z.string(), z.unknown())),
|
|
@@ -27,6 +31,8 @@ export type ResolvedFixtures = z.infer<typeof ResolvedFixturesSchema>;
|
|
|
27
31
|
export type StartContext = {
|
|
28
32
|
/** Stable selected case id, available to drivers that multiplex scenarios. */
|
|
29
33
|
caseId?: string;
|
|
34
|
+
/** Private home owned by an outer execution boundary; never the caller’s home. */
|
|
35
|
+
isolatedHome?: string;
|
|
30
36
|
prompt: string;
|
|
31
37
|
fixtures?: ResolvedFixtures | undefined;
|
|
32
38
|
/** Authored fixture values selected for this case. */
|
|
@@ -68,11 +74,81 @@ export interface AgentDriver {
|
|
|
68
74
|
* responsible for stopping background writers before this promise resolves.
|
|
69
75
|
*/
|
|
70
76
|
collect(): Promise<Artifact[]>;
|
|
77
|
+
/** Optional quiesced full execution tree for private command verification, until close. */
|
|
78
|
+
verificationWorkspace?(): Promise<string | undefined>;
|
|
71
79
|
close(): Promise<void>;
|
|
72
80
|
}
|
|
73
81
|
|
|
82
|
+
export const DriverCapabilitySchema = z.enum([
|
|
83
|
+
"interactive",
|
|
84
|
+
"tool-calls",
|
|
85
|
+
"tool-results",
|
|
86
|
+
"artifacts",
|
|
87
|
+
"subagents",
|
|
88
|
+
"usage",
|
|
89
|
+
"cost",
|
|
90
|
+
"isolation",
|
|
91
|
+
]);
|
|
92
|
+
export type DriverCapability = z.infer<typeof DriverCapabilitySchema>;
|
|
93
|
+
|
|
94
|
+
export type DriverRuntime = {
|
|
95
|
+
commands: string[];
|
|
96
|
+
/** Missing keys mean unknown; false means the adapter cannot provide the capability. */
|
|
97
|
+
capabilities: Partial<Record<DriverCapability, boolean>>;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export type DriverExperiment<Cfg> = {
|
|
101
|
+
version: string;
|
|
102
|
+
/** Bind a configuration to the experiment environment; Lux validates the returned config. */
|
|
103
|
+
prepare(config: Cfg): unknown;
|
|
104
|
+
/** Fingerprint behavior outside authored cases/configuration and the reported executables. */
|
|
105
|
+
identity(config: Cfg, context: { rootDir: string }): unknown | Promise<unknown>;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/** Model and reasoning effort chosen by a harness matrix permutation. */
|
|
109
|
+
export type HarnessSelection = {
|
|
110
|
+
model?: string | undefined;
|
|
111
|
+
effort?: ReasoningEffort | undefined;
|
|
112
|
+
};
|
|
113
|
+
|
|
74
114
|
export type DriverPlugin<Cfg = unknown> = {
|
|
75
115
|
name: string;
|
|
76
116
|
configSchema?: z.ZodTypeAny;
|
|
77
117
|
create: (config: Cfg) => AgentDriver | Promise<AgentDriver>;
|
|
118
|
+
runtime?: (config: Cfg) => DriverRuntime;
|
|
119
|
+
/** Ordinary runs remain supported when controlled experiments are not declared. */
|
|
120
|
+
experiment?: DriverExperiment<Cfg>;
|
|
121
|
+
/**
|
|
122
|
+
* Apply a matrix selection to raw (unvalidated) configuration. Drivers
|
|
123
|
+
* without a model concept leave this undefined and reject selection.
|
|
124
|
+
*/
|
|
125
|
+
selectHarness?: (config: unknown, selection: HarnessSelection) => unknown;
|
|
78
126
|
};
|
|
127
|
+
|
|
128
|
+
/** Selection for drivers whose configuration uses `model` and `reasoningEffort`. */
|
|
129
|
+
export const selectModelAndReasoningEffort = (
|
|
130
|
+
config: unknown,
|
|
131
|
+
selection: HarnessSelection,
|
|
132
|
+
): unknown => ({
|
|
133
|
+
...(config && typeof config === "object" && !Array.isArray(config)
|
|
134
|
+
? (config as Record<string, unknown>)
|
|
135
|
+
: {}),
|
|
136
|
+
...(selection.model !== undefined ? { model: selection.model } : {}),
|
|
137
|
+
...(selection.effort !== undefined || selection.model !== undefined
|
|
138
|
+
? { reasoningEffort: selection.effort }
|
|
139
|
+
: {}),
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
export const defineDriver = <S extends z.ZodType>(
|
|
143
|
+
definition: Omit<DriverPlugin<z.output<S>>, "configSchema"> & { configSchema: S },
|
|
144
|
+
): Omit<DriverPlugin<z.output<S>>, "configSchema"> & { configSchema: S } => definition;
|
|
145
|
+
|
|
146
|
+
export const driverRef = <S extends z.ZodType>(
|
|
147
|
+
plugin: { name: string; configSchema: S },
|
|
148
|
+
config: z.input<S>,
|
|
149
|
+
execution?: DriverExecution,
|
|
150
|
+
): { name: string; config: z.input<S>; execution?: DriverExecution } => ({
|
|
151
|
+
name: plugin.name,
|
|
152
|
+
config,
|
|
153
|
+
...(execution ? { execution } : {}),
|
|
154
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
const UNITS: Record<string, number> = {
|
|
4
|
+
ms: 1,
|
|
5
|
+
millisecond: 1,
|
|
6
|
+
milliseconds: 1,
|
|
7
|
+
s: 1000,
|
|
8
|
+
second: 1000,
|
|
9
|
+
seconds: 1000,
|
|
10
|
+
m: 60_000,
|
|
11
|
+
minute: 60_000,
|
|
12
|
+
minutes: 60_000,
|
|
13
|
+
h: 3_600_000,
|
|
14
|
+
hour: 3_600_000,
|
|
15
|
+
hours: 3_600_000,
|
|
16
|
+
d: 86_400_000,
|
|
17
|
+
day: 86_400_000,
|
|
18
|
+
days: 86_400_000,
|
|
19
|
+
};
|
|
20
|
+
const MAX_TIMER_MS = 2_147_483_647;
|
|
21
|
+
const INVALID_DURATION =
|
|
22
|
+
'Expected a positive duration such as "20 minutes", "1.5 hours", or "500 ms", up to 2147483647 milliseconds';
|
|
23
|
+
|
|
24
|
+
/** Explicit units prevent ambiguous numeric configuration and Node timer overflow. */
|
|
25
|
+
export const durationMs = (value: string): number => {
|
|
26
|
+
if (value.length > 80) throw new Error(INVALID_DURATION);
|
|
27
|
+
const match =
|
|
28
|
+
/^(\d+(?:\.\d+)?)\s*(ms|milliseconds?|s|seconds?|m|minutes?|h|hours?|d|days?)$/i.exec(
|
|
29
|
+
value.trim(),
|
|
30
|
+
);
|
|
31
|
+
const amount = match?.[1];
|
|
32
|
+
const multiplier = match?.[2] ? UNITS[match[2].toLowerCase()] : undefined;
|
|
33
|
+
if (!amount || !multiplier) throw new Error(INVALID_DURATION);
|
|
34
|
+
const [whole, fraction = ""] = amount.split(".");
|
|
35
|
+
const scale = 10n ** BigInt(fraction.length);
|
|
36
|
+
const numerator = BigInt(`${whole}${fraction}`) * BigInt(multiplier);
|
|
37
|
+
const milliseconds = numerator / scale;
|
|
38
|
+
if (numerator % scale !== 0n || milliseconds <= 0n || milliseconds > BigInt(MAX_TIMER_MS)) {
|
|
39
|
+
throw new Error(INVALID_DURATION);
|
|
40
|
+
}
|
|
41
|
+
return Number(milliseconds);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Keep strings in validated configs: schema validation may run again during
|
|
45
|
+
// experiment preparation or replay. Conversion belongs at the timer boundary.
|
|
46
|
+
export const DurationSchema = z.string().superRefine((value, ctx) => {
|
|
47
|
+
try {
|
|
48
|
+
durationMs(value);
|
|
49
|
+
} catch {
|
|
50
|
+
ctx.addIssue({ code: "custom", message: INVALID_DURATION });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
/** Author-declared execution conditions. Lux records these without enforcing or verifying them. */
|
|
4
|
+
export const EnvironmentDeclarationSchema = z
|
|
5
|
+
.object({
|
|
6
|
+
imageDigest: z
|
|
7
|
+
.string()
|
|
8
|
+
.regex(/^(?:[^@\s]+@)?sha256:[a-f0-9]{64}$/)
|
|
9
|
+
.optional(),
|
|
10
|
+
toolchains: z.record(z.string().min(1), z.string().min(1)).optional(),
|
|
11
|
+
network: z.enum(["disabled", "restricted", "unrestricted"]).optional(),
|
|
12
|
+
resources: z
|
|
13
|
+
.object({
|
|
14
|
+
cpuCount: z.number().positive().optional(),
|
|
15
|
+
memoryBytes: z.number().int().positive().optional(),
|
|
16
|
+
diskBytes: z.number().int().positive().optional(),
|
|
17
|
+
})
|
|
18
|
+
.strict()
|
|
19
|
+
.optional(),
|
|
20
|
+
})
|
|
21
|
+
.strict();
|
|
22
|
+
export type EnvironmentDeclaration = z.infer<typeof EnvironmentDeclarationSchema>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
export const EvaluationMetadataSchema = z
|
|
4
|
+
.object({
|
|
5
|
+
/** Related perturbations share one independent statistical unit. */
|
|
6
|
+
cluster: z.string().trim().min(1).optional(),
|
|
7
|
+
})
|
|
8
|
+
.catchall(z.unknown());
|
|
9
|
+
|
|
10
|
+
export const clusterKey = (id: string, cluster: string | undefined): string =>
|
|
11
|
+
JSON.stringify(cluster === undefined ? ["case", id] : ["cluster", cluster]);
|
|
12
|
+
|
|
13
|
+
export const independentClusterCount = (
|
|
14
|
+
items: readonly { id: string; cluster?: string | undefined }[],
|
|
15
|
+
): number => new Set(items.map((item) => clusterKey(item.id, item.cluster))).size;
|
|
16
|
+
|
|
17
|
+
export const assertDisjointClusters = (
|
|
18
|
+
splits: readonly {
|
|
19
|
+
name: string;
|
|
20
|
+
items: readonly { id: string; cluster?: string | undefined }[];
|
|
21
|
+
}[],
|
|
22
|
+
): void => {
|
|
23
|
+
const owners = new Map<string, string>();
|
|
24
|
+
for (const split of splits) {
|
|
25
|
+
for (const item of split.items) {
|
|
26
|
+
if (item.cluster === undefined) continue;
|
|
27
|
+
const owner = owners.get(item.cluster);
|
|
28
|
+
if (owner !== undefined && owner !== split.name)
|
|
29
|
+
throw new Error(
|
|
30
|
+
`evaluation cluster '${item.cluster}' appears in both ${owner} and ${split.name} splits`,
|
|
31
|
+
);
|
|
32
|
+
owners.set(item.cluster, split.name);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
package/src/core/events.ts
CHANGED
|
@@ -57,11 +57,22 @@ export const AnswerSchema = z.discriminatedUnion("kind", [
|
|
|
57
57
|
]);
|
|
58
58
|
export type Answer = z.infer<typeof AnswerSchema>;
|
|
59
59
|
|
|
60
|
+
export const AgentAttributionSchema = z.object({
|
|
61
|
+
id: z.string().min(1),
|
|
62
|
+
role: z.enum(["main", "subagent"]),
|
|
63
|
+
parentId: z.exactOptional(z.string().min(1)),
|
|
64
|
+
spawnToolUseId: z.exactOptional(z.string().min(1)),
|
|
65
|
+
name: z.exactOptional(z.string().min(1)),
|
|
66
|
+
model: z.exactOptional(z.string().min(1)),
|
|
67
|
+
});
|
|
68
|
+
export type AgentAttribution = z.infer<typeof AgentAttributionSchema>;
|
|
69
|
+
|
|
60
70
|
export const ProgressSchema = z.object({
|
|
61
71
|
id: z.string(),
|
|
62
72
|
kind: z.string(),
|
|
63
73
|
payload: z.unknown(),
|
|
64
74
|
ts: z.number(),
|
|
75
|
+
agent: z.exactOptional(AgentAttributionSchema),
|
|
65
76
|
});
|
|
66
77
|
export type Progress = z.infer<typeof ProgressSchema>;
|
|
67
78
|
|
|
@@ -69,8 +80,8 @@ export const DoneSchema = z.object({
|
|
|
69
80
|
exitReason: z.literal("done"),
|
|
70
81
|
/**
|
|
71
82
|
* Driver-defined summary. The orchestrator recognizes `usage`, `cost`,
|
|
72
|
-
* `modelCalls`, and `
|
|
73
|
-
* for domain-specific
|
|
83
|
+
* `modelCalls`, `unpricedModelCalls`, and scalar `metrics` when present while
|
|
84
|
+
* preserving room for other domain-specific evidence.
|
|
74
85
|
*/
|
|
75
86
|
summary: z.unknown().optional(),
|
|
76
87
|
});
|
package/src/core/experiment.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { DriverMetricDescriptorSchema } from "./driver-metrics.js";
|
|
3
|
+
import { DurationSchema } from "./duration.js";
|
|
2
4
|
import { ConfidenceConfigSchema } from "./statistics.js";
|
|
3
5
|
import { TokenUsageSchema } from "./usage.js";
|
|
4
6
|
import { formatZodIssues } from "./zod.js";
|
|
@@ -45,7 +47,7 @@ export const FileSetSubjectSchema = z
|
|
|
45
47
|
* External paths and URLs are rejected by experiment preflight.
|
|
46
48
|
*/
|
|
47
49
|
args: z.array(z.string()).default([]),
|
|
48
|
-
|
|
50
|
+
timeout: DurationSchema.default("2 minutes"),
|
|
49
51
|
/**
|
|
50
52
|
* Validation launches a host process against model-generated source.
|
|
51
53
|
* Authors must explicitly acknowledge that trust boundary. Commands
|
|
@@ -83,6 +85,8 @@ export type ExperimentVariant = z.output<typeof ExperimentVariantSchema>;
|
|
|
83
85
|
export const ExperimentConstraintSchema = z
|
|
84
86
|
.object({
|
|
85
87
|
metric: z.string().min(1),
|
|
88
|
+
/** Bounds apply to paired candidate-minus-baseline case means. */
|
|
89
|
+
relativeTo: z.exactOptional(z.literal("baseline")),
|
|
86
90
|
min: z.number().optional(),
|
|
87
91
|
max: z.number().optional(),
|
|
88
92
|
profile: z.string().optional(),
|
|
@@ -150,6 +154,52 @@ const DEFAULT_EXPERIMENT_BUDGET: ExperimentBudget = {
|
|
|
150
154
|
maxWallTimeMs: 3_600_000,
|
|
151
155
|
};
|
|
152
156
|
|
|
157
|
+
const validateConstraintConfidence = (
|
|
158
|
+
constraint: ExperimentConstraint,
|
|
159
|
+
index: number,
|
|
160
|
+
boundedMetrics: Set<string>,
|
|
161
|
+
ctx: z.RefinementCtx,
|
|
162
|
+
): void => {
|
|
163
|
+
const issue = (message: string): void =>
|
|
164
|
+
ctx.addIssue({ code: "custom", path: ["objectives", "constraints", index], message });
|
|
165
|
+
if (constraint.relativeTo && constraint.confidence?.method === "wilson") {
|
|
166
|
+
issue(
|
|
167
|
+
"paired differences are not Bernoulli observations; use Hoeffding or percentile-bootstrap confidence",
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
if (
|
|
171
|
+
constraint.relativeTo &&
|
|
172
|
+
["subject.bytes", "quality.caseRegressions"].includes(constraint.metric)
|
|
173
|
+
) {
|
|
174
|
+
issue("relative constraints require a metric with per-case observations");
|
|
175
|
+
}
|
|
176
|
+
if (constraint.metric === "score" && constraint.confidence?.method === "wilson") {
|
|
177
|
+
issue(
|
|
178
|
+
"continuous scores are not Bernoulli observations; use Hoeffding or percentile-bootstrap confidence",
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
const bounded = boundedMetrics.has(constraint.metric);
|
|
182
|
+
if (
|
|
183
|
+
(constraint.confidence?.method === "hoeffding" || constraint.confidence?.method === "wilson") &&
|
|
184
|
+
!bounded
|
|
185
|
+
) {
|
|
186
|
+
issue(
|
|
187
|
+
`metric '${constraint.metric}' has no declared [0,1] support; use percentile-bootstrap confidence`,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
const minimum = constraint.relativeTo ? -1 : 0;
|
|
191
|
+
if (
|
|
192
|
+
bounded &&
|
|
193
|
+
[constraint.min, constraint.max].some(
|
|
194
|
+
(bound) => bound !== undefined && (bound < minimum || bound > 1),
|
|
195
|
+
)
|
|
196
|
+
) {
|
|
197
|
+
issue(
|
|
198
|
+
`metric '${constraint.metric}' has support [${minimum},1]; constraint bounds must stay in that interval`,
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
|
|
153
203
|
export const ExperimentCampaignSchema = z
|
|
154
204
|
.object({
|
|
155
205
|
id: z.string().min(1),
|
|
@@ -214,9 +264,11 @@ export const ExperimentCampaignSchema = z
|
|
|
214
264
|
"grader.macroFalseNegativeRate",
|
|
215
265
|
"grader.coverage",
|
|
216
266
|
"grader.abstentionRate",
|
|
267
|
+
"grader.insufficientEvidenceRate",
|
|
268
|
+
"grader.operationalErrorRate",
|
|
217
269
|
"grader.scoreMae",
|
|
218
270
|
]);
|
|
219
|
-
const unitIntervalMetrics = graderConfidenceMetrics;
|
|
271
|
+
const unitIntervalMetrics = new Set([...graderConfidenceMetrics, "score"]);
|
|
220
272
|
if (campaign.optimizer && !campaign.splits.train) {
|
|
221
273
|
ctx.addIssue({
|
|
222
274
|
code: "custom",
|
|
@@ -288,29 +340,7 @@ export const ExperimentCampaignSchema = z
|
|
|
288
340
|
profiles.add(profile);
|
|
289
341
|
}
|
|
290
342
|
for (const [index, constraint] of campaign.objectives.constraints.entries()) {
|
|
291
|
-
|
|
292
|
-
(constraint.confidence?.method === "hoeffding" ||
|
|
293
|
-
constraint.confidence?.method === "wilson") &&
|
|
294
|
-
!unitIntervalMetrics.has(constraint.metric)
|
|
295
|
-
) {
|
|
296
|
-
ctx.addIssue({
|
|
297
|
-
code: "custom",
|
|
298
|
-
path: ["objectives", "constraints", index, "confidence", "method"],
|
|
299
|
-
message: `metric '${constraint.metric}' has no declared [0,1] support; use percentile-bootstrap confidence`,
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
if (
|
|
303
|
-
unitIntervalMetrics.has(constraint.metric) &&
|
|
304
|
-
[constraint.min, constraint.max].some(
|
|
305
|
-
(bound) => bound !== undefined && (bound < 0 || bound > 1),
|
|
306
|
-
)
|
|
307
|
-
) {
|
|
308
|
-
ctx.addIssue({
|
|
309
|
-
code: "custom",
|
|
310
|
-
path: ["objectives", "constraints", index],
|
|
311
|
-
message: `metric '${constraint.metric}' has support [0,1]; constraint bounds must stay in that interval`,
|
|
312
|
-
});
|
|
313
|
-
}
|
|
343
|
+
validateConstraintConfidence(constraint, index, unitIntervalMetrics, ctx);
|
|
314
344
|
if (constraint.profile && !profiles.has(constraint.profile)) {
|
|
315
345
|
ctx.addIssue({
|
|
316
346
|
code: "custom",
|
|
@@ -415,6 +445,7 @@ export const CandidateEvaluationSchema = z.object({
|
|
|
415
445
|
passRate: z.number().min(0).max(1),
|
|
416
446
|
casePassRates: z.record(z.string(), z.number().min(0).max(1)),
|
|
417
447
|
metrics: z.record(z.string(), z.number()),
|
|
448
|
+
metricDefinitions: z.exactOptional(z.record(z.string(), DriverMetricDescriptorSchema)),
|
|
418
449
|
metricCalls: z.exactOptional(z.number().int().nonnegative()),
|
|
419
450
|
judgeCalls: z.exactOptional(z.number().int().nonnegative()),
|
|
420
451
|
unpricedModelCalls: z.exactOptional(z.number().int().nonnegative()),
|
|
@@ -422,6 +453,21 @@ export const CandidateEvaluationSchema = z.object({
|
|
|
422
453
|
costUsd: z.exactOptional(z.number().nonnegative()),
|
|
423
454
|
/** Raw observations used by confidence-aware constraints. */
|
|
424
455
|
samples: z.exactOptional(z.record(z.string(), z.array(z.number()))),
|
|
456
|
+
/** Independent cases with repetition coverage retained for paired comparisons. */
|
|
457
|
+
caseSamples: z.exactOptional(
|
|
458
|
+
z.record(
|
|
459
|
+
z.string(),
|
|
460
|
+
z.object({
|
|
461
|
+
identityHash: z.string().nullable(),
|
|
462
|
+
scoreBasis: z.exactOptional(z.string().nullable()),
|
|
463
|
+
clusterId: z.exactOptional(z.string().min(1)),
|
|
464
|
+
metrics: z.record(
|
|
465
|
+
z.string(),
|
|
466
|
+
z.object({ mean: z.number().finite(), n: z.number().int().positive() }),
|
|
467
|
+
),
|
|
468
|
+
}),
|
|
469
|
+
),
|
|
470
|
+
),
|
|
425
471
|
failedCases: z.array(
|
|
426
472
|
z.object({
|
|
427
473
|
caseId: z.string(),
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readdir } from "node:fs/promises";
|
|
3
|
+
import { join, relative, resolve } from "node:path";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Walk authored trees without silently following or omitting a symlink that
|
|
7
|
+
* can change outside the experiment identity. Exact ignored paths support
|
|
8
|
+
* generated state directories whose names are project-configurable.
|
|
9
|
+
*/
|
|
10
|
+
export const walkAuthoredFiles = async (
|
|
11
|
+
root: string,
|
|
12
|
+
ignoredDirectoryNames: ReadonlySet<string> = new Set(),
|
|
13
|
+
ignoredPaths: ReadonlySet<string> = new Set(),
|
|
14
|
+
): Promise<string[]> => {
|
|
15
|
+
if (!existsSync(root)) return [];
|
|
16
|
+
const out: string[] = [];
|
|
17
|
+
const stack = [root];
|
|
18
|
+
while (stack.length > 0) {
|
|
19
|
+
const dir = stack.pop();
|
|
20
|
+
if (!dir) continue;
|
|
21
|
+
for (const entry of await readdir(dir, { withFileTypes: true })) {
|
|
22
|
+
const full = join(dir, entry.name);
|
|
23
|
+
if (ignoredPaths.has(resolve(full))) continue;
|
|
24
|
+
if (entry.isDirectory() && ignoredDirectoryNames.has(entry.name)) continue;
|
|
25
|
+
if (entry.isSymbolicLink()) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`authored evaluation trees cannot contain symlinks: ${relative(root, full)}`,
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
if (entry.isDirectory()) stack.push(full);
|
|
31
|
+
else if (entry.isFile()) out.push(relative(root, full));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return out.sort();
|
|
35
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
export interface GlobalIdParts {
|
|
4
|
+
type: string;
|
|
5
|
+
id: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const UuidSchema = z.uuid();
|
|
9
|
+
|
|
10
|
+
export const tryParseGlobalId = (globalId: string): GlobalIdParts | null => {
|
|
11
|
+
const decoded = Buffer.from(globalId, "base64").toString("utf8");
|
|
12
|
+
const parts = decoded.split(":");
|
|
13
|
+
const type = parts[0];
|
|
14
|
+
const id = parts[1];
|
|
15
|
+
if (
|
|
16
|
+
parts.length !== 2 ||
|
|
17
|
+
!type ||
|
|
18
|
+
!id ||
|
|
19
|
+
!UuidSchema.safeParse(id).success ||
|
|
20
|
+
Buffer.from(decoded, "utf8").toString("base64") !== globalId
|
|
21
|
+
) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return { type, id };
|
|
26
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
export const HARNESS_EFFORTS = [
|
|
4
|
+
"none",
|
|
5
|
+
"minimal",
|
|
6
|
+
"low",
|
|
7
|
+
"medium",
|
|
8
|
+
"high",
|
|
9
|
+
"xhigh",
|
|
10
|
+
"max",
|
|
11
|
+
"ultra",
|
|
12
|
+
] as const;
|
|
13
|
+
export const ReasoningEffortSchema = z.enum(HARNESS_EFFORTS);
|
|
14
|
+
export type ReasoningEffort = z.infer<typeof ReasoningEffortSchema>;
|
|
15
|
+
|
|
16
|
+
export type CatalogModels = Readonly<Record<string, readonly ReasoningEffort[]>>;
|
|
17
|
+
|
|
18
|
+
export type HarnessCatalog<
|
|
19
|
+
D extends string = string,
|
|
20
|
+
E extends readonly ReasoningEffort[] = readonly ReasoningEffort[],
|
|
21
|
+
M extends CatalogModels | undefined = CatalogModels | undefined,
|
|
22
|
+
> = {
|
|
23
|
+
readonly driver: D;
|
|
24
|
+
readonly verified: string;
|
|
25
|
+
readonly sources: readonly string[];
|
|
26
|
+
readonly efforts: E;
|
|
27
|
+
readonly models: M;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export type ClosedHarnessCatalog = HarnessCatalog<
|
|
31
|
+
string,
|
|
32
|
+
readonly ReasoningEffort[],
|
|
33
|
+
CatalogModels
|
|
34
|
+
>;
|
|
35
|
+
|
|
36
|
+
export const defineHarnessCatalog = <
|
|
37
|
+
const D extends string,
|
|
38
|
+
const E extends readonly ReasoningEffort[],
|
|
39
|
+
const M extends CatalogModels | undefined,
|
|
40
|
+
>(
|
|
41
|
+
catalog: HarnessCatalog<D, E, M>,
|
|
42
|
+
): HarnessCatalog<D, E, M> => catalog;
|
|
43
|
+
|
|
44
|
+
export const isClosedCatalog = (catalog: HarnessCatalog): catalog is ClosedHarnessCatalog =>
|
|
45
|
+
catalog.models !== undefined;
|
|
46
|
+
|
|
47
|
+
export const catalogModelIds = (catalog: HarnessCatalog): string[] =>
|
|
48
|
+
Object.keys(catalog.models ?? {});
|
|
49
|
+
|
|
50
|
+
export const catalogEfforts = (
|
|
51
|
+
catalog: HarnessCatalog,
|
|
52
|
+
model: string,
|
|
53
|
+
): readonly ReasoningEffort[] | undefined => catalog.models?.[model];
|
|
54
|
+
|
|
55
|
+
export const defaultCatalogEffort = (
|
|
56
|
+
catalog: HarnessCatalog,
|
|
57
|
+
model: string,
|
|
58
|
+
): ReasoningEffort | undefined => {
|
|
59
|
+
if (!isClosedCatalog(catalog)) return undefined;
|
|
60
|
+
const accepted = catalog.models[model] ?? catalog.efforts;
|
|
61
|
+
return accepted.includes("low") ? "low" : accepted[0];
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const describeAcceptedEfforts = (
|
|
65
|
+
catalog: HarnessCatalog,
|
|
66
|
+
model: string,
|
|
67
|
+
accepted: readonly ReasoningEffort[],
|
|
68
|
+
): string =>
|
|
69
|
+
accepted.length === 0
|
|
70
|
+
? `model '${model}' has no reasoning effort in ${catalog.driver}`
|
|
71
|
+
: `model '${model}' accepts reasoning effort ${accepted.join(", ")} in ${catalog.driver}`;
|
|
72
|
+
|
|
73
|
+
export const effortIssue = (
|
|
74
|
+
catalog: HarnessCatalog,
|
|
75
|
+
model: string,
|
|
76
|
+
effort: ReasoningEffort | undefined,
|
|
77
|
+
): string | undefined => {
|
|
78
|
+
if (effort === undefined) return undefined;
|
|
79
|
+
const accepted = catalogEfforts(catalog, model);
|
|
80
|
+
if (accepted === undefined || accepted.includes(effort)) return undefined;
|
|
81
|
+
return describeAcceptedEfforts(catalog, model, accepted);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type CatalogEffortConfig = {
|
|
85
|
+
model: string;
|
|
86
|
+
reasoningEffort?: ReasoningEffort | undefined;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export const applyCatalogEffort =
|
|
90
|
+
(catalog: HarnessCatalog) =>
|
|
91
|
+
<C extends CatalogEffortConfig>(config: C, ctx: z.RefinementCtx): C => {
|
|
92
|
+
const issue = effortIssue(catalog, config.model, config.reasoningEffort);
|
|
93
|
+
if (issue) {
|
|
94
|
+
ctx.addIssue({ code: "custom", path: ["reasoningEffort"], message: issue });
|
|
95
|
+
return config;
|
|
96
|
+
}
|
|
97
|
+
if (config.reasoningEffort !== undefined) return config;
|
|
98
|
+
const effort = defaultCatalogEffort(catalog, config.model);
|
|
99
|
+
return effort === undefined ? config : { ...config, reasoningEffort: effort };
|
|
100
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defineHarnessCatalog } from "../harness-catalog.js";
|
|
2
|
+
|
|
3
|
+
const flash = ["low", "medium", "high"] as const;
|
|
4
|
+
|
|
5
|
+
export const antigravityCatalog = defineHarnessCatalog({
|
|
6
|
+
driver: "antigravity",
|
|
7
|
+
verified: "2026-09-18",
|
|
8
|
+
sources: [
|
|
9
|
+
"https://antigravity.google/docs/models/",
|
|
10
|
+
"https://antigravity.google/docs/cli/headless/",
|
|
11
|
+
"agy models (needs a login)",
|
|
12
|
+
],
|
|
13
|
+
efforts: flash,
|
|
14
|
+
models: {
|
|
15
|
+
"gemini-3.8-flash": flash,
|
|
16
|
+
"gemini-3.7-flash": flash,
|
|
17
|
+
"gemini-3.6-flash": flash,
|
|
18
|
+
"gemini-3.5-flash": flash,
|
|
19
|
+
"gemini-3.1-pro": ["low", "high"],
|
|
20
|
+
"claude-sonnet-4-6": [],
|
|
21
|
+
"claude-opus-4-6-thinking": [],
|
|
22
|
+
"gpt-oss-120b-medium": [],
|
|
23
|
+
},
|
|
24
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineHarnessCatalog } from "../harness-catalog.js";
|
|
2
|
+
|
|
3
|
+
const full = ["low", "medium", "high", "xhigh", "max"] as const;
|
|
4
|
+
const withoutXhigh = ["low", "medium", "high", "max"] as const;
|
|
5
|
+
|
|
6
|
+
export const claudeCodeCatalog = defineHarnessCatalog({
|
|
7
|
+
driver: "claude-code",
|
|
8
|
+
verified: "2026-09-18",
|
|
9
|
+
sources: [
|
|
10
|
+
"https://code.claude.com/docs/en/model-config",
|
|
11
|
+
"https://platform.claude.com/docs/en/about-claude/models/overview",
|
|
12
|
+
],
|
|
13
|
+
efforts: full,
|
|
14
|
+
models: {
|
|
15
|
+
"claude-fable-5-1": full,
|
|
16
|
+
"claude-fable-5": full,
|
|
17
|
+
"claude-opus-5": full,
|
|
18
|
+
"claude-opus-4-8": full,
|
|
19
|
+
"claude-opus-4-7": full,
|
|
20
|
+
"claude-sonnet-5": full,
|
|
21
|
+
"claude-opus-4-6": withoutXhigh,
|
|
22
|
+
"claude-sonnet-4-6": withoutXhigh,
|
|
23
|
+
"claude-haiku-4-5": [],
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineHarnessCatalog } from "../harness-catalog.js";
|
|
2
|
+
|
|
3
|
+
const throughUltra = ["low", "medium", "high", "xhigh", "max", "ultra"] as const;
|
|
4
|
+
const throughMax = ["low", "medium", "high", "xhigh", "max"] as const;
|
|
5
|
+
const throughXhigh = ["low", "medium", "high", "xhigh"] as const;
|
|
6
|
+
const noneThroughXhigh = ["none", "low", "medium", "high", "xhigh"] as const;
|
|
7
|
+
|
|
8
|
+
export const codexCatalog = defineHarnessCatalog({
|
|
9
|
+
driver: "codex",
|
|
10
|
+
verified: "2026-09-18",
|
|
11
|
+
sources: [
|
|
12
|
+
"https://learn.chatgpt.com/docs/models",
|
|
13
|
+
"https://developers.openai.com/api/docs/guides/reasoning",
|
|
14
|
+
"codex app-server model/list (mirrored in $CODEX_HOME/models_cache.json)",
|
|
15
|
+
],
|
|
16
|
+
efforts: ["none", "low", "medium", "high", "xhigh", "max", "ultra"],
|
|
17
|
+
models: {
|
|
18
|
+
"gpt-6-astra": throughUltra,
|
|
19
|
+
"gpt-5.6-sol": throughUltra,
|
|
20
|
+
"gpt-5.6-terra": throughUltra,
|
|
21
|
+
"gpt-5.6-luna": throughMax,
|
|
22
|
+
"gpt-5.5": throughXhigh,
|
|
23
|
+
"gpt-5.4": noneThroughXhigh,
|
|
24
|
+
"gpt-5.4-mini": noneThroughXhigh,
|
|
25
|
+
"gpt-5.3-codex": throughXhigh,
|
|
26
|
+
},
|
|
27
|
+
});
|