@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
|
@@ -3,32 +3,38 @@ 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";
|
|
27
|
+
import { stageSkills } from "../shared/skills.js";
|
|
24
28
|
import { subprocessDriver } from "../subprocess/index.js";
|
|
25
29
|
import {
|
|
26
30
|
type AppTurnFacets,
|
|
31
|
+
appAgentLifecycleProgress,
|
|
27
32
|
appItemProgress,
|
|
28
33
|
appItemToolName,
|
|
29
34
|
appTurnLabel,
|
|
30
35
|
appUsage,
|
|
31
36
|
asRecord,
|
|
37
|
+
CodexSubagentTracker,
|
|
32
38
|
messageOf,
|
|
33
39
|
type RpcId,
|
|
34
40
|
type RpcRecord,
|
|
@@ -39,266 +45,14 @@ import {
|
|
|
39
45
|
type CodexConfigValue,
|
|
40
46
|
type CodexDriverConfig,
|
|
41
47
|
CodexDriverConfigSchema,
|
|
48
|
+
codexConfigOverrides,
|
|
42
49
|
} from "./config.js";
|
|
43
50
|
|
|
51
|
+
import { makeParseEvent } from "./exec-events.js";
|
|
52
|
+
|
|
44
53
|
const LUX_BOOKKEEPING_FILES = new Set(["events.jsonl", "case.json", "run.json", "grading.json"]);
|
|
45
54
|
const commandName = (command: string): string => command.split(/[\\/]/).at(-1) ?? command;
|
|
46
55
|
|
|
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
56
|
class CodexAppServerDriverImpl implements AgentDriver {
|
|
303
57
|
private readonly emitter = new TypedEmitter<DriverEventMap>();
|
|
304
58
|
private readonly config: CodexDriverConfig;
|
|
@@ -308,6 +62,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
308
62
|
private runDir: string | null = null;
|
|
309
63
|
private isolatedWorkspace: string | null = null;
|
|
310
64
|
private isolatedStateDir: string | null = null;
|
|
65
|
+
private isolationConfig: Record<string, CodexConfigValue> = {};
|
|
311
66
|
private threadId: string | null = null;
|
|
312
67
|
private cliVersion: string | undefined;
|
|
313
68
|
private nextRequestId = 1;
|
|
@@ -316,7 +71,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
316
71
|
{ resolve: (result: RpcRecord) => void; reject: (error: Error) => void }
|
|
317
72
|
>();
|
|
318
73
|
private readonly interrupts = new Map<string, { id: RpcId; method: string; params: RpcRecord }>();
|
|
319
|
-
private readonly
|
|
74
|
+
private readonly subagents = new CodexSubagentTracker();
|
|
320
75
|
private readonly turnFacets = new Map<string, AppTurnFacets>();
|
|
321
76
|
private interruptCount = 0;
|
|
322
77
|
private idleTimer: NodeJS.Timeout | null = null;
|
|
@@ -345,10 +100,12 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
345
100
|
let cwd =
|
|
346
101
|
this.config.cwd ?? (this.config.cwdMode === "artifacts" ? ctx.artifactsDir : ctx.runDir);
|
|
347
102
|
let env = this.config.env;
|
|
103
|
+
let launchCommand = this.config.command;
|
|
348
104
|
if (this.config.isolation) {
|
|
349
105
|
const workspace = await realpath(temporaryDirectory({ prefix: "lux-codex-workspace-" }));
|
|
350
106
|
await cp(ctx.artifactsDir, workspace, { recursive: true });
|
|
351
107
|
this.isolatedWorkspace = workspace;
|
|
108
|
+
await stageSkills(this.config.skillDirs ?? [], workspace, ".agents");
|
|
352
109
|
cwd = workspace;
|
|
353
110
|
}
|
|
354
111
|
if (this.config.isolation || this.config.ignoreUserConfig) {
|
|
@@ -372,6 +129,45 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
372
129
|
CODEX_CONFIG_HOME: stateDir,
|
|
373
130
|
};
|
|
374
131
|
}
|
|
132
|
+
if (this.config.isolation) {
|
|
133
|
+
const reads = await Promise.all(
|
|
134
|
+
this.config.isolation.allowRead.map((path) => realpath(path)),
|
|
135
|
+
);
|
|
136
|
+
const executable = resolveExecutable(
|
|
137
|
+
this.config.command,
|
|
138
|
+
{ ...agentEnvironment(process.env, this.config.inheritEnv), ...env },
|
|
139
|
+
undefined,
|
|
140
|
+
cwd,
|
|
141
|
+
);
|
|
142
|
+
if (executable) {
|
|
143
|
+
launchCommand = await realpath(executable);
|
|
144
|
+
reads.push(executable, launchCommand);
|
|
145
|
+
}
|
|
146
|
+
// Native filesystem tools relaunch the CLI inside the subject sandbox.
|
|
147
|
+
// Workspace requirements reload process configuration during a turn.
|
|
148
|
+
// A thread-only profile is accepted at startup but fails that reload.
|
|
149
|
+
this.isolationConfig = {
|
|
150
|
+
allow_login_shell: false,
|
|
151
|
+
project_doc_max_bytes: 0,
|
|
152
|
+
projects: { [cwd]: { trust_level: "untrusted" } },
|
|
153
|
+
default_permissions: "lux-isolated",
|
|
154
|
+
permissions: {
|
|
155
|
+
"lux-isolated": {
|
|
156
|
+
filesystem: {
|
|
157
|
+
":minimal": "read",
|
|
158
|
+
[cwd]: "write",
|
|
159
|
+
...Object.fromEntries(reads.map((path) => [path, "read"])),
|
|
160
|
+
},
|
|
161
|
+
network: { enabled: true },
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
features: {
|
|
165
|
+
...((this.config.config?.features as Record<string, CodexConfigValue>) ?? {}),
|
|
166
|
+
shell_snapshot: false,
|
|
167
|
+
shell_snapshot_v2: false,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
375
171
|
this.collectDir = cwd;
|
|
376
172
|
this.artifactsDir = ctx.artifactsDir;
|
|
377
173
|
this.runDir = ctx.runDir;
|
|
@@ -382,16 +178,23 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
382
178
|
commandName(this.config.command) === "codex"
|
|
383
179
|
? await discoverCliVersion(this.config.command)
|
|
384
180
|
: undefined;
|
|
385
|
-
const managed = spawnManagedProcess(
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
...
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
181
|
+
const managed = spawnManagedProcess(
|
|
182
|
+
launchCommand,
|
|
183
|
+
buildAppServerArgs({
|
|
184
|
+
...this.config,
|
|
185
|
+
config: { ...this.config.config, ...this.isolationConfig },
|
|
186
|
+
}),
|
|
187
|
+
{
|
|
188
|
+
cwd,
|
|
189
|
+
env: {
|
|
190
|
+
...agentEnvironment(process.env, this.config.inheritEnv),
|
|
191
|
+
LUX_RUN_DIR: ctx.runDir,
|
|
192
|
+
LUX_ARTIFACTS_DIR: ctx.artifactsDir,
|
|
193
|
+
...env,
|
|
194
|
+
},
|
|
195
|
+
signal: ctx.abortSignal,
|
|
392
196
|
},
|
|
393
|
-
|
|
394
|
-
});
|
|
197
|
+
);
|
|
395
198
|
this.process = managed;
|
|
396
199
|
managed.child.stderr.setEncoding("utf8");
|
|
397
200
|
let stderrTail = "";
|
|
@@ -436,41 +239,35 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
436
239
|
capabilities: { experimentalApi: true, requestAttestation: false },
|
|
437
240
|
});
|
|
438
241
|
this.notify("initialized");
|
|
439
|
-
const isolationReads = this.config.isolation
|
|
440
|
-
? await Promise.all(this.config.isolation.allowRead.map((path) => realpath(path)))
|
|
441
|
-
: [];
|
|
442
242
|
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
|
-
}
|
|
243
|
+
...codexConfigOverrides(this.config),
|
|
244
|
+
...(this.config.reasoningEffort
|
|
245
|
+
? { model_reasoning_effort: this.config.reasoningEffort }
|
|
460
246
|
: {}),
|
|
247
|
+
...this.isolationConfig,
|
|
461
248
|
};
|
|
462
249
|
const started = await this.request("thread/start", {
|
|
463
250
|
model: this.config.model,
|
|
464
251
|
cwd,
|
|
465
|
-
runtimeWorkspaceRoots: this.config.
|
|
252
|
+
runtimeWorkspaceRoots: this.config.isolation
|
|
253
|
+
? [cwd, ...(this.config.addDirs ?? [])]
|
|
254
|
+
: (this.config.addDirs ?? []),
|
|
466
255
|
approvalPolicy: this.config.approvalPolicy,
|
|
467
|
-
approvalsReviewer:
|
|
256
|
+
approvalsReviewer: this.config.approvalsReviewer,
|
|
468
257
|
...(this.config.isolation
|
|
469
258
|
? { permissions: "lux-isolated" }
|
|
470
259
|
: { sandbox: this.config.sandbox }),
|
|
471
260
|
config: threadConfig,
|
|
472
261
|
ephemeral: this.config.ephemeral,
|
|
473
262
|
});
|
|
263
|
+
if (
|
|
264
|
+
this.config.approvalsReviewer === "auto_review" &&
|
|
265
|
+
started.approvalsReviewer !== "auto_review"
|
|
266
|
+
) {
|
|
267
|
+
throw new Error(
|
|
268
|
+
"codex app-server did not enable the requested auto_review approvals reviewer",
|
|
269
|
+
);
|
|
270
|
+
}
|
|
474
271
|
const thread = asRecord(started.thread);
|
|
475
272
|
if (!thread || typeof thread.id !== "string") {
|
|
476
273
|
throw new Error("codex app-server returned an invalid thread/start response");
|
|
@@ -481,6 +278,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
481
278
|
model: typeof started.model === "string" ? started.model : this.config.model,
|
|
482
279
|
detail: {
|
|
483
280
|
threadId: thread.id,
|
|
281
|
+
approvalsReviewer: this.config.approvalsReviewer,
|
|
484
282
|
...(typeof thread.sessionId === "string" ? { sessionId: thread.sessionId } : {}),
|
|
485
283
|
...(this.cliVersion ? { cliVersion: this.cliVersion } : {}),
|
|
486
284
|
},
|
|
@@ -586,6 +384,11 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
586
384
|
: withRoot;
|
|
587
385
|
}
|
|
588
386
|
|
|
387
|
+
async verificationWorkspace(): Promise<string | undefined> {
|
|
388
|
+
await this.quiesce();
|
|
389
|
+
return this.isolatedWorkspace ?? undefined;
|
|
390
|
+
}
|
|
391
|
+
|
|
589
392
|
async quiesce(): Promise<void> {
|
|
590
393
|
this.clearIdleTimer();
|
|
591
394
|
await this.process?.terminate();
|
|
@@ -659,6 +462,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
659
462
|
}
|
|
660
463
|
|
|
661
464
|
private async dispatch(message: RpcRecord): Promise<void> {
|
|
465
|
+
if (this.terminal) return;
|
|
662
466
|
const method = typeof message.method === "string" ? message.method : "";
|
|
663
467
|
const params = asRecord(message.params) ?? {};
|
|
664
468
|
if (message.id !== undefined && method) {
|
|
@@ -669,6 +473,14 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
669
473
|
await this.handleItemNotification(method, params);
|
|
670
474
|
return;
|
|
671
475
|
}
|
|
476
|
+
if (
|
|
477
|
+
(method === "thread/tokenUsage/updated" ||
|
|
478
|
+
method === "turn/completed" ||
|
|
479
|
+
method === "error") &&
|
|
480
|
+
typeof params.threadId === "string" &&
|
|
481
|
+
params.threadId !== this.threadId
|
|
482
|
+
)
|
|
483
|
+
return;
|
|
672
484
|
if (method === "thread/tokenUsage/updated") {
|
|
673
485
|
this.handleTokenUsageNotification(params);
|
|
674
486
|
return;
|
|
@@ -702,28 +514,28 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
702
514
|
const toolName = item ? appItemToolName(item) : null;
|
|
703
515
|
if (toolName && !facets.tools.includes(toolName)) facets.tools.push(toolName);
|
|
704
516
|
if (turnId) this.turnFacets.set(turnId, facets);
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
517
|
+
const threadId = typeof params.threadId === "string" ? params.threadId : undefined;
|
|
518
|
+
this.subagents.record(item, threadId, this.threadId);
|
|
519
|
+
const agent = this.subagents.attribution(threadId, this.threadId);
|
|
708
520
|
const event = item
|
|
709
|
-
? appItemProgress(item, method === "item/started" ? "started" : "completed",
|
|
521
|
+
? appItemProgress(item, method === "item/started" ? "started" : "completed", agent)
|
|
710
522
|
: null;
|
|
711
523
|
if (event?.tag === "progress") await this.emitter.emit("progress", event.progress);
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
524
|
+
if (item) {
|
|
525
|
+
for (const lifecycle of appAgentLifecycleProgress(
|
|
526
|
+
item,
|
|
527
|
+
method === "item/started" ? "started" : "completed",
|
|
528
|
+
agent,
|
|
529
|
+
event?.tag === "progress" ? event.progress.ts : Date.now(),
|
|
530
|
+
)) {
|
|
531
|
+
await this.emitter.emit("progress", lifecycle);
|
|
532
|
+
}
|
|
721
533
|
}
|
|
722
534
|
}
|
|
723
535
|
|
|
724
536
|
private handleTokenUsageNotification(params: RpcRecord): void {
|
|
725
537
|
const tokenUsage = asRecord(params.tokenUsage);
|
|
726
|
-
const usage = appUsage(tokenUsage?.last);
|
|
538
|
+
const usage = appUsage(tokenUsage?.total) ?? appUsage(tokenUsage?.last);
|
|
727
539
|
if (usage) this.latestUsage = usage;
|
|
728
540
|
}
|
|
729
541
|
|
|
@@ -775,6 +587,7 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
775
587
|
}
|
|
776
588
|
|
|
777
589
|
private handleErrorNotification(params: RpcRecord): void {
|
|
590
|
+
if (params.willRetry === true) return;
|
|
778
591
|
const error = asRecord(params.error);
|
|
779
592
|
let errorMessage = "codex app-server reported an error";
|
|
780
593
|
if (typeof params.message === "string") errorMessage = params.message;
|
|
@@ -883,8 +696,8 @@ class CodexAppServerDriverImpl implements AgentDriver {
|
|
|
883
696
|
this.idleTimer = setTimeout(() => {
|
|
884
697
|
this.idleTimer = null;
|
|
885
698
|
if (this.interrupts.size > 0) return;
|
|
886
|
-
this.fail(`no event for ${this.config.
|
|
887
|
-
}, this.config.
|
|
699
|
+
this.fail(`no event for ${durationMs(this.config.idleTimeout)}ms`, "idle-timeout");
|
|
700
|
+
}, durationMs(this.config.idleTimeout));
|
|
888
701
|
}
|
|
889
702
|
|
|
890
703
|
private clearIdleTimer(): void {
|
|
@@ -942,12 +755,13 @@ class CodexExecDriverImpl implements AgentDriver {
|
|
|
942
755
|
command: this.config.command,
|
|
943
756
|
args: buildArgs(this.config),
|
|
944
757
|
cwd,
|
|
945
|
-
env: this.config.env,
|
|
758
|
+
env: agentEnvironment(process.env, this.config.inheritEnv, this.config.env),
|
|
759
|
+
inheritEnv: false,
|
|
946
760
|
protocol: "custom",
|
|
947
761
|
parseEvent: makeParseEvent(this.config, cliVersion),
|
|
948
762
|
formatPrompt: (prompt) => prompt,
|
|
949
763
|
closeStdinAfterPrompt: true,
|
|
950
|
-
|
|
764
|
+
idleTimeout: this.config.idleTimeout,
|
|
951
765
|
maxLineBytes: this.config.maxLineBytes,
|
|
952
766
|
maxInterrupts: 1,
|
|
953
767
|
});
|
|
@@ -982,14 +796,34 @@ class CodexExecDriverImpl implements AgentDriver {
|
|
|
982
796
|
}
|
|
983
797
|
}
|
|
984
798
|
|
|
985
|
-
export const codexDriver
|
|
799
|
+
export const codexDriver = defineDriver({
|
|
986
800
|
name: "codex",
|
|
987
801
|
configSchema: CodexDriverConfigSchema,
|
|
802
|
+
runtime: (config) => ({
|
|
803
|
+
commands: [config.command],
|
|
804
|
+
capabilities: {
|
|
805
|
+
interactive: config.interactionMode === "app-server",
|
|
806
|
+
"tool-calls": true,
|
|
807
|
+
"tool-results": true,
|
|
808
|
+
artifacts: true,
|
|
809
|
+
subagents: config.interactionMode === "app-server",
|
|
810
|
+
usage: true,
|
|
811
|
+
cost: false,
|
|
812
|
+
isolation: Boolean(config.isolation),
|
|
813
|
+
},
|
|
814
|
+
}),
|
|
815
|
+
experiment: {
|
|
816
|
+
version: "1",
|
|
817
|
+
prepare: prepareCodexExperimentConfig,
|
|
818
|
+
identity: (config, { rootDir }) =>
|
|
819
|
+
configuredClaudeSourceHashes({ name: "codex", config }, rootDir),
|
|
820
|
+
},
|
|
821
|
+
selectHarness: selectModelAndReasoningEffort,
|
|
988
822
|
create: (config) =>
|
|
989
823
|
config.interactionMode === "app-server"
|
|
990
824
|
? new CodexAppServerDriverImpl(config)
|
|
991
825
|
: new CodexExecDriverImpl(config),
|
|
992
|
-
};
|
|
826
|
+
});
|
|
993
827
|
|
|
994
828
|
export type { CodexDriverConfig };
|
|
995
829
|
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)
|