@prismatic-io/lux 0.0.2-preview.4 → 0.0.2-preview.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/answerers/claude-code/index.d.ts +15 -3
- package/lib/answerers/claude-code/index.d.ts.map +1 -1
- package/lib/answerers/claude-code/index.js +6 -5
- package/lib/answerers/claude-code/index.js.map +1 -1
- package/lib/answerers/persona/index.d.ts +44 -5
- package/lib/answerers/persona/index.d.ts.map +1 -1
- package/lib/answerers/persona/index.js +65 -34
- package/lib/answerers/persona/index.js.map +1 -1
- package/lib/answerers/terminal/index.d.ts +9 -3
- package/lib/answerers/terminal/index.d.ts.map +1 -1
- package/lib/answerers/terminal/index.js +6 -4
- package/lib/answerers/terminal/index.js.map +1 -1
- package/lib/assertions/authoring.d.ts +2 -2
- package/lib/assertions/authoring.d.ts.map +1 -1
- package/lib/assertions/authoring.js.map +1 -1
- package/lib/assertions/core/command-exits-zero.d.ts +5 -2
- package/lib/assertions/core/command-exits-zero.d.ts.map +1 -1
- package/lib/assertions/core/command-exits-zero.js +59 -14
- package/lib/assertions/core/command-exits-zero.js.map +1 -1
- package/lib/assertions/core/event-checks.d.ts +3 -0
- package/lib/assertions/core/event-checks.d.ts.map +1 -1
- package/lib/assertions/core/event-checks.js +49 -3
- package/lib/assertions/core/event-checks.js.map +1 -1
- package/lib/assertions/core/file-checks.d.ts +6 -0
- package/lib/assertions/core/file-checks.d.ts.map +1 -1
- package/lib/assertions/core/index.d.ts.map +1 -1
- package/lib/assertions/core/index.js +2 -1
- package/lib/assertions/core/index.js.map +1 -1
- package/lib/assertions/core/json-pointer-equals.d.ts +1 -0
- package/lib/assertions/core/json-pointer-equals.d.ts.map +1 -1
- package/lib/assertions/core/output-checks.d.ts +3 -0
- package/lib/assertions/core/output-checks.d.ts.map +1 -1
- package/lib/assertions/core/predicate.d.ts +1 -0
- package/lib/assertions/core/predicate.d.ts.map +1 -1
- package/lib/assertions/core/resource-checks.d.ts +25 -0
- package/lib/assertions/core/resource-checks.d.ts.map +1 -1
- package/lib/assertions/core/resource-checks.js +35 -5
- package/lib/assertions/core/resource-checks.js.map +1 -1
- package/lib/assertions/core/safe-regex.d.ts.map +1 -1
- package/lib/assertions/core/safe-regex.js +7 -1
- package/lib/assertions/core/safe-regex.js.map +1 -1
- package/lib/assertions/rubric/evidence.d.ts +88 -0
- package/lib/assertions/rubric/evidence.d.ts.map +1 -0
- package/lib/assertions/rubric/evidence.js +75 -0
- package/lib/assertions/rubric/evidence.js.map +1 -0
- package/lib/assertions/rubric/index.d.ts +88 -34
- package/lib/assertions/rubric/index.d.ts.map +1 -1
- package/lib/assertions/rubric/index.js +67 -43
- package/lib/assertions/rubric/index.js.map +1 -1
- package/lib/assertions/rubric/internal.d.ts +30 -5
- package/lib/assertions/rubric/internal.d.ts.map +1 -1
- package/lib/assertions/rubric/internal.js +211 -46
- package/lib/assertions/rubric/internal.js.map +1 -1
- package/lib/authoring.d.ts +37 -2
- package/lib/authoring.d.ts.map +1 -1
- package/lib/authoring.js +36 -1
- package/lib/authoring.js.map +1 -1
- package/lib/cli/bin.js +2 -13
- package/lib/cli/bin.js.map +1 -1
- package/lib/cli/command-runtime.d.ts +3 -3
- package/lib/cli/command-runtime.d.ts.map +1 -1
- package/lib/cli/command-runtime.js +17 -6
- package/lib/cli/command-runtime.js.map +1 -1
- package/lib/cli/doctor.d.ts +55 -0
- package/lib/cli/doctor.d.ts.map +1 -0
- package/lib/cli/doctor.js +14 -0
- package/lib/cli/doctor.js.map +1 -0
- package/lib/cli/harness-plan.d.ts +27 -0
- package/lib/cli/harness-plan.d.ts.map +1 -0
- package/lib/cli/harness-plan.js +75 -0
- package/lib/cli/harness-plan.js.map +1 -0
- package/lib/cli/init-templates.d.ts +11 -0
- package/lib/cli/init-templates.d.ts.map +1 -0
- package/lib/cli/init-templates.js +153 -0
- package/lib/cli/init-templates.js.map +1 -0
- package/lib/cli/init.d.ts +10 -0
- package/lib/cli/init.d.ts.map +1 -1
- package/lib/cli/init.js +34 -173
- package/lib/cli/init.js.map +1 -1
- package/lib/cli/output-schemas.d.ts +1412 -0
- package/lib/cli/output-schemas.d.ts.map +1 -0
- package/lib/cli/output-schemas.js +94 -0
- package/lib/cli/output-schemas.js.map +1 -0
- package/lib/cli/program.d.ts +140 -12
- package/lib/cli/program.d.ts.map +1 -1
- package/lib/cli/program.js +783 -650
- package/lib/cli/program.js.map +1 -1
- package/lib/cli/render/format.d.ts.map +1 -1
- package/lib/cli/render/format.js +1 -1
- package/lib/cli/render/format.js.map +1 -1
- package/lib/cli/render/reporter.d.ts.map +1 -1
- package/lib/cli/render/reporter.js +35 -8
- package/lib/cli/render/reporter.js.map +1 -1
- package/lib/cli/run-options.d.ts +19 -4
- package/lib/cli/run-options.d.ts.map +1 -1
- package/lib/cli/run-options.js +100 -19
- package/lib/cli/run-options.js.map +1 -1
- package/lib/cli/view.d.ts +15 -0
- package/lib/cli/view.d.ts.map +1 -0
- package/lib/cli/view.js +168 -0
- package/lib/cli/view.js.map +1 -0
- package/lib/container/driver.d.ts +27 -0
- package/lib/container/driver.d.ts.map +1 -0
- package/lib/container/driver.js +199 -0
- package/lib/container/driver.js.map +1 -0
- package/lib/container/paths.d.ts +3 -0
- package/lib/container/paths.d.ts.map +1 -0
- package/lib/container/paths.js +27 -0
- package/lib/container/paths.js.map +1 -0
- package/lib/container/protocol.d.ts +12 -0
- package/lib/container/protocol.d.ts.map +1 -0
- package/lib/container/protocol.js +38 -0
- package/lib/container/protocol.js.map +1 -0
- package/lib/container/resources.d.ts +14 -0
- package/lib/container/resources.d.ts.map +1 -0
- package/lib/container/resources.js +141 -0
- package/lib/container/resources.js.map +1 -0
- package/lib/container/worker.d.ts +2 -0
- package/lib/container/worker.d.ts.map +1 -0
- package/lib/container/worker.js +85 -0
- package/lib/container/worker.js.map +1 -0
- package/lib/core/action-events.d.ts +29 -0
- package/lib/core/action-events.d.ts.map +1 -0
- package/lib/core/action-events.js +51 -0
- package/lib/core/action-events.js.map +1 -0
- package/lib/core/agent-activity.d.ts +49 -0
- package/lib/core/agent-activity.d.ts.map +1 -0
- package/lib/core/agent-activity.js +206 -0
- package/lib/core/agent-activity.js.map +1 -0
- package/lib/core/agent-environment.d.ts +5 -0
- package/lib/core/agent-environment.d.ts.map +1 -0
- package/lib/core/agent-environment.js +47 -0
- package/lib/core/agent-environment.js.map +1 -0
- package/lib/core/agent-events.d.ts +26 -0
- package/lib/core/agent-events.d.ts.map +1 -0
- package/lib/core/agent-events.js +13 -0
- package/lib/core/agent-events.js.map +1 -0
- package/lib/core/annotation.d.ts +6 -2
- package/lib/core/annotation.d.ts.map +1 -1
- package/lib/core/annotation.js +2 -1
- package/lib/core/annotation.js.map +1 -1
- package/lib/core/answerer.d.ts +12 -0
- package/lib/core/answerer.d.ts.map +1 -1
- package/lib/core/answerer.js +2 -0
- package/lib/core/answerer.js.map +1 -1
- package/lib/core/artifact-evidence.d.ts +6 -1
- package/lib/core/artifact-evidence.d.ts.map +1 -1
- package/lib/core/artifact-evidence.js +27 -6
- package/lib/core/artifact-evidence.js.map +1 -1
- package/lib/core/assertion.d.ts +10 -4
- package/lib/core/assertion.d.ts.map +1 -1
- package/lib/core/assertion.js +8 -2
- package/lib/core/assertion.js.map +1 -1
- package/lib/core/case-defaults.d.ts +16 -0
- package/lib/core/case-defaults.d.ts.map +1 -0
- package/lib/core/case-defaults.js +42 -0
- package/lib/core/case-defaults.js.map +1 -0
- package/lib/core/case.d.ts +120 -6
- package/lib/core/case.d.ts.map +1 -1
- package/lib/core/case.js +51 -5
- package/lib/core/case.js.map +1 -1
- package/lib/core/command-verification.d.ts +10 -0
- package/lib/core/command-verification.d.ts.map +1 -0
- package/lib/core/command-verification.js +66 -0
- package/lib/core/command-verification.js.map +1 -0
- package/lib/core/driver-execution.d.ts +83 -0
- package/lib/core/driver-execution.d.ts.map +1 -0
- package/lib/core/driver-execution.js +72 -0
- package/lib/core/driver-execution.js.map +1 -0
- package/lib/core/driver-metrics.d.ts +98 -0
- package/lib/core/driver-metrics.d.ts.map +1 -0
- package/lib/core/driver-metrics.js +36 -0
- package/lib/core/driver-metrics.js.map +1 -0
- package/lib/core/driver.d.ts +64 -0
- package/lib/core/driver.d.ts.map +1 -1
- package/lib/core/driver.js +28 -0
- package/lib/core/driver.js.map +1 -1
- package/lib/core/duration.d.ts +5 -0
- package/lib/core/duration.d.ts.map +1 -0
- package/lib/core/duration.js +49 -0
- package/lib/core/duration.js.map +1 -0
- package/lib/core/environment.d.ts +18 -0
- package/lib/core/environment.d.ts.map +1 -0
- package/lib/core/environment.js +21 -0
- package/lib/core/environment.js.map +1 -0
- package/lib/core/evaluation-clusters.d.ts +17 -0
- package/lib/core/evaluation-clusters.d.ts.map +1 -0
- package/lib/core/evaluation-clusters.js +23 -0
- package/lib/core/evaluation-clusters.js.map +1 -0
- package/lib/core/events.d.ts +34 -0
- package/lib/core/events.d.ts.map +1 -1
- package/lib/core/events.js +11 -2
- package/lib/core/events.js.map +1 -1
- package/lib/core/experiment.d.ts +33 -2
- package/lib/core/experiment.d.ts.map +1 -1
- package/lib/core/experiment.js +40 -19
- package/lib/core/experiment.js.map +1 -1
- package/lib/core/file-tree.d.ts +7 -0
- package/lib/core/file-tree.d.ts.map +1 -0
- package/lib/core/file-tree.js +35 -0
- package/lib/core/file-tree.js.map +1 -0
- package/lib/core/global-id.d.ts +6 -0
- package/lib/core/global-id.d.ts.map +1 -0
- package/lib/core/global-id.js +17 -0
- package/lib/core/global-id.js.map +1 -0
- package/lib/core/harness-catalog.d.ts +35 -0
- package/lib/core/harness-catalog.d.ts.map +1 -0
- package/lib/core/harness-catalog.js +45 -0
- package/lib/core/harness-catalog.js.map +1 -0
- package/lib/core/harness-catalogs/antigravity.d.ts +11 -0
- package/lib/core/harness-catalogs/antigravity.d.ts.map +1 -0
- package/lib/core/harness-catalogs/antigravity.js +23 -0
- package/lib/core/harness-catalogs/antigravity.js.map +1 -0
- package/lib/core/harness-catalogs/claude-code.d.ts +12 -0
- package/lib/core/harness-catalogs/claude-code.d.ts.map +1 -0
- package/lib/core/harness-catalogs/claude-code.js +24 -0
- package/lib/core/harness-catalogs/claude-code.js.map +1 -0
- package/lib/core/harness-catalogs/codex.d.ts +11 -0
- package/lib/core/harness-catalogs/codex.d.ts.map +1 -0
- package/lib/core/harness-catalogs/codex.js +26 -0
- package/lib/core/harness-catalogs/codex.js.map +1 -0
- package/lib/core/harness-catalogs/copilot.d.ts +29 -0
- package/lib/core/harness-catalogs/copilot.d.ts.map +1 -0
- package/lib/core/harness-catalogs/copilot.js +45 -0
- package/lib/core/harness-catalogs/copilot.js.map +1 -0
- package/lib/core/harness-catalogs/cursor.d.ts +2 -0
- package/lib/core/harness-catalogs/cursor.d.ts.map +1 -0
- package/lib/core/harness-catalogs/cursor.js +13 -0
- package/lib/core/harness-catalogs/cursor.js.map +1 -0
- package/lib/core/harness-catalogs/grok-build.d.ts +7 -0
- package/lib/core/harness-catalogs/grok-build.d.ts.map +1 -0
- package/lib/core/harness-catalogs/grok-build.js +18 -0
- package/lib/core/harness-catalogs/grok-build.js.map +1 -0
- package/lib/core/harness-catalogs/index.d.ts +73 -0
- package/lib/core/harness-catalogs/index.d.ts.map +1 -0
- package/lib/core/harness-catalogs/index.js +17 -0
- package/lib/core/harness-catalogs/index.js.map +1 -0
- package/lib/core/harness-matrix.d.ts +154 -0
- package/lib/core/harness-matrix.d.ts.map +1 -0
- package/lib/core/harness-matrix.js +204 -0
- package/lib/core/harness-matrix.js.map +1 -0
- package/lib/core/index.d.ts +12 -0
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +12 -0
- package/lib/core/index.js.map +1 -1
- package/lib/core/lifecycle-fixtures.d.ts.map +1 -1
- package/lib/core/lifecycle-fixtures.js +4 -2
- package/lib/core/lifecycle-fixtures.js.map +1 -1
- package/lib/core/model-cli.d.ts +31 -15
- package/lib/core/model-cli.d.ts.map +1 -1
- package/lib/core/model-cli.js +53 -23
- package/lib/core/model-cli.js.map +1 -1
- package/lib/core/platform-process.d.ts +7 -2
- package/lib/core/platform-process.d.ts.map +1 -1
- package/lib/core/platform-process.js +54 -16
- package/lib/core/platform-process.js.map +1 -1
- package/lib/core/reference-defaults.d.ts +5 -0
- package/lib/core/reference-defaults.d.ts.map +1 -0
- package/lib/core/reference-defaults.js +42 -0
- package/lib/core/reference-defaults.js.map +1 -0
- package/lib/core/rubric.d.ts +1 -0
- package/lib/core/rubric.d.ts.map +1 -1
- package/lib/core/run.d.ts +292 -1
- package/lib/core/run.d.ts.map +1 -1
- package/lib/core/run.js +27 -0
- package/lib/core/run.js.map +1 -1
- package/lib/core/secure-copy.d.ts.map +1 -0
- package/lib/core/secure-copy.js.map +1 -0
- package/lib/core/usage.d.ts +5 -0
- package/lib/core/usage.d.ts.map +1 -1
- package/lib/core/usage.js +3 -0
- package/lib/core/usage.js.map +1 -1
- package/lib/core/wire.d.ts +11 -0
- package/lib/core/wire.d.ts.map +1 -1
- package/lib/drivers/antigravity/artifacts.d.ts +2 -0
- package/lib/drivers/antigravity/artifacts.d.ts.map +1 -0
- package/lib/drivers/antigravity/artifacts.js +33 -0
- package/lib/drivers/antigravity/artifacts.js.map +1 -0
- package/lib/drivers/antigravity/config.d.ts +88 -0
- package/lib/drivers/antigravity/config.d.ts.map +1 -0
- package/lib/drivers/antigravity/config.js +87 -0
- package/lib/drivers/antigravity/config.js.map +1 -0
- package/lib/drivers/antigravity/events.d.ts +4 -0
- package/lib/drivers/antigravity/events.d.ts.map +1 -0
- package/lib/drivers/antigravity/events.js +241 -0
- package/lib/drivers/antigravity/events.js.map +1 -0
- package/lib/drivers/antigravity/index.d.ts +114 -0
- package/lib/drivers/antigravity/index.d.ts.map +1 -0
- package/lib/drivers/antigravity/index.js +113 -0
- package/lib/drivers/antigravity/index.js.map +1 -0
- package/lib/drivers/antigravity/runtime.d.ts +7 -0
- package/lib/drivers/antigravity/runtime.d.ts.map +1 -0
- package/lib/drivers/antigravity/runtime.js +83 -0
- package/lib/drivers/antigravity/runtime.js.map +1 -0
- package/lib/drivers/claude-code/deferred-process.d.ts +17 -0
- package/lib/drivers/claude-code/deferred-process.d.ts.map +1 -0
- package/lib/drivers/claude-code/deferred-process.js +108 -0
- package/lib/drivers/claude-code/deferred-process.js.map +1 -0
- package/lib/drivers/claude-code/index.d.ts +187 -10
- package/lib/drivers/claude-code/index.d.ts.map +1 -1
- package/lib/drivers/claude-code/index.js +198 -253
- package/lib/drivers/claude-code/index.js.map +1 -1
- package/lib/drivers/claude-code/isolation.d.ts +8 -0
- package/lib/drivers/claude-code/isolation.d.ts.map +1 -0
- package/lib/drivers/claude-code/isolation.js +199 -0
- package/lib/drivers/claude-code/isolation.js.map +1 -0
- package/lib/drivers/claude-code/parse-events.d.ts.map +1 -1
- package/lib/drivers/claude-code/parse-events.js +73 -8
- package/lib/drivers/claude-code/parse-events.js.map +1 -1
- package/lib/drivers/codex/app-events.d.ts +9 -2
- package/lib/drivers/codex/app-events.d.ts.map +1 -1
- package/lib/drivers/codex/app-events.js +104 -12
- package/lib/drivers/codex/app-events.js.map +1 -1
- package/lib/drivers/codex/config.d.ts +69 -5
- package/lib/drivers/codex/config.d.ts.map +1 -1
- package/lib/drivers/codex/config.js +48 -8
- package/lib/drivers/codex/config.js.map +1 -1
- package/lib/drivers/codex/exec-events.d.ts +4 -0
- package/lib/drivers/codex/exec-events.d.ts.map +1 -0
- package/lib/drivers/codex/exec-events.js +230 -0
- package/lib/drivers/codex/exec-events.js.map +1 -0
- package/lib/drivers/codex/index.d.ts +142 -4
- package/lib/drivers/codex/index.d.ts.map +1 -1
- package/lib/drivers/codex/index.js +114 -276
- package/lib/drivers/codex/index.js.map +1 -1
- package/lib/drivers/copilot/config.d.ts +84 -0
- package/lib/drivers/copilot/config.d.ts.map +1 -0
- package/lib/drivers/copilot/config.js +57 -0
- package/lib/drivers/copilot/config.js.map +1 -0
- package/lib/drivers/copilot/index.d.ts +107 -0
- package/lib/drivers/copilot/index.d.ts.map +1 -0
- package/lib/drivers/copilot/index.js +268 -0
- package/lib/drivers/copilot/index.js.map +1 -0
- package/lib/drivers/cursor/config.d.ts +28 -0
- package/lib/drivers/cursor/config.d.ts.map +1 -0
- package/lib/drivers/cursor/config.js +28 -0
- package/lib/drivers/cursor/config.js.map +1 -0
- package/lib/drivers/cursor/index.d.ts +44 -0
- package/lib/drivers/cursor/index.d.ts.map +1 -0
- package/lib/drivers/cursor/index.js +286 -0
- package/lib/drivers/cursor/index.js.map +1 -0
- package/lib/drivers/cursor/interaction.d.ts +6 -0
- package/lib/drivers/cursor/interaction.d.ts.map +1 -0
- package/lib/drivers/cursor/interaction.js +55 -0
- package/lib/drivers/cursor/interaction.js.map +1 -0
- package/lib/drivers/grok-build/config.d.ts +68 -0
- package/lib/drivers/grok-build/config.d.ts.map +1 -0
- package/lib/drivers/grok-build/config.js +40 -0
- package/lib/drivers/grok-build/config.js.map +1 -0
- package/lib/drivers/grok-build/index.d.ts +87 -0
- package/lib/drivers/grok-build/index.d.ts.map +1 -0
- package/lib/drivers/grok-build/index.js +293 -0
- package/lib/drivers/grok-build/index.js.map +1 -0
- package/lib/drivers/mcp/index.d.ts +37 -4
- package/lib/drivers/mcp/index.d.ts.map +1 -1
- package/lib/drivers/mcp/index.js +25 -11
- package/lib/drivers/mcp/index.js.map +1 -1
- package/lib/drivers/shared/acp-events.d.ts +15 -0
- package/lib/drivers/shared/acp-events.d.ts.map +1 -0
- package/lib/drivers/shared/acp-events.js +83 -0
- package/lib/drivers/shared/acp-events.js.map +1 -0
- package/lib/drivers/shared/acp-interaction.d.ts +7 -0
- package/lib/drivers/shared/acp-interaction.d.ts.map +1 -0
- package/lib/drivers/shared/acp-interaction.js +20 -0
- package/lib/drivers/shared/acp-interaction.js.map +1 -0
- package/lib/drivers/shared/acp-session.d.ts +4 -0
- package/lib/drivers/shared/acp-session.d.ts.map +1 -0
- package/lib/drivers/shared/acp-session.js +23 -0
- package/lib/drivers/shared/acp-session.js.map +1 -0
- package/lib/drivers/shared/acp-transport.d.ts +40 -0
- package/lib/drivers/shared/acp-transport.d.ts.map +1 -0
- package/lib/drivers/shared/acp-transport.js +152 -0
- package/lib/drivers/shared/acp-transport.js.map +1 -0
- package/lib/drivers/shared/artifacts.d.ts.map +1 -1
- package/lib/drivers/shared/artifacts.js +3 -2
- package/lib/drivers/shared/artifacts.js.map +1 -1
- package/lib/drivers/shared/experiment-behavior.d.ts +13 -0
- package/lib/drivers/shared/experiment-behavior.d.ts.map +1 -0
- package/lib/drivers/shared/experiment-behavior.js +200 -0
- package/lib/drivers/shared/experiment-behavior.js.map +1 -0
- package/lib/drivers/shared/experiment-policy.d.ts +4 -0
- package/lib/drivers/shared/experiment-policy.d.ts.map +1 -0
- package/lib/drivers/shared/experiment-policy.js +149 -0
- package/lib/drivers/shared/experiment-policy.js.map +1 -0
- package/lib/drivers/shared/skills.d.ts +3 -0
- package/lib/drivers/shared/skills.d.ts.map +1 -0
- package/lib/drivers/shared/skills.js +73 -0
- package/lib/drivers/shared/skills.js.map +1 -0
- package/lib/drivers/subprocess/index.d.ts +39 -4
- package/lib/drivers/subprocess/index.d.ts.map +1 -1
- package/lib/drivers/subprocess/index.js +56 -12
- package/lib/drivers/subprocess/index.js.map +1 -1
- package/lib/index.d.ts +24 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +20 -5
- package/lib/index.js.map +1 -1
- package/lib/optimization/reflective.d.ts +3 -1
- package/lib/optimization/reflective.d.ts.map +1 -1
- package/lib/optimization/reflective.js +3 -2
- package/lib/optimization/reflective.js.map +1 -1
- package/lib/orchestrator/annotation-loader.d.ts +6 -2
- package/lib/orchestrator/annotation-loader.d.ts.map +1 -1
- package/lib/orchestrator/annotation-loader.js +8 -0
- package/lib/orchestrator/annotation-loader.js.map +1 -1
- package/lib/orchestrator/annotation-store.d.ts.map +1 -1
- package/lib/orchestrator/annotation-store.js +16 -2
- package/lib/orchestrator/annotation-store.js.map +1 -1
- package/lib/orchestrator/artifact-origin.d.ts +3 -0
- package/lib/orchestrator/artifact-origin.d.ts.map +1 -0
- package/lib/orchestrator/artifact-origin.js +40 -0
- package/lib/orchestrator/artifact-origin.js.map +1 -0
- package/lib/orchestrator/campaign-lifecycle.d.ts +1 -0
- package/lib/orchestrator/campaign-lifecycle.d.ts.map +1 -1
- package/lib/orchestrator/campaign-lifecycle.js +4 -1
- package/lib/orchestrator/campaign-lifecycle.js.map +1 -1
- package/lib/orchestrator/candidates.d.ts.map +1 -1
- package/lib/orchestrator/candidates.js +3 -2
- package/lib/orchestrator/candidates.js.map +1 -1
- package/lib/orchestrator/compare.d.ts +23 -6
- package/lib/orchestrator/compare.d.ts.map +1 -1
- package/lib/orchestrator/compare.js +45 -12
- package/lib/orchestrator/compare.js.map +1 -1
- package/lib/orchestrator/comparison-identity.d.ts.map +1 -1
- package/lib/orchestrator/comparison-identity.js +2 -0
- package/lib/orchestrator/comparison-identity.js.map +1 -1
- package/lib/orchestrator/config.d.ts +231 -10
- package/lib/orchestrator/config.d.ts.map +1 -1
- package/lib/orchestrator/config.js +21 -2
- package/lib/orchestrator/config.js.map +1 -1
- package/lib/orchestrator/discover.d.ts +1 -0
- package/lib/orchestrator/discover.d.ts.map +1 -1
- package/lib/orchestrator/discover.js +7 -1
- package/lib/orchestrator/discover.js.map +1 -1
- package/lib/orchestrator/doctor.d.ts +1 -0
- package/lib/orchestrator/doctor.d.ts.map +1 -1
- package/lib/orchestrator/doctor.js +163 -78
- package/lib/orchestrator/doctor.js.map +1 -1
- package/lib/orchestrator/driver-capabilities.d.ts +4 -0
- package/lib/orchestrator/driver-capabilities.d.ts.map +1 -0
- package/lib/orchestrator/driver-capabilities.js +13 -0
- package/lib/orchestrator/driver-capabilities.js.map +1 -0
- package/lib/orchestrator/driver-identity.d.ts +5 -0
- package/lib/orchestrator/driver-identity.d.ts.map +1 -0
- package/lib/orchestrator/driver-identity.js +51 -0
- package/lib/orchestrator/driver-identity.js.map +1 -0
- package/lib/orchestrator/experiment-context.d.ts +52 -4
- package/lib/orchestrator/experiment-context.d.ts.map +1 -1
- package/lib/orchestrator/experiment-context.js +2 -1
- package/lib/orchestrator/experiment-context.js.map +1 -1
- package/lib/orchestrator/experiment-contracts.d.ts +31 -1
- package/lib/orchestrator/experiment-contracts.d.ts.map +1 -1
- package/lib/orchestrator/experiment-corpus.d.ts +2 -1
- package/lib/orchestrator/experiment-corpus.d.ts.map +1 -1
- package/lib/orchestrator/experiment-corpus.js +32 -24
- package/lib/orchestrator/experiment-corpus.js.map +1 -1
- package/lib/orchestrator/experiment-effects.d.ts +33 -0
- package/lib/orchestrator/experiment-effects.d.ts.map +1 -0
- package/lib/orchestrator/experiment-effects.js +46 -0
- package/lib/orchestrator/experiment-effects.js.map +1 -0
- package/lib/orchestrator/experiment-evaluation.d.ts.map +1 -1
- package/lib/orchestrator/experiment-evaluation.js +70 -5
- package/lib/orchestrator/experiment-evaluation.js.map +1 -1
- package/lib/orchestrator/experiment-identity.d.ts +3 -0
- package/lib/orchestrator/experiment-identity.d.ts.map +1 -1
- package/lib/orchestrator/experiment-identity.js +50 -42
- package/lib/orchestrator/experiment-identity.js.map +1 -1
- package/lib/orchestrator/experiment-loader.d.ts +8 -3
- package/lib/orchestrator/experiment-loader.d.ts.map +1 -1
- package/lib/orchestrator/experiment-preflight.d.ts +3 -0
- package/lib/orchestrator/experiment-preflight.d.ts.map +1 -0
- package/lib/orchestrator/experiment-preflight.js +21 -0
- package/lib/orchestrator/experiment-preflight.js.map +1 -0
- package/lib/orchestrator/experiment-report.d.ts +91 -1
- package/lib/orchestrator/experiment-report.d.ts.map +1 -1
- package/lib/orchestrator/experiment-report.js +9 -1
- package/lib/orchestrator/experiment-report.js.map +1 -1
- package/lib/orchestrator/experiment-runs.d.ts +63 -2
- package/lib/orchestrator/experiment-runs.d.ts.map +1 -1
- package/lib/orchestrator/experiment-runs.js +13 -5
- package/lib/orchestrator/experiment-runs.js.map +1 -1
- package/lib/orchestrator/experiment-runtime-identity.d.ts +0 -16
- package/lib/orchestrator/experiment-runtime-identity.d.ts.map +1 -1
- package/lib/orchestrator/experiment-runtime-identity.js +5 -220
- package/lib/orchestrator/experiment-runtime-identity.js.map +1 -1
- package/lib/orchestrator/experiment-selection.d.ts.map +1 -1
- package/lib/orchestrator/experiment-selection.js +151 -43
- package/lib/orchestrator/experiment-selection.js.map +1 -1
- package/lib/orchestrator/experiment.d.ts +3 -3
- package/lib/orchestrator/experiment.d.ts.map +1 -1
- package/lib/orchestrator/experiment.js +26 -21
- package/lib/orchestrator/experiment.js.map +1 -1
- package/lib/orchestrator/fixture-identity.d.ts +1 -0
- package/lib/orchestrator/fixture-identity.d.ts.map +1 -1
- package/lib/orchestrator/fixture-identity.js +6 -1
- package/lib/orchestrator/fixture-identity.js.map +1 -1
- package/lib/orchestrator/fs-read.d.ts +1 -6
- package/lib/orchestrator/fs-read.d.ts.map +1 -1
- package/lib/orchestrator/fs-read.js +2 -32
- package/lib/orchestrator/fs-read.js.map +1 -1
- package/lib/orchestrator/grader-experiment.d.ts +23 -5
- package/lib/orchestrator/grader-experiment.d.ts.map +1 -1
- package/lib/orchestrator/grader-experiment.js +54 -9
- package/lib/orchestrator/grader-experiment.js.map +1 -1
- package/lib/orchestrator/grading.d.ts +1 -0
- package/lib/orchestrator/grading.d.ts.map +1 -1
- package/lib/orchestrator/grading.js +41 -33
- package/lib/orchestrator/grading.js.map +1 -1
- package/lib/orchestrator/harness-catalog-drift.d.ts +22 -0
- package/lib/orchestrator/harness-catalog-drift.d.ts.map +1 -0
- package/lib/orchestrator/harness-catalog-drift.js +90 -0
- package/lib/orchestrator/harness-catalog-drift.js.map +1 -0
- package/lib/orchestrator/harness-registry.d.ts +4 -0
- package/lib/orchestrator/harness-registry.d.ts.map +1 -0
- package/lib/orchestrator/harness-registry.js +5 -0
- package/lib/orchestrator/harness-registry.js.map +1 -0
- package/lib/orchestrator/index.d.ts +1 -1
- package/lib/orchestrator/index.d.ts.map +1 -1
- package/lib/orchestrator/index.js +1 -1
- package/lib/orchestrator/index.js.map +1 -1
- package/lib/orchestrator/list-runs.d.ts +8 -1
- package/lib/orchestrator/list-runs.d.ts.map +1 -1
- package/lib/orchestrator/list-runs.js +83 -18
- package/lib/orchestrator/list-runs.js.map +1 -1
- package/lib/orchestrator/optimization-lifecycle.d.ts.map +1 -1
- package/lib/orchestrator/optimization-lifecycle.js +3 -1
- package/lib/orchestrator/optimization-lifecycle.js.map +1 -1
- package/lib/orchestrator/orchestrator.d.ts +17 -2
- package/lib/orchestrator/orchestrator.d.ts.map +1 -1
- package/lib/orchestrator/orchestrator.js +59 -179
- package/lib/orchestrator/orchestrator.js.map +1 -1
- package/lib/orchestrator/paired-effects.d.ts +34 -0
- package/lib/orchestrator/paired-effects.d.ts.map +1 -0
- package/lib/orchestrator/paired-effects.js +164 -0
- package/lib/orchestrator/paired-effects.js.map +1 -0
- package/lib/orchestrator/profile.d.ts +4 -0
- package/lib/orchestrator/profile.d.ts.map +1 -0
- package/lib/orchestrator/profile.js +10 -0
- package/lib/orchestrator/profile.js.map +1 -0
- package/lib/orchestrator/provenance.d.ts +5 -1
- package/lib/orchestrator/provenance.d.ts.map +1 -1
- package/lib/orchestrator/provenance.js +16 -3
- package/lib/orchestrator/provenance.js.map +1 -1
- package/lib/orchestrator/regrade.d.ts +4 -2
- package/lib/orchestrator/regrade.d.ts.map +1 -1
- package/lib/orchestrator/regrade.js +5 -1
- package/lib/orchestrator/regrade.js.map +1 -1
- package/lib/orchestrator/rubric-loader.js +1 -1
- package/lib/orchestrator/rubric-loader.js.map +1 -1
- package/lib/orchestrator/run-dir.d.ts +2 -0
- package/lib/orchestrator/run-dir.d.ts.map +1 -1
- package/lib/orchestrator/run-dir.js +1 -1
- package/lib/orchestrator/run-dir.js.map +1 -1
- package/lib/orchestrator/run-execution.d.ts +3 -0
- package/lib/orchestrator/run-execution.d.ts.map +1 -1
- package/lib/orchestrator/run-execution.js +64 -10
- package/lib/orchestrator/run-execution.js.map +1 -1
- package/lib/orchestrator/run-lifecycle.d.ts +1 -0
- package/lib/orchestrator/run-lifecycle.d.ts.map +1 -1
- package/lib/orchestrator/run-lifecycle.js +3 -2
- package/lib/orchestrator/run-lifecycle.js.map +1 -1
- package/lib/orchestrator/run-workspace.d.ts +10 -0
- package/lib/orchestrator/run-workspace.d.ts.map +1 -0
- package/lib/orchestrator/run-workspace.js +58 -0
- package/lib/orchestrator/run-workspace.js.map +1 -0
- package/lib/orchestrator/suite-compare.d.ts +37 -0
- package/lib/orchestrator/suite-compare.d.ts.map +1 -1
- package/lib/orchestrator/suite-compare.js +44 -22
- package/lib/orchestrator/suite-compare.js.map +1 -1
- package/lib/orchestrator/suite-runs.d.ts +6 -1
- package/lib/orchestrator/suite-runs.d.ts.map +1 -1
- package/lib/orchestrator/suite-runs.js +14 -2
- package/lib/orchestrator/suite-runs.js.map +1 -1
- package/lib/orchestrator/suite-summary.d.ts +79 -0
- package/lib/orchestrator/suite-summary.d.ts.map +1 -1
- package/lib/orchestrator/suite-summary.js +67 -14
- package/lib/orchestrator/suite-summary.js.map +1 -1
- package/lib/previewer/artifacts.d.ts +25 -0
- package/lib/previewer/artifacts.d.ts.map +1 -0
- package/lib/previewer/artifacts.js +180 -0
- package/lib/previewer/artifacts.js.map +1 -0
- package/lib/previewer/server.d.ts +111 -0
- package/lib/previewer/server.d.ts.map +1 -0
- package/lib/previewer/server.js +559 -0
- package/lib/previewer/server.js.map +1 -0
- package/package.json +4 -2
- package/skills/lux-answerer/SKILL.md +2 -2
- package/src/answerers/claude-code/index.ts +6 -5
- package/src/answerers/persona/index.ts +80 -34
- package/src/answerers/terminal/index.ts +7 -11
- package/src/assertions/authoring.ts +2 -0
- package/src/assertions/core/command-exits-zero.ts +82 -17
- package/src/assertions/core/event-checks.ts +64 -3
- package/src/assertions/core/index.ts +2 -0
- package/src/assertions/core/resource-checks.ts +38 -5
- package/src/assertions/core/safe-regex.ts +16 -6
- package/src/assertions/rubric/evidence.ts +85 -0
- package/src/assertions/rubric/index.ts +76 -46
- package/src/assertions/rubric/internal.ts +264 -46
- package/src/authoring.ts +346 -2
- package/src/cli/bin.ts +2 -12
- package/src/cli/command-runtime.ts +20 -9
- package/src/cli/doctor.ts +17 -0
- package/src/cli/harness-plan.ts +123 -0
- package/src/cli/init-templates.ts +176 -0
- package/src/cli/init.ts +53 -184
- package/src/cli/output-schemas.ts +109 -0
- package/src/cli/program.ts +697 -730
- package/src/cli/render/format.ts +1 -1
- package/src/cli/render/reporter.ts +36 -8
- package/src/cli/run-options.ts +131 -25
- package/src/cli/view.ts +129 -0
- package/src/container/driver.ts +213 -0
- package/src/container/paths.ts +29 -0
- package/src/container/protocol.ts +48 -0
- package/src/container/resources.ts +165 -0
- package/src/container/worker.ts +107 -0
- package/src/core/action-events.ts +59 -0
- package/src/core/agent-activity.ts +236 -0
- package/src/core/agent-environment.ts +64 -0
- package/src/core/agent-events.ts +17 -0
- package/src/core/annotation.ts +2 -1
- package/src/core/answerer.ts +9 -0
- package/src/core/artifact-evidence.ts +40 -5
- package/src/core/assertion.ts +8 -2
- package/src/core/case-defaults.ts +65 -0
- package/src/core/case.ts +79 -8
- package/src/core/command-verification.ts +74 -0
- package/src/core/driver-execution.ts +84 -0
- package/src/core/driver-metrics.ts +51 -0
- package/src/core/driver.ts +76 -0
- package/src/core/duration.ts +52 -0
- package/src/core/environment.ts +22 -0
- package/src/core/evaluation-clusters.ts +35 -0
- package/src/core/events.ts +13 -2
- package/src/core/experiment.ts +71 -25
- package/src/core/file-tree.ts +35 -0
- package/src/core/global-id.ts +26 -0
- package/src/core/harness-catalog.ts +100 -0
- package/src/core/harness-catalogs/antigravity.ts +24 -0
- package/src/core/harness-catalogs/claude-code.ts +25 -0
- package/src/core/harness-catalogs/codex.ts +27 -0
- package/src/core/harness-catalogs/copilot.ts +46 -0
- package/src/core/harness-catalogs/cursor.ts +13 -0
- package/src/core/harness-catalogs/grok-build.ts +19 -0
- package/src/core/harness-catalogs/index.ts +31 -0
- package/src/core/harness-matrix.ts +316 -0
- package/src/core/index.ts +12 -0
- package/src/core/lifecycle-fixtures.ts +4 -2
- package/src/core/model-cli.ts +78 -28
- package/src/core/platform-process.ts +65 -16
- package/src/core/reference-defaults.ts +47 -0
- package/src/core/run.ts +31 -0
- package/src/core/usage.ts +8 -0
- package/src/drivers/antigravity/README.md +171 -0
- package/src/drivers/antigravity/artifacts.ts +37 -0
- package/src/drivers/antigravity/config.ts +92 -0
- package/src/drivers/antigravity/events.ts +290 -0
- package/src/drivers/antigravity/index.ts +132 -0
- package/src/drivers/antigravity/runtime.ts +94 -0
- package/src/drivers/claude-code/deferred-process.ts +118 -0
- package/src/drivers/claude-code/index.ts +228 -282
- package/src/drivers/claude-code/isolation.ts +228 -0
- package/src/drivers/claude-code/parse-events.ts +98 -12
- package/src/drivers/codex/app-events.ts +126 -16
- package/src/drivers/codex/config.ts +59 -8
- package/src/drivers/codex/exec-events.ts +258 -0
- package/src/drivers/codex/index.ts +146 -312
- package/src/drivers/copilot/README.md +60 -0
- package/src/drivers/copilot/config.ts +61 -0
- package/src/drivers/copilot/index.ts +310 -0
- package/src/drivers/cursor/README.md +66 -0
- package/src/drivers/cursor/config.ts +31 -0
- package/src/drivers/cursor/index.ts +326 -0
- package/src/drivers/cursor/interaction.ts +74 -0
- package/src/drivers/grok-build/README.md +112 -0
- package/src/drivers/grok-build/config.ts +43 -0
- package/src/drivers/grok-build/index.ts +331 -0
- package/src/drivers/mcp/index.ts +25 -11
- package/src/drivers/shared/acp-events.ts +94 -0
- package/src/drivers/shared/acp-interaction.ts +27 -0
- package/src/drivers/shared/acp-session.ts +40 -0
- package/src/drivers/shared/acp-transport.ts +187 -0
- package/src/drivers/shared/artifacts.ts +6 -2
- package/src/drivers/shared/experiment-behavior.ts +217 -0
- package/src/drivers/shared/experiment-policy.ts +201 -0
- package/src/drivers/shared/skills.ts +74 -0
- package/src/drivers/subprocess/index.ts +55 -12
- package/src/index.ts +117 -6
- package/src/optimization/reflective.ts +3 -2
- package/src/orchestrator/annotation-loader.ts +10 -0
- package/src/orchestrator/annotation-store.ts +24 -3
- package/src/orchestrator/artifact-origin.ts +50 -0
- package/src/orchestrator/campaign-lifecycle.ts +5 -1
- package/src/orchestrator/candidates.ts +3 -2
- package/src/orchestrator/compare.ts +62 -13
- package/src/orchestrator/comparison-identity.ts +2 -0
- package/src/orchestrator/config.ts +23 -1
- package/src/orchestrator/discover.ts +8 -1
- package/src/orchestrator/doctor.ts +281 -74
- package/src/orchestrator/driver-capabilities.ts +21 -0
- package/src/orchestrator/driver-identity.ts +69 -0
- package/src/orchestrator/experiment-context.ts +5 -3
- package/src/orchestrator/experiment-corpus.ts +68 -39
- package/src/orchestrator/experiment-effects.ts +63 -0
- package/src/orchestrator/experiment-evaluation.ts +88 -10
- package/src/orchestrator/experiment-identity.ts +98 -61
- package/src/orchestrator/experiment-preflight.ts +27 -0
- package/src/orchestrator/experiment-report.ts +21 -1
- package/src/orchestrator/experiment-runs.ts +11 -4
- package/src/orchestrator/experiment-runtime-identity.ts +5 -243
- package/src/orchestrator/experiment-selection.ts +178 -18
- package/src/orchestrator/experiment.ts +29 -29
- package/src/orchestrator/fixture-identity.ts +9 -1
- package/src/orchestrator/fs-read.ts +2 -32
- package/src/orchestrator/grader-experiment.ts +74 -13
- package/src/orchestrator/grading.ts +60 -31
- package/src/orchestrator/harness-catalog-drift.ts +132 -0
- package/src/orchestrator/harness-registry.ts +12 -0
- package/src/orchestrator/index.ts +1 -0
- package/src/orchestrator/list-runs.ts +102 -18
- package/src/orchestrator/optimization-lifecycle.ts +4 -1
- package/src/orchestrator/orchestrator.ts +104 -226
- package/src/orchestrator/paired-effects.ts +214 -0
- package/src/orchestrator/profile.ts +24 -0
- package/src/orchestrator/provenance.ts +23 -3
- package/src/orchestrator/regrade.ts +5 -1
- package/src/orchestrator/rubric-loader.ts +1 -1
- package/src/orchestrator/run-dir.ts +8 -1
- package/src/orchestrator/run-execution.ts +75 -10
- package/src/orchestrator/run-lifecycle.ts +4 -2
- package/src/orchestrator/run-workspace.ts +62 -0
- package/src/orchestrator/suite-compare.ts +47 -23
- package/src/orchestrator/suite-runs.ts +13 -2
- package/src/orchestrator/suite-summary.ts +129 -15
- package/src/previewer/artifacts.ts +221 -0
- package/src/previewer/server.ts +789 -0
- package/viewer/app.css +2111 -0
- package/viewer/app.js +627 -0
- package/viewer/artifact-view.js +48 -0
- package/viewer/charts.js +98 -0
- package/viewer/detail.js +1266 -0
- package/viewer/format.js +129 -0
- package/viewer/index.html +151 -0
- package/lib/cli/skills.d.ts +0 -38
- package/lib/cli/skills.d.ts.map +0 -1
- package/lib/cli/skills.js +0 -84
- package/lib/cli/skills.js.map +0 -1
- package/lib/drivers/shared/secure-copy.d.ts.map +0 -1
- package/lib/drivers/shared/secure-copy.js.map +0 -1
- package/skills/lux/SKILL.md +0 -89
- package/skills/lux/references/cli.md +0 -125
- package/skills/lux/references/eval-authoring.md +0 -257
- package/src/cli/skills.ts +0 -129
- /package/lib/{drivers/shared → core}/secure-copy.d.ts +0 -0
- /package/lib/{drivers/shared → core}/secure-copy.js +0 -0
- /package/src/{drivers/shared → core}/secure-copy.ts +0 -0
|
@@ -81,11 +81,11 @@ const executableNames = (
|
|
|
81
81
|
return [command, ...extensions.map((extension) => `${command}${extension.toLowerCase()}`)];
|
|
82
82
|
};
|
|
83
83
|
|
|
84
|
-
const resolveExecutable = (
|
|
84
|
+
export const resolveExecutable = (
|
|
85
85
|
command: string,
|
|
86
|
-
environment: NodeJS.ProcessEnv,
|
|
87
|
-
platform: SupportedPlatform,
|
|
88
|
-
cwd: string,
|
|
86
|
+
environment: NodeJS.ProcessEnv = process.env,
|
|
87
|
+
platform: SupportedPlatform = currentPlatform(),
|
|
88
|
+
cwd: string = process.cwd(),
|
|
89
89
|
): string | undefined => {
|
|
90
90
|
if (isAbsolute(command) || command.includes("/") || command.includes("\\")) {
|
|
91
91
|
const candidate = resolvePath(cwd, command);
|
|
@@ -175,10 +175,29 @@ const signalPosixGroup = (child: ChildProcess, signal: NodeJS.Signals): void =>
|
|
|
175
175
|
}
|
|
176
176
|
};
|
|
177
177
|
|
|
178
|
+
const windowsAncestorPids = (
|
|
179
|
+
processes: readonly IProcessInfo[],
|
|
180
|
+
owner: { pid: number; ppid: number },
|
|
181
|
+
): Set<number> => {
|
|
182
|
+
// Windows retains historical parent PIDs; reuse can make unrelated live
|
|
183
|
+
// processes appear beneath a new child. Never reap the caller's own ancestry.
|
|
184
|
+
const protectedPids = new Set([owner.pid]);
|
|
185
|
+
const byPid = new Map(processes.map((entry) => [entry.pid, entry]));
|
|
186
|
+
let ancestorPid = owner.ppid;
|
|
187
|
+
while (ancestorPid > 0 && !protectedPids.has(ancestorPid)) {
|
|
188
|
+
protectedPids.add(ancestorPid);
|
|
189
|
+
ancestorPid = byPid.get(ancestorPid)?.ppid ?? 0;
|
|
190
|
+
}
|
|
191
|
+
return protectedPids;
|
|
192
|
+
};
|
|
193
|
+
|
|
178
194
|
export const windowsDescendants = (
|
|
179
195
|
rootPid: number,
|
|
180
196
|
processes: readonly IProcessInfo[],
|
|
197
|
+
owner: { pid: number; ppid: number } = process,
|
|
181
198
|
): IProcessInfo[] => {
|
|
199
|
+
const protectedPids = windowsAncestorPids(processes, owner);
|
|
200
|
+
if (!validWindowsPid(rootPid) || protectedPids.has(rootPid)) return [];
|
|
182
201
|
const descendants: IProcessInfo[] = [];
|
|
183
202
|
const parentPids = new Set([rootPid]);
|
|
184
203
|
let found = true;
|
|
@@ -186,6 +205,8 @@ export const windowsDescendants = (
|
|
|
186
205
|
found = false;
|
|
187
206
|
for (const candidate of processes) {
|
|
188
207
|
if (
|
|
208
|
+
validWindowsPid(candidate.pid) &&
|
|
209
|
+
!protectedPids.has(candidate.pid) &&
|
|
189
210
|
!parentPids.has(candidate.pid) &&
|
|
190
211
|
parentPids.has(candidate.ppid) &&
|
|
191
212
|
!descendants.some((descendant) => descendant.pid === candidate.pid)
|
|
@@ -200,17 +221,33 @@ export const windowsDescendants = (
|
|
|
200
221
|
return root ? [root, ...descendants] : descendants;
|
|
201
222
|
};
|
|
202
223
|
|
|
203
|
-
const windowsProcessList = async (
|
|
224
|
+
const windowsProcessList = async (): Promise<IProcessInfo[]> => {
|
|
204
225
|
const { getAllProcesses } = await import("@vscode/windows-process-tree");
|
|
205
226
|
return new Promise((resolve) => {
|
|
206
|
-
getAllProcesses(
|
|
227
|
+
getAllProcesses(resolve);
|
|
207
228
|
});
|
|
208
229
|
};
|
|
209
230
|
|
|
210
|
-
const forceWindowsTree = async (
|
|
231
|
+
export const forceWindowsTree = async (
|
|
232
|
+
pid: number,
|
|
233
|
+
discover: (pid: number) => Promise<IProcessInfo[]> = windowsProcessList,
|
|
234
|
+
signal: (pid: number) => void = signalWindowsProcess,
|
|
235
|
+
discoveryTimeoutMs = 2_000,
|
|
236
|
+
stillOwned: () => boolean = () => true,
|
|
237
|
+
): Promise<void> => {
|
|
238
|
+
if (!stillOwned() || !safeWindowsSignalTarget(pid)) return;
|
|
211
239
|
let processes: IProcessInfo[] = [];
|
|
240
|
+
let timer: NodeJS.Timeout | undefined;
|
|
212
241
|
try {
|
|
213
|
-
processes = await
|
|
242
|
+
processes = await Promise.race([
|
|
243
|
+
Promise.resolve().then(() => discover(pid)),
|
|
244
|
+
new Promise<never>((_, reject) => {
|
|
245
|
+
timer = setTimeout(
|
|
246
|
+
() => reject(new Error(`process discovery timed out after ${discoveryTimeoutMs}ms`)),
|
|
247
|
+
discoveryTimeoutMs,
|
|
248
|
+
);
|
|
249
|
+
}),
|
|
250
|
+
]);
|
|
214
251
|
} catch (error) {
|
|
215
252
|
process.emitWarning(
|
|
216
253
|
`Windows descendant discovery failed; only the direct child can be terminated: ${
|
|
@@ -218,12 +255,25 @@ const forceWindowsTree = async (pid: number): Promise<void> => {
|
|
|
218
255
|
}`,
|
|
219
256
|
{ code: "LUX_WINDOWS_PROCESS_DISCOVERY" },
|
|
220
257
|
);
|
|
258
|
+
} finally {
|
|
259
|
+
if (timer) clearTimeout(timer);
|
|
260
|
+
}
|
|
261
|
+
// Discovery is asynchronous; an exited leader can already have a recycled PID.
|
|
262
|
+
if (!stillOwned() || windowsAncestorPids(processes, process).has(pid)) return;
|
|
263
|
+
const descendants = windowsDescendants(pid, processes);
|
|
264
|
+
for (const process of descendants.toReversed()) {
|
|
265
|
+
if (safeWindowsSignalTarget(process.pid)) signal(process.pid);
|
|
221
266
|
}
|
|
222
|
-
|
|
223
|
-
if (!processes.some((process) => process.pid === pid)) signalWindowsProcess(pid);
|
|
267
|
+
if (!descendants.some((process) => process.pid === pid)) signal(pid);
|
|
224
268
|
};
|
|
225
269
|
|
|
270
|
+
const validWindowsPid = (pid: number): boolean => Number.isSafeInteger(pid) && pid > 0;
|
|
271
|
+
|
|
272
|
+
const safeWindowsSignalTarget = (pid: number): boolean =>
|
|
273
|
+
validWindowsPid(pid) && pid !== process.pid && pid !== process.ppid;
|
|
274
|
+
|
|
226
275
|
const signalWindowsProcess = (pid: number): void => {
|
|
276
|
+
if (!safeWindowsSignalTarget(pid)) return;
|
|
227
277
|
try {
|
|
228
278
|
process.kill(pid, "SIGKILL");
|
|
229
279
|
} catch {
|
|
@@ -252,19 +302,18 @@ export const posixProcessPlatform = (
|
|
|
252
302
|
});
|
|
253
303
|
|
|
254
304
|
export const windowsProcessPlatform = (
|
|
255
|
-
forceTree: (pid: number) => Promise<void> =
|
|
305
|
+
forceTree: (pid: number, stillOwned: () => boolean) => Promise<void> = (pid, stillOwned) =>
|
|
306
|
+
forceWindowsTree(pid, undefined, undefined, undefined, stillOwned),
|
|
256
307
|
): ProcessPlatform => ({
|
|
257
308
|
detached: false,
|
|
258
309
|
processTreeFor: (child) => {
|
|
259
310
|
const pid = child.pid;
|
|
260
311
|
let forced: Promise<void> | undefined;
|
|
312
|
+
const stillOwned = (): boolean => child.exitCode == null && child.signalCode == null;
|
|
261
313
|
const forceOnce = (): Promise<void> => {
|
|
262
314
|
if (forced) return forced;
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
(child.signalCode !== null && child.signalCode !== undefined);
|
|
266
|
-
if (pid === undefined || leaderHasExited) forced = Promise.resolve();
|
|
267
|
-
else forced = forceTree(pid);
|
|
315
|
+
if (pid === undefined || !stillOwned()) forced = Promise.resolve();
|
|
316
|
+
else forced = forceTree(pid, stillOwned);
|
|
268
317
|
return forced;
|
|
269
318
|
};
|
|
270
319
|
return {
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { AnswererRef, DriverRef } from "./case.js";
|
|
2
|
+
import { mergePluginConfig } from "./harness-matrix.js";
|
|
3
|
+
|
|
4
|
+
export const withDriverDefaults = (
|
|
5
|
+
reference: DriverRef | undefined,
|
|
6
|
+
defaults: Record<string, unknown> | undefined,
|
|
7
|
+
): DriverRef | undefined => {
|
|
8
|
+
if (!reference || !defaults) return reference;
|
|
9
|
+
const selected = typeof reference === "string" ? { name: reference } : reference;
|
|
10
|
+
return { ...selected, config: mergePluginConfig(defaults, selected.config) };
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const mergeDriverReference = (
|
|
14
|
+
base: DriverRef | undefined,
|
|
15
|
+
local: DriverRef | undefined,
|
|
16
|
+
): DriverRef | undefined => {
|
|
17
|
+
if (local === undefined) return base;
|
|
18
|
+
if (base === undefined) return local;
|
|
19
|
+
const first = typeof base === "string" ? { name: base } : base;
|
|
20
|
+
const second = typeof local === "string" ? { name: local } : local;
|
|
21
|
+
if (first.name !== second.name) return local;
|
|
22
|
+
return {
|
|
23
|
+
name: second.name,
|
|
24
|
+
config: mergePluginConfig(first.config, second.config),
|
|
25
|
+
...((second.execution ?? first.execution)
|
|
26
|
+
? { execution: second.execution ?? first.execution }
|
|
27
|
+
: {}),
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const mergeAnswererReference = (
|
|
32
|
+
base: AnswererRef | undefined,
|
|
33
|
+
local: AnswererRef | undefined,
|
|
34
|
+
): AnswererRef | undefined => {
|
|
35
|
+
const merged = mergeDriverReference(base, local);
|
|
36
|
+
if (typeof merged !== "object" || merged.name !== "persona") return merged;
|
|
37
|
+
const first = typeof base === "object" ? base.config : undefined;
|
|
38
|
+
const second = typeof local === "object" ? local.config : undefined;
|
|
39
|
+
if (!first || !second || typeof first !== "object" || typeof second !== "object") return merged;
|
|
40
|
+
if (!("provider" in second) || ("provider" in first && second.provider === first.provider))
|
|
41
|
+
return merged;
|
|
42
|
+
const config = { ...(merged.config as Record<string, unknown>) };
|
|
43
|
+
for (const key of ["model", "command", "reasoningEffort"]) {
|
|
44
|
+
if (!(key in second)) delete config[key];
|
|
45
|
+
}
|
|
46
|
+
return { name: merged.name, config };
|
|
47
|
+
};
|
package/src/core/run.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { ActionTimingSchema } from "./action-events.js";
|
|
3
|
+
import { AgentActivitySchema } from "./agent-activity.js";
|
|
2
4
|
import { EvalCaseSchema } from "./case.js";
|
|
3
5
|
import { ArtifactSchema } from "./driver.js";
|
|
6
|
+
import { DriverMetricsSchema } from "./driver-metrics.js";
|
|
7
|
+
import { EnvironmentDeclarationSchema } from "./environment.js";
|
|
4
8
|
import { ErrorEventReasonSchema, ReadyStateSchema, RunEventSchema } from "./events.js";
|
|
5
9
|
import { ToolOutcomeSummarySchema } from "./tool-events.js";
|
|
6
10
|
import { RunUsageSchema } from "./usage.js";
|
|
@@ -24,7 +28,24 @@ export const RunProvenanceSchema = z.object({
|
|
|
24
28
|
arch: z.string(),
|
|
25
29
|
node: z.string(),
|
|
26
30
|
bun: z.exactOptional(z.string()),
|
|
31
|
+
host: z.exactOptional(
|
|
32
|
+
z.object({
|
|
33
|
+
osRelease: z.string(),
|
|
34
|
+
cpuModels: z.array(z.string()),
|
|
35
|
+
logicalCpuCount: z.number().int().nonnegative(),
|
|
36
|
+
availableParallelism: z.number().int().positive(),
|
|
37
|
+
totalMemoryBytes: z.number().int().nonnegative(),
|
|
38
|
+
}),
|
|
39
|
+
),
|
|
27
40
|
}),
|
|
41
|
+
environment: z.exactOptional(
|
|
42
|
+
z.object({
|
|
43
|
+
/** Declared by the author, not independently verified or enforced by Lux. */
|
|
44
|
+
declared: z.exactOptional(EnvironmentDeclarationSchema),
|
|
45
|
+
/** Effective Lux worker limit for this run's suite; direct runs use one. */
|
|
46
|
+
concurrency: z.number().int().positive(),
|
|
47
|
+
}),
|
|
48
|
+
),
|
|
28
49
|
source: z.exactOptional(
|
|
29
50
|
z.object({
|
|
30
51
|
/** Case path relative to its repository root, when one was found. */
|
|
@@ -49,6 +70,8 @@ export const RunProvenanceSchema = z.object({
|
|
|
49
70
|
fixturesHash: z.exactOptional(z.string()),
|
|
50
71
|
subjectHash: z.exactOptional(z.string()),
|
|
51
72
|
profileId: z.exactOptional(z.string()),
|
|
73
|
+
/** Harness matrix permutation (`driver:model:effort`) this run was filed under. */
|
|
74
|
+
permutationId: z.exactOptional(z.string()),
|
|
52
75
|
experimentId: z.exactOptional(z.string()),
|
|
53
76
|
variantId: z.exactOptional(z.string()),
|
|
54
77
|
candidateId: z.exactOptional(z.string()),
|
|
@@ -103,6 +126,8 @@ export const RunMetadataSchema = z.object({
|
|
|
103
126
|
* eval overhead.
|
|
104
127
|
*/
|
|
105
128
|
usage: RunUsageSchema,
|
|
129
|
+
/** Absent in older records; zero alone did not establish availability. */
|
|
130
|
+
agentUsageAvailability: z.exactOptional(z.enum(["reported", "unavailable"])),
|
|
106
131
|
modelAccounting: z.exactOptional(
|
|
107
132
|
z.object({
|
|
108
133
|
agentCalls: z.number().int().nonnegative(),
|
|
@@ -112,6 +137,8 @@ export const RunMetadataSchema = z.object({
|
|
|
112
137
|
}),
|
|
113
138
|
),
|
|
114
139
|
cost: z.exactOptional(z.object({ usd: z.exactOptional(z.number()) })),
|
|
140
|
+
/** Driver-defined scalar measurements with display and optimization semantics. */
|
|
141
|
+
driverMetrics: z.exactOptional(DriverMetricsSchema),
|
|
115
142
|
interruptCounts: z.object({ ask: z.number(), approve: z.number(), custom: z.number() }),
|
|
116
143
|
/** Legacy raw count of progress events whose kind is `tool-call`. */
|
|
117
144
|
toolCallCount: z.exactOptional(z.number()),
|
|
@@ -124,6 +151,10 @@ export const RunMetadataSchema = z.object({
|
|
|
124
151
|
),
|
|
125
152
|
/** Wall-clock per phase, derived from the lifecycle event stream. */
|
|
126
153
|
phaseDurationMs: z.exactOptional(PhaseDurationsSchema),
|
|
154
|
+
/** Driver-reported semantic action latency, measured from `start-driver`. */
|
|
155
|
+
actionTiming: z.exactOptional(ActionTimingSchema),
|
|
156
|
+
/** Per-agent lifecycle and activity derived from the attributed event stream. */
|
|
157
|
+
agentActivity: z.exactOptional(z.array(AgentActivitySchema)),
|
|
127
158
|
/**
|
|
128
159
|
* Harness/infrastructure failure that invalidates this run as candidate
|
|
129
160
|
* evidence. A driver-reported subject failure intentionally leaves this
|
package/src/core/usage.ts
CHANGED
|
@@ -121,3 +121,11 @@ export const parseAgentUsage = (raw: unknown): TokenUsage | null => {
|
|
|
121
121
|
if (!AGENT_USAGE_KEYS.some((key) => key in raw)) return null;
|
|
122
122
|
return AgentUsageSchema.safeParse(raw).data ?? null;
|
|
123
123
|
};
|
|
124
|
+
|
|
125
|
+
/** Legacy nonzero counts remain usable; legacy zero counts are unknown. */
|
|
126
|
+
export const hasAgentUsage = (metadata: {
|
|
127
|
+
usage: RunUsage;
|
|
128
|
+
agentUsageAvailability?: "reported" | "unavailable";
|
|
129
|
+
}): boolean =>
|
|
130
|
+
metadata.agentUsageAvailability === "reported" ||
|
|
131
|
+
(metadata.agentUsageAvailability === undefined && !isUsageEmpty(metadata.usage.agent));
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Antigravity driver
|
|
2
|
+
|
|
3
|
+
The `antigravity` driver runs Google Antigravity CLI (`agy`) in its headless
|
|
4
|
+
streaming mode: `agy --input-format stream-json --output-format stream-json`.
|
|
5
|
+
Install the CLI and sign in before Lux starts it; headless runs fail with
|
|
6
|
+
`authentication required` when no cached credential exists.
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
{
|
|
10
|
+
name: "antigravity",
|
|
11
|
+
config: {
|
|
12
|
+
model: "YOUR_ANTIGRAVITY_MODEL",
|
|
13
|
+
reasoningEffort: "low",
|
|
14
|
+
},
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`model` is required and Lux never inherits the CLI default. Use a base slug
|
|
19
|
+
such as `gemini-3.8-flash`; `reasoningEffort` takes Antigravity's own `low`,
|
|
20
|
+
`medium`, or `high` and selects that variant through `--effort`. The harness
|
|
21
|
+
catalog in `core/harness-catalogs/antigravity.ts` lists which levels each model
|
|
22
|
+
offers (Gemini Flash has three, Gemini 3.1 Pro has `low` and `high`, Claude and
|
|
23
|
+
GPT-OSS have none), and an effort outside that list is rejected before the CLI
|
|
24
|
+
starts. When no effort is set, a model with levels runs at `low`.
|
|
25
|
+
|
|
26
|
+
Lux writes one `user` event with the case prompt, closes stdin, and reads
|
|
27
|
+
`init`, `step_update`, and `result` events. Tool steps become paired
|
|
28
|
+
`tool-call` and `tool-result` events keyed by step index, response deltas become
|
|
29
|
+
`agent-message` progress, other steps stay visible as `antigravity-step`
|
|
30
|
+
progress, and the final `result` usage is recorded as agent usage. The terminal
|
|
31
|
+
response is also retained as message evidence when it was not already streamed.
|
|
32
|
+
Both `DONE` and `ERROR` tool steps close the corresponding tool call; failed
|
|
33
|
+
steps retain their error message. A result with `denied_actions` is an error even
|
|
34
|
+
when Antigravity reports `SUCCESS`. `WAITING` and other non-success statuses are
|
|
35
|
+
also errors. Configure the required scoped permissions for the
|
|
36
|
+
headless evaluation; Lux does not retry a denial with broader permissions.
|
|
37
|
+
|
|
38
|
+
Lux explicitly selects `mode: "accept-edits"` for coding tasks. Set `mode: "plan"`
|
|
39
|
+
for planning runs. On Antigravity 1.2.10, omitting `--mode` can leave terminal
|
|
40
|
+
workspaces read-only even when native file tools can edit them and scoped write
|
|
41
|
+
grants exist. `accept-edits` permits workspace writes within the terminal sandbox;
|
|
42
|
+
it does not disable that sandbox or authorize outside-sandbox execution.
|
|
43
|
+
|
|
44
|
+
## Run-scoped configuration
|
|
45
|
+
|
|
46
|
+
Lux can own the CLI settings for a run:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
{
|
|
50
|
+
name: "antigravity",
|
|
51
|
+
config: {
|
|
52
|
+
model: "gemini-3.1-pro",
|
|
53
|
+
reasoningEffort: "low",
|
|
54
|
+
sandbox: true,
|
|
55
|
+
permissionMode: "proceed-in-sandbox",
|
|
56
|
+
permissions: { allow: ["read_url(registry.npmjs.org)"] },
|
|
57
|
+
},
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This mode gives only the child process a private home directory. Lux writes
|
|
62
|
+
`enableTerminalSandbox: true`, `toolPermission: "proceed-in-sandbox"`, and the
|
|
63
|
+
configured `permissions` there. It does not edit the user's settings, copy their
|
|
64
|
+
history/plugins, or reuse their project records. Concurrent runs get distinct
|
|
65
|
+
homes. `permissionMode: "inherit"` is the default and preserves the previous
|
|
66
|
+
behavior. Scoped mode requires `sandbox: true`, rejects `skipPermissions: true`
|
|
67
|
+
and a host `project`, and supports scoped `allow`, `deny`, and `ask` lists.
|
|
68
|
+
|
|
69
|
+
Authentication must work in that private home. An inherited `GEMINI_API_KEY` is
|
|
70
|
+
passed to the CLI. For file-based OAuth, Lux copies only the CLI's
|
|
71
|
+
`antigravity-oauth-token` into the private runtime, using the normal CLI token
|
|
72
|
+
path by default or an explicit `authTokenFile`. The copy has mode 0600 inside
|
|
73
|
+
a mode-0700 runtime directory; token refresh cannot modify the source file.
|
|
74
|
+
On macOS, `reuseKeychain: true` explicitly opts into reading Antigravity’s own
|
|
75
|
+
Keychain entry (service `gemini`, account `antigravity`) when the default token
|
|
76
|
+
file is absent. Lux writes that credential only to the private runtime and
|
|
77
|
+
removes it on close. This option defaults to false. Do not put secret values in
|
|
78
|
+
committed Lux configuration.
|
|
79
|
+
|
|
80
|
+
Before deleting a private runtime, Lux snapshots native deliverables from its
|
|
81
|
+
`brain` directory under `antigravity-artifacts/` in the task artifacts. This keeps
|
|
82
|
+
handoff documents available to graders even when the final response only links
|
|
83
|
+
to them. Hidden CLI logs, revision copies, metadata, and symlinks are excluded;
|
|
84
|
+
collection fails explicitly above 500 files or 32 MiB. Existing user-home brain
|
|
85
|
+
history is never scanned in inherited mode.
|
|
86
|
+
|
|
87
|
+
The runtime is outside task artifacts and removed on driver close, collection,
|
|
88
|
+
and startup failure. A force-killed Lux process cannot run cleanup; private
|
|
89
|
+
runtime directories have the `lux-antigravity-home-` prefix in the OS temp root.
|
|
90
|
+
This is configuration separation, not a complete OS security boundary; the
|
|
91
|
+
driver continues declaring `isolation: false`.
|
|
92
|
+
|
|
93
|
+
Grant scoped file and documentation access as needed, including read access to
|
|
94
|
+
language runtimes installed outside system directories. `command(...)` allow
|
|
95
|
+
rules can authorize outside-sandbox execution too. Keep them absent when that
|
|
96
|
+
execution must remain unapproved; `unsandboxed(...)` rules were ignored in the
|
|
97
|
+
observed macOS CLI. The terminal sandbox and native file-tool permissions are
|
|
98
|
+
separate. Extra CLI arguments remain caller-controlled.
|
|
99
|
+
|
|
100
|
+
Each run creates a fresh Antigravity project and passes its canonical working
|
|
101
|
+
directory through `--add-dir` and an explicit task-workspace prompt preamble.
|
|
102
|
+
Set `project` to reuse an explicitly configured
|
|
103
|
+
project, and `addDirs` for additional reference directories. Process cwd alone
|
|
104
|
+
does not select an Antigravity project. Project selection does not grant tool
|
|
105
|
+
permissions: Antigravity 1.2.10 can still deny workspace writes in headless mode.
|
|
106
|
+
`skipPermissions` remains false by default and must be explicitly enabled to
|
|
107
|
+
bypass tool permission checks.
|
|
108
|
+
|
|
109
|
+
The headless protocol carries no user questions or permission prompts, so the
|
|
110
|
+
driver is not interactive. In inherited mode, Antigravity still reads user
|
|
111
|
+
settings and conversation history. Controlled experiments are not
|
|
112
|
+
declared.
|
|
113
|
+
|
|
114
|
+
Regression tests cover the `ERROR` tool step followed by `SUCCESS` with denied
|
|
115
|
+
actions observed in an authenticated Antigravity 1.2.10 session.
|
|
116
|
+
|
|
117
|
+
## Live readiness checks
|
|
118
|
+
|
|
119
|
+
From a Lux checkout, after installing locked dependencies and authenticating `agy`:
|
|
120
|
+
|
|
121
|
+
```sh
|
|
122
|
+
LUX_ANTIGRAVITY_MODEL=gemini-3.1-pro mise run smoke:antigravity
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
This opt-in smoke test consumes model usage. It runs four bounded checks in
|
|
126
|
+
fresh artifact workspaces: a tool-free protocol response, a Node write/read
|
|
127
|
+
check, native handoff-document capture, and a local HTTP server/client check. It stops on the first failure and
|
|
128
|
+
retains events, fixtures, and results under `.lux-runs/antigravity-smoke/`.
|
|
129
|
+
After building, select one stage with
|
|
130
|
+
`LUX_ANTIGRAVITY_MODEL=gemini-3.1-pro node scripts/smoke-antigravity.mjs protocol`
|
|
131
|
+
(or `workspace` / `artifact` / `loopback`); `--list` makes no model calls.
|
|
132
|
+
|
|
133
|
+
The script uses `permissionMode: "proceed-in-sandbox"` with scoped read access to
|
|
134
|
+
the running Node installation, plus localhost grants for the loopback stage.
|
|
135
|
+
It never changes global settings. Authenticate
|
|
136
|
+
with an inherited `GEMINI_API_KEY`, a normal CLI OAuth token file, or
|
|
137
|
+
`LUX_ANTIGRAVITY_AUTH_TOKEN_FILE` pointing to such a file. To opt into macOS
|
|
138
|
+
Keychain reuse, set `LUX_ANTIGRAVITY_REUSE_KEYCHAIN=1`. On macOS with CLI 1.2.12,
|
|
139
|
+
private-runtime authentication and sandboxed file writes passed on 2026-09-29.
|
|
140
|
+
The loopback check failed with `connect EPERM 127.0.0.1`; its missing fixture
|
|
141
|
+
evidence correctly failed the smoke test despite normal agent completion.
|
|
142
|
+
|
|
143
|
+
`--sandbox` alone does not select an execution policy: a native 1.2.12 probe on
|
|
144
|
+
macOS with only `enableTerminalSandbox: true` denied the command, then returned
|
|
145
|
+
`SUCCESS` with empty text and `denied_actions`. Lux correctly classifies that
|
|
146
|
+
result as an error. A separate tool-free live probe passed in inherited mode;
|
|
147
|
+
it does not establish private-runtime authentication.
|
|
148
|
+
|
|
149
|
+
A passing protocol check establishes authentication and streaming only.
|
|
150
|
+
Workspace and loopback checks require fixture-produced evidence; a completed
|
|
151
|
+
agent response alone cannot pass them. These checks do not establish skill
|
|
152
|
+
quality, package-install access, or complete sandbox isolation. Scoped access
|
|
153
|
+
to a runtime outside system directories may also be necessary.
|
|
154
|
+
|
|
155
|
+
On macOS, native 1.2.11 probes could write/build in editing mode but could
|
|
156
|
+
not connect to their own loopback HTTP server: direct connections returned
|
|
157
|
+
`EPERM`, and proxy requests rejected literal IPs or nonstandard HTTP ports.
|
|
158
|
+
That failure occurred without Lux. Recheck the installed CLI with `loopback`
|
|
159
|
+
before running suites that depend on local HTTP fixtures. Domain grants alone
|
|
160
|
+
have not been shown to resolve this restriction. Keep a native reproduction
|
|
161
|
+
separate from driver traces when diagnosing it; do not treat it as skill failure
|
|
162
|
+
or bypass the sandbox to obtain a passing score.
|
|
163
|
+
|
|
164
|
+
Protocol references:
|
|
165
|
+
|
|
166
|
+
- [Antigravity CLI headless mode](https://antigravity.google/docs/cli/headless/)
|
|
167
|
+
- [Antigravity CLI](https://github.com/google-antigravity/antigravity-cli)
|
|
168
|
+
|
|
169
|
+
- [Antigravity terminal sandbox](https://antigravity.google/docs/sandbox?tab=cli)
|
|
170
|
+
- [CLI settings reference](https://antigravity.google/docs/cli/reference/)
|
|
171
|
+
- [Native artifacts](https://antigravity.google/docs/cli/artifacts/)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { readFile, realpath } from "node:fs/promises";
|
|
2
|
+
import { join, sep } from "node:path";
|
|
3
|
+
import { writeArtifactSnapshot } from "../../core/artifact-snapshot.js";
|
|
4
|
+
import { walkArtifacts } from "../shared/artifacts.js";
|
|
5
|
+
|
|
6
|
+
export const captureAntigravityArtifacts = async (
|
|
7
|
+
home: string,
|
|
8
|
+
destination: string,
|
|
9
|
+
): Promise<void> => {
|
|
10
|
+
const brain = join(home, ".gemini/antigravity-cli/brain");
|
|
11
|
+
let root: string;
|
|
12
|
+
try {
|
|
13
|
+
root = await realpath(brain);
|
|
14
|
+
} catch (error) {
|
|
15
|
+
if ((error as NodeJS.ErrnoException).code === "ENOENT") return;
|
|
16
|
+
throw error;
|
|
17
|
+
}
|
|
18
|
+
if (!root.startsWith(`${await realpath(home)}${sep}`))
|
|
19
|
+
throw new Error("Antigravity artifact directory escaped its private runtime");
|
|
20
|
+
// Native revisions and CLI bookkeeping are not authored deliverables.
|
|
21
|
+
const artifacts = (await walkArtifacts(brain)).filter(
|
|
22
|
+
({ path }) => !/\.(?:metadata\.json|resolved(?:\.\d+)?)$/.test(path),
|
|
23
|
+
);
|
|
24
|
+
if (!artifacts.length) return;
|
|
25
|
+
const maxBytes = 32 * 1024 * 1024;
|
|
26
|
+
if (artifacts.reduce((total, artifact) => total + (artifact.size ?? 0), 0) > maxBytes)
|
|
27
|
+
throw new Error("Antigravity native artifacts exceed the 32 MiB collection limit");
|
|
28
|
+
const files = Object.fromEntries(
|
|
29
|
+
await Promise.all(artifacts.map(async ({ path }) => [path, await readFile(join(brain, path))])),
|
|
30
|
+
);
|
|
31
|
+
await writeArtifactSnapshot({
|
|
32
|
+
artifactsDir: destination,
|
|
33
|
+
name: "antigravity-artifacts",
|
|
34
|
+
files,
|
|
35
|
+
maxBytes,
|
|
36
|
+
});
|
|
37
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { InheritEnvironmentSchema } from "../../core/agent-environment.js";
|
|
3
|
+
import { DurationSchema } from "../../core/duration.js";
|
|
4
|
+
import { antigravityCatalog, applyCatalogEffort } from "../../core/index.js";
|
|
5
|
+
|
|
6
|
+
export const AntigravityDriverConfigSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
command: z.string().min(1).default("agy"),
|
|
9
|
+
/** Antigravity model slugs often bake in an effort; never inherit the CLI default. */
|
|
10
|
+
model: z.string().min(1),
|
|
11
|
+
/** Pin coding mode: an inherited plan mode makes sandboxed workspaces read-only. */
|
|
12
|
+
mode: z.enum(["accept-edits", "plan"]).default("accept-edits"),
|
|
13
|
+
reasoningEffort: z.enum(antigravityCatalog.efforts).optional(),
|
|
14
|
+
agent: z.string().min(1).optional(),
|
|
15
|
+
/** Use an existing project; otherwise each run creates a fresh project. */
|
|
16
|
+
project: z.string().min(1).optional(),
|
|
17
|
+
addDirs: z.array(z.string().min(1)).default([]),
|
|
18
|
+
/**
|
|
19
|
+
* Auto-approve every tool permission. Off by default: a headless turn that
|
|
20
|
+
* needs approval can report WAITING or SUCCESS with denied_actions; both fail.
|
|
21
|
+
*/
|
|
22
|
+
skipPermissions: z.boolean().default(false),
|
|
23
|
+
/** Enable Antigravity's terminal sandbox restrictions. */
|
|
24
|
+
sandbox: z.boolean().default(false),
|
|
25
|
+
/** Own the CLI settings in a private runtime home instead of changing user settings. */
|
|
26
|
+
permissionMode: z.enum(["inherit", "proceed-in-sandbox"]).default("inherit"),
|
|
27
|
+
permissions: z
|
|
28
|
+
.object({
|
|
29
|
+
allow: z.array(z.string().min(1)).default([]),
|
|
30
|
+
deny: z.array(z.string().min(1)).default([]),
|
|
31
|
+
ask: z.array(z.string().min(1)).default([]),
|
|
32
|
+
})
|
|
33
|
+
.strict()
|
|
34
|
+
.optional(),
|
|
35
|
+
/** Optional CLI-format OAuth token file for the private runtime; never logged. */
|
|
36
|
+
authTokenFile: z.string().min(1).optional(),
|
|
37
|
+
/** Explicitly authorize copying this application's macOS Keychain credential. */
|
|
38
|
+
reuseKeychain: z.boolean().default(false),
|
|
39
|
+
cwd: z.string().optional(),
|
|
40
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
41
|
+
inheritEnv: InheritEnvironmentSchema.optional(),
|
|
42
|
+
extraArgs: z.array(z.string()).optional(),
|
|
43
|
+
idleTimeout: DurationSchema.default("10 minutes"),
|
|
44
|
+
maxLineBytes: z.number().positive().default(10_000_000),
|
|
45
|
+
})
|
|
46
|
+
.strict()
|
|
47
|
+
.superRefine((config, ctx) => {
|
|
48
|
+
if (config.permissionMode === "proceed-in-sandbox") {
|
|
49
|
+
if (!config.sandbox || config.skipPermissions)
|
|
50
|
+
ctx.addIssue({
|
|
51
|
+
code: "custom",
|
|
52
|
+
message: "proceed-in-sandbox requires sandbox: true and skipPermissions: false",
|
|
53
|
+
});
|
|
54
|
+
if (config.project)
|
|
55
|
+
ctx.addIssue({
|
|
56
|
+
code: "custom",
|
|
57
|
+
path: ["project"],
|
|
58
|
+
message: "A private Antigravity runtime cannot reuse a host project",
|
|
59
|
+
});
|
|
60
|
+
} else if (config.permissions || config.authTokenFile || config.reuseKeychain) {
|
|
61
|
+
ctx.addIssue({
|
|
62
|
+
code: "custom",
|
|
63
|
+
message:
|
|
64
|
+
"permissions, authTokenFile, and reuseKeychain require permissionMode: proceed-in-sandbox",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
.transform(applyCatalogEffort(antigravityCatalog));
|
|
69
|
+
|
|
70
|
+
export type AntigravityDriverConfig = z.infer<typeof AntigravityDriverConfigSchema>;
|
|
71
|
+
|
|
72
|
+
export const buildAntigravityArgs = (config: AntigravityDriverConfig, cwd?: string): string[] => [
|
|
73
|
+
"--input-format",
|
|
74
|
+
"stream-json",
|
|
75
|
+
"--output-format",
|
|
76
|
+
"stream-json",
|
|
77
|
+
"--model",
|
|
78
|
+
config.model,
|
|
79
|
+
"--mode",
|
|
80
|
+
config.mode,
|
|
81
|
+
...(config.project ? ["--project", config.project] : ["--new-project"]),
|
|
82
|
+
...(cwd ? ["--add-dir", cwd] : []),
|
|
83
|
+
...config.addDirs.flatMap((directory) => ["--add-dir", directory]),
|
|
84
|
+
...(config.reasoningEffort ? ["--effort", config.reasoningEffort] : []),
|
|
85
|
+
...(config.agent ? ["--agent", config.agent] : []),
|
|
86
|
+
...(config.skipPermissions ? ["--dangerously-skip-permissions"] : []),
|
|
87
|
+
...(config.sandbox ? ["--sandbox"] : []),
|
|
88
|
+
...(config.extraArgs ?? []),
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
export const formatAntigravityPrompt = (prompt: string): string =>
|
|
92
|
+
JSON.stringify({ event: "user", message: { content: prompt } });
|