@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
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import { cp, mkdir,
|
|
2
|
-
import {
|
|
3
|
-
import { dirname, join, resolve, sep } from "node:path";
|
|
1
|
+
import { cp, mkdir, realpath, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
4
3
|
import { temporaryDirectory } from "tempy";
|
|
5
4
|
import { z } from "zod";
|
|
6
|
-
import {
|
|
5
|
+
import { agentEnvironment, InheritEnvironmentSchema } from "../../core/agent-environment.js";
|
|
6
|
+
import { DurationSchema, durationMs } from "../../core/duration.js";
|
|
7
|
+
import { applyCatalogEffort, claudeCodeCatalog, DEFAULT_CLAUDE_MODEL, defineDriver, discoverCliVersion, selectModelAndReasoningEffort, TypedEmitter, } from "../../core/index.js";
|
|
8
|
+
import { copyRegularFileNoFollow } from "../../core/secure-copy.js";
|
|
7
9
|
import { walkArtifacts } from "../shared/artifacts.js";
|
|
8
|
-
import {
|
|
10
|
+
import { claudeConfigRoot, claudeUserBehaviorHash, configuredClaudeSourceHashes, } from "../shared/experiment-behavior.js";
|
|
11
|
+
import { prepareClaudeExperimentConfig } from "../shared/experiment-policy.js";
|
|
12
|
+
import { stageSkills } from "../shared/skills.js";
|
|
9
13
|
import { subprocessDriver } from "../subprocess/index.js";
|
|
14
|
+
import { runDeferredProcess } from "./deferred-process.js";
|
|
15
|
+
import { isolatedLaunch } from "./isolation.js";
|
|
10
16
|
import { ClaudeCodeLineSchema, makeParseEvent } from "./parse-events.js";
|
|
11
17
|
const LUX_BOOKKEEPING_FILES = new Set([
|
|
12
18
|
"events.jsonl",
|
|
@@ -19,12 +25,23 @@ const LUX_BOOKKEEPING_FILES = new Set([
|
|
|
19
25
|
const commandName = (command) => command.split(/[\\/]/).at(-1) ?? command;
|
|
20
26
|
const ISOLATION_RESERVED_ARGS = new Set([
|
|
21
27
|
"--add-dir",
|
|
28
|
+
"--dangerously-skip-permissions",
|
|
29
|
+
"--allow-dangerously-skip-permissions",
|
|
30
|
+
"--permission-mode",
|
|
31
|
+
"--teleport",
|
|
32
|
+
"--continue",
|
|
33
|
+
"-c",
|
|
34
|
+
"--resume",
|
|
35
|
+
"-r",
|
|
36
|
+
"--fork-session",
|
|
37
|
+
"--session-id",
|
|
22
38
|
"--agent",
|
|
23
39
|
"--agents",
|
|
24
40
|
"--bare",
|
|
25
41
|
"--mcp-config",
|
|
26
42
|
"--no-session-persistence",
|
|
27
43
|
"--plugin-dir",
|
|
44
|
+
"--plugin-dir-no-mcp",
|
|
28
45
|
"--plugin-url",
|
|
29
46
|
"--safe-mode",
|
|
30
47
|
"--setting-sources",
|
|
@@ -39,6 +56,8 @@ const IsolationSchema = z
|
|
|
39
56
|
* and `addDirs` paths are included automatically.
|
|
40
57
|
*/
|
|
41
58
|
allowRead: z.array(z.string()).default([]),
|
|
59
|
+
/** Additional protected trees and files, including other evaluation runs. */
|
|
60
|
+
denyRead: z.array(z.string()).optional(),
|
|
42
61
|
})
|
|
43
62
|
.strict();
|
|
44
63
|
export const ClaudeCodeDriverConfigSchema = z
|
|
@@ -50,15 +69,15 @@ export const ClaudeCodeDriverConfigSchema = z
|
|
|
50
69
|
cwdMode: z.enum(["artifacts", "runDir"]).default("artifacts"),
|
|
51
70
|
cwd: z.string().optional(),
|
|
52
71
|
env: z.record(z.string(), z.string()).optional(),
|
|
72
|
+
inheritEnv: InheritEnvironmentSchema.default(true),
|
|
53
73
|
/** Low-cost by default; choose a larger model explicitly when needed. */
|
|
54
74
|
model: z.string().min(1).default(DEFAULT_CLAUDE_MODEL),
|
|
55
|
-
|
|
56
|
-
effort: z.enum(["low", "medium", "high", "max"]).default("low"),
|
|
75
|
+
reasoningEffort: z.enum(claudeCodeCatalog.efforts).optional(),
|
|
57
76
|
/** Permission mode passed to claude. */
|
|
58
77
|
permissionMode: z
|
|
59
78
|
.enum(["acceptEdits", "auto", "bypassPermissions", "default", "dontAsk", "manual", "plan"])
|
|
60
79
|
.optional(),
|
|
61
|
-
/** Additional
|
|
80
|
+
/** Additional pre-approvals; auto mode omits the baseline coding-tool grants. */
|
|
62
81
|
allowedTools: z.array(z.string().min(1)).optional(),
|
|
63
82
|
/** Plugin directories to load (`--plugin-dir`): skills, subagents, commands, hooks. */
|
|
64
83
|
pluginDirs: z.array(z.string()).optional(),
|
|
@@ -66,6 +85,8 @@ export const ClaudeCodeDriverConfigSchema = z
|
|
|
66
85
|
agent: z.string().optional(),
|
|
67
86
|
/** Extra readable directories (`--add-dir`). Grant the narrowest tree the case needs. */
|
|
68
87
|
addDirs: z.array(z.string()).optional(),
|
|
88
|
+
/** Standalone skill directories registered through native discovery in an isolated workspace. */
|
|
89
|
+
skillDirs: z.array(z.string().min(1)).optional(),
|
|
69
90
|
/**
|
|
70
91
|
* Run in a disposable workspace with local memory, persisted runs, and
|
|
71
92
|
* standard credential stores denied. Live network access is retained.
|
|
@@ -83,15 +104,39 @@ export const ClaudeCodeDriverConfigSchema = z
|
|
|
83
104
|
* when a weaker model asks in text instead of calling `askToolName`.
|
|
84
105
|
*/
|
|
85
106
|
textQuestionFallback: z.boolean().default(false),
|
|
86
|
-
/**
|
|
87
|
-
|
|
107
|
+
/** Maximum silence between recognized protocol events; excludes answerer wait time. */
|
|
108
|
+
idleTimeout: DurationSchema.default("10 minutes"),
|
|
109
|
+
/** Optional elapsed-time cap per defer-resume CLI invocation, regardless of activity. */
|
|
110
|
+
turnTimeout: DurationSchema.optional(),
|
|
88
111
|
/** Cap on outstanding interrupts before the driver aborts. */
|
|
89
112
|
maxInterrupts: z.number().positive().default(20),
|
|
90
113
|
})
|
|
91
114
|
.strict()
|
|
92
115
|
.superRefine((config, ctx) => {
|
|
116
|
+
if (config.skillDirs?.length && !config.isolation) {
|
|
117
|
+
ctx.addIssue({
|
|
118
|
+
code: "custom",
|
|
119
|
+
path: ["skillDirs"],
|
|
120
|
+
message: "skillDirs requires isolation",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (config.turnTimeout !== undefined && config.interactionMode !== "defer-resume") {
|
|
124
|
+
ctx.addIssue({
|
|
125
|
+
code: "custom",
|
|
126
|
+
path: ["turnTimeout"],
|
|
127
|
+
message: "turnTimeout requires defer-resume mode",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
93
130
|
if (config.interactionMode === "defer-resume") {
|
|
94
|
-
const reserved = config.extraArgs?.find((arg) => [
|
|
131
|
+
const reserved = config.extraArgs?.find((arg) => [
|
|
132
|
+
"--input-format",
|
|
133
|
+
"--no-session-persistence",
|
|
134
|
+
"--resume",
|
|
135
|
+
"-r",
|
|
136
|
+
"--settings",
|
|
137
|
+
"--permission-prompt-tool",
|
|
138
|
+
"--permission-prompts",
|
|
139
|
+
].some((name) => arg === name || arg.startsWith(`${name}=`)));
|
|
95
140
|
if (reserved) {
|
|
96
141
|
ctx.addIssue({
|
|
97
142
|
code: "custom",
|
|
@@ -109,11 +154,11 @@ export const ClaudeCodeDriverConfigSchema = z
|
|
|
109
154
|
message: "isolation requires permissionMode to be omitted or 'default'; Claude Code forces default mode while subprocess environment scrubbing is enabled",
|
|
110
155
|
});
|
|
111
156
|
}
|
|
112
|
-
if (config.interactionMode === "defer-resume") {
|
|
157
|
+
if (config.interactionMode === "defer-resume" && config.pluginDirs?.length) {
|
|
113
158
|
ctx.addIssue({
|
|
114
159
|
code: "custom",
|
|
115
|
-
path: ["
|
|
116
|
-
message: "defer-resume
|
|
160
|
+
path: ["pluginDirs"],
|
|
161
|
+
message: "isolated defer-resume cannot load plugin hooks; use skillDirs for standalone skills",
|
|
117
162
|
});
|
|
118
163
|
}
|
|
119
164
|
if (config.cwd || config.cwdMode !== "artifacts") {
|
|
@@ -131,7 +176,8 @@ export const ClaudeCodeDriverConfigSchema = z
|
|
|
131
176
|
message: `isolation owns ${reserved}; configure isolation instead`,
|
|
132
177
|
});
|
|
133
178
|
}
|
|
134
|
-
})
|
|
179
|
+
})
|
|
180
|
+
.transform(applyCatalogEffort(claudeCodeCatalog));
|
|
135
181
|
const buildArgs = (config) => {
|
|
136
182
|
const out = [
|
|
137
183
|
"--print",
|
|
@@ -141,7 +187,7 @@ const buildArgs = (config) => {
|
|
|
141
187
|
"stream-json",
|
|
142
188
|
"--verbose",
|
|
143
189
|
];
|
|
144
|
-
out.push("--model", config.model,
|
|
190
|
+
out.push("--model", config.model, ...effortArgs(config));
|
|
145
191
|
if (config.permissionMode)
|
|
146
192
|
out.push("--permission-mode", config.permissionMode);
|
|
147
193
|
out.push("--allowed-tools", ...allowedTools(config));
|
|
@@ -171,12 +217,26 @@ const deferredHookSettings = (config, hookPath) => ({
|
|
|
171
217
|
],
|
|
172
218
|
},
|
|
173
219
|
});
|
|
220
|
+
const effortArgs = (config) => config.reasoningEffort ? ["--effort", config.reasoningEffort] : [];
|
|
174
221
|
const allowedTools = (config) => [
|
|
175
|
-
...new Set([
|
|
222
|
+
...new Set([
|
|
223
|
+
...(config.permissionMode === "auto" ? [] : MINIMAL_ALLOWED_TOOLS),
|
|
224
|
+
config.askToolName,
|
|
225
|
+
...(config.allowedTools ?? []),
|
|
226
|
+
]),
|
|
176
227
|
];
|
|
177
|
-
const buildDeferredArgs = (config, hookPath, sessionId) => {
|
|
178
|
-
|
|
179
|
-
|
|
228
|
+
const buildDeferredArgs = (config, hookPath, sessionId, isolation) => {
|
|
229
|
+
// Native print mode removes AskUserQuestion unless a host permission surface exists.
|
|
230
|
+
// The trusted PreToolUse hook handles the question before that surface is consulted.
|
|
231
|
+
const out = [
|
|
232
|
+
"--print",
|
|
233
|
+
"--output-format",
|
|
234
|
+
"stream-json",
|
|
235
|
+
"--verbose",
|
|
236
|
+
"--permission-prompt-tool",
|
|
237
|
+
"stdio",
|
|
238
|
+
];
|
|
239
|
+
out.push("--model", config.model, ...effortArgs(config));
|
|
180
240
|
if (config.permissionMode)
|
|
181
241
|
out.push("--permission-mode", config.permissionMode);
|
|
182
242
|
out.push("--allowed-tools", ...allowedTools(config));
|
|
@@ -184,9 +244,16 @@ const buildDeferredArgs = (config, hookPath, sessionId) => {
|
|
|
184
244
|
out.push("--plugin-dir", dir);
|
|
185
245
|
if (config.agent)
|
|
186
246
|
out.push("--agent", config.agent);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
247
|
+
if (!isolation)
|
|
248
|
+
for (const dir of config.addDirs ?? [])
|
|
249
|
+
out.push("--add-dir", dir);
|
|
250
|
+
out.push("--settings", JSON.stringify({
|
|
251
|
+
...isolation?.settings,
|
|
252
|
+
...deferredHookSettings(config, hookPath),
|
|
253
|
+
...(isolation ? { disableAllHooks: false } : {}),
|
|
254
|
+
}));
|
|
255
|
+
if (isolation)
|
|
256
|
+
out.push("--strict-mcp-config", "--setting-sources", "");
|
|
190
257
|
if (sessionId)
|
|
191
258
|
out.push("--resume", sessionId);
|
|
192
259
|
if (config.extraArgs)
|
|
@@ -242,163 +309,6 @@ process.stdin.on("end", () => {
|
|
|
242
309
|
}));
|
|
243
310
|
});
|
|
244
311
|
`;
|
|
245
|
-
const isWithin = (parent, child) => child === parent || child.startsWith(`${parent}${sep}`);
|
|
246
|
-
const permissionPath = (tool, path, directory) => {
|
|
247
|
-
const absolute = resolve(path).replaceAll("\\", "/");
|
|
248
|
-
return `${tool}(//${absolute.replace(/^\/+/, "")}${directory ? "/**" : ""})`;
|
|
249
|
-
};
|
|
250
|
-
/**
|
|
251
|
-
* Permission rules have no "allow inside deny" override, so isolate a root by
|
|
252
|
-
* denying every sibling around explicitly allowed descendants.
|
|
253
|
-
*/
|
|
254
|
-
const carvedPermissionDenials = async (tool, root, allowed) => {
|
|
255
|
-
const normalizedRoot = resolve(root);
|
|
256
|
-
const inside = allowed
|
|
257
|
-
.map((path) => resolve(path))
|
|
258
|
-
.filter((path) => isWithin(normalizedRoot, path));
|
|
259
|
-
if (inside.some((path) => path === normalizedRoot))
|
|
260
|
-
return [];
|
|
261
|
-
if (inside.length === 0)
|
|
262
|
-
return [permissionPath(tool, normalizedRoot, true)];
|
|
263
|
-
const out = [];
|
|
264
|
-
const walk = async (dir) => {
|
|
265
|
-
const entries = await readdir(dir, { withFileTypes: true });
|
|
266
|
-
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
267
|
-
for (const entry of entries) {
|
|
268
|
-
const path = join(dir, entry.name);
|
|
269
|
-
if (inside.some((allowedPath) => allowedPath === path))
|
|
270
|
-
continue;
|
|
271
|
-
if (entry.isDirectory() && inside.some((allowedPath) => isWithin(path, allowedPath))) {
|
|
272
|
-
await walk(path);
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
out.push(permissionPath(tool, path, entry.isDirectory()));
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
};
|
|
279
|
-
await walk(normalizedRoot);
|
|
280
|
-
return out;
|
|
281
|
-
};
|
|
282
|
-
const carvedReadDenials = (root, allowed) => carvedPermissionDenials("Read", root, allowed);
|
|
283
|
-
const existingRealpaths = async (paths) => {
|
|
284
|
-
const found = await Promise.all(paths.map(async (path) => {
|
|
285
|
-
try {
|
|
286
|
-
return await realpath(resolve(path));
|
|
287
|
-
}
|
|
288
|
-
catch {
|
|
289
|
-
return null;
|
|
290
|
-
}
|
|
291
|
-
}));
|
|
292
|
-
return [...new Set(found.filter((path) => path !== null))];
|
|
293
|
-
};
|
|
294
|
-
const compactRoots = (paths) => [...new Set(paths)]
|
|
295
|
-
.sort((a, b) => a.length - b.length || a.localeCompare(b))
|
|
296
|
-
.filter((path, index, roots) => !roots.slice(0, index).some((root) => isWithin(root, path)));
|
|
297
|
-
const isolatedLaunch = async (config, ctx, workspace) => {
|
|
298
|
-
const homeRoots = await existingRealpaths([
|
|
299
|
-
homedir(),
|
|
300
|
-
...(config.env?.HOME ? [config.env.HOME] : []),
|
|
301
|
-
]);
|
|
302
|
-
const sensitiveHomePaths = homeRoots.flatMap((home) => [
|
|
303
|
-
join(home, ".aws"),
|
|
304
|
-
join(home, ".config", "gcloud"),
|
|
305
|
-
join(home, ".docker", "config.json"),
|
|
306
|
-
join(home, ".git-credentials"),
|
|
307
|
-
join(home, ".gnupg"),
|
|
308
|
-
join(home, ".kube"),
|
|
309
|
-
join(home, ".netrc"),
|
|
310
|
-
join(home, ".npmrc"),
|
|
311
|
-
join(home, ".ssh"),
|
|
312
|
-
]);
|
|
313
|
-
const protectedRoots = await existingRealpaths([
|
|
314
|
-
...(ctx.runsRoot ? [ctx.runsRoot] : [ctx.runDir]),
|
|
315
|
-
...(process.env.CLAUDE_CONFIG_DIR ? [process.env.CLAUDE_CONFIG_DIR] : []),
|
|
316
|
-
...(config.env?.CLAUDE_CONFIG_DIR ? [config.env.CLAUDE_CONFIG_DIR] : []),
|
|
317
|
-
...sensitiveHomePaths,
|
|
318
|
-
...homeRoots.flatMap((home) => [
|
|
319
|
-
join(home, ".claude", "projects"),
|
|
320
|
-
join(home, ".claude", "memory"),
|
|
321
|
-
]),
|
|
322
|
-
]);
|
|
323
|
-
const denyRoots = compactRoots(protectedRoots);
|
|
324
|
-
const allowed = compactRoots(await existingRealpaths([
|
|
325
|
-
...(config.pluginDirs ?? []),
|
|
326
|
-
...(config.addDirs ?? []),
|
|
327
|
-
...(config.isolation?.allowRead ?? []),
|
|
328
|
-
]));
|
|
329
|
-
const overlapping = allowed.find((path) => (path !== workspace && isWithin(path, workspace)) ||
|
|
330
|
-
denyRoots.some((root) => isWithin(path, root)) ||
|
|
331
|
-
protectedRoots.some((root) => isWithin(root, path)));
|
|
332
|
-
if (overlapping) {
|
|
333
|
-
throw new Error(`isolation read carve-out overlaps a protected boundary: ${overlapping}`);
|
|
334
|
-
}
|
|
335
|
-
const readOnlyRoots = allowed.filter((path) => !isWithin(workspace, path));
|
|
336
|
-
const editDenyRoots = compactRoots([...denyRoots, ...readOnlyRoots]);
|
|
337
|
-
const [readDenials, writeDenials] = await Promise.all([
|
|
338
|
-
Promise.all(denyRoots.map((root) => carvedPermissionDenials("Read", root, allowed))),
|
|
339
|
-
Promise.all(editDenyRoots.map((root) => carvedPermissionDenials("Edit", root, []))),
|
|
340
|
-
]);
|
|
341
|
-
const denyRules = [...readDenials.flat(), ...writeDenials.flat()];
|
|
342
|
-
const sandboxSettings = {
|
|
343
|
-
disableAllHooks: true,
|
|
344
|
-
permissions: { deny: denyRules },
|
|
345
|
-
sandbox: {
|
|
346
|
-
enabled: true,
|
|
347
|
-
failIfUnavailable: true,
|
|
348
|
-
allowUnsandboxedCommands: false,
|
|
349
|
-
filesystem: {
|
|
350
|
-
denyRead: denyRoots,
|
|
351
|
-
denyWrite: denyRoots,
|
|
352
|
-
allowRead: allowed,
|
|
353
|
-
},
|
|
354
|
-
// Filesystem isolation does not disable the live docs and package
|
|
355
|
-
// registry access that cases are intended to exercise.
|
|
356
|
-
network: { allowedDomains: ["*"] },
|
|
357
|
-
},
|
|
358
|
-
};
|
|
359
|
-
const stateDir = join(workspace, ".lux-claude");
|
|
360
|
-
const tmpDir = join(stateDir, "tmp");
|
|
361
|
-
const cacheDir = join(stateDir, "cache");
|
|
362
|
-
const pluginCacheDir = join(stateDir, "plugins");
|
|
363
|
-
await Promise.all([
|
|
364
|
-
mkdir(tmpDir, { recursive: true }),
|
|
365
|
-
mkdir(cacheDir, { recursive: true }),
|
|
366
|
-
mkdir(pluginCacheDir, { recursive: true }),
|
|
367
|
-
]);
|
|
368
|
-
return {
|
|
369
|
-
args: [
|
|
370
|
-
// --add-dir also discovers skills and agents. Isolation treats addDirs
|
|
371
|
-
// as data-only read grants, so expose them through the filesystem policy
|
|
372
|
-
// above without passing the discovery flag to Claude.
|
|
373
|
-
...buildArgs({ ...config, addDirs: undefined }),
|
|
374
|
-
"--no-session-persistence",
|
|
375
|
-
"--strict-mcp-config",
|
|
376
|
-
// Authentication is independent of filesystem setting sources. Keep
|
|
377
|
-
// these empty instead of using --safe-mode: safe mode would also disable
|
|
378
|
-
// the explicitly requested plugin's skills, commands, and agents.
|
|
379
|
-
"--setting-sources",
|
|
380
|
-
"",
|
|
381
|
-
"--settings",
|
|
382
|
-
JSON.stringify(sandboxSettings),
|
|
383
|
-
],
|
|
384
|
-
env: {
|
|
385
|
-
...(config.env ?? {}),
|
|
386
|
-
CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
|
|
387
|
-
CLAUDE_CODE_DISABLE_CLAUDE_MDS: "1",
|
|
388
|
-
CLAUDE_CODE_SKIP_PROMPT_HISTORY: "1",
|
|
389
|
-
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS: "1",
|
|
390
|
-
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB: "1",
|
|
391
|
-
CLAUDE_CODE_AUTO_CONNECT_IDE: "false",
|
|
392
|
-
CLAUDE_CODE_PLUGIN_CACHE_DIR: pluginCacheDir,
|
|
393
|
-
CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL: "1",
|
|
394
|
-
DISABLE_AUTOUPDATER: "1",
|
|
395
|
-
TMPDIR: tmpDir,
|
|
396
|
-
XDG_CACHE_HOME: cacheDir,
|
|
397
|
-
npm_config_cache: join(cacheDir, "npm"),
|
|
398
|
-
BUN_INSTALL_CACHE_DIR: join(cacheDir, "bun"),
|
|
399
|
-
},
|
|
400
|
-
};
|
|
401
|
-
};
|
|
402
312
|
const formatPrompt = (text) => `${JSON.stringify({
|
|
403
313
|
type: "user",
|
|
404
314
|
message: { role: "user", content: [{ type: "text", text }] },
|
|
@@ -426,15 +336,15 @@ const formatAnswer = (answer) => {
|
|
|
426
336
|
class ClaudeCodeDriverImpl {
|
|
427
337
|
inner = null;
|
|
428
338
|
emitter = new TypedEmitter();
|
|
429
|
-
//
|
|
430
|
-
// so the queue stays type-safe without per-entry casts; the identity pair
|
|
431
|
-
// rides along so off() can drop a queued attach symmetrically.
|
|
339
|
+
// Typed closures retain handler identity so off() can detach queued listeners.
|
|
432
340
|
pendingAttach = [];
|
|
433
341
|
config;
|
|
434
342
|
collectDir = null;
|
|
435
343
|
artifactsDir = null;
|
|
436
344
|
runDir = null;
|
|
437
345
|
isolatedWorkspace = null;
|
|
346
|
+
isolationControlDir = null;
|
|
347
|
+
deferredIsolation;
|
|
438
348
|
deferredContext = null;
|
|
439
349
|
deferredCwd = null;
|
|
440
350
|
deferredHookPath = null;
|
|
@@ -448,6 +358,7 @@ class ClaudeCodeDriverImpl {
|
|
|
448
358
|
deferredInterrupts = 0;
|
|
449
359
|
deferredTerminal = false;
|
|
450
360
|
deferredTurn = null;
|
|
361
|
+
deferredAbort = new AbortController();
|
|
451
362
|
constructor(config) {
|
|
452
363
|
this.config = config;
|
|
453
364
|
}
|
|
@@ -479,15 +390,20 @@ class ClaudeCodeDriverImpl {
|
|
|
479
390
|
}
|
|
480
391
|
let cwd = this.config.cwd ?? (this.config.cwdMode === "artifacts" ? ctx.artifactsDir : ctx.runDir);
|
|
481
392
|
let args = buildArgs(this.config);
|
|
482
|
-
let env = this.config.env;
|
|
393
|
+
let env = agentEnvironment(process.env, this.config.inheritEnv, this.config.env);
|
|
483
394
|
if (this.config.isolation) {
|
|
484
|
-
const
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
395
|
+
const launch = await this.prepareIsolation(ctx);
|
|
396
|
+
cwd = this.isolatedWorkspace;
|
|
397
|
+
args = [
|
|
398
|
+
...buildArgs({ ...this.config, addDirs: undefined }),
|
|
399
|
+
"--no-session-persistence",
|
|
400
|
+
"--strict-mcp-config",
|
|
401
|
+
"--setting-sources",
|
|
402
|
+
"",
|
|
403
|
+
"--settings",
|
|
404
|
+
JSON.stringify(launch.settings),
|
|
405
|
+
];
|
|
406
|
+
env = agentEnvironment(process.env, this.config.inheritEnv, launch.env);
|
|
491
407
|
}
|
|
492
408
|
this.collectDir = cwd;
|
|
493
409
|
this.artifactsDir = ctx.artifactsDir;
|
|
@@ -500,11 +416,12 @@ class ClaudeCodeDriverImpl {
|
|
|
500
416
|
args,
|
|
501
417
|
cwd,
|
|
502
418
|
env,
|
|
419
|
+
inheritEnv: false,
|
|
503
420
|
protocol: "custom",
|
|
504
421
|
parseEvent: makeParseEvent(this.config, cliVersion),
|
|
505
422
|
formatAnswer,
|
|
506
423
|
formatPrompt,
|
|
507
|
-
|
|
424
|
+
idleTimeout: this.config.idleTimeout,
|
|
508
425
|
maxInterrupts: this.config.maxInterrupts,
|
|
509
426
|
});
|
|
510
427
|
for (const queued of this.pendingAttach)
|
|
@@ -534,10 +451,8 @@ class ClaudeCodeDriverImpl {
|
|
|
534
451
|
async collect() {
|
|
535
452
|
if (!this.collectDir)
|
|
536
453
|
return [];
|
|
537
|
-
//
|
|
538
|
-
|
|
539
|
-
// so it cannot swap a checked regular file into a symlink.
|
|
540
|
-
await this.inner?.close();
|
|
454
|
+
// Stop descendants before collecting: terminal events can precede their exit.
|
|
455
|
+
await this.quiesce();
|
|
541
456
|
const artifacts = await walkArtifacts(this.collectDir);
|
|
542
457
|
if (this.isolatedWorkspace && this.artifactsDir) {
|
|
543
458
|
await Promise.all(artifacts.map(async (artifact) => {
|
|
@@ -548,21 +463,23 @@ class ClaudeCodeDriverImpl {
|
|
|
548
463
|
}));
|
|
549
464
|
return artifacts;
|
|
550
465
|
}
|
|
551
|
-
//
|
|
552
|
-
// a walk of any other root must say what its paths are relative to, or
|
|
553
|
-
// the judge and file assertions silently miss every file.
|
|
466
|
+
// Assertions need an explicit root for artifacts collected outside artifactsDir.
|
|
554
467
|
if (this.collectDir === this.artifactsDir)
|
|
555
468
|
return artifacts;
|
|
556
469
|
const root = this.collectDir;
|
|
557
|
-
//
|
|
558
|
-
// work product; only top-level files can collide with these names.
|
|
470
|
+
// Top-level bookkeeping in runDir is not agent work product.
|
|
559
471
|
const withRoot = artifacts.map((a) => ({ ...a, root }));
|
|
560
472
|
return root === this.runDir
|
|
561
473
|
? withRoot.filter((a) => !LUX_BOOKKEEPING_FILES.has(a.path))
|
|
562
474
|
: withRoot;
|
|
563
475
|
}
|
|
476
|
+
async verificationWorkspace() {
|
|
477
|
+
await this.quiesce();
|
|
478
|
+
return this.isolatedWorkspace ?? undefined;
|
|
479
|
+
}
|
|
564
480
|
async quiesce() {
|
|
565
481
|
if (this.config.interactionMode === "defer-resume") {
|
|
482
|
+
this.deferredAbort.abort();
|
|
566
483
|
await this.deferredTurn;
|
|
567
484
|
return;
|
|
568
485
|
}
|
|
@@ -571,6 +488,7 @@ class ClaudeCodeDriverImpl {
|
|
|
571
488
|
async close() {
|
|
572
489
|
try {
|
|
573
490
|
if (this.config.interactionMode === "defer-resume") {
|
|
491
|
+
await this.quiesce();
|
|
574
492
|
this.emitter.removeAllListeners();
|
|
575
493
|
if (this.deferredHookPath) {
|
|
576
494
|
await rm(this.deferredHookPath, { force: true });
|
|
@@ -582,14 +500,26 @@ class ClaudeCodeDriverImpl {
|
|
|
582
500
|
}
|
|
583
501
|
}
|
|
584
502
|
finally {
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
503
|
+
await Promise.all([this.isolatedWorkspace, this.isolationControlDir]
|
|
504
|
+
.filter((path) => path !== null)
|
|
505
|
+
.map((path) => rm(path, { recursive: true, force: true })));
|
|
506
|
+
this.isolatedWorkspace = null;
|
|
507
|
+
this.isolationControlDir = null;
|
|
589
508
|
}
|
|
590
509
|
}
|
|
510
|
+
async prepareIsolation(ctx) {
|
|
511
|
+
this.isolatedWorkspace = await realpath(temporaryDirectory({ prefix: "lux-claude-workspace-" }));
|
|
512
|
+
this.isolationControlDir = await realpath(temporaryDirectory({ prefix: "lux-claude-control-" }));
|
|
513
|
+
await cp(ctx.artifactsDir, this.isolatedWorkspace, { recursive: true });
|
|
514
|
+
await stageSkills(this.config.skillDirs ?? [], this.isolatedWorkspace, ".claude");
|
|
515
|
+
return isolatedLaunch(this.config, ctx, this.isolatedWorkspace, this.isolationControlDir);
|
|
516
|
+
}
|
|
591
517
|
async startDeferred(ctx) {
|
|
592
|
-
|
|
518
|
+
let cwd = this.config.cwd ?? (this.config.cwdMode === "artifacts" ? ctx.artifactsDir : ctx.runDir);
|
|
519
|
+
if (this.config.isolation) {
|
|
520
|
+
this.deferredIsolation = await this.prepareIsolation(ctx);
|
|
521
|
+
cwd = this.isolatedWorkspace;
|
|
522
|
+
}
|
|
593
523
|
this.collectDir = cwd;
|
|
594
524
|
this.artifactsDir = ctx.artifactsDir;
|
|
595
525
|
this.runDir = ctx.runDir;
|
|
@@ -639,56 +569,45 @@ class ClaudeCodeDriverImpl {
|
|
|
639
569
|
else if (resumeWithAnswer && answer?.kind === "ask") {
|
|
640
570
|
input = { input: answer.text };
|
|
641
571
|
}
|
|
642
|
-
const
|
|
572
|
+
const terminal = await runDeferredProcess({
|
|
573
|
+
command: this.config.command,
|
|
574
|
+
args: buildDeferredArgs(this.config, hookPath, this.deferredSessionId ?? undefined, this.deferredIsolation),
|
|
643
575
|
cwd,
|
|
644
|
-
env: {
|
|
645
|
-
...
|
|
576
|
+
env: agentEnvironment(process.env, this.config.inheritEnv, {
|
|
577
|
+
...(this.deferredIsolation?.env ?? this.config.env),
|
|
646
578
|
LUX_RUN_DIR: ctx.runDir,
|
|
647
579
|
LUX_ARTIFACTS_DIR: ctx.artifactsDir,
|
|
648
|
-
...this.config.env,
|
|
649
580
|
...(answer ? { LUX_CLAUDE_DEFERRED_ANSWER: JSON.stringify(answer) } : {}),
|
|
650
|
-
},
|
|
581
|
+
}),
|
|
651
582
|
...input,
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
if (envelope.success &&
|
|
666
|
-
(envelope.data.type === "system" || envelope.data.type === "result") &&
|
|
667
|
-
envelope.data.session_id) {
|
|
668
|
-
this.deferredSessionId = envelope.data.session_id;
|
|
583
|
+
idleTimeoutMs: durationMs(this.config.idleTimeout),
|
|
584
|
+
...(this.config.turnTimeout === undefined
|
|
585
|
+
? {}
|
|
586
|
+
: { turnTimeoutMs: durationMs(this.config.turnTimeout) }),
|
|
587
|
+
signal: AbortSignal.any([ctx.abortSignal, this.deferredAbort.signal]),
|
|
588
|
+
parse: (line) => {
|
|
589
|
+
try {
|
|
590
|
+
const envelope = ClaudeCodeLineSchema.safeParse(JSON.parse(line));
|
|
591
|
+
if (envelope.success &&
|
|
592
|
+
(envelope.data.type === "system" || envelope.data.type === "result") &&
|
|
593
|
+
envelope.data.session_id) {
|
|
594
|
+
this.deferredSessionId = envelope.data.session_id;
|
|
595
|
+
}
|
|
669
596
|
}
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
if (result.timedOut) {
|
|
682
|
-
throw new Error(`no event for ${this.config.idleTimeoutMs}ms`);
|
|
683
|
-
}
|
|
684
|
-
if (result.signal)
|
|
685
|
-
throw new Error(`claude exited from signal ${result.signal}`);
|
|
686
|
-
if (result.exitCode !== 0 && !this.deferredTerminal) {
|
|
687
|
-
throw new Error(`claude exited ${result.exitCode}`);
|
|
688
|
-
}
|
|
689
|
-
if (!resuming && this.deferredReady) {
|
|
690
|
-
throw new Error("claude exited before ready");
|
|
597
|
+
catch {
|
|
598
|
+
// The parser below deliberately ignores unmodeled output.
|
|
599
|
+
}
|
|
600
|
+
return parse(line);
|
|
601
|
+
},
|
|
602
|
+
onEvent: (event) => this.dispatchDeferred(event),
|
|
603
|
+
});
|
|
604
|
+
if (this.deferredReady) {
|
|
605
|
+
throw new Error(terminal?.tag === "error" ? terminal.error.reason : "claude exited before ready");
|
|
691
606
|
}
|
|
607
|
+
if (terminal)
|
|
608
|
+
await this.dispatchDeferred(terminal);
|
|
609
|
+
if (!terminal)
|
|
610
|
+
throw new Error("claude exited before a terminal result");
|
|
692
611
|
}
|
|
693
612
|
async dispatchDeferred(event) {
|
|
694
613
|
if (this.deferredTerminal)
|
|
@@ -769,11 +688,37 @@ class ClaudeCodeDriverImpl {
|
|
|
769
688
|
});
|
|
770
689
|
}
|
|
771
690
|
}
|
|
772
|
-
export const claudeCodeDriver = {
|
|
691
|
+
export const claudeCodeDriver = defineDriver({
|
|
773
692
|
name: "claude-code",
|
|
774
693
|
configSchema: ClaudeCodeDriverConfigSchema,
|
|
694
|
+
runtime: (config) => ({
|
|
695
|
+
commands: [config.command],
|
|
696
|
+
capabilities: {
|
|
697
|
+
interactive: true,
|
|
698
|
+
"tool-calls": true,
|
|
699
|
+
"tool-results": true,
|
|
700
|
+
artifacts: true,
|
|
701
|
+
subagents: true,
|
|
702
|
+
usage: true,
|
|
703
|
+
cost: true,
|
|
704
|
+
isolation: Boolean(config.isolation),
|
|
705
|
+
},
|
|
706
|
+
}),
|
|
707
|
+
experiment: {
|
|
708
|
+
version: "1",
|
|
709
|
+
prepare: prepareClaudeExperimentConfig,
|
|
710
|
+
identity: async (config, { rootDir }) => {
|
|
711
|
+
const configRoot = claudeConfigRoot({ config });
|
|
712
|
+
return {
|
|
713
|
+
configRoot,
|
|
714
|
+
userBehaviorHash: await claudeUserBehaviorHash(configRoot),
|
|
715
|
+
sources: await configuredClaudeSourceHashes({ name: "claude-code", config }, rootDir),
|
|
716
|
+
};
|
|
717
|
+
},
|
|
718
|
+
},
|
|
719
|
+
selectHarness: selectModelAndReasoningEffort,
|
|
775
720
|
create: (config) => new ClaudeCodeDriverImpl(config),
|
|
776
|
-
};
|
|
721
|
+
});
|
|
777
722
|
// Internal exports for testing
|
|
778
|
-
export { buildArgs, buildDeferredArgs,
|
|
723
|
+
export { buildArgs, buildDeferredArgs, copyRegularFileNoFollow, formatAnswer, formatPrompt, makeParseEvent, walkArtifacts, };
|
|
779
724
|
//# sourceMappingURL=index.js.map
|