@prismatic-io/lux 0.0.2-preview.3 → 0.0.2-preview.32
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 +7 -5
- 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 +4 -1
- package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
- package/lib/assertions/core/command-exits-zero.js +50 -7
- 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/helpers.d.ts +2 -7
- package/lib/assertions/core/helpers.d.ts.map +1 -1
- package/lib/assertions/core/helpers.js +2 -6
- package/lib/assertions/core/helpers.js.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/rubric/index.d.ts +28 -3
- package/lib/assertions/rubric/index.d.ts.map +1 -1
- package/lib/assertions/rubric/index.js +59 -13
- 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 +181 -28
- package/lib/assertions/rubric/internal.js.map +1 -1
- package/lib/authoring.d.ts +36 -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 +26 -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 +1408 -0
- package/lib/cli/output-schemas.d.ts.map +1 -0
- package/lib/cli/output-schemas.js +91 -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 +779 -646
- package/lib/cli/program.js.map +1 -1
- package/lib/cli/render/reporter.d.ts.map +1 -1
- package/lib/cli/render/reporter.js +48 -8
- package/lib/cli/render/reporter.js.map +1 -1
- package/lib/cli/run-options.d.ts +20 -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 +197 -0
- package/lib/container/driver.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 +12 -0
- package/lib/container/resources.d.ts.map +1 -0
- package/lib/container/resources.js +133 -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 +8 -0
- package/lib/core/artifact-evidence.d.ts.map +1 -1
- package/lib/core/artifact-evidence.js +36 -4
- package/lib/core/artifact-evidence.js.map +1 -1
- package/lib/core/assertion.d.ts +20 -2
- package/lib/core/assertion.d.ts.map +1 -1
- package/lib/core/assertion.js +19 -1
- package/lib/core/assertion.js.map +1 -1
- package/lib/core/case.d.ts +111 -3
- package/lib/core/case.d.ts.map +1 -1
- package/lib/core/case.js +17 -2
- 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 +36 -0
- package/lib/core/events.d.ts.map +1 -1
- package/lib/core/events.js +12 -2
- package/lib/core/events.js.map +1 -1
- package/lib/core/experiment.d.ts +32 -2
- package/lib/core/experiment.d.ts.map +1 -1
- package/lib/core/experiment.js +35 -18
- 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 +31 -19
- package/lib/core/model-cli.js.map +1 -1
- package/lib/core/platform-process.d.ts +6 -1
- package/lib/core/platform-process.d.ts.map +1 -1
- package/lib/core/platform-process.js +49 -11
- package/lib/core/platform-process.js.map +1 -1
- package/lib/core/rubric.d.ts +1 -0
- package/lib/core/rubric.d.ts.map +1 -1
- package/lib/core/run.d.ts +293 -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 +12 -0
- package/lib/core/wire.d.ts.map +1 -1
- package/lib/core/wire.js +5 -1
- package/lib/core/wire.js.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 +180 -10
- package/lib/drivers/claude-code/index.d.ts.map +1 -1
- package/lib/drivers/claude-code/index.js +186 -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 +66 -5
- package/lib/drivers/codex/config.d.ts.map +1 -1
- package/lib/drivers/codex/config.js +39 -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 +138 -4
- package/lib/drivers/codex/index.d.ts.map +1 -1
- package/lib/drivers/codex/index.js +112 -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 +197 -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 +143 -0
- package/lib/drivers/shared/experiment-policy.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 +22 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +20 -6
- 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 +19 -3
- package/lib/orchestrator/compare.d.ts.map +1 -1
- package/lib/orchestrator/compare.js +32 -6
- 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 +179 -1
- package/lib/orchestrator/config.d.ts.map +1 -1
- package/lib/orchestrator/config.js +18 -4
- 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 +121 -33
- 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.map +1 -1
- package/lib/orchestrator/experiment-contracts.d.ts +30 -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 +44 -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 +56 -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 +90 -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 +61 -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 +52 -0
- 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 +33 -3
- 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 +2 -1
- package/lib/orchestrator/grading.d.ts.map +1 -1
- package/lib/orchestrator/grading.js +46 -31
- 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 +81 -14
- 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 +18 -2
- package/lib/orchestrator/orchestrator.d.ts.map +1 -1
- package/lib/orchestrator/orchestrator.js +50 -168
- 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 +158 -0
- package/lib/orchestrator/paired-effects.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 +9 -1
- 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 +66 -12
- 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 +27 -17
- 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 +77 -0
- package/lib/orchestrator/suite-summary.d.ts.map +1 -1
- package/lib/orchestrator/suite-summary.js +61 -12
- 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 +558 -0
- package/lib/previewer/server.js.map +1 -0
- package/package.json +3 -3
- 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 +8 -12
- package/src/assertions/authoring.ts +2 -0
- package/src/assertions/core/command-exits-zero.ts +61 -7
- package/src/assertions/core/event-checks.ts +64 -3
- package/src/assertions/core/helpers.ts +3 -6
- package/src/assertions/core/index.ts +2 -0
- package/src/assertions/core/resource-checks.ts +38 -5
- package/src/assertions/rubric/index.ts +68 -13
- package/src/assertions/rubric/internal.ts +227 -27
- package/src/authoring.ts +345 -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 +117 -0
- package/src/cli/init-templates.ts +238 -0
- package/src/cli/init.ts +53 -184
- package/src/cli/output-schemas.ts +106 -0
- package/src/cli/program.ts +691 -721
- package/src/cli/render/reporter.ts +50 -8
- package/src/cli/run-options.ts +132 -25
- package/src/cli/view.ts +129 -0
- package/src/container/driver.ts +211 -0
- package/src/container/protocol.ts +48 -0
- package/src/container/resources.ts +153 -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 +47 -4
- package/src/core/assertion.ts +21 -1
- package/src/core/case.ts +21 -3
- 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 +14 -2
- package/src/core/experiment.ts +64 -24
- 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 +52 -23
- package/src/core/platform-process.ts +58 -10
- package/src/core/run.ts +31 -0
- package/src/core/usage.ts +8 -0
- package/src/core/wire.ts +5 -1
- 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 +216 -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 +50 -8
- package/src/drivers/codex/exec-events.ts +258 -0
- package/src/drivers/codex/index.ts +144 -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 +214 -0
- package/src/drivers/shared/experiment-policy.ts +195 -0
- package/src/drivers/subprocess/index.ts +55 -12
- package/src/index.ts +115 -10
- 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 +41 -6
- package/src/orchestrator/comparison-identity.ts +2 -0
- package/src/orchestrator/config.ts +20 -3
- package/src/orchestrator/discover.ts +8 -1
- package/src/orchestrator/doctor.ts +189 -28
- package/src/orchestrator/driver-capabilities.ts +21 -0
- package/src/orchestrator/driver-identity.ts +69 -0
- package/src/orchestrator/experiment-context.ts +3 -2
- package/src/orchestrator/experiment-corpus.ts +53 -37
- package/src/orchestrator/experiment-effects.ts +61 -0
- package/src/orchestrator/experiment-evaluation.ts +71 -10
- package/src/orchestrator/experiment-identity.ts +42 -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 +77 -0
- 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 +67 -28
- 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 +98 -13
- package/src/orchestrator/optimization-lifecycle.ts +4 -1
- package/src/orchestrator/orchestrator.ts +92 -216
- package/src/orchestrator/paired-effects.ts +209 -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 +77 -11
- package/src/orchestrator/run-lifecycle.ts +4 -2
- package/src/orchestrator/run-workspace.ts +62 -0
- package/src/orchestrator/suite-compare.ts +29 -19
- package/src/orchestrator/suite-runs.ts +13 -2
- package/src/orchestrator/suite-summary.ts +122 -13
- package/src/previewer/artifacts.ts +221 -0
- package/src/previewer/server.ts +787 -0
- package/viewer/app.css +2079 -0
- package/viewer/app.js +627 -0
- package/viewer/artifact-view.js +48 -0
- package/viewer/charts.js +86 -0
- package/viewer/detail.js +1237 -0
- package/viewer/format.js +129 -0
- package/viewer/index.html +151 -0
- package/lib/answerers/scripted/index.d.ts +0 -8
- package/lib/answerers/scripted/index.d.ts.map +0 -1
- package/lib/answerers/scripted/index.js +0 -163
- package/lib/answerers/scripted/index.js.map +0 -1
- 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 -85
- package/skills/lux/references/cli.md +0 -102
- package/skills/lux/references/eval-authoring.md +0 -105
- package/src/answerers/scripted/index.ts +0 -186
- 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
|
@@ -3,32 +3,37 @@ import { homedir } from "node:os";
|
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { createInterface } from "node:readline";
|
|
5
5
|
import { temporaryDirectory } from "tempy";
|
|
6
|
-
import {
|
|
6
|
+
import { agentEnvironment } from "../../core/agent-environment.js";
|
|
7
|
+
import { durationMs } from "../../core/duration.js";
|
|
7
8
|
import {
|
|
8
9
|
type AgentDriver,
|
|
9
10
|
type Answer,
|
|
10
11
|
type Artifact,
|
|
11
12
|
type DriverEventMap,
|
|
12
|
-
|
|
13
|
+
defineDriver,
|
|
13
14
|
discoverCliVersion,
|
|
14
|
-
type ParsedDriverEvent,
|
|
15
15
|
type ReadyState,
|
|
16
16
|
type StartContext,
|
|
17
|
+
selectModelAndReasoningEffort,
|
|
17
18
|
spawnManagedProcess,
|
|
18
19
|
type TokenUsage,
|
|
19
20
|
TypedEmitter,
|
|
20
|
-
toolResultProgress,
|
|
21
21
|
} from "../../core/index.js";
|
|
22
|
+
import { resolveExecutable } from "../../core/platform-process.js";
|
|
23
|
+
import { copyRegularFileNoFollow } from "../../core/secure-copy.js";
|
|
22
24
|
import { walkArtifacts } from "../shared/artifacts.js";
|
|
23
|
-
import {
|
|
25
|
+
import { configuredClaudeSourceHashes } from "../shared/experiment-behavior.js";
|
|
26
|
+
import { prepareCodexExperimentConfig } from "../shared/experiment-policy.js";
|
|
24
27
|
import { subprocessDriver } from "../subprocess/index.js";
|
|
25
28
|
import {
|
|
26
29
|
type AppTurnFacets,
|
|
30
|
+
appAgentLifecycleProgress,
|
|
27
31
|
appItemProgress,
|
|
28
32
|
appItemToolName,
|
|
29
33
|
appTurnLabel,
|
|
30
34
|
appUsage,
|
|
31
35
|
asRecord,
|
|
36
|
+
CodexSubagentTracker,
|
|
32
37
|
messageOf,
|
|
33
38
|
type RpcId,
|
|
34
39
|
type RpcRecord,
|
|
@@ -39,266 +44,14 @@ import {
|
|
|
39
44
|
type CodexConfigValue,
|
|
40
45
|
type CodexDriverConfig,
|
|
41
46
|
CodexDriverConfigSchema,
|
|
47
|
+
codexConfigOverrides,
|
|
42
48
|
} from "./config.js";
|
|
43
49
|
|
|
50
|
+
import { makeParseEvent } from "./exec-events.js";
|
|
51
|
+
|
|
44
52
|
const LUX_BOOKKEEPING_FILES = new Set(["events.jsonl", "case.json", "run.json", "grading.json"]);
|
|
45
53
|
const commandName = (command: string): string => command.split(/[\\/]/).at(-1) ?? command;
|
|
46
54
|
|
|
47
|
-
const CodexUsageSchema = z.object({
|
|
48
|
-
input_tokens: z.number().nonnegative().catch(0),
|
|
49
|
-
cached_input_tokens: z.number().nonnegative().catch(0),
|
|
50
|
-
output_tokens: z.number().nonnegative().catch(0),
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
const parseUsage = (raw: unknown): TokenUsage | null => {
|
|
54
|
-
const usage = CodexUsageSchema.safeParse(raw).data;
|
|
55
|
-
if (!usage) return null;
|
|
56
|
-
return {
|
|
57
|
-
input: Math.max(0, usage.input_tokens - usage.cached_input_tokens),
|
|
58
|
-
output: usage.output_tokens,
|
|
59
|
-
cacheRead: usage.cached_input_tokens,
|
|
60
|
-
cacheCreation: 0,
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const resultText = (content: unknown): string => {
|
|
65
|
-
if (typeof content === "string") return content;
|
|
66
|
-
if (!Array.isArray(content)) return "";
|
|
67
|
-
return content
|
|
68
|
-
.filter(
|
|
69
|
-
(block): block is { type: "text"; text: string } =>
|
|
70
|
-
typeof block === "object" &&
|
|
71
|
-
block !== null &&
|
|
72
|
-
(block as { type?: unknown }).type === "text" &&
|
|
73
|
-
typeof (block as { text?: unknown }).text === "string",
|
|
74
|
-
)
|
|
75
|
-
.map((block) => block.text)
|
|
76
|
-
.join("\n");
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
const startedItemProgress = (
|
|
80
|
-
item: Record<string, unknown>,
|
|
81
|
-
id: string,
|
|
82
|
-
): ParsedDriverEvent | null => {
|
|
83
|
-
if (item.type === "command_execution") {
|
|
84
|
-
return {
|
|
85
|
-
tag: "progress",
|
|
86
|
-
progress: {
|
|
87
|
-
id: `tc-${id}`,
|
|
88
|
-
kind: "tool-call",
|
|
89
|
-
payload: { name: "command_execution", input: { command: item.command }, toolUseId: id },
|
|
90
|
-
ts: Date.now(),
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
if (item.type === "mcp_tool_call") {
|
|
95
|
-
const tool = typeof item.tool === "string" ? item.tool : String(item.name ?? "mcp_tool_call");
|
|
96
|
-
const server = typeof item.server === "string" ? item.server : undefined;
|
|
97
|
-
return {
|
|
98
|
-
tag: "progress",
|
|
99
|
-
progress: {
|
|
100
|
-
id: `tc-${id}`,
|
|
101
|
-
kind: "tool-call",
|
|
102
|
-
payload: {
|
|
103
|
-
name: tool,
|
|
104
|
-
input: item.arguments ?? item.input,
|
|
105
|
-
toolUseId: id,
|
|
106
|
-
...(server ? { server } : {}),
|
|
107
|
-
},
|
|
108
|
-
ts: Date.now(),
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
if (item.type === "web_search") {
|
|
113
|
-
return {
|
|
114
|
-
tag: "progress",
|
|
115
|
-
progress: {
|
|
116
|
-
id: `tc-${id}`,
|
|
117
|
-
kind: "tool-call",
|
|
118
|
-
payload: { name: "web_search", input: { query: item.query }, toolUseId: id },
|
|
119
|
-
ts: Date.now(),
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
if (item.type === "file_change") {
|
|
124
|
-
return {
|
|
125
|
-
tag: "progress",
|
|
126
|
-
progress: {
|
|
127
|
-
id: `tc-${id}`,
|
|
128
|
-
kind: "tool-call",
|
|
129
|
-
payload: { name: "file_change", input: { changes: item.changes }, toolUseId: id },
|
|
130
|
-
ts: Date.now(),
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
return null;
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
const completedItemProgress = (
|
|
138
|
-
item: Record<string, unknown>,
|
|
139
|
-
id: string,
|
|
140
|
-
): ParsedDriverEvent | null => {
|
|
141
|
-
if (item.type === "agent_message" && typeof item.text === "string") {
|
|
142
|
-
return {
|
|
143
|
-
tag: "progress",
|
|
144
|
-
progress: {
|
|
145
|
-
id: `am-${id}`,
|
|
146
|
-
kind: "agent-message",
|
|
147
|
-
payload: { text: item.text },
|
|
148
|
-
ts: Date.now(),
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
if (item.type === "reasoning") {
|
|
153
|
-
const text = typeof item.text === "string" ? item.text : item.summary;
|
|
154
|
-
return {
|
|
155
|
-
tag: "progress",
|
|
156
|
-
progress: { id: `reasoning-${id}`, kind: "reasoning", payload: { text }, ts: Date.now() },
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
if (item.type === "mcp_tool_call") {
|
|
160
|
-
const tool = typeof item.tool === "string" ? item.tool : String(item.name ?? "mcp_tool_call");
|
|
161
|
-
const raw =
|
|
162
|
-
item.result && typeof item.result === "object"
|
|
163
|
-
? (item.result as Record<string, unknown>)
|
|
164
|
-
: item;
|
|
165
|
-
const content = raw.content ?? item.result ?? [];
|
|
166
|
-
const structuredContent = raw.structuredContent ?? raw.structured_content;
|
|
167
|
-
return {
|
|
168
|
-
tag: "progress",
|
|
169
|
-
progress: toolResultProgress(
|
|
170
|
-
0,
|
|
171
|
-
{
|
|
172
|
-
name: tool,
|
|
173
|
-
toolUseId: id,
|
|
174
|
-
content,
|
|
175
|
-
...(structuredContent && typeof structuredContent === "object"
|
|
176
|
-
? { structuredContent: structuredContent as Record<string, unknown> }
|
|
177
|
-
: {}),
|
|
178
|
-
isError:
|
|
179
|
-
raw.isError === true ||
|
|
180
|
-
raw.is_error === true ||
|
|
181
|
-
item.status === "failed" ||
|
|
182
|
-
(item.error !== undefined && item.error !== null),
|
|
183
|
-
text: resultText(content) || (typeof item.error === "string" ? item.error : ""),
|
|
184
|
-
},
|
|
185
|
-
Date.now(),
|
|
186
|
-
),
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
if (item.type === "command_execution") {
|
|
190
|
-
const output = item.aggregated_output ?? item.output ?? "";
|
|
191
|
-
const exitCode = typeof item.exit_code === "number" ? item.exit_code : undefined;
|
|
192
|
-
return {
|
|
193
|
-
tag: "progress",
|
|
194
|
-
progress: toolResultProgress(
|
|
195
|
-
0,
|
|
196
|
-
{
|
|
197
|
-
name: "command_execution",
|
|
198
|
-
toolUseId: id,
|
|
199
|
-
content: { output, ...(exitCode !== undefined ? { exitCode } : {}) },
|
|
200
|
-
isError: item.status === "failed" || (exitCode !== undefined && exitCode !== 0),
|
|
201
|
-
text: typeof output === "string" ? output : JSON.stringify(output),
|
|
202
|
-
},
|
|
203
|
-
Date.now(),
|
|
204
|
-
),
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
if (item.type === "web_search" || item.type === "file_change") {
|
|
208
|
-
const isWebSearch = item.type === "web_search";
|
|
209
|
-
const content = isWebSearch
|
|
210
|
-
? { query: item.query }
|
|
211
|
-
: { changes: item.changes, status: item.status };
|
|
212
|
-
let text = JSON.stringify(item.changes ?? []);
|
|
213
|
-
if (isWebSearch) text = typeof item.query === "string" ? item.query : "";
|
|
214
|
-
return {
|
|
215
|
-
tag: "progress",
|
|
216
|
-
progress: toolResultProgress(
|
|
217
|
-
0,
|
|
218
|
-
{
|
|
219
|
-
name: item.type,
|
|
220
|
-
toolUseId: id,
|
|
221
|
-
content,
|
|
222
|
-
isError: item.status === "failed",
|
|
223
|
-
text,
|
|
224
|
-
},
|
|
225
|
-
Date.now(),
|
|
226
|
-
),
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
return null;
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
const itemProgress = (
|
|
233
|
-
item: Record<string, unknown>,
|
|
234
|
-
phase: "started" | "completed",
|
|
235
|
-
): ParsedDriverEvent | null => {
|
|
236
|
-
const id = typeof item.id === "string" ? item.id : `${String(item.type)}-${Date.now()}`;
|
|
237
|
-
return phase === "started" ? startedItemProgress(item, id) : completedItemProgress(item, id);
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
const makeParseEvent = (config: CodexDriverConfig, cliVersion?: string) => {
|
|
241
|
-
let threadId: string | undefined;
|
|
242
|
-
return (line: string): ParsedDriverEvent | ParsedDriverEvent[] | null => {
|
|
243
|
-
let event: Record<string, unknown>;
|
|
244
|
-
try {
|
|
245
|
-
event = JSON.parse(line) as Record<string, unknown>;
|
|
246
|
-
} catch {
|
|
247
|
-
return null;
|
|
248
|
-
}
|
|
249
|
-
if (event.type === "thread.started") {
|
|
250
|
-
threadId = typeof event.thread_id === "string" ? event.thread_id : undefined;
|
|
251
|
-
return {
|
|
252
|
-
tag: "ready",
|
|
253
|
-
ready: {
|
|
254
|
-
agentId: "codex",
|
|
255
|
-
model: config.model,
|
|
256
|
-
detail: { ...(threadId ? { threadId } : {}), ...(cliVersion ? { cliVersion } : {}) },
|
|
257
|
-
},
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
if (event.type === "item.started" || event.type === "item.completed") {
|
|
261
|
-
if (!event.item || typeof event.item !== "object") return null;
|
|
262
|
-
return itemProgress(
|
|
263
|
-
event.item as Record<string, unknown>,
|
|
264
|
-
event.type === "item.started" ? "started" : "completed",
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
|
-
if (event.type === "turn.completed") {
|
|
268
|
-
const usage = parseUsage(event.usage);
|
|
269
|
-
const events: ParsedDriverEvent[] = [];
|
|
270
|
-
if (usage) {
|
|
271
|
-
events.push({
|
|
272
|
-
tag: "progress",
|
|
273
|
-
progress: {
|
|
274
|
-
id: `usage-${threadId ?? Date.now()}`,
|
|
275
|
-
kind: "usage",
|
|
276
|
-
payload: usage,
|
|
277
|
-
ts: Date.now(),
|
|
278
|
-
},
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
events.push({
|
|
282
|
-
tag: "done",
|
|
283
|
-
done: { exitReason: "done", summary: { threadId, ...(usage ? { usage } : {}) } },
|
|
284
|
-
});
|
|
285
|
-
return events;
|
|
286
|
-
}
|
|
287
|
-
if (event.type === "turn.failed" || event.type === "error") {
|
|
288
|
-
const nestedMessage =
|
|
289
|
-
event.error && typeof event.error === "object"
|
|
290
|
-
? (event.error as Record<string, unknown>).message
|
|
291
|
-
: undefined;
|
|
292
|
-
let message = "codex reported an error";
|
|
293
|
-
if (typeof event.message === "string") message = event.message;
|
|
294
|
-
else if (typeof event.error === "string") message = event.error;
|
|
295
|
-
else if (typeof nestedMessage === "string") message = nestedMessage;
|
|
296
|
-
return { tag: "error", error: { exitReason: "error", reason: message } };
|
|
297
|
-
}
|
|
298
|
-
return null;
|
|
299
|
-
};
|
|
300
|
-
};
|
|
301
|
-
|
|
302
55
|
class CodexAppServerDriverImpl implements AgentDriver {
|
|
303
56
|
private readonly emitter = new TypedEmitter<DriverEventMap>();
|
|
304
57
|
private readonly config: CodexDriverConfig;
|
|
@@ -308,6 +61,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
308
61
|
private runDir: string | null = null;
|
|
309
62
|
private isolatedWorkspace: string | null = null;
|
|
310
63
|
private isolatedStateDir: string | null = null;
|
|
64
|
+
private isolationConfig: Record<string, CodexConfigValue> = {};
|
|
311
65
|
private threadId: string | null = null;
|
|
312
66
|
private cliVersion: string | undefined;
|
|
313
67
|
private nextRequestId = 1;
|
|
@@ -316,7 +70,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
316
70
|
{ resolve: (result: RpcRecord) => void; reject: (error: Error) => void }
|
|
317
71
|
>();
|
|
318
72
|
private readonly interrupts = new Map<string, { id: RpcId; method: string; params: RpcRecord }>();
|
|
319
|
-
private readonly
|
|
73
|
+
private readonly subagents = new CodexSubagentTracker();
|
|
320
74
|
private readonly turnFacets = new Map<string, AppTurnFacets>();
|
|
321
75
|
private interruptCount = 0;
|
|
322
76
|
private idleTimer: NodeJS.Timeout | null = null;
|
|
@@ -345,6 +99,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
345
99
|
let cwd =
|
|
346
100
|
this.config.cwd ?? (this.config.cwdMode === "artifacts" ? ctx.artifactsDir : ctx.runDir);
|
|
347
101
|
let env = this.config.env;
|
|
102
|
+
let launchCommand = this.config.command;
|
|
348
103
|
if (this.config.isolation) {
|
|
349
104
|
const workspace = await realpath(temporaryDirectory({ prefix: "lux-codex-workspace-" }));
|
|
350
105
|
await cp(ctx.artifactsDir, workspace, { recursive: true });
|
|
@@ -372,6 +127,45 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
372
127
|
CODEX_CONFIG_HOME: stateDir,
|
|
373
128
|
};
|
|
374
129
|
}
|
|
130
|
+
if (this.config.isolation) {
|
|
131
|
+
const reads = await Promise.all(
|
|
132
|
+
this.config.isolation.allowRead.map((path) => realpath(path)),
|
|
133
|
+
);
|
|
134
|
+
const executable = resolveExecutable(
|
|
135
|
+
this.config.command,
|
|
136
|
+
{ ...agentEnvironment(process.env, this.config.inheritEnv), ...env },
|
|
137
|
+
undefined,
|
|
138
|
+
cwd,
|
|
139
|
+
);
|
|
140
|
+
if (executable) {
|
|
141
|
+
launchCommand = await realpath(executable);
|
|
142
|
+
reads.push(executable, launchCommand);
|
|
143
|
+
}
|
|
144
|
+
// Native filesystem tools relaunch the CLI inside the subject sandbox.
|
|
145
|
+
// Workspace requirements reload process configuration during a turn.
|
|
146
|
+
// A thread-only profile is accepted at startup but fails that reload.
|
|
147
|
+
this.isolationConfig = {
|
|
148
|
+
allow_login_shell: false,
|
|
149
|
+
project_doc_max_bytes: 0,
|
|
150
|
+
projects: { [cwd]: { trust_level: "untrusted" } },
|
|
151
|
+
default_permissions: "lux-isolated",
|
|
152
|
+
permissions: {
|
|
153
|
+
"lux-isolated": {
|
|
154
|
+
filesystem: {
|
|
155
|
+
":minimal": "read",
|
|
156
|
+
[cwd]: "write",
|
|
157
|
+
...Object.fromEntries(reads.map((path) => [path, "read"])),
|
|
158
|
+
},
|
|
159
|
+
network: { enabled: true },
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
features: {
|
|
163
|
+
...((this.config.config?.features as Record<string, CodexConfigValue>) ?? {}),
|
|
164
|
+
shell_snapshot: false,
|
|
165
|
+
shell_snapshot_v2: false,
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
375
169
|
this.collectDir = cwd;
|
|
376
170
|
this.artifactsDir = ctx.artifactsDir;
|
|
377
171
|
this.runDir = ctx.runDir;
|
|
@@ -382,16 +176,23 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
382
176
|
commandName(this.config.command) === "codex"
|
|
383
177
|
? await discoverCliVersion(this.config.command)
|
|
384
178
|
: undefined;
|
|
385
|
-
const managed = spawnManagedProcess(
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
...
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
179
|
+
const managed = spawnManagedProcess(
|
|
180
|
+
launchCommand,
|
|
181
|
+
buildAppServerArgs({
|
|
182
|
+
...this.config,
|
|
183
|
+
config: { ...this.config.config, ...this.isolationConfig },
|
|
184
|
+
}),
|
|
185
|
+
{
|
|
186
|
+
cwd,
|
|
187
|
+
env: {
|
|
188
|
+
...agentEnvironment(process.env, this.config.inheritEnv),
|
|
189
|
+
LUX_RUN_DIR: ctx.runDir,
|
|
190
|
+
LUX_ARTIFACTS_DIR: ctx.artifactsDir,
|
|
191
|
+
...env,
|
|
192
|
+
},
|
|
193
|
+
signal: ctx.abortSignal,
|
|
392
194
|
},
|
|
393
|
-
|
|
394
|
-
});
|
|
195
|
+
);
|
|
395
196
|
this.process = managed;
|
|
396
197
|
managed.child.stderr.setEncoding("utf8");
|
|
397
198
|
let stderrTail = "";
|
|
@@ -436,41 +237,35 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
436
237
|
capabilities: { experimentalApi: true, requestAttestation: false },
|
|
437
238
|
});
|
|
438
239
|
this.notify("initialized");
|
|
439
|
-
const isolationReads = this.config.isolation
|
|
440
|
-
? await Promise.all(this.config.isolation.allowRead.map((path) => realpath(path)))
|
|
441
|
-
: [];
|
|
442
240
|
const threadConfig: Record<string, CodexConfigValue> = {
|
|
443
|
-
...(this.config
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
? {
|
|
447
|
-
project_doc_max_bytes: 0,
|
|
448
|
-
projects: { [cwd]: { trust_level: "untrusted" } },
|
|
449
|
-
permissions: {
|
|
450
|
-
"lux-isolated": {
|
|
451
|
-
filesystem: {
|
|
452
|
-
":minimal": "read",
|
|
453
|
-
":workspace_roots": { ".": "write" },
|
|
454
|
-
...Object.fromEntries(isolationReads.map((path) => [path, "read"])),
|
|
455
|
-
},
|
|
456
|
-
network: { enabled: true },
|
|
457
|
-
},
|
|
458
|
-
},
|
|
459
|
-
}
|
|
241
|
+
...codexConfigOverrides(this.config),
|
|
242
|
+
...(this.config.reasoningEffort
|
|
243
|
+
? { model_reasoning_effort: this.config.reasoningEffort }
|
|
460
244
|
: {}),
|
|
245
|
+
...this.isolationConfig,
|
|
461
246
|
};
|
|
462
247
|
const started = await this.request("thread/start", {
|
|
463
248
|
model: this.config.model,
|
|
464
249
|
cwd,
|
|
465
|
-
runtimeWorkspaceRoots: this.config.
|
|
250
|
+
runtimeWorkspaceRoots: this.config.isolation
|
|
251
|
+
? [cwd, ...(this.config.addDirs ?? [])]
|
|
252
|
+
: (this.config.addDirs ?? []),
|
|
466
253
|
approvalPolicy: this.config.approvalPolicy,
|
|
467
|
-
approvalsReviewer:
|
|
254
|
+
approvalsReviewer: this.config.approvalsReviewer,
|
|
468
255
|
...(this.config.isolation
|
|
469
256
|
? { permissions: "lux-isolated" }
|
|
470
257
|
: { sandbox: this.config.sandbox }),
|
|
471
258
|
config: threadConfig,
|
|
472
259
|
ephemeral: this.config.ephemeral,
|
|
473
260
|
});
|
|
261
|
+
if (
|
|
262
|
+
this.config.approvalsReviewer === "auto_review" &&
|
|
263
|
+
started.approvalsReviewer !== "auto_review"
|
|
264
|
+
) {
|
|
265
|
+
throw new Error(
|
|
266
|
+
"codex app-server did not enable the requested auto_review approvals reviewer",
|
|
267
|
+
);
|
|
268
|
+
}
|
|
474
269
|
const thread = asRecord(started.thread);
|
|
475
270
|
if (!thread || typeof thread.id !== "string") {
|
|
476
271
|
throw new Error("codex app-server returned an invalid thread/start response");
|
|
@@ -481,6 +276,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
481
276
|
model: typeof started.model === "string" ? started.model : this.config.model,
|
|
482
277
|
detail: {
|
|
483
278
|
threadId: thread.id,
|
|
279
|
+
approvalsReviewer: this.config.approvalsReviewer,
|
|
484
280
|
...(typeof thread.sessionId === "string" ? { sessionId: thread.sessionId } : {}),
|
|
485
281
|
...(this.cliVersion ? { cliVersion: this.cliVersion } : {}),
|
|
486
282
|
},
|
|
@@ -586,6 +382,11 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
586
382
|
: withRoot;
|
|
587
383
|
}
|
|
588
384
|
|
|
385
|
+
async verificationWorkspace(): Promise<string | undefined> {
|
|
386
|
+
await this.quiesce();
|
|
387
|
+
return this.isolatedWorkspace ?? undefined;
|
|
388
|
+
}
|
|
389
|
+
|
|
589
390
|
async quiesce(): Promise<void> {
|
|
590
391
|
this.clearIdleTimer();
|
|
591
392
|
await this.process?.terminate();
|
|
@@ -659,6 +460,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
659
460
|
}
|
|
660
461
|
|
|
661
462
|
private async dispatch(message: RpcRecord): Promise<void> {
|
|
463
|
+
if (this.terminal) return;
|
|
662
464
|
const method = typeof message.method === "string" ? message.method : "";
|
|
663
465
|
const params = asRecord(message.params) ?? {};
|
|
664
466
|
if (message.id !== undefined && method) {
|
|
@@ -669,6 +471,14 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
669
471
|
await this.handleItemNotification(method, params);
|
|
670
472
|
return;
|
|
671
473
|
}
|
|
474
|
+
if (
|
|
475
|
+
(method === "thread/tokenUsage/updated" ||
|
|
476
|
+
method === "turn/completed" ||
|
|
477
|
+
method === "error") &&
|
|
478
|
+
typeof params.threadId === "string" &&
|
|
479
|
+
params.threadId !== this.threadId
|
|
480
|
+
)
|
|
481
|
+
return;
|
|
672
482
|
if (method === "thread/tokenUsage/updated") {
|
|
673
483
|
this.handleTokenUsageNotification(params);
|
|
674
484
|
return;
|
|
@@ -702,28 +512,28 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
702
512
|
const toolName = item ? appItemToolName(item) : null;
|
|
703
513
|
if (toolName && !facets.tools.includes(toolName)) facets.tools.push(toolName);
|
|
704
514
|
if (turnId) this.turnFacets.set(turnId, facets);
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
515
|
+
const threadId = typeof params.threadId === "string" ? params.threadId : undefined;
|
|
516
|
+
this.subagents.record(item, threadId, this.threadId);
|
|
517
|
+
const agent = this.subagents.attribution(threadId, this.threadId);
|
|
708
518
|
const event = item
|
|
709
|
-
? appItemProgress(item, method === "item/started" ? "started" : "completed",
|
|
519
|
+
? appItemProgress(item, method === "item/started" ? "started" : "completed", agent)
|
|
710
520
|
: null;
|
|
711
521
|
if (event?.tag === "progress") await this.emitter.emit("progress", event.progress);
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
522
|
+
if (item) {
|
|
523
|
+
for (const lifecycle of appAgentLifecycleProgress(
|
|
524
|
+
item,
|
|
525
|
+
method === "item/started" ? "started" : "completed",
|
|
526
|
+
agent,
|
|
527
|
+
event?.tag === "progress" ? event.progress.ts : Date.now(),
|
|
528
|
+
)) {
|
|
529
|
+
await this.emitter.emit("progress", lifecycle);
|
|
530
|
+
}
|
|
721
531
|
}
|
|
722
532
|
}
|
|
723
533
|
|
|
724
534
|
private handleTokenUsageNotification(params: RpcRecord): void {
|
|
725
535
|
const tokenUsage = asRecord(params.tokenUsage);
|
|
726
|
-
const usage = appUsage(tokenUsage?.last);
|
|
536
|
+
const usage = appUsage(tokenUsage?.total) ?? appUsage(tokenUsage?.last);
|
|
727
537
|
if (usage) this.latestUsage = usage;
|
|
728
538
|
}
|
|
729
539
|
|
|
@@ -775,6 +585,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
775
585
|
}
|
|
776
586
|
|
|
777
587
|
private handleErrorNotification(params: RpcRecord): void {
|
|
588
|
+
if (params.willRetry === true) return;
|
|
778
589
|
const error = asRecord(params.error);
|
|
779
590
|
let errorMessage = "codex app-server reported an error";
|
|
780
591
|
if (typeof params.message === "string") errorMessage = params.message;
|
|
@@ -883,8 +694,8 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
883
694
|
this.idleTimer = setTimeout(() => {
|
|
884
695
|
this.idleTimer = null;
|
|
885
696
|
if (this.interrupts.size > 0) return;
|
|
886
|
-
this.fail(`no event for ${this.config.
|
|
887
|
-
}, this.config.
|
|
697
|
+
this.fail(`no event for ${durationMs(this.config.idleTimeout)}ms`, "idle-timeout");
|
|
698
|
+
}, durationMs(this.config.idleTimeout));
|
|
888
699
|
}
|
|
889
700
|
|
|
890
701
|
private clearIdleTimer(): void {
|
|
@@ -942,12 +753,13 @@ class CodexExecDriverImpl implements AgentDriver {
|
|
|
942
753
|
command: this.config.command,
|
|
943
754
|
args: buildArgs(this.config),
|
|
944
755
|
cwd,
|
|
945
|
-
env: this.config.env,
|
|
756
|
+
env: agentEnvironment(process.env, this.config.inheritEnv, this.config.env),
|
|
757
|
+
inheritEnv: false,
|
|
946
758
|
protocol: "custom",
|
|
947
759
|
parseEvent: makeParseEvent(this.config, cliVersion),
|
|
948
760
|
formatPrompt: (prompt) => prompt,
|
|
949
761
|
closeStdinAfterPrompt: true,
|
|
950
|
-
|
|
762
|
+
idleTimeout: this.config.idleTimeout,
|
|
951
763
|
maxLineBytes: this.config.maxLineBytes,
|
|
952
764
|
maxInterrupts: 1,
|
|
953
765
|
});
|
|
@@ -982,14 +794,34 @@ class CodexExecDriverImpl implements AgentDriver {
|
|
|
982
794
|
}
|
|
983
795
|
}
|
|
984
796
|
|
|
985
|
-
export const codexDriver
|
|
797
|
+
export const codexDriver = defineDriver({
|
|
986
798
|
name: "codex",
|
|
987
799
|
configSchema: CodexDriverConfigSchema,
|
|
800
|
+
runtime: (config) => ({
|
|
801
|
+
commands: [config.command],
|
|
802
|
+
capabilities: {
|
|
803
|
+
interactive: config.interactionMode === "app-server",
|
|
804
|
+
"tool-calls": true,
|
|
805
|
+
"tool-results": true,
|
|
806
|
+
artifacts: true,
|
|
807
|
+
subagents: config.interactionMode === "app-server",
|
|
808
|
+
usage: true,
|
|
809
|
+
cost: false,
|
|
810
|
+
isolation: Boolean(config.isolation),
|
|
811
|
+
},
|
|
812
|
+
}),
|
|
813
|
+
experiment: {
|
|
814
|
+
version: "1",
|
|
815
|
+
prepare: prepareCodexExperimentConfig,
|
|
816
|
+
identity: (config, { rootDir }) =>
|
|
817
|
+
configuredClaudeSourceHashes({ name: "codex", config }, rootDir),
|
|
818
|
+
},
|
|
819
|
+
selectHarness: selectModelAndReasoningEffort,
|
|
988
820
|
create: (config) =>
|
|
989
821
|
config.interactionMode === "app-server"
|
|
990
822
|
? new CodexAppServerDriverImpl(config)
|
|
991
823
|
: new CodexExecDriverImpl(config),
|
|
992
|
-
};
|
|
824
|
+
});
|
|
993
825
|
|
|
994
826
|
export type { CodexDriverConfig };
|
|
995
827
|
export { appItemProgress, buildAppServerArgs, buildArgs, CodexDriverConfigSchema, makeParseEvent };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Copilot driver
|
|
2
|
+
|
|
3
|
+
The `copilot` driver runs GitHub Copilot CLI as an Agent Client Protocol (ACP)
|
|
4
|
+
server (`copilot --acp`). Install the CLI and run `copilot login` before Lux
|
|
5
|
+
starts it. Your GitHub plan must allow Copilot CLI model access.
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
{
|
|
9
|
+
name: "copilot",
|
|
10
|
+
config: {
|
|
11
|
+
model: "YOUR_COPILOT_MODEL",
|
|
12
|
+
reasoningEffort: "low",
|
|
13
|
+
allowTools: ["shell(git:*)"],
|
|
14
|
+
},
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`model` is required because Copilot's `auto` selection can pick any model in
|
|
19
|
+
the plan. Lux passes `--model` and `--effort` on the command line. Copilot's
|
|
20
|
+
`--effort` accepts `none` through `max`, but each model honors only a subset
|
|
21
|
+
and silently falls back on the rest, so the harness catalog in
|
|
22
|
+
`core/harness-catalogs/copilot.ts` records the levels per model id and Lux
|
|
23
|
+
rejects a level the model does not honor. Models whose levels are not published
|
|
24
|
+
(Gemini, Grok, Kimi, MAI) are listed with no effort. When no effort is set, a
|
|
25
|
+
model with levels runs at `low`. When ACP advertises a model selector, Lux
|
|
26
|
+
selects and verifies the requested model; otherwise it records the model as
|
|
27
|
+
requested rather than confirmed. `lux doctor` compares the catalog's model ids with
|
|
28
|
+
`copilot help config` and warns when they differ.
|
|
29
|
+
|
|
30
|
+
Tool permission requests arrive as ACP `session/request_permission` calls and
|
|
31
|
+
become `approve` interrupts. Lux answers with the one-operation option only and
|
|
32
|
+
never selects a remembered grant. `allowTools` and `denyTools` pass Copilot
|
|
33
|
+
permission patterns; `allowAllTools` approves everything, which turns the
|
|
34
|
+
interactive capability off. The `ask_user` tool is disabled because Copilot has
|
|
35
|
+
no ACP wire for it. `askUser: true` is rejected before launching the CLI;
|
|
36
|
+
permission interrupts remain supported through the normal Lux answerer.
|
|
37
|
+
|
|
38
|
+
Copilot loads its native workspace instructions and bundled GitHub MCP server
|
|
39
|
+
by default, matching ordinary harness execution. Set `customInstructions: false`
|
|
40
|
+
or `builtinMcps: false` to disable them for a specific evaluation. Auto-update is
|
|
41
|
+
always off. The driver provides no ambient-configuration isolation: Copilot still
|
|
42
|
+
reads `~/.copilot` settings, MCP configuration, and credentials. Usage and
|
|
43
|
+
cost are recorded as unknown; `--usage-output-file` cannot be combined with
|
|
44
|
+
`--acp`.
|
|
45
|
+
|
|
46
|
+
The adapter has synthetic protocol and lifecycle tests plus an opt-in live
|
|
47
|
+
smoke task: `mise run smoke:harnesses -- copilot` from the repository root.
|
|
48
|
+
The live task uses your installed CLI, existing login, and model quota. CLI
|
|
49
|
+
`1.0.83` passed the authenticated file-copy smoke on 2026-09-30 after the account
|
|
50
|
+
received a Copilot seat and CLI access. A seat alone does not enable the CLI:
|
|
51
|
+
check the organization's Copilot CLI policy when GitHub returns a feature-access
|
|
52
|
+
403. Lux also recognizes the CLI's native authorization diagnostic as an error
|
|
53
|
+
even when Copilot ends the turn normally.
|
|
54
|
+
|
|
55
|
+
Protocol references:
|
|
56
|
+
|
|
57
|
+
- [Copilot CLI command-line reference](https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-programmatic-reference)
|
|
58
|
+
- [Copilot CLI permissions](https://docs.github.com/en/copilot/concepts/agents/copilot-cli/about-copilot-cli)
|
|
59
|
+
- [ACP session modes](https://agentclientprotocol.com/protocol/session-modes)
|
|
60
|
+
- [ACP tool calls and permissions](https://agentclientprotocol.com/protocol/tool-calls)
|