@prismatic-io/lux 0.0.2-preview.4 → 0.0.2-preview.41
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 +65 -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 +67 -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 +211 -46
- 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 +153 -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 +31 -15
- package/lib/core/model-cli.d.ts.map +1 -1
- package/lib/core/model-cli.js +53 -23
- 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 +198 -253
- 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 +149 -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 +231 -10
- 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 +163 -78
- 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 +52 -4
- 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 +32 -24
- 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 +50 -42
- 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 +59 -179
- 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/regrade.js +5 -1
- package/lib/orchestrator/regrade.js.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 +80 -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 +76 -46
- package/src/assertions/rubric/internal.ts +264 -46
- 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 +176 -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 +78 -28
- 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 +228 -282
- 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 +201 -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 +281 -74
- 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 +68 -39
- package/src/orchestrator/experiment-effects.ts +63 -0
- package/src/orchestrator/experiment-evaluation.ts +88 -10
- package/src/orchestrator/experiment-identity.ts +98 -61
- 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 +104 -226
- 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/regrade.ts +5 -1
- 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
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { basename, extname,
|
|
1
|
+
import { basename, extname, join, resolve } from "node:path";
|
|
2
|
+
import { ContainerDriver } from "../container/driver.js";
|
|
3
|
+
import { driverExecutionOf } from "../core/driver-execution.js";
|
|
4
|
+
import { type EnvironmentDeclaration, EnvironmentDeclarationSchema } from "../core/environment.js";
|
|
2
5
|
import {
|
|
3
6
|
type Answerer,
|
|
4
7
|
type AnswererModelCallAccounting,
|
|
5
8
|
type AnswererRef,
|
|
6
9
|
bindSubjectRoot,
|
|
7
10
|
type DriverRef,
|
|
11
|
+
driverConfigOf,
|
|
12
|
+
driverNameOf,
|
|
8
13
|
type EvalCase,
|
|
9
14
|
type GradingAssertionEntry,
|
|
10
15
|
type GradingReport,
|
|
@@ -18,12 +23,20 @@ import {
|
|
|
18
23
|
type SuiteLifecycleHookContext,
|
|
19
24
|
valueHash,
|
|
20
25
|
} from "../core/index.js";
|
|
26
|
+
import { resolveHarnessForDriver } from "../core/model-cli.js";
|
|
27
|
+
import {
|
|
28
|
+
mergeAnswererReference,
|
|
29
|
+
mergeDriverReference,
|
|
30
|
+
withDriverDefaults,
|
|
31
|
+
} from "../core/reference-defaults.js";
|
|
21
32
|
import {
|
|
22
33
|
fixturesForEvalCase,
|
|
23
34
|
mergeLifecycleFixtures,
|
|
24
35
|
registryForEvalCase,
|
|
25
36
|
valuesForFixtures,
|
|
26
37
|
} from "./case-extensions.js";
|
|
38
|
+
import { isBuiltinDriver } from "./config.js";
|
|
39
|
+
import { validateDriverCapabilities } from "./driver-capabilities.js";
|
|
27
40
|
import { evaluatorImplementationHash } from "./evaluator-identity.js";
|
|
28
41
|
import {
|
|
29
42
|
assertionEvaluatorIdentities,
|
|
@@ -102,11 +115,13 @@ const recordLifecycleCleanupFailure = async (result: RunResult, error: unknown):
|
|
|
102
115
|
};
|
|
103
116
|
|
|
104
117
|
export type OrchestratorOptions = {
|
|
118
|
+
environment?: EnvironmentDeclaration | undefined;
|
|
105
119
|
registry: Registry;
|
|
106
120
|
/** Answerer used when a case names none. Defaults to "persona". */
|
|
107
121
|
defaultAnswerer?: AnswererRef;
|
|
108
122
|
/** Driver used when a case names none. */
|
|
109
123
|
defaultDriver?: DriverRef;
|
|
124
|
+
driverDefaults?: Record<string, unknown> | undefined;
|
|
110
125
|
/** Shared provider/model defaults for built-in harness components. */
|
|
111
126
|
harness?: HarnessModelConfig;
|
|
112
127
|
/** Versioned project resource fixtures. */
|
|
@@ -114,6 +129,8 @@ export type OrchestratorOptions = {
|
|
|
114
129
|
};
|
|
115
130
|
|
|
116
131
|
export type RunRequest = {
|
|
132
|
+
/** Effective parent suite worker limit; direct runs default to one. */
|
|
133
|
+
suiteConcurrency?: number | undefined;
|
|
117
134
|
/** Path to a TS case file. Mutually exclusive with `case`. */
|
|
118
135
|
casePath?: string;
|
|
119
136
|
/** Pre-loaded EvalCase. Mutually exclusive with `casePath`. */
|
|
@@ -137,6 +154,12 @@ export type RunRequest = {
|
|
|
137
154
|
subjectRoot?: string | undefined;
|
|
138
155
|
subjectHash?: string | undefined;
|
|
139
156
|
profileId?: string | undefined;
|
|
157
|
+
/**
|
|
158
|
+
* Driver bound by a harness permutation. It replaces the project default;
|
|
159
|
+
* a case pinned to another driver is rejected rather than silently rerouted.
|
|
160
|
+
*/
|
|
161
|
+
driver?: DriverRef | undefined;
|
|
162
|
+
permutationId?: string | undefined;
|
|
140
163
|
experimentId?: string | undefined;
|
|
141
164
|
variantId?: string | undefined;
|
|
142
165
|
candidateId?: string | undefined;
|
|
@@ -195,7 +218,13 @@ export type SuiteObserver = RunObserver & {
|
|
|
195
218
|
* `caseId` is the canonical id runs are filed under when the case declares
|
|
196
219
|
* none — display decorations (a `--loop` suffix) must not fork run history.
|
|
197
220
|
*/
|
|
198
|
-
export type SuiteItem = {
|
|
221
|
+
export type SuiteItem = {
|
|
222
|
+
path: string;
|
|
223
|
+
id: string;
|
|
224
|
+
caseId?: string | undefined;
|
|
225
|
+
driver?: DriverRef | undefined;
|
|
226
|
+
permutationId?: string | undefined;
|
|
227
|
+
};
|
|
199
228
|
|
|
200
229
|
const resolveCaseId = (casePath: string, evalCase: EvalCase, fallback?: string): string => {
|
|
201
230
|
if (evalCase.id) return evalCase.id;
|
|
@@ -206,40 +235,24 @@ const resolveCaseId = (casePath: string, evalCase: EvalCase, fallback?: string):
|
|
|
206
235
|
return ext ? base.slice(0, -ext.length) : base;
|
|
207
236
|
};
|
|
208
237
|
|
|
209
|
-
const driverNameOf = (ref: DriverRef): string => (typeof ref === "string" ? ref : ref.name);
|
|
210
|
-
|
|
211
|
-
const isRecord = (value: unknown): value is Record<string, unknown> =>
|
|
212
|
-
Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
213
|
-
|
|
214
|
-
/** Merge plugin config recursively so nested Codex `config`/`env` overrides stay additive. */
|
|
215
|
-
const mergePluginConfig = (base: unknown, local: unknown): unknown => {
|
|
216
|
-
if (!isRecord(base) || !isRecord(local)) return local ?? base;
|
|
217
|
-
const merged: Record<string, unknown> = { ...base };
|
|
218
|
-
for (const [key, value] of Object.entries(local)) {
|
|
219
|
-
merged[key] = key in merged ? mergePluginConfig(merged[key], value) : value;
|
|
220
|
-
}
|
|
221
|
-
return merged;
|
|
222
|
-
};
|
|
223
|
-
|
|
224
238
|
export const resolveDriverReference = (
|
|
225
239
|
evalCase: EvalCase,
|
|
226
240
|
fallback: DriverRef | undefined,
|
|
241
|
+
permutation?: DriverRef | undefined,
|
|
242
|
+
defaults?: Record<string, unknown> | undefined,
|
|
227
243
|
): DriverRef => {
|
|
228
244
|
const local = evalCase.driver;
|
|
229
|
-
if (
|
|
230
|
-
|
|
231
|
-
|
|
245
|
+
if (permutation && local && driverNameOf(local) !== driverNameOf(permutation)) {
|
|
246
|
+
throw new Error(
|
|
247
|
+
`case is pinned to driver '${driverNameOf(local)}' but the run selected '${driverNameOf(permutation)}'`,
|
|
248
|
+
);
|
|
232
249
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
return {
|
|
240
|
-
name: driverNameOf(local),
|
|
241
|
-
config: mergePluginConfig(baseConfig, localConfig),
|
|
242
|
-
};
|
|
250
|
+
const reference = withDriverDefaults(
|
|
251
|
+
mergeDriverReference(permutation ?? fallback, local),
|
|
252
|
+
defaults,
|
|
253
|
+
);
|
|
254
|
+
if (!reference) throw new Error("case names no driver and no defaultDriver is configured");
|
|
255
|
+
return reference;
|
|
243
256
|
};
|
|
244
257
|
|
|
245
258
|
export const resolveAnswererReference = (
|
|
@@ -248,7 +261,18 @@ export const resolveAnswererReference = (
|
|
|
248
261
|
harness: HarnessModelConfig | undefined,
|
|
249
262
|
override?: string,
|
|
250
263
|
): AnswererRef => {
|
|
251
|
-
const
|
|
264
|
+
const fallbackName = typeof fallback === "string" ? fallback : fallback.name;
|
|
265
|
+
const inherited =
|
|
266
|
+
harness && fallbackName === "persona"
|
|
267
|
+
? {
|
|
268
|
+
name: "persona",
|
|
269
|
+
config: mergeHarnessModelConfig(
|
|
270
|
+
harness,
|
|
271
|
+
typeof fallback === "object" ? fallback.config : undefined,
|
|
272
|
+
),
|
|
273
|
+
}
|
|
274
|
+
: fallback;
|
|
275
|
+
const ref = mergeAnswererReference(inherited, override ?? evalCase.answerer) as AnswererRef;
|
|
252
276
|
const name = typeof ref === "string" ? ref : ref.name;
|
|
253
277
|
if (!harness || name !== "persona") return ref;
|
|
254
278
|
return {
|
|
@@ -259,197 +283,25 @@ export const resolveAnswererReference = (
|
|
|
259
283
|
|
|
260
284
|
const answererNameOf = (ref: AnswererRef): string => (typeof ref === "string" ? ref : ref.name);
|
|
261
285
|
|
|
262
|
-
const driverConfigOf = (ref: DriverRef): unknown =>
|
|
263
|
-
typeof ref === "object" ? ref.config : undefined;
|
|
264
|
-
|
|
265
286
|
const answererConfigOf = (ref: AnswererRef): unknown =>
|
|
266
287
|
typeof ref === "object" ? ref.config : undefined;
|
|
267
288
|
|
|
268
|
-
const EXPERIMENT_BEHAVIOR_SOURCE_ARGS = new Set([
|
|
269
|
-
"--continue",
|
|
270
|
-
"-c",
|
|
271
|
-
"--fork-session",
|
|
272
|
-
"--resume",
|
|
273
|
-
"-r",
|
|
274
|
-
"--add-dir",
|
|
275
|
-
"--append-system-prompt-file",
|
|
276
|
-
"--mcp-config",
|
|
277
|
-
"--plugin-dir",
|
|
278
|
-
"--settings",
|
|
279
|
-
"--setting-sources",
|
|
280
|
-
"--system-prompt-file",
|
|
281
|
-
]);
|
|
282
|
-
|
|
283
|
-
const CODEX_EXPERIMENT_SOURCE_ARGS = new Set([
|
|
284
|
-
"--add-dir",
|
|
285
|
-
"--cd",
|
|
286
|
-
"-C",
|
|
287
|
-
"--config",
|
|
288
|
-
"-c",
|
|
289
|
-
"--profile",
|
|
290
|
-
"-p",
|
|
291
|
-
]);
|
|
292
|
-
|
|
293
|
-
const bindSubprocessExperimentConfig = (config: Record<string, unknown>): unknown => {
|
|
294
|
-
if (typeof config.command !== "string" || !isAbsolute(config.command)) {
|
|
295
|
-
throw new Error(
|
|
296
|
-
"experiment subprocess commands must be absolute direct wrappers so Lux can fingerprint the invoked behavior",
|
|
297
|
-
);
|
|
298
|
-
}
|
|
299
|
-
if (typeof config.cwd === "string") {
|
|
300
|
-
throw new Error(
|
|
301
|
-
"experiment runs do not allow an explicit subprocess cwd; use the candidate subject and staged fixtures",
|
|
302
|
-
);
|
|
303
|
-
}
|
|
304
|
-
if (Array.isArray(config.args) && config.args.length > 0) {
|
|
305
|
-
throw new Error(
|
|
306
|
-
"experiment subprocesses do not allow args; put stable behavior in the fingerprinted direct wrapper",
|
|
307
|
-
);
|
|
308
|
-
}
|
|
309
|
-
if (isRecord(config.env) && Object.keys(config.env).length > 0) {
|
|
310
|
-
throw new Error(
|
|
311
|
-
"experiment subprocesses do not allow custom env; put stable behavior in the fingerprinted direct wrapper",
|
|
312
|
-
);
|
|
313
|
-
}
|
|
314
|
-
return { ...config, inheritEnv: false };
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
type AgentDriverName = "claude-code" | "codex";
|
|
318
|
-
|
|
319
|
-
const validateAgentExperimentConfig = (
|
|
320
|
-
driverName: AgentDriverName,
|
|
321
|
-
config: Record<string, unknown>,
|
|
322
|
-
): { driverEnv: Record<string, unknown>; extraArgs: string[] } => {
|
|
323
|
-
const driverEnv = isRecord(config.env) ? config.env : {};
|
|
324
|
-
const commandResolutionOverride = Object.keys(driverEnv).find((name) =>
|
|
325
|
-
["PATH", "PATHEXT"].includes(name.toUpperCase()),
|
|
326
|
-
);
|
|
327
|
-
if (commandResolutionOverride) {
|
|
328
|
-
throw new Error(
|
|
329
|
-
`experiment runs do not allow driver env.${commandResolutionOverride}; command resolution must match the fingerprinted host executable`,
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
if (typeof config.cwd === "string") {
|
|
333
|
-
throw new Error(
|
|
334
|
-
`experiment runs do not allow an explicit ${driverName} cwd; use the candidate subject and staged fixtures`,
|
|
335
|
-
);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
const extraArgs = Array.isArray(config.extraArgs)
|
|
339
|
-
? config.extraArgs.filter((value): value is string => typeof value === "string")
|
|
340
|
-
: [];
|
|
341
|
-
const disallowedArgs =
|
|
342
|
-
driverName === "claude-code" ? EXPERIMENT_BEHAVIOR_SOURCE_ARGS : CODEX_EXPERIMENT_SOURCE_ARGS;
|
|
343
|
-
const behaviorSourceArg = extraArgs.find((arg) =>
|
|
344
|
-
[...disallowedArgs].some((name) => arg === name || arg.startsWith(`${name}=`)),
|
|
345
|
-
);
|
|
346
|
-
if (behaviorSourceArg) {
|
|
347
|
-
throw new Error(
|
|
348
|
-
`experiment runs do not allow behavior-bearing extraArgs '${behaviorSourceArg}'; use structured driver fields so Lux can fingerprint the source`,
|
|
349
|
-
);
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
const isolation = isRecord(config.isolation) ? config.isolation : {};
|
|
353
|
-
const structuredPaths = [
|
|
354
|
-
...(driverName === "claude-code" && Array.isArray(config.pluginDirs) ? config.pluginDirs : []),
|
|
355
|
-
...(Array.isArray(config.addDirs) ? config.addDirs : []),
|
|
356
|
-
...(driverName === "claude-code" && Array.isArray(isolation.allowRead)
|
|
357
|
-
? isolation.allowRead
|
|
358
|
-
: []),
|
|
359
|
-
].filter((value): value is string => typeof value === "string");
|
|
360
|
-
const relativeSource = structuredPaths.find((path) => !isAbsolute(path));
|
|
361
|
-
if (relativeSource) {
|
|
362
|
-
throw new Error(
|
|
363
|
-
`experiment driver source paths must be absolute after subjectPath binding: ${relativeSource}`,
|
|
364
|
-
);
|
|
365
|
-
}
|
|
366
|
-
return { driverEnv, extraArgs };
|
|
367
|
-
};
|
|
368
|
-
|
|
369
|
-
const bindCodexExperimentConfig = (
|
|
370
|
-
config: Record<string, unknown>,
|
|
371
|
-
extraArgs: readonly string[],
|
|
372
|
-
): unknown => {
|
|
373
|
-
if (typeof config.profile === "string") {
|
|
374
|
-
throw new Error(
|
|
375
|
-
"experiment runs do not allow a Codex profile; use inline driver config so Lux can fingerprint it",
|
|
376
|
-
);
|
|
377
|
-
}
|
|
378
|
-
if (config.ephemeral === false) {
|
|
379
|
-
throw new Error("experiment runs require ephemeral Codex sessions");
|
|
380
|
-
}
|
|
381
|
-
const inlineConfig = isRecord(config.config) ? config.config : {};
|
|
382
|
-
const externalConfigKey = ((): string | undefined => {
|
|
383
|
-
const visit = (value: Record<string, unknown>, parent = ""): string | undefined => {
|
|
384
|
-
for (const [key, nested] of Object.entries(value)) {
|
|
385
|
-
const path = parent ? `${parent}.${key}` : key;
|
|
386
|
-
if (/(?:mcp_servers|instructions_file|notify|project_doc)/i.test(key)) return path;
|
|
387
|
-
if (isRecord(nested)) {
|
|
388
|
-
const found = visit(nested, path);
|
|
389
|
-
if (found) return found;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
return undefined;
|
|
393
|
-
};
|
|
394
|
-
return visit(inlineConfig);
|
|
395
|
-
})();
|
|
396
|
-
if (externalConfigKey) {
|
|
397
|
-
throw new Error(
|
|
398
|
-
`experiment runs do not allow path-bearing Codex config '${externalConfigKey}'`,
|
|
399
|
-
);
|
|
400
|
-
}
|
|
401
|
-
const appServer = config.interactionMode !== "exec";
|
|
402
|
-
return {
|
|
403
|
-
...config,
|
|
404
|
-
ephemeral: true,
|
|
405
|
-
ignoreUserConfig: true,
|
|
406
|
-
ignoreRules: true,
|
|
407
|
-
...(appServer && !config.isolation ? { isolation: { allowRead: [] } } : {}),
|
|
408
|
-
extraArgs,
|
|
409
|
-
};
|
|
410
|
-
};
|
|
411
|
-
|
|
412
|
-
const bindClaudeExperimentConfig = (
|
|
413
|
-
config: Record<string, unknown>,
|
|
414
|
-
extraArgs: readonly string[],
|
|
415
|
-
driverEnv: Record<string, unknown>,
|
|
416
|
-
): unknown => {
|
|
417
|
-
if (config.isolation) return config;
|
|
418
|
-
return {
|
|
419
|
-
...config,
|
|
420
|
-
extraArgs: [
|
|
421
|
-
...extraArgs,
|
|
422
|
-
"--setting-sources",
|
|
423
|
-
"user",
|
|
424
|
-
"--strict-mcp-config",
|
|
425
|
-
"--settings",
|
|
426
|
-
JSON.stringify({ disableAllHooks: true }),
|
|
427
|
-
],
|
|
428
|
-
env: {
|
|
429
|
-
...driverEnv,
|
|
430
|
-
CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
|
|
431
|
-
CLAUDE_CODE_DISABLE_CLAUDE_MDS: "1",
|
|
432
|
-
CLAUDE_CODE_SKIP_PROMPT_HISTORY: "1",
|
|
433
|
-
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS: "1",
|
|
434
|
-
CLAUDE_CODE_AUTO_CONNECT_IDE: "false",
|
|
435
|
-
CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL: "1",
|
|
436
|
-
DISABLE_AUTOUPDATER: "1",
|
|
437
|
-
},
|
|
438
|
-
};
|
|
439
|
-
};
|
|
440
|
-
|
|
441
289
|
export const boundExperimentDriverConfig = (
|
|
442
|
-
|
|
290
|
+
plugin: import("../core/driver.js").DriverPlugin,
|
|
443
291
|
config: unknown,
|
|
444
292
|
experimentId: string | undefined,
|
|
445
293
|
): unknown => {
|
|
446
|
-
if (!experimentId
|
|
447
|
-
if (
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
294
|
+
if (!experimentId) return config;
|
|
295
|
+
if (!plugin.experiment) {
|
|
296
|
+
throw new Error(
|
|
297
|
+
`driver '${plugin.name}' supports ordinary eval runs but does not declare controlled experiment support`,
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
return validatePluginConfig(
|
|
301
|
+
plugin.configSchema,
|
|
302
|
+
plugin.experiment.prepare(config),
|
|
303
|
+
`driver '${plugin.name}' experiment configuration`,
|
|
304
|
+
);
|
|
453
305
|
};
|
|
454
306
|
|
|
455
307
|
const closeQuietly = async (close: () => Promise<void>, label: string): Promise<void> => {
|
|
@@ -463,17 +315,23 @@ const closeQuietly = async (close: () => Promise<void>, label: string): Promise<
|
|
|
463
315
|
};
|
|
464
316
|
|
|
465
317
|
export class Orchestrator {
|
|
318
|
+
private readonly environment: EnvironmentDeclaration | undefined;
|
|
466
319
|
private evaluatorHash: Promise<string> | undefined;
|
|
467
320
|
readonly registry: Registry;
|
|
468
321
|
private readonly defaultAnswerer: AnswererRef;
|
|
469
322
|
private readonly defaultDriver: DriverRef | undefined;
|
|
323
|
+
private readonly driverDefaults: Record<string, unknown> | undefined;
|
|
470
324
|
private readonly harness: HarnessModelConfig | undefined;
|
|
471
325
|
private readonly lifecycleFixtures: readonly LifecycleHooksPlugin[];
|
|
472
326
|
|
|
473
327
|
constructor(options: OrchestratorOptions) {
|
|
328
|
+
this.environment = options.environment
|
|
329
|
+
? EnvironmentDeclarationSchema.parse(options.environment)
|
|
330
|
+
: undefined;
|
|
474
331
|
this.registry = options.registry;
|
|
475
332
|
this.defaultAnswerer = options.defaultAnswerer ?? "persona";
|
|
476
333
|
this.defaultDriver = options.defaultDriver;
|
|
334
|
+
this.driverDefaults = options.driverDefaults;
|
|
477
335
|
this.harness = options.harness;
|
|
478
336
|
this.lifecycleFixtures = [...(options.lifecycleFixtures ?? [])];
|
|
479
337
|
}
|
|
@@ -512,13 +370,15 @@ export class Orchestrator {
|
|
|
512
370
|
registry,
|
|
513
371
|
);
|
|
514
372
|
|
|
515
|
-
const driverRef =
|
|
373
|
+
const driverRef = bindSubjectRoot(
|
|
374
|
+
resolveDriverReference(evalCase, this.defaultDriver, request.driver, this.driverDefaults),
|
|
375
|
+
request.subjectRoot,
|
|
376
|
+
);
|
|
516
377
|
const driverName = driverNameOf(driverRef);
|
|
517
|
-
const
|
|
518
|
-
|
|
519
|
-
this.defaultAnswerer,
|
|
520
|
-
|
|
521
|
-
request.answererOverride,
|
|
378
|
+
const harness = resolveHarnessForDriver(this.harness, driverRef);
|
|
379
|
+
const answererRef = bindSubjectRoot(
|
|
380
|
+
resolveAnswererReference(evalCase, this.defaultAnswerer, harness, request.answererOverride),
|
|
381
|
+
request.subjectRoot,
|
|
522
382
|
);
|
|
523
383
|
const answererName = answererNameOf(answererRef);
|
|
524
384
|
|
|
@@ -534,7 +394,7 @@ export class Orchestrator {
|
|
|
534
394
|
// Validate both configs before instantiating either plugin so a
|
|
535
395
|
// schema failure can't leak a half-initialized driver/answerer.
|
|
536
396
|
const driverCfg = boundExperimentDriverConfig(
|
|
537
|
-
|
|
397
|
+
driverPlugin,
|
|
538
398
|
validatePluginConfig(
|
|
539
399
|
driverPlugin.configSchema,
|
|
540
400
|
driverConfigOf(driverRef),
|
|
@@ -548,7 +408,20 @@ export class Orchestrator {
|
|
|
548
408
|
`answerer '${answererName}'`,
|
|
549
409
|
);
|
|
550
410
|
|
|
551
|
-
const
|
|
411
|
+
const execution = driverExecutionOf(driverRef);
|
|
412
|
+
if (execution?.kind === "container" && request.experimentId)
|
|
413
|
+
throw new Error("container execution does not yet support controlled experiments");
|
|
414
|
+
if (
|
|
415
|
+
execution?.kind === "container" &&
|
|
416
|
+
!execution.driverModule &&
|
|
417
|
+
!isBuiltinDriver(driverPlugin)
|
|
418
|
+
)
|
|
419
|
+
throw new Error("custom container drivers require execution.driverModule in the image");
|
|
420
|
+
validateDriverCapabilities(driverPlugin, driverCfg, evalCase.requires, execution);
|
|
421
|
+
const driver =
|
|
422
|
+
execution?.kind === "container"
|
|
423
|
+
? new ContainerDriver(driverName, driverCfg, execution)
|
|
424
|
+
: await driverPlugin.create(driverCfg);
|
|
552
425
|
let answerer: Answerer;
|
|
553
426
|
try {
|
|
554
427
|
answerer = await answererPlugin.create(answererCfg);
|
|
@@ -569,7 +442,7 @@ export class Orchestrator {
|
|
|
569
442
|
implementationHash,
|
|
570
443
|
assertions: assertionImplementations,
|
|
571
444
|
validatedAssertionsHash,
|
|
572
|
-
graderContext:
|
|
445
|
+
graderContext: harness,
|
|
573
446
|
skipJudge: request.skipJudge ?? false,
|
|
574
447
|
});
|
|
575
448
|
return await this.runWithPlugins(
|
|
@@ -581,16 +454,17 @@ export class Orchestrator {
|
|
|
581
454
|
validatedAssertionConfigs,
|
|
582
455
|
caseId,
|
|
583
456
|
driverName,
|
|
457
|
+
permutationId: request.permutationId,
|
|
584
458
|
answererName,
|
|
585
459
|
answererConfig: answererCfg,
|
|
586
|
-
driverConfigHash: valueHash(driverCfg),
|
|
460
|
+
driverConfigHash: valueHash(execution ? { config: driverCfg, execution } : driverCfg),
|
|
587
461
|
answererConfigHash: valueHash(answererCfg),
|
|
588
462
|
validatedAssertionsHash,
|
|
589
463
|
graderConfigHash: graderHash,
|
|
590
464
|
evaluatorConfigHash: valueHash({
|
|
591
465
|
luxVersion: LUX_VERSION,
|
|
592
466
|
implementationHash,
|
|
593
|
-
harness
|
|
467
|
+
harness,
|
|
594
468
|
driver: { name: driverPlugin.name, create: driverPlugin.create },
|
|
595
469
|
answerer: { name: answererPlugin.name, create: answererPlugin.create },
|
|
596
470
|
assertions: assertionImplementations,
|
|
@@ -599,6 +473,7 @@ export class Orchestrator {
|
|
|
599
473
|
skipJudge: request.skipJudge ?? false,
|
|
600
474
|
}),
|
|
601
475
|
fixtureValues: valuesForFixtures(lifecycleFixtures),
|
|
476
|
+
environment: this.environment,
|
|
602
477
|
driver,
|
|
603
478
|
answerer,
|
|
604
479
|
},
|
|
@@ -797,9 +672,12 @@ export class Orchestrator {
|
|
|
797
672
|
observer: handle ?? observer,
|
|
798
673
|
abortSignal: opts.abortSignal,
|
|
799
674
|
suiteId: suite.manifest.suiteId,
|
|
675
|
+
suiteConcurrency: concurrency,
|
|
800
676
|
subjectRoot: opts.subjectRoot,
|
|
801
677
|
subjectHash: opts.subjectHash,
|
|
802
678
|
profileId: opts.profileId,
|
|
679
|
+
driver: item.driver,
|
|
680
|
+
permutationId: item.permutationId,
|
|
803
681
|
experimentId: opts.experimentId,
|
|
804
682
|
variantId: opts.variantId,
|
|
805
683
|
candidateId: opts.candidateId,
|