@with-logic/elwood 0.2.1 → 0.2.2
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/CHANGELOG.md +565 -1
- package/CONTRIBUTING.md +3 -0
- package/README.md +4 -2
- package/dist/bridge/socket-release.d.ts +15 -0
- package/dist/bridge/socket-release.d.ts.map +1 -0
- package/dist/bridge/socket-release.js +22 -0
- package/dist/bridge/socket-release.js.map +1 -0
- package/dist/claude/composer/border.d.ts +12 -0
- package/dist/claude/composer/border.d.ts.map +1 -0
- package/dist/claude/composer/border.js +12 -0
- package/dist/claude/composer/border.js.map +1 -0
- package/dist/claude/composer/empty-input.d.ts +15 -0
- package/dist/claude/composer/empty-input.d.ts.map +1 -1
- package/dist/claude/composer/empty-input.js +30 -11
- package/dist/claude/composer/empty-input.js.map +1 -1
- package/dist/claude/composer/footer.d.ts +26 -2
- package/dist/claude/composer/footer.d.ts.map +1 -1
- package/dist/claude/composer/footer.js +29 -2
- package/dist/claude/composer/footer.js.map +1 -1
- package/dist/claude/composer/idle.d.ts +14 -0
- package/dist/claude/composer/idle.d.ts.map +1 -0
- package/dist/claude/composer/idle.js +17 -0
- package/dist/claude/composer/idle.js.map +1 -0
- package/dist/claude/composer/last.d.ts +2 -0
- package/dist/claude/composer/last.d.ts.map +1 -0
- package/dist/claude/composer/last.js +15 -0
- package/dist/claude/composer/last.js.map +1 -0
- package/dist/claude/composer/staged-input.d.ts.map +1 -1
- package/dist/claude/composer/staged-input.js +2 -1
- package/dist/claude/composer/staged-input.js.map +1 -1
- package/dist/claude/hooks/stop-failure.d.ts +15 -2
- package/dist/claude/hooks/stop-failure.d.ts.map +1 -1
- package/dist/claude/hooks/stop-failure.js +32 -9
- package/dist/claude/hooks/stop-failure.js.map +1 -1
- package/dist/claude/login/stages.d.ts.map +1 -1
- package/dist/claude/login/stages.js +2 -2
- package/dist/claude/login/stages.js.map +1 -1
- package/dist/claude/model-picker.d.ts +1 -1
- package/dist/claude/model-picker.d.ts.map +1 -1
- package/dist/claude/model-picker.js +27 -10
- package/dist/claude/model-picker.js.map +1 -1
- package/dist/claude/preflight.d.ts +1 -1
- package/dist/claude/preflight.d.ts.map +1 -1
- package/dist/claude/preflight.js +18 -12
- package/dist/claude/preflight.js.map +1 -1
- package/dist/claude/questions/navigation.d.ts.map +1 -1
- package/dist/claude/questions/navigation.js +1 -2
- package/dist/claude/questions/navigation.js.map +1 -1
- package/dist/claude/questions/screen.d.ts.map +1 -1
- package/dist/claude/questions/screen.js +10 -2
- package/dist/claude/questions/screen.js.map +1 -1
- package/dist/claude/screen-table.d.ts +8 -5
- package/dist/claude/screen-table.d.ts.map +1 -1
- package/dist/claude/screen-table.js +20 -12
- package/dist/claude/screen-table.js.map +1 -1
- package/dist/claude/session/bridge.d.ts +2 -1
- package/dist/claude/session/bridge.d.ts.map +1 -1
- package/dist/claude/session/bridge.js +3 -1
- package/dist/claude/session/bridge.js.map +1 -1
- package/dist/claude/session/build.d.ts.map +1 -1
- package/dist/claude/session/build.js +13 -11
- package/dist/claude/session/build.js.map +1 -1
- package/dist/claude/session/cleanup.d.ts +18 -0
- package/dist/claude/session/cleanup.d.ts.map +1 -0
- package/dist/claude/session/cleanup.js +10 -0
- package/dist/claude/session/cleanup.js.map +1 -0
- package/dist/claude/session/index.d.ts.map +1 -1
- package/dist/claude/session/index.js +27 -13
- package/dist/claude/session/index.js.map +1 -1
- package/dist/claude/session/instance.d.ts +7 -8
- package/dist/claude/session/instance.d.ts.map +1 -1
- package/dist/claude/session/instance.js +9 -13
- package/dist/claude/session/instance.js.map +1 -1
- package/dist/claude/session/resume.d.ts.map +1 -1
- package/dist/claude/session/resume.js +14 -5
- package/dist/claude/session/resume.js.map +1 -1
- package/dist/claude/session/transcript.js +2 -2
- package/dist/claude/session/transcript.js.map +1 -1
- package/dist/claude/simple.d.ts +1 -1
- package/dist/claude/simple.d.ts.map +1 -1
- package/dist/claude/simple.js +3 -3
- package/dist/claude/simple.js.map +1 -1
- package/dist/claude/startup-prompts.d.ts +2 -0
- package/dist/claude/startup-prompts.d.ts.map +1 -1
- package/dist/claude/startup-prompts.js +5 -1
- package/dist/claude/startup-prompts.js.map +1 -1
- package/dist/claude/transcript/cursor-io.d.ts +1 -1
- package/dist/claude/transcript/cursor-io.d.ts.map +1 -1
- package/dist/claude/transcript/cursor-io.js +1 -1
- package/dist/claude/transcript/cursor-io.js.map +1 -1
- package/dist/claude/transcript/cursor.d.ts +5 -3
- package/dist/claude/transcript/cursor.d.ts.map +1 -1
- package/dist/claude/transcript/cursor.js +18 -8
- package/dist/claude/transcript/cursor.js.map +1 -1
- package/dist/claude/transcript/drain-context.d.ts +4 -3
- package/dist/claude/transcript/drain-context.d.ts.map +1 -1
- package/dist/claude/transcript/drain-context.js.map +1 -1
- package/dist/claude/transcript/emit.d.ts +2 -1
- package/dist/claude/transcript/emit.d.ts.map +1 -1
- package/dist/claude/transcript/emit.js +1 -0
- package/dist/claude/transcript/emit.js.map +1 -1
- package/dist/claude/transcript/index.d.ts.map +1 -1
- package/dist/claude/transcript/index.js +2 -2
- package/dist/claude/transcript/index.js.map +1 -1
- package/dist/claude/transcript/warnings.d.ts +2 -1
- package/dist/claude/transcript/warnings.d.ts.map +1 -1
- package/dist/claude/transcript/warnings.js +3 -2
- package/dist/claude/transcript/warnings.js.map +1 -1
- package/dist/cli/config/effective.d.ts +2 -2
- package/dist/cli/config/effective.d.ts.map +1 -1
- package/dist/cli/config/effective.js +0 -2
- package/dist/cli/config/effective.js.map +1 -1
- package/dist/cli/interactive/spawn.d.ts +0 -2
- package/dist/cli/interactive/spawn.d.ts.map +1 -1
- package/dist/cli/interactive/spawn.js +27 -24
- package/dist/cli/interactive/spawn.js.map +1 -1
- package/dist/cli/lifecycle/index.d.ts.map +1 -1
- package/dist/cli/lifecycle/index.js +5 -3
- package/dist/cli/lifecycle/index.js.map +1 -1
- package/dist/cli/main-failure.d.ts.map +1 -1
- package/dist/cli/main-failure.js +5 -2
- package/dist/cli/main-failure.js.map +1 -1
- package/dist/cli/models/combined.d.ts.map +1 -1
- package/dist/cli/models/combined.js +3 -2
- package/dist/cli/models/combined.js.map +1 -1
- package/dist/cli/models/render.d.ts.map +1 -1
- package/dist/cli/models/render.js +2 -1
- package/dist/cli/models/render.js.map +1 -1
- package/dist/cli/output/cleanup-error.d.ts +22 -0
- package/dist/cli/output/cleanup-error.d.ts.map +1 -0
- package/dist/cli/output/cleanup-error.js +67 -0
- package/dist/cli/output/cleanup-error.js.map +1 -0
- package/dist/cli/output/types.d.ts +6 -2
- package/dist/cli/output/types.d.ts.map +1 -1
- package/dist/cli/request/agent-detect.d.ts +6 -2
- package/dist/cli/request/agent-detect.d.ts.map +1 -1
- package/dist/cli/request/agent-detect.js +14 -6
- package/dist/cli/request/agent-detect.js.map +1 -1
- package/dist/cli/request/finalize.d.ts +1 -1
- package/dist/cli/request/finalize.d.ts.map +1 -1
- package/dist/cli/request/finalize.js +4 -25
- package/dist/cli/request/finalize.js.map +1 -1
- package/dist/cli/request/index.d.ts.map +1 -1
- package/dist/cli/request/index.js +11 -5
- package/dist/cli/request/index.js.map +1 -1
- package/dist/cli/request/path-replacement.d.ts +27 -0
- package/dist/cli/request/path-replacement.d.ts.map +1 -0
- package/dist/cli/request/path-replacement.js +79 -0
- package/dist/cli/request/path-replacement.js.map +1 -0
- package/dist/cli/request/workspace.d.ts +8 -0
- package/dist/cli/request/workspace.d.ts.map +1 -0
- package/dist/cli/request/workspace.js +50 -0
- package/dist/cli/request/workspace.js.map +1 -0
- package/dist/cli/run/output.d.ts.map +1 -1
- package/dist/cli/run/output.js +2 -1
- package/dist/cli/run/output.js.map +1 -1
- package/dist/cli/run/subscribe.d.ts.map +1 -1
- package/dist/cli/run/subscribe.js +1 -1
- package/dist/cli/run/subscribe.js.map +1 -1
- package/dist/cli/session/index.d.ts +4 -4
- package/dist/cli/session/index.d.ts.map +1 -1
- package/dist/cli/session/index.js +5 -5
- package/dist/cli/session/index.js.map +1 -1
- package/dist/cli/session/launch.d.ts +2 -2
- package/dist/cli/session/launch.d.ts.map +1 -1
- package/dist/cli/session/launch.js +12 -3
- package/dist/cli/session/launch.js.map +1 -1
- package/dist/cli/session/turn-readers.d.ts +14 -0
- package/dist/cli/session/turn-readers.d.ts.map +1 -0
- package/dist/cli/session/turn-readers.js +13 -0
- package/dist/cli/session/turn-readers.js.map +1 -0
- package/dist/codex/config/default-model.d.ts +24 -0
- package/dist/codex/config/default-model.d.ts.map +1 -0
- package/dist/codex/config/default-model.js +133 -0
- package/dist/codex/config/default-model.js.map +1 -0
- package/dist/codex/config/home.d.ts +35 -0
- package/dist/codex/config/home.d.ts.map +1 -0
- package/dist/codex/config/home.js +122 -0
- package/dist/codex/config/home.js.map +1 -0
- package/dist/codex/config/lock.d.ts +17 -11
- package/dist/codex/config/lock.d.ts.map +1 -1
- package/dist/codex/config/lock.js +102 -11
- package/dist/codex/config/lock.js.map +1 -1
- package/dist/codex/config/read.d.ts +16 -0
- package/dist/codex/config/read.d.ts.map +1 -0
- package/dist/codex/config/read.js +75 -0
- package/dist/codex/config/read.js.map +1 -0
- package/dist/codex/config/restore.d.ts +17 -7
- package/dist/codex/config/restore.d.ts.map +1 -1
- package/dist/codex/config/restore.js +33 -20
- package/dist/codex/config/restore.js.map +1 -1
- package/dist/codex/config/transaction.d.ts +6 -4
- package/dist/codex/config/transaction.d.ts.map +1 -1
- package/dist/codex/config/transaction.js +4 -3
- package/dist/codex/config/transaction.js.map +1 -1
- package/dist/codex/images/clipboard-copies.d.ts +39 -0
- package/dist/codex/images/clipboard-copies.d.ts.map +1 -0
- package/dist/codex/images/clipboard-copies.js +91 -0
- package/dist/codex/images/clipboard-copies.js.map +1 -0
- package/dist/codex/model-picker.d.ts +1 -1
- package/dist/codex/model-picker.d.ts.map +1 -1
- package/dist/codex/model-picker.js +16 -6
- package/dist/codex/model-picker.js.map +1 -1
- package/dist/codex/preflight.d.ts +2 -2
- package/dist/codex/preflight.d.ts.map +1 -1
- package/dist/codex/preflight.js +28 -21
- package/dist/codex/preflight.js.map +1 -1
- package/dist/codex/pty.d.ts +25 -3
- package/dist/codex/pty.d.ts.map +1 -1
- package/dist/codex/pty.js +53 -7
- package/dist/codex/pty.js.map +1 -1
- package/dist/codex/questions/candidates.d.ts.map +1 -1
- package/dist/codex/questions/candidates.js +4 -5
- package/dist/codex/questions/candidates.js.map +1 -1
- package/dist/codex/questions/driver.js +2 -2
- package/dist/codex/questions/driver.js.map +1 -1
- package/dist/codex/questions/records.d.ts +1 -1
- package/dist/codex/questions/records.d.ts.map +1 -1
- package/dist/codex/questions/records.js +1 -3
- package/dist/codex/questions/records.js.map +1 -1
- package/dist/codex/screen/clearance.d.ts +6 -0
- package/dist/codex/screen/clearance.d.ts.map +1 -1
- package/dist/codex/screen/clearance.js +10 -0
- package/dist/codex/screen/clearance.js.map +1 -1
- package/dist/codex/screen-table.d.ts.map +1 -1
- package/dist/codex/screen-table.js +6 -2
- package/dist/codex/screen-table.js.map +1 -1
- package/dist/codex/session/bridge.d.ts +1 -0
- package/dist/codex/session/bridge.d.ts.map +1 -1
- package/dist/codex/session/bridge.js +3 -1
- package/dist/codex/session/bridge.js.map +1 -1
- package/dist/codex/session/build.d.ts.map +1 -1
- package/dist/codex/session/build.js +14 -12
- package/dist/codex/session/build.js.map +1 -1
- package/dist/codex/session/cleanup.d.ts +2 -2
- package/dist/codex/session/cleanup.d.ts.map +1 -1
- package/dist/codex/session/cleanup.js +8 -11
- package/dist/codex/session/cleanup.js.map +1 -1
- package/dist/codex/session/config-switch.d.ts +20 -0
- package/dist/codex/session/config-switch.d.ts.map +1 -0
- package/dist/codex/session/config-switch.js +42 -0
- package/dist/codex/session/config-switch.js.map +1 -0
- package/dist/codex/session/hooks.d.ts.map +1 -1
- package/dist/codex/session/hooks.js +7 -0
- package/dist/codex/session/hooks.js.map +1 -1
- package/dist/codex/session/index.d.ts.map +1 -1
- package/dist/codex/session/index.js +34 -16
- package/dist/codex/session/index.js.map +1 -1
- package/dist/codex/session/instance.d.ts +10 -12
- package/dist/codex/session/instance.d.ts.map +1 -1
- package/dist/codex/session/instance.js +42 -37
- package/dist/codex/session/instance.js.map +1 -1
- package/dist/codex/session/readiness.d.ts +11 -0
- package/dist/codex/session/readiness.d.ts.map +1 -0
- package/dist/codex/session/readiness.js +22 -0
- package/dist/codex/session/readiness.js.map +1 -0
- package/dist/codex/session/resume.d.ts.map +1 -1
- package/dist/codex/session/resume.js +9 -4
- package/dist/codex/session/resume.js.map +1 -1
- package/dist/codex/session/transcript.d.ts.map +1 -1
- package/dist/codex/session/transcript.js +12 -1
- package/dist/codex/session/transcript.js.map +1 -1
- package/dist/codex/session/turn-commit.d.ts +58 -0
- package/dist/codex/session/turn-commit.d.ts.map +1 -0
- package/dist/codex/session/turn-commit.js +97 -0
- package/dist/codex/session/turn-commit.js.map +1 -0
- package/dist/codex/session/warnings.d.ts +13 -6
- package/dist/codex/session/warnings.d.ts.map +1 -1
- package/dist/codex/session/warnings.js +36 -9
- package/dist/codex/session/warnings.js.map +1 -1
- package/dist/codex/startup-prompts.d.ts +3 -0
- package/dist/codex/startup-prompts.d.ts.map +1 -1
- package/dist/codex/startup-prompts.js +20 -13
- package/dist/codex/startup-prompts.js.map +1 -1
- package/dist/codex/startup-warnings.d.ts +2 -0
- package/dist/codex/startup-warnings.d.ts.map +1 -1
- package/dist/codex/startup-warnings.js +6 -0
- package/dist/codex/startup-warnings.js.map +1 -1
- package/dist/codex/transcript/payload.d.ts +8 -0
- package/dist/codex/transcript/payload.d.ts.map +1 -0
- package/dist/codex/transcript/payload.js +11 -0
- package/dist/codex/transcript/payload.js.map +1 -0
- package/dist/codex/transcript/rejection.d.ts +15 -0
- package/dist/codex/transcript/rejection.d.ts.map +1 -0
- package/dist/codex/transcript/rejection.js +44 -0
- package/dist/codex/transcript/rejection.js.map +1 -0
- package/dist/codex/transcript/turn-end.d.ts +8 -0
- package/dist/codex/transcript/turn-end.d.ts.map +1 -0
- package/dist/codex/transcript/turn-end.js +17 -0
- package/dist/codex/transcript/turn-end.js.map +1 -0
- package/dist/codex/transcript/watcher.d.ts +5 -2
- package/dist/codex/transcript/watcher.d.ts.map +1 -1
- package/dist/codex/transcript/watcher.js +11 -6
- package/dist/codex/transcript/watcher.js.map +1 -1
- package/dist/codex/trust-retry.d.ts +12 -0
- package/dist/codex/trust-retry.d.ts.map +1 -0
- package/dist/codex/trust-retry.js +12 -0
- package/dist/codex/trust-retry.js.map +1 -0
- package/dist/codex/update/skip-attempt.d.ts +2 -0
- package/dist/codex/update/skip-attempt.d.ts.map +1 -1
- package/dist/codex/update/skip-attempt.js +4 -0
- package/dist/codex/update/skip-attempt.js.map +1 -1
- package/dist/codex/update/tracker.d.ts +2 -0
- package/dist/codex/update/tracker.d.ts.map +1 -1
- package/dist/codex/update/tracker.js +4 -0
- package/dist/codex/update/tracker.js.map +1 -1
- package/dist/core/delay.d.ts +3 -2
- package/dist/core/delay.d.ts.map +1 -1
- package/dist/core/delay.js +3 -2
- package/dist/core/delay.js.map +1 -1
- package/dist/core/errors.d.ts +33 -4
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +51 -7
- package/dist/core/errors.js.map +1 -1
- package/dist/core/images/materialize.d.ts +13 -4
- package/dist/core/images/materialize.d.ts.map +1 -1
- package/dist/core/images/materialize.js +48 -11
- package/dist/core/images/materialize.js.map +1 -1
- package/dist/core/input/abort.d.ts +15 -0
- package/dist/core/input/abort.d.ts.map +1 -1
- package/dist/core/input/abort.js +18 -2
- package/dist/core/input/abort.js.map +1 -1
- package/dist/core/input/constants.d.ts +4 -1
- package/dist/core/input/constants.d.ts.map +1 -1
- package/dist/core/input/constants.js +4 -1
- package/dist/core/input/constants.js.map +1 -1
- package/dist/core/input/index.d.ts +1 -1
- package/dist/core/input/index.d.ts.map +1 -1
- package/dist/core/input/index.js +1 -1
- package/dist/core/input/index.js.map +1 -1
- package/dist/core/models/clearance.d.ts +38 -0
- package/dist/core/models/clearance.d.ts.map +1 -0
- package/dist/core/models/clearance.js +38 -0
- package/dist/core/models/clearance.js.map +1 -0
- package/dist/core/models/close-wait.d.ts +17 -0
- package/dist/core/models/close-wait.d.ts.map +1 -0
- package/dist/core/models/close-wait.js +44 -0
- package/dist/core/models/close-wait.js.map +1 -0
- package/dist/core/models/dialog-region.d.ts +18 -3
- package/dist/core/models/dialog-region.d.ts.map +1 -1
- package/dist/core/models/dialog-region.js +29 -40
- package/dist/core/models/dialog-region.js.map +1 -1
- package/dist/core/models/input.d.ts +10 -1
- package/dist/core/models/input.d.ts.map +1 -1
- package/dist/core/models/input.js +15 -2
- package/dist/core/models/input.js.map +1 -1
- package/dist/core/models/intervention.d.ts +2 -2
- package/dist/core/models/intervention.d.ts.map +1 -1
- package/dist/core/models/intervention.js +6 -3
- package/dist/core/models/intervention.js.map +1 -1
- package/dist/core/models/own-picker.d.ts +21 -0
- package/dist/core/models/own-picker.d.ts.map +1 -0
- package/dist/core/models/own-picker.js +21 -0
- package/dist/core/models/own-picker.js.map +1 -0
- package/dist/core/models/picker.d.ts +34 -4
- package/dist/core/models/picker.d.ts.map +1 -1
- package/dist/core/models/picker.js +50 -44
- package/dist/core/models/picker.js.map +1 -1
- package/dist/core/models/row-block.d.ts +66 -0
- package/dist/core/models/row-block.d.ts.map +1 -0
- package/dist/core/models/row-block.js +87 -0
- package/dist/core/models/row-block.js.map +1 -0
- package/dist/core/models/rows.d.ts +32 -3
- package/dist/core/models/rows.d.ts.map +1 -1
- package/dist/core/models/rows.js +48 -20
- package/dist/core/models/rows.js.map +1 -1
- package/dist/core/models/tui-screen.d.ts +6 -1
- package/dist/core/models/tui-screen.d.ts.map +1 -1
- package/dist/core/models/tui-screen.js +25 -10
- package/dist/core/models/tui-screen.js.map +1 -1
- package/dist/core/models/window.d.ts +49 -0
- package/dist/core/models/window.d.ts.map +1 -0
- package/dist/core/models/window.js +105 -0
- package/dist/core/models/window.js.map +1 -0
- package/dist/core/path-trust.d.ts +11 -0
- package/dist/core/path-trust.d.ts.map +1 -0
- package/dist/core/path-trust.js +21 -0
- package/dist/core/path-trust.js.map +1 -0
- package/dist/core/screen-facts.d.ts +3 -1
- package/dist/core/screen-facts.d.ts.map +1 -1
- package/dist/core/screen-facts.js +1 -0
- package/dist/core/screen-facts.js.map +1 -1
- package/dist/core/simple/boundary-signal.d.ts +41 -6
- package/dist/core/simple/boundary-signal.d.ts.map +1 -1
- package/dist/core/simple/boundary-signal.js +43 -3
- package/dist/core/simple/boundary-signal.js.map +1 -1
- package/dist/core/simple/close.d.ts +2 -1
- package/dist/core/simple/close.d.ts.map +1 -1
- package/dist/core/simple/close.js +10 -2
- package/dist/core/simple/close.js.map +1 -1
- package/dist/core/simple/turn-boundary.d.ts +2 -0
- package/dist/core/simple/turn-boundary.d.ts.map +1 -1
- package/dist/core/simple/turn-boundary.js +1 -1
- package/dist/core/simple/turn-boundary.js.map +1 -1
- package/dist/core/simple/turn-types.d.ts +9 -3
- package/dist/core/simple/turn-types.d.ts.map +1 -1
- package/dist/core/simple/turn-types.js +10 -2
- package/dist/core/simple/turn-types.js.map +1 -1
- package/dist/core/simple/turn.d.ts +2 -0
- package/dist/core/simple/turn.d.ts.map +1 -1
- package/dist/core/simple/turn.js +11 -5
- package/dist/core/simple/turn.js.map +1 -1
- package/dist/core/terminal-options.d.ts +17 -1
- package/dist/core/terminal-options.d.ts.map +1 -1
- package/dist/core/terminal-options.js +20 -8
- package/dist/core/terminal-options.js.map +1 -1
- package/dist/core/transcript/cursor-io.d.ts +8 -0
- package/dist/core/transcript/cursor-io.d.ts.map +1 -1
- package/dist/core/transcript/cursor-io.js +11 -5
- package/dist/core/transcript/cursor-io.js.map +1 -1
- package/dist/core/transcript/cursor.d.ts +28 -4
- package/dist/core/transcript/cursor.d.ts.map +1 -1
- package/dist/core/transcript/cursor.js +53 -7
- package/dist/core/transcript/cursor.js.map +1 -1
- package/dist/core/transcript/drain.d.ts +43 -0
- package/dist/core/transcript/drain.d.ts.map +1 -0
- package/dist/core/transcript/drain.js +67 -0
- package/dist/core/transcript/drain.js.map +1 -0
- package/dist/core/trust/abortable.d.ts +12 -0
- package/dist/core/trust/abortable.d.ts.map +1 -0
- package/dist/core/trust/abortable.js +48 -0
- package/dist/core/trust/abortable.js.map +1 -0
- package/dist/core/trust/allowlist.d.ts +2 -0
- package/dist/core/trust/allowlist.d.ts.map +1 -1
- package/dist/core/trust/allowlist.js +4 -1
- package/dist/core/trust/allowlist.js.map +1 -1
- package/dist/core/trust/blocking.d.ts +11 -0
- package/dist/core/trust/blocking.d.ts.map +1 -1
- package/dist/core/trust/blocking.js +5 -4
- package/dist/core/trust/blocking.js.map +1 -1
- package/dist/core/trust/copy.d.ts.map +1 -1
- package/dist/core/trust/copy.js +7 -1
- package/dist/core/trust/copy.js.map +1 -1
- package/dist/core/trust/deadline.d.ts +24 -0
- package/dist/core/trust/deadline.d.ts.map +1 -0
- package/dist/core/trust/deadline.js +56 -0
- package/dist/core/trust/deadline.js.map +1 -0
- package/dist/core/trust/dialog.d.ts +11 -2
- package/dist/core/trust/dialog.d.ts.map +1 -1
- package/dist/core/trust/dialog.js +12 -3
- package/dist/core/trust/dialog.js.map +1 -1
- package/dist/core/trust/options.d.ts +5 -1
- package/dist/core/trust/options.d.ts.map +1 -1
- package/dist/core/trust/options.js +8 -2
- package/dist/core/trust/options.js.map +1 -1
- package/dist/core/trust/prompts.d.ts +3 -0
- package/dist/core/trust/prompts.d.ts.map +1 -1
- package/dist/core/trust/prompts.js +2 -1
- package/dist/core/trust/prompts.js.map +1 -1
- package/dist/core/trust/responder.d.ts +10 -5
- package/dist/core/trust/responder.d.ts.map +1 -1
- package/dist/core/trust/responder.js +37 -33
- package/dist/core/trust/responder.js.map +1 -1
- package/dist/core/trust/step.d.ts +67 -0
- package/dist/core/trust/step.d.ts.map +1 -0
- package/dist/core/trust/step.js +45 -0
- package/dist/core/trust/step.js.map +1 -0
- package/dist/core/trust/types.d.ts +21 -1
- package/dist/core/trust/types.d.ts.map +1 -1
- package/dist/core/trust/types.js +25 -1
- package/dist/core/trust/types.js.map +1 -1
- package/dist/core/trust/view.d.ts +2 -0
- package/dist/core/trust/view.d.ts.map +1 -1
- package/dist/core/trust/view.js +3 -0
- package/dist/core/trust/view.js.map +1 -1
- package/dist/core/trust/write.d.ts +31 -6
- package/dist/core/trust/write.d.ts.map +1 -1
- package/dist/core/trust/write.js +95 -80
- package/dist/core/trust/write.js.map +1 -1
- package/dist/core/turn-state.d.ts +18 -4
- package/dist/core/turn-state.d.ts.map +1 -1
- package/dist/core/turn-state.js +47 -25
- package/dist/core/turn-state.js.map +1 -1
- package/dist/core/warnings/images.d.ts +22 -0
- package/dist/core/warnings/images.d.ts.map +1 -0
- package/dist/core/warnings/images.js +3 -0
- package/dist/core/warnings/images.js.map +1 -0
- package/dist/core/warnings/index.d.ts +3 -2
- package/dist/core/warnings/index.d.ts.map +1 -1
- package/dist/core/warnings/lifecycle.d.ts +35 -4
- package/dist/core/warnings/lifecycle.d.ts.map +1 -1
- package/dist/core/warnings/lifecycle.js +1 -1
- package/dist/core/warnings/update.d.ts +8 -4
- package/dist/core/warnings/update.d.ts.map +1 -1
- package/dist/core/warnings/update.js +21 -6
- package/dist/core/warnings/update.js.map +1 -1
- package/dist/pty/exit-latch.d.ts +28 -0
- package/dist/pty/exit-latch.d.ts.map +1 -0
- package/dist/pty/exit-latch.js +50 -0
- package/dist/pty/exit-latch.js.map +1 -0
- package/dist/runtime/exit-status.d.ts +7 -0
- package/dist/runtime/exit-status.d.ts.map +1 -0
- package/dist/runtime/exit-status.js +13 -0
- package/dist/runtime/exit-status.js.map +1 -0
- package/dist/runtime/home-guard/index.d.ts +45 -0
- package/dist/runtime/home-guard/index.d.ts.map +1 -0
- package/dist/runtime/home-guard/index.js +69 -0
- package/dist/runtime/home-guard/index.js.map +1 -0
- package/dist/runtime/loop-restore.d.ts +9 -9
- package/dist/runtime/loop-restore.d.ts.map +1 -1
- package/dist/runtime/loop-restore.js +10 -10
- package/dist/runtime/loop-restore.js.map +1 -1
- package/dist/runtime/probe/capped-buffer.d.ts +16 -0
- package/dist/runtime/probe/capped-buffer.d.ts.map +1 -0
- package/dist/runtime/probe/capped-buffer.js +38 -0
- package/dist/runtime/probe/capped-buffer.js.map +1 -0
- package/dist/runtime/probe/capture.d.ts +55 -0
- package/dist/runtime/probe/capture.d.ts.map +1 -0
- package/dist/runtime/probe/capture.js +71 -0
- package/dist/runtime/probe/capture.js.map +1 -0
- package/dist/runtime/{probe-cleanup.d.ts → probe/cleanup.d.ts} +2 -2
- package/dist/runtime/probe/cleanup.d.ts.map +1 -0
- package/dist/runtime/{probe-cleanup.js → probe/cleanup.js} +3 -3
- package/dist/runtime/probe/cleanup.js.map +1 -0
- package/dist/runtime/probe/directory-key.d.ts +26 -0
- package/dist/runtime/probe/directory-key.d.ts.map +1 -0
- package/dist/runtime/probe/directory-key.js +46 -0
- package/dist/runtime/probe/directory-key.js.map +1 -0
- package/dist/runtime/probe/index.d.ts +25 -0
- package/dist/runtime/probe/index.d.ts.map +1 -0
- package/dist/runtime/probe/index.js +153 -0
- package/dist/runtime/probe/index.js.map +1 -0
- package/dist/runtime/probe/lookup.d.ts +12 -0
- package/dist/runtime/probe/lookup.d.ts.map +1 -0
- package/dist/runtime/probe/lookup.js +29 -0
- package/dist/runtime/probe/lookup.js.map +1 -0
- package/dist/runtime/probe/named-pipes.d.ts +35 -0
- package/dist/runtime/probe/named-pipes.d.ts.map +1 -0
- package/dist/runtime/probe/named-pipes.js +167 -0
- package/dist/runtime/probe/named-pipes.js.map +1 -0
- package/dist/runtime/probe/private-directory.d.ts +14 -0
- package/dist/runtime/probe/private-directory.d.ts.map +1 -0
- package/dist/runtime/probe/private-directory.js +50 -0
- package/dist/runtime/probe/private-directory.js.map +1 -0
- package/dist/runtime/probe/results.d.ts +14 -0
- package/dist/runtime/probe/results.d.ts.map +1 -0
- package/dist/runtime/probe/results.js +38 -0
- package/dist/runtime/probe/results.js.map +1 -0
- package/dist/runtime/probe/slots.d.ts +17 -0
- package/dist/runtime/probe/slots.d.ts.map +1 -0
- package/dist/runtime/probe/slots.js +35 -0
- package/dist/runtime/probe/slots.js.map +1 -0
- package/dist/runtime/probe/start.d.ts +64 -0
- package/dist/runtime/probe/start.d.ts.map +1 -0
- package/dist/runtime/probe/start.js +80 -0
- package/dist/runtime/probe/start.js.map +1 -0
- package/dist/runtime/probe-cache.d.ts +19 -0
- package/dist/runtime/probe-cache.d.ts.map +1 -0
- package/dist/runtime/probe-cache.js +56 -0
- package/dist/runtime/probe-cache.js.map +1 -0
- package/dist/runtime/readiness/initial-ready.d.ts +31 -5
- package/dist/runtime/readiness/initial-ready.d.ts.map +1 -1
- package/dist/runtime/readiness/initial-ready.js +64 -18
- package/dist/runtime/readiness/initial-ready.js.map +1 -1
- package/dist/runtime/seams.d.ts +14 -2
- package/dist/runtime/seams.d.ts.map +1 -1
- package/dist/runtime/seams.js +2 -2
- package/dist/runtime/seams.js.map +1 -1
- package/dist/runtime/session/base.d.ts.map +1 -1
- package/dist/runtime/session/base.js +6 -5
- package/dist/runtime/session/base.js.map +1 -1
- package/dist/runtime/session/commands.d.ts +5 -3
- package/dist/runtime/session/commands.d.ts.map +1 -1
- package/dist/runtime/session/commands.js +5 -2
- package/dist/runtime/session/commands.js.map +1 -1
- package/dist/runtime/session/frames.d.ts +12 -2
- package/dist/runtime/session/frames.d.ts.map +1 -1
- package/dist/runtime/session/frames.js +10 -3
- package/dist/runtime/session/frames.js.map +1 -1
- package/dist/runtime/session/image-attach.js +7 -2
- package/dist/runtime/session/image-attach.js.map +1 -1
- package/dist/runtime/session/launch-directory.d.ts +33 -0
- package/dist/runtime/session/launch-directory.d.ts.map +1 -0
- package/dist/runtime/session/launch-directory.js +84 -0
- package/dist/runtime/session/launch-directory.js.map +1 -0
- package/dist/runtime/session/lifecycle.d.ts +3 -3
- package/dist/runtime/session/lifecycle.d.ts.map +1 -1
- package/dist/runtime/session/lifecycle.js +1 -5
- package/dist/runtime/session/lifecycle.js.map +1 -1
- package/dist/runtime/session/loops.d.ts +1 -1
- package/dist/runtime/session/loops.d.ts.map +1 -1
- package/dist/runtime/session/loops.js +6 -3
- package/dist/runtime/session/loops.js.map +1 -1
- package/dist/runtime/session/picker-cleanup.d.ts +6 -21
- package/dist/runtime/session/picker-cleanup.d.ts.map +1 -1
- package/dist/runtime/session/picker-cleanup.js +19 -31
- package/dist/runtime/session/picker-cleanup.js.map +1 -1
- package/dist/runtime/session/picker-hold.d.ts +24 -0
- package/dist/runtime/session/picker-hold.d.ts.map +1 -0
- package/dist/runtime/session/picker-hold.js +42 -0
- package/dist/runtime/session/picker-hold.js.map +1 -0
- package/dist/runtime/session/picker.d.ts +13 -11
- package/dist/runtime/session/picker.d.ts.map +1 -1
- package/dist/runtime/session/picker.js +46 -24
- package/dist/runtime/session/picker.js.map +1 -1
- package/dist/runtime/session/prepare-state.d.ts +6 -0
- package/dist/runtime/session/prepare-state.d.ts.map +1 -0
- package/dist/runtime/session/prepare-state.js +14 -0
- package/dist/runtime/session/prepare-state.js.map +1 -0
- package/dist/runtime/session/questions.d.ts +2 -2
- package/dist/runtime/session/questions.d.ts.map +1 -1
- package/dist/runtime/session/questions.js.map +1 -1
- package/dist/runtime/session/readiness.d.ts +14 -5
- package/dist/runtime/session/readiness.d.ts.map +1 -1
- package/dist/runtime/session/readiness.js +22 -6
- package/dist/runtime/session/readiness.js.map +1 -1
- package/dist/runtime/session/reap.d.ts +11 -7
- package/dist/runtime/session/reap.d.ts.map +1 -1
- package/dist/runtime/session/reap.js +16 -10
- package/dist/runtime/session/reap.js.map +1 -1
- package/dist/runtime/session/runtime-cleanup.d.ts +18 -0
- package/dist/runtime/session/runtime-cleanup.d.ts.map +1 -0
- package/dist/runtime/session/runtime-cleanup.js +18 -0
- package/dist/runtime/session/runtime-cleanup.js.map +1 -0
- package/dist/runtime/session/session-input.d.ts +32 -0
- package/dist/runtime/session/session-input.d.ts.map +1 -0
- package/dist/runtime/session/{picker-input.js → session-input.js} +35 -7
- package/dist/runtime/session/session-input.js.map +1 -0
- package/dist/runtime/session/shutdown-binding.d.ts +12 -1
- package/dist/runtime/session/shutdown-binding.d.ts.map +1 -1
- package/dist/runtime/session/shutdown-binding.js +33 -1
- package/dist/runtime/session/shutdown-binding.js.map +1 -1
- package/dist/runtime/session/shutdown-cleanup.d.ts +17 -0
- package/dist/runtime/session/shutdown-cleanup.d.ts.map +1 -0
- package/dist/runtime/session/shutdown-cleanup.js +49 -0
- package/dist/runtime/session/shutdown-cleanup.js.map +1 -0
- package/dist/runtime/session/shutdown.d.ts +3 -2
- package/dist/runtime/session/shutdown.d.ts.map +1 -1
- package/dist/runtime/session/shutdown.js +13 -24
- package/dist/runtime/session/shutdown.js.map +1 -1
- package/dist/runtime/shell-quote.d.ts +8 -0
- package/dist/runtime/shell-quote.d.ts.map +1 -0
- package/dist/runtime/shell-quote.js +10 -0
- package/dist/runtime/shell-quote.js.map +1 -0
- package/dist/runtime/shell.d.ts +36 -12
- package/dist/runtime/shell.d.ts.map +1 -1
- package/dist/runtime/shell.js +90 -14
- package/dist/runtime/shell.js.map +1 -1
- package/dist/runtime/shutdown/coalesce.d.ts +15 -0
- package/dist/runtime/shutdown/coalesce.d.ts.map +1 -0
- package/dist/runtime/shutdown/coalesce.js +42 -0
- package/dist/runtime/shutdown/coalesce.js.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/failures.d.ts +24 -0
- package/dist/runtime/shutdown/detached-sweep/failures.d.ts.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/failures.js +32 -0
- package/dist/runtime/shutdown/detached-sweep/failures.js.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/index.d.ts +55 -0
- package/dist/runtime/shutdown/detached-sweep/index.d.ts.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/index.js +129 -0
- package/dist/runtime/shutdown/detached-sweep/index.js.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/kill.d.ts +37 -0
- package/dist/runtime/shutdown/detached-sweep/kill.d.ts.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/kill.js +87 -0
- package/dist/runtime/shutdown/detached-sweep/kill.js.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/record.d.ts +67 -0
- package/dist/runtime/shutdown/detached-sweep/record.d.ts.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/record.js +111 -0
- package/dist/runtime/shutdown/detached-sweep/record.js.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/rounds.d.ts +78 -0
- package/dist/runtime/shutdown/detached-sweep/rounds.d.ts.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/rounds.js +116 -0
- package/dist/runtime/shutdown/detached-sweep/rounds.js.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/survivors.d.ts +40 -0
- package/dist/runtime/shutdown/detached-sweep/survivors.d.ts.map +1 -0
- package/dist/runtime/shutdown/detached-sweep/survivors.js +112 -0
- package/dist/runtime/shutdown/detached-sweep/survivors.js.map +1 -0
- package/dist/runtime/shutdown/leader-group.d.ts +29 -0
- package/dist/runtime/shutdown/leader-group.d.ts.map +1 -0
- package/dist/runtime/shutdown/leader-group.js +35 -0
- package/dist/runtime/shutdown/leader-group.js.map +1 -0
- package/dist/runtime/shutdown/native-read-admission.d.ts +13 -0
- package/dist/runtime/shutdown/native-read-admission.d.ts.map +1 -0
- package/dist/runtime/shutdown/native-read-admission.js +64 -0
- package/dist/runtime/shutdown/native-read-admission.js.map +1 -0
- package/dist/runtime/shutdown/process-table.d.ts +80 -0
- package/dist/runtime/shutdown/process-table.d.ts.map +1 -0
- package/dist/runtime/shutdown/process-table.js +147 -0
- package/dist/runtime/shutdown/process-table.js.map +1 -0
- package/dist/runtime/shutdown/process-tree-ops.d.ts +39 -0
- package/dist/runtime/shutdown/process-tree-ops.d.ts.map +1 -0
- package/dist/runtime/shutdown/process-tree-ops.js +73 -0
- package/dist/runtime/shutdown/process-tree-ops.js.map +1 -0
- package/dist/runtime/shutdown/read-timeout.d.ts +4 -0
- package/dist/runtime/shutdown/read-timeout.d.ts.map +1 -0
- package/dist/runtime/shutdown/read-timeout.js +6 -0
- package/dist/runtime/shutdown/read-timeout.js.map +1 -0
- package/dist/runtime/shutdown/reap-queue.d.ts +10 -0
- package/dist/runtime/shutdown/reap-queue.d.ts.map +1 -0
- package/dist/runtime/shutdown/reap-queue.js +29 -0
- package/dist/runtime/shutdown/reap-queue.js.map +1 -0
- package/dist/runtime/shutdown/reap-tree.d.ts +42 -32
- package/dist/runtime/shutdown/reap-tree.d.ts.map +1 -1
- package/dist/runtime/shutdown/reap-tree.js +78 -71
- package/dist/runtime/shutdown/reap-tree.js.map +1 -1
- package/dist/runtime/shutdown/shared-daemon.d.ts +59 -0
- package/dist/runtime/shutdown/shared-daemon.d.ts.map +1 -0
- package/dist/runtime/shutdown/shared-daemon.js +139 -0
- package/dist/runtime/shutdown/shared-daemon.js.map +1 -0
- package/dist/runtime/shutdown/teardown.d.ts +15 -0
- package/dist/runtime/shutdown/teardown.d.ts.map +1 -1
- package/dist/runtime/shutdown/teardown.js +19 -6
- package/dist/runtime/shutdown/teardown.js.map +1 -1
- package/dist/runtime/shutdown/terminate.d.ts +21 -1
- package/dist/runtime/shutdown/terminate.d.ts.map +1 -1
- package/dist/runtime/shutdown/terminate.js +83 -56
- package/dist/runtime/shutdown/terminate.js.map +1 -1
- package/dist/runtime/startup/buffer.d.ts +26 -7
- package/dist/runtime/startup/buffer.d.ts.map +1 -1
- package/dist/runtime/startup/buffer.js +42 -19
- package/dist/runtime/startup/buffer.js.map +1 -1
- package/dist/runtime/startup/cleanup.d.ts +37 -11
- package/dist/runtime/startup/cleanup.d.ts.map +1 -1
- package/dist/runtime/startup/cleanup.js +55 -25
- package/dist/runtime/startup/cleanup.js.map +1 -1
- package/dist/runtime/startup/index.d.ts +13 -1
- package/dist/runtime/startup/index.d.ts.map +1 -1
- package/dist/runtime/startup/index.js +38 -6
- package/dist/runtime/startup/index.js.map +1 -1
- package/dist/runtime/stream-marker.d.ts +17 -0
- package/dist/runtime/stream-marker.d.ts.map +1 -0
- package/dist/runtime/stream-marker.js +35 -0
- package/dist/runtime/stream-marker.js.map +1 -0
- package/dist/runtime/update/acquire.d.ts +16 -0
- package/dist/runtime/update/acquire.d.ts.map +1 -0
- package/dist/runtime/update/acquire.js +62 -0
- package/dist/runtime/update/acquire.js.map +1 -0
- package/dist/runtime/update/completion.d.ts +12 -0
- package/dist/runtime/update/completion.d.ts.map +1 -0
- package/dist/runtime/update/completion.js +50 -0
- package/dist/runtime/update/completion.js.map +1 -0
- package/dist/runtime/update/lock.d.ts +1 -1
- package/dist/runtime/update/lock.d.ts.map +1 -1
- package/dist/runtime/update/lock.js +21 -38
- package/dist/runtime/update/lock.js.map +1 -1
- package/dist/runtime/update/once.d.ts +16 -13
- package/dist/runtime/update/once.d.ts.map +1 -1
- package/dist/runtime/update/once.js +41 -31
- package/dist/runtime/update/once.js.map +1 -1
- package/dist/runtime/update/owner.js +1 -1
- package/dist/runtime/update/retained-lease.js +1 -1
- package/dist/runtime/update/waiting.d.ts +14 -1
- package/dist/runtime/update/waiting.d.ts.map +1 -1
- package/dist/runtime/update/waiting.js +20 -12
- package/dist/runtime/update/waiting.js.map +1 -1
- package/dist/state/canonical-path.d.ts +5 -0
- package/dist/state/canonical-path.d.ts.map +1 -1
- package/dist/state/canonical-path.js +11 -5
- package/dist/state/canonical-path.js.map +1 -1
- package/dist/state/directories.d.ts +31 -1
- package/dist/state/directories.d.ts.map +1 -1
- package/dist/state/directories.js +75 -13
- package/dist/state/directories.js.map +1 -1
- package/dist/state/files.d.ts +3 -3
- package/dist/state/files.d.ts.map +1 -1
- package/dist/state/files.js +4 -10
- package/dist/state/files.js.map +1 -1
- package/dist/state/launch-ownership.d.ts +4 -2
- package/dist/state/launch-ownership.d.ts.map +1 -1
- package/dist/state/launch-ownership.js +18 -10
- package/dist/state/launch-ownership.js.map +1 -1
- package/dist/state/launch-publication.d.ts +7 -1
- package/dist/state/launch-publication.d.ts.map +1 -1
- package/dist/state/launch-publication.js +14 -2
- package/dist/state/launch-publication.js.map +1 -1
- package/dist/state/loop-store.d.ts +15 -4
- package/dist/state/loop-store.d.ts.map +1 -1
- package/dist/state/loop-store.js +13 -7
- package/dist/state/loop-store.js.map +1 -1
- package/dist/state/preparation/created-directories.d.ts +13 -0
- package/dist/state/preparation/created-directories.d.ts.map +1 -0
- package/dist/state/preparation/created-directories.js +45 -0
- package/dist/state/preparation/created-directories.js.map +1 -0
- package/dist/state/preparation/ignore-sync.d.ts +9 -0
- package/dist/state/preparation/ignore-sync.d.ts.map +1 -0
- package/dist/state/preparation/ignore-sync.js +47 -0
- package/dist/state/preparation/ignore-sync.js.map +1 -0
- package/dist/state/preparation/index.d.ts +25 -0
- package/dist/state/preparation/index.d.ts.map +1 -0
- package/dist/state/preparation/index.js +31 -0
- package/dist/state/preparation/index.js.map +1 -0
- package/dist/state/preparation/install-ignore.d.ts +6 -0
- package/dist/state/preparation/install-ignore.d.ts.map +1 -0
- package/dist/state/preparation/install-ignore.js +87 -0
- package/dist/state/preparation/install-ignore.js.map +1 -0
- package/dist/state/preparation/rollback-parent.d.ts +3 -0
- package/dist/state/preparation/rollback-parent.d.ts.map +1 -0
- package/dist/state/preparation/rollback-parent.js +18 -0
- package/dist/state/preparation/rollback-parent.js.map +1 -0
- package/dist/state/preparation/root-trust.d.ts +3 -0
- package/dist/state/preparation/root-trust.d.ts.map +1 -0
- package/dist/state/preparation/root-trust.js +70 -0
- package/dist/state/preparation/root-trust.js.map +1 -0
- package/dist/state/private-session.d.ts +5 -2
- package/dist/state/private-session.d.ts.map +1 -1
- package/dist/state/private-session.js +21 -9
- package/dist/state/private-session.js.map +1 -1
- package/dist/state/root.d.ts +25 -0
- package/dist/state/root.d.ts.map +1 -0
- package/dist/state/root.js +84 -0
- package/dist/state/root.js.map +1 -0
- package/dist/state/runtime-paths.d.ts +5 -4
- package/dist/state/runtime-paths.d.ts.map +1 -1
- package/dist/state/runtime-paths.js +5 -4
- package/dist/state/runtime-paths.js.map +1 -1
- package/dist/state/setup-failure.d.ts +3 -0
- package/dist/state/setup-failure.d.ts.map +1 -0
- package/dist/state/setup-failure.js +13 -0
- package/dist/state/setup-failure.js.map +1 -0
- package/dist/state/socket-home.d.ts +17 -12
- package/dist/state/socket-home.d.ts.map +1 -1
- package/dist/state/socket-home.js +31 -14
- package/dist/state/socket-home.js.map +1 -1
- package/dist/state/store.d.ts +1 -3
- package/dist/state/store.d.ts.map +1 -1
- package/dist/state/store.js +3 -18
- package/dist/state/store.js.map +1 -1
- package/dist/terminal/headless.d.ts +1 -1
- package/dist/terminal/headless.d.ts.map +1 -1
- package/dist/terminal/headless.js +1 -3
- package/dist/terminal/headless.js.map +1 -1
- package/docs/cli-behavior.md +1218 -28
- package/docs/cli.md +2 -0
- package/docs/codex/cli.md +4 -2
- package/package.json +4 -4
- package/prd/04-architecture.md +32 -0
- package/prd/05-api/5.1-starting-claude.md +17 -1
- package/prd/05-api/5.2-resuming-claude.md +5 -0
- package/prd/05-api/5.3-claude-session-api.md +267 -40
- package/prd/05-api/5.4-events.md +77 -10
- package/prd/05-api/5.5-starting-codex.md +3 -1
- package/prd/05-api/5.6-resuming-codex.md +4 -1
- package/prd/05-api/5.7-codex-session-api.md +87 -5
- package/prd/05-api/5.8-session-api.md +32 -1
- package/prd/06-claude-hook-bridge.md +2 -0
- package/prd/07a-codex-hook-bridge.md +5 -0
- package/prd/08-state.md +63 -7
- package/prd/09-lifecycle.md +126 -35
- package/prd/10-errors.md +11 -4
- package/prd/12-e2e.md +81 -0
- package/prd/12a-cli.md +63 -9
- package/prd/14-conformance.md +52 -35
- package/prd/16-maintainer-review.md +11 -0
- package/dist/claude/model-composer.d.ts +0 -2
- package/dist/claude/model-composer.d.ts.map +0 -1
- package/dist/claude/model-composer.js +0 -12
- package/dist/claude/model-composer.js.map +0 -1
- package/dist/claude/transcript/drain.d.ts +0 -33
- package/dist/claude/transcript/drain.d.ts.map +0 -1
- package/dist/claude/transcript/drain.js +0 -56
- package/dist/claude/transcript/drain.js.map +0 -1
- package/dist/codex/session/cli-exit.d.ts +0 -24
- package/dist/codex/session/cli-exit.d.ts.map +0 -1
- package/dist/codex/session/cli-exit.js +0 -43
- package/dist/codex/session/cli-exit.js.map +0 -1
- package/dist/codex/transcript/drain.d.ts +0 -30
- package/dist/codex/transcript/drain.d.ts.map +0 -1
- package/dist/codex/transcript/drain.js +0 -48
- package/dist/codex/transcript/drain.js.map +0 -1
- package/dist/runtime/probe-cleanup.d.ts.map +0 -1
- package/dist/runtime/probe-cleanup.js.map +0 -1
- package/dist/runtime/probe.d.ts +0 -11
- package/dist/runtime/probe.d.ts.map +0 -1
- package/dist/runtime/probe.js +0 -113
- package/dist/runtime/probe.js.map +0 -1
- package/dist/runtime/session/foreign-picker.d.ts +0 -8
- package/dist/runtime/session/foreign-picker.d.ts.map +0 -1
- package/dist/runtime/session/foreign-picker.js +0 -18
- package/dist/runtime/session/foreign-picker.js.map +0 -1
- package/dist/runtime/session/picker-input.d.ts +0 -17
- package/dist/runtime/session/picker-input.d.ts.map +0 -1
- package/dist/runtime/session/picker-input.js.map +0 -1
package/prd/09-lifecycle.md
CHANGED
|
@@ -75,24 +75,39 @@ an inherited `SHELL` environment override from the parent process.
|
|
|
75
75
|
|
|
76
76
|
These probes MUST run asynchronously and MUST NOT block the host process's
|
|
77
77
|
event loop: a parent that spawns a roster of sessions must not serialize their
|
|
78
|
-
preflights on a single thread.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
78
|
+
preflights on a single thread. Version, Codex capability, update and verification
|
|
79
|
+
probes start in the validated launch directory. Version and capability answers are
|
|
80
|
+
cached per adapter, directory path and observed device/inode (C-PERF-02). Concurrent
|
|
81
|
+
reads for one key share a subprocess. Each cache keeps the 32 most recently used
|
|
82
|
+
successful settled answers; in-flight reads are shared without counting toward
|
|
83
|
+
that bound. Version results are retained only when both stdout and stderr contain
|
|
84
|
+
at most 65,536 UTF-16 code units; larger results are returned unchanged but not
|
|
85
|
+
retained. Capability caching retains only the derived boolean, not the help text.
|
|
86
|
+
A result is retained only if directory identities observed before and after its
|
|
87
|
+
read match. These bounded snapshots can miss a replacement restored between checks;
|
|
88
|
+
they do not track executable changes or PATH changes within the same directory.
|
|
89
|
+
The cached version and adapter-capability reads are invalidated after every
|
|
90
|
+
coordinated update attempt, including a failed or peer-owned attempt, because a
|
|
91
|
+
failed installer may still have partially changed the binary. Update coordination
|
|
92
|
+
remains once per parent process and adapter across workspaces (C-LIFE-09): its
|
|
93
|
+
owner verifies and updates from that caller's captured directory, and each caller
|
|
94
|
+
validates its own workspace's post-attempt version without racing a second update. This mutual exclusion also applies across separate Elwood parent
|
|
87
95
|
processes for the same macOS user and adapter: an atomic lease names the adapter in
|
|
88
96
|
a stable per-account cache independent of `TMPDIR`; contenders wait without
|
|
89
97
|
blocking the event loop, then invalidate their local caches and continue without
|
|
90
|
-
running a duplicate update. Contender waiting is bounded to
|
|
91
|
-
|
|
92
|
-
|
|
98
|
+
running a duplicate update. Contender waiting is bounded to 165 seconds: the owner
|
|
99
|
+
runs two probes under the lease, a `--version` read confirming the CLI exists and then
|
|
100
|
+
the update, each allowed 75 seconds by its launch and command bounds (§9.2), and the
|
|
101
|
+
rest covers their abort cleanup. An owner that has not finished by then causes the
|
|
102
|
+
contender to skip its update and warn, without deleting the owner's lease. This warning uses `errorCode: "update_active"`
|
|
93
103
|
and a canonical message explaining that the update was skipped because another
|
|
94
104
|
updater is still active; no local update command ran, so it carries no exit status
|
|
95
|
-
or stderr.
|
|
105
|
+
or stderr. Completion publication atomically replaces the marker's token file. A contender
|
|
106
|
+
pins its baseline file before observing the owner, then compares the pinned token
|
|
107
|
+
with the current pathname after acquisition; recovered owner generations remain
|
|
108
|
+
completion evidence. Concurrent older Elwood writers that modify a marker inode
|
|
109
|
+
in place retain the earlier snapshot race; its token payload remains compatible.
|
|
110
|
+
The lease records the owner's process id and a unique
|
|
96
111
|
generation. Cleanup removes only the generation it owns, a live owner is never
|
|
97
112
|
evicted solely because the stale bound elapsed, and recovery of a dead owner's
|
|
98
113
|
lease is itself serialized before removal, so neither cleanup nor concurrent stale
|
|
@@ -140,9 +155,48 @@ rejected result: a later caller re-attempts rather than inheriting the prior
|
|
|
140
155
|
failure.
|
|
141
156
|
|
|
142
157
|
Each probe is bounded so a broken or hostile CLI on PATH cannot hang or flood
|
|
143
|
-
the host
|
|
144
|
-
|
|
145
|
-
|
|
158
|
+
the host. A probe runs through the user's interactive login shell (§4.2), and
|
|
159
|
+
loading that shell's startup files is the user's profile, not the CLI: under
|
|
160
|
+
concurrent launches on a loaded machine the profile alone can outlast the CLI's
|
|
161
|
+
bound while the CLI itself answers in milliseconds. The two phases are therefore
|
|
162
|
+
bounded separately. After the startup files load, and before the probe
|
|
163
|
+
command runs, the probe shell writes a start line of Elwood's own, ending in a random
|
|
164
|
+
token chosen once per parent process so that no startup file's output can pass for it,
|
|
165
|
+
on a private channel that is neither stdout nor stderr, so a startup file that
|
|
166
|
+
redirects either cannot hide the line. A shell that closed that channel at startup (macOS's bash 3.2,
|
|
167
|
+
started as an interactive login shell, closes every inherited descriptor above
|
|
168
|
+
stderr) writes the line on stdout instead. Not stderr, which a startup file may
|
|
169
|
+
discard or merge into stdout: a startup file that hid stdout would also hide the
|
|
170
|
+
command's own output. Elwood removes the line from captured stdout, so on either
|
|
171
|
+
channel the probe's captured output is exactly the shell's and the command's.
|
|
172
|
+
The private channel stays open past the start line, for the e2e home guard's stop
|
|
173
|
+
line (§12), and closes before the command, which never inherits it.
|
|
174
|
+
After the start line and before the command, the probe script removes the user's
|
|
175
|
+
not-found handlers, zsh's `command_not_found_handler` and bash's
|
|
176
|
+
`command_not_found_handle`, under the command's bound, which starts at the line. A
|
|
177
|
+
Version probes explicitly check command lookup after removing those handlers. A
|
|
178
|
+
failed lookup emits a private random marker over the existing control channel
|
|
179
|
+
(or stdout fallback) and exits 127. Only that conclusive lookup signal or native
|
|
180
|
+
`ENOENT` reports a CLI as not found; numeric status 127 alone is insufficient. A
|
|
181
|
+
resolved CLI exiting 127 reports `*_start_failed` with its stderr and exit status.
|
|
182
|
+
Lookup markers are removed from captured output, and no handler output is captured.
|
|
183
|
+
The shell has 60 seconds from spawn to write that line (the launch bound),
|
|
184
|
+
and the probe command then has a default timeout of 15 seconds from that line until
|
|
185
|
+
it exits. A probe that
|
|
186
|
+
exceeds either bound, or whose captured output exceeds a per-stream byte cap
|
|
187
|
+
(1,000,000 bytes), is killed, and its captured output is truncated to the cap.
|
|
188
|
+
Either timeout reports `ETIMEDOUT`. Once the probe command has started, a probe whose
|
|
189
|
+
process dies of a signal Elwood did not send reports the status a shell would, 128 plus
|
|
190
|
+
the signal's number; a login shell that dies before then is a login-shell failure, as
|
|
191
|
+
follows. A login shell that misses the launch bound, or
|
|
192
|
+
exits without writing the start line (a startup file that `exec`s another program,
|
|
193
|
+
say), never ran the probe command, so the probe fails as a login-shell failure
|
|
194
|
+
rather than reporting the shell's exit status as the command's: its cause names the
|
|
195
|
+
login shell, and its typed error details carry `phase: "login_shell"`. Its captured
|
|
196
|
+
stderr is only the user's startup output, which can hold expanded secrets, so it is
|
|
197
|
+
withheld: `details.stderr` is empty. A best-effort update probe that fails this way
|
|
198
|
+
surfaces the `agent_update_failed` warning with `errorCode: "login_shell_failed"` and
|
|
199
|
+
an empty `raw`. Abort cleanup has an
|
|
146
200
|
additional one-second bound: an aborted probe retries process-group termination,
|
|
147
201
|
falls back to terminating the direct child once group signals have kept failing,
|
|
148
202
|
and awaits exit within that window. A process-group id is signaled only while the
|
|
@@ -169,14 +223,21 @@ non-PTY probe — `--version`, `--help` capability detection, and
|
|
|
169
223
|
otherwise) surfaces through that probe's existing public error name —
|
|
170
224
|
`claude_start_failed` / `codex_start_failed` — with the underlying reason
|
|
171
225
|
preserved in the error `details` as `cause` (and `errno`, e.g. `ETIMEDOUT` on
|
|
172
|
-
timeout or `E2BIG` on overflow) alongside any `stderr
|
|
226
|
+
timeout or `E2BIG` on overflow) alongside any `stderr`, and the status the probe
|
|
227
|
+
reported, if any, as `exitStatus`. An UPDATE failure
|
|
173
228
|
(`claude update` / `codex update`), being best-effort maintenance, does NOT
|
|
174
229
|
surface as a start-blocking error; it is contained and surfaces as the live
|
|
175
|
-
`agent_update_failed` warning carrying the same bounded diagnostics (
|
|
230
|
+
`agent_update_failed` warning carrying the same bounded diagnostics (`exitStatus`,
|
|
176
231
|
`errno`, `stderr`), while startup continues through the compatibility gate. A
|
|
177
232
|
killed probe is signaled only because Elwood aborted it; a probe that exits or
|
|
178
233
|
fails to spawn on its own is not signaled.
|
|
179
234
|
|
|
235
|
+
At most 8 non-PTY probes run at once in a parent process, because each starts an
|
|
236
|
+
interactive login shell and a heavy profile slows every shell that runs beside it.
|
|
237
|
+
Further probes wait their turn in arrival order. A waiting probe has not started:
|
|
238
|
+
its launch bound begins when it runs, and a probe that fails frees its turn like
|
|
239
|
+
one that succeeds.
|
|
240
|
+
|
|
180
241
|
After spawning the PTY, Elwood waits briefly for immediate process exits or
|
|
181
242
|
known authentication/startup failure banners before reporting the session as
|
|
182
243
|
running. The default wait must be long enough to catch typical local CLI startup
|
|
@@ -194,16 +255,32 @@ flush of any transcript diagnostics buffered before the session sink existed
|
|
|
194
255
|
(emitted as live warnings), PTY-exit registration, the readiness/authentication
|
|
195
256
|
assertion, and the startup-usable evidence. If ANY of them fails, Elwood tears
|
|
196
257
|
down the now-live PTY, hook bridge, terminal, and transcript watcher before
|
|
197
|
-
rejecting
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
258
|
+
rejecting. This teardown is best-effort: it stops the hook bridge and the transcript
|
|
259
|
+
watcher and disposes the terminal on every path, but a CLI process it could not confirm
|
|
260
|
+
reaped may remain (see below). (The one-shot version/preflight warning is NOT part of
|
|
261
|
+
this boundary — it is scheduled for delivery AFTER start resolves, per C-API-14.)
|
|
262
|
+
The session ends the PTY with the same one-shot process-group reaper its exit path
|
|
263
|
+
uses (§9.4, C-LIFE-10), so any successful group SIGKILL occurs at most once across paths.
|
|
264
|
+
If the session has already seen the PTY exit (for example, the CLI exited during
|
|
265
|
+
startup), the PTY is not signaled again: the leader's pid may already belong to an
|
|
266
|
+
unrelated process, so only that shared reaper runs. That reaper does nothing if the
|
|
267
|
+
exit's reap succeeded and retries it if it failed. Otherwise the PTY is signaled, its
|
|
268
|
+
exit is awaited within a bounded window, and the leader's process-group reap is attempted
|
|
269
|
+
on every path, even if the PTY signal throws. If the detached sweep confirms the entire
|
|
270
|
+
group gone, the final group SIGKILL is skipped, avoiding a signal to a possibly reused
|
|
271
|
+
numeric id; an earlier unresolved descendant-sweep failure still rejects. An eligible
|
|
272
|
+
group kill stops a CLI-spawned
|
|
273
|
+
descendant such as a hook-bridge grandchild, which POSIX reparents to PID 1 the instant
|
|
274
|
+
the leader exits. A leader that ignores the SIGTERM has its detached descendants
|
|
275
|
+
reaped before the escalating SIGKILL, as §5.3 specifies. The original startup error is
|
|
276
|
+
preserved; a cleanup or reap failure is secondary and never replaces it. When that PTY termination or group reap cannot be
|
|
277
|
+
confirmed, part of the CLI's process tree may still be running, and a typed startup
|
|
278
|
+
error keeps its code and message and gains two details. `cleanupErrorCode` is
|
|
279
|
+
content-free: the failed group reap's errno if there is one, else the termination's,
|
|
280
|
+
when that errno is on the reap allowlist; otherwise `UnknownError`.
|
|
281
|
+
`cleanupProcessGroupId` is the leader's group id, for diagnosis only: it may already
|
|
282
|
+
have been reissued to an unrelated group, so it must never be signaled. A startup error
|
|
283
|
+
that is not one of Elwood's typed errors is rethrown unchanged.
|
|
207
284
|
|
|
208
285
|
### 9.3 Resume
|
|
209
286
|
|
|
@@ -241,9 +318,12 @@ intentionally not persisted yet.
|
|
|
241
318
|
For either adapter, resume validates the loop sidecar before starting the agent,
|
|
242
319
|
silently removes definitions whose seven-day wall-clock expiry passed during
|
|
243
320
|
downtime, and restores surviving definitions with the same IDs and persisted
|
|
244
|
-
jitter.
|
|
245
|
-
|
|
246
|
-
|
|
321
|
+
jitter. That removal, and any at activation (§8.1), is part of the launch's startup
|
|
322
|
+
publication, so a resume that then fails restores the sidecar it found unless the
|
|
323
|
+
earlier launch has written it since. It restores no timer or due state: every
|
|
324
|
+
surviving cadence starts fresh from the resumed session's first readiness, using
|
|
325
|
+
that launch's current permissions and blocking-dialog posture, and no missed run is
|
|
326
|
+
replayed.
|
|
247
327
|
|
|
248
328
|
### 9.4 Exit
|
|
249
329
|
|
|
@@ -265,7 +345,12 @@ not delay the native process-exit notification, terminal status, or unconditiona
|
|
|
265
345
|
process-group reap; the final `terminal:data` tail may therefore arrive after
|
|
266
346
|
`terminal:exit`. A stalled renderer, or a PTY that never goes quiet, is disposed
|
|
267
347
|
when the budget expires. Explicit direct `terminal.dispose()` does not wait for
|
|
268
|
-
pending output.
|
|
348
|
+
pending output. Runtime cleanup also stops the hook bridge and finishes the
|
|
349
|
+
transcript watcher: one bounded final flush of what the transcript already holds,
|
|
350
|
+
then no more polling. So a PTY that outlives a failed shutdown produces no later
|
|
351
|
+
transcript activity, and its hook commands reach no handler: the stopped bridge
|
|
352
|
+
accepts no new request. A host hook handler already running when cleanup starts may
|
|
353
|
+
still finish and report its result.
|
|
269
354
|
|
|
270
355
|
Reaping the leader's process group is unconditional on every exit path
|
|
271
356
|
(C-LIFE-10). On an unsolicited PTY exit the terminal status is submitted first,
|
|
@@ -276,7 +361,11 @@ a live `reap_failed` warning rather than aborting the exit callback. An explicit
|
|
|
276
361
|
survivor reap (it does not re-signal the dead PTY — node-pty does not replay the
|
|
277
362
|
exit event, and the pid may already be recycled) and rejects with a typed
|
|
278
363
|
`termination_failed` error if that reap fails, leaving the reap retryable by a
|
|
279
|
-
later `teardown()`.
|
|
364
|
+
later `teardown()`. Every `stop()`/`kill()` attempt runs runtime cleanup after its
|
|
365
|
+
termination or survivor reap, even when that failed: the PTY could not be signaled,
|
|
366
|
+
did not exit, or its group could not be reaped. The call still rejects with that
|
|
367
|
+
failure, and a cleanup failure alongside it is kept as its message in
|
|
368
|
+
`details.cleanupError`.
|
|
280
369
|
|
|
281
370
|
Overlapping `stop()`, `kill()`, and `teardown()` calls on one session are
|
|
282
371
|
serialized so the PTY is signaled at most once. The first caller owns the in-flight
|
|
@@ -294,5 +383,7 @@ and (for teardown) remove files. A settled shutdown failure is not permanently
|
|
|
294
383
|
sticky: because signal ownership is separate from the in-flight promise, a later
|
|
295
384
|
`stop()`/`kill()`/`teardown()` after a failed one runs a fresh attempt that RETRIES
|
|
296
385
|
the reap, runtime cleanup, and file removal — without re-signaling the PTY — rather
|
|
297
|
-
than returning the earlier rejection forever (C-LIFE-10 retry posture).
|
|
298
|
-
|
|
386
|
+
than returning the earlier rejection forever (C-LIFE-10 retry posture). The one
|
|
387
|
+
exception is a detached-descendant walk that could not complete (§5.3): with the
|
|
388
|
+
leader gone it cannot be retried, so every later call keeps rejecting for it. Each
|
|
389
|
+
caller still observes its own operation's success or typed failure.
|
package/prd/10-errors.md
CHANGED
|
@@ -9,14 +9,14 @@ Initial required error names:
|
|
|
9
9
|
|---|---|
|
|
10
10
|
| `unsupported_platform` | The current OS is not supported by the implementation. |
|
|
11
11
|
| `claude_not_found` | `claude` could not be resolved or spawned. |
|
|
12
|
-
| `claude_start_failed` | Claude started but exited or failed before the session was usable. |
|
|
12
|
+
| `claude_start_failed` | Claude started but exited or failed before the session was usable, or the session's `cwd` is not an existing directory (C-API-61). |
|
|
13
13
|
| `claude_update_failed` | `claude update` failed. Best-effort: contained by the autoupdate preflight and surfaced as the `agent_update_failed` warning (never thrown out of `startClaude` when the installed CLI meets the minimum). |
|
|
14
14
|
| `claude_not_authenticated` | Startup output or status indicates Claude is not authenticated. |
|
|
15
15
|
| `claude_version_unsupported` | Installed Claude version lacks required features. |
|
|
16
16
|
| `claude_invalid_reasoning_effort` | `reasoningEffort` was not one of the valid `ClaudeReasoningEffort` values; rejected before spawn. |
|
|
17
17
|
| `claude_high_trust_conflict` | `highTrust: true` was combined with an explicit `permissionMode`; rejected before spawn. |
|
|
18
18
|
| `codex_not_found` | `codex` could not be resolved or spawned. |
|
|
19
|
-
| `codex_start_failed` | Codex started but exited or failed before the session was usable. |
|
|
19
|
+
| `codex_start_failed` | Codex started but exited or failed before the session was usable, or the session's `cwd` is not an existing directory (C-API-61). |
|
|
20
20
|
| `codex_update_failed` | `codex update` failed. Best-effort: contained by the autoupdate preflight and surfaced as the `agent_update_failed` warning (never thrown out of `startCodex` when the installed CLI meets the minimum). |
|
|
21
21
|
| `codex_not_authenticated` | Startup output or status indicates Codex is not authenticated. |
|
|
22
22
|
| `codex_version_unsupported` | Installed Codex version lacks required features. |
|
|
@@ -30,8 +30,8 @@ Initial required error names:
|
|
|
30
30
|
| `hook_bridge_failed` | The hook bridge or IPC endpoint could not be initialized. |
|
|
31
31
|
| `input_queue_full` | A live session control queue would exceed 1,024 outstanding operations or 8 MiB aggregate UTF-8 input text; no input or attachment is performed for the rejected operation. |
|
|
32
32
|
| `session_not_running` | Operation requires a running process but the session is stopped. |
|
|
33
|
-
| `termination_failed` | A stop/kill request did not observe process exit after escalation, or the PTY exited but its process group could not be confirmed reaped. |
|
|
34
|
-
| `teardown_failed` | Elwood could not remove all owned session files. |
|
|
33
|
+
| `termination_failed` | A stop/kill request could not signal the PTY, did not observe process exit after escalation, or the PTY exited but its process group or its detached descendants could not be confirmed reaped. A PTY signaling failure keeps the underlying message as `cause` and any `errno`/`syscall`/`path` in `details`. When the PTY was not confirmed terminated and its group reap failed too, `details.reapError` keeps the reap's message and `details.reapErrno` its errno when it has one. A failed reap retry, in a `stop()`/`kill()` of an already-signaled or exited session or in `teardown()`, keeps the leader's process-group id as `details.processGroupId`. A retained detached-sweep failure after the leader group is confirmed gone is still reported as a detached-sweep failure. When the detached-descendant walk could not complete, its reason is the `cause` (or `details.sweepError` alongside another termination failure), and `details.unconfirmedProcessGroupIds` lists up to 16 ids of the process groups it could not confirm reaped, the leader's own included when its group was not confirmed stopped; like `processGroupId`, they are diagnostic only and may already belong to another group. Runtime cleanup runs after a failed termination too: a cleanup failure on its own is `termination_failed` with its message as `cause`, and one alongside another termination failure is kept as its message in `details.cleanupError`. When `close()` (§5.8) fails both its stop and its kill, it keeps each one's cleanup message too, as `details.cleanupError` and `details.killCleanupError`. |
|
|
34
|
+
| `teardown_failed` | A `teardown()` step failed: the PTY could not be terminated or its process tree, including detached descendants, confirmed reaped, runtime cleanup failed, or Elwood could not remove all owned session files. Every step still runs. `details.causes` lists each failed step's message, and `details.failures` lists each failed step as `{ message }`, adding `code` and `details` when the step failed with a typed Elwood error, so a `termination_failed`'s errno, its reap's, its `processGroupId`, and its `unconfirmedProcessGroupIds` survive teardown. |
|
|
35
35
|
| `compact_failed` | A requested conversation compaction did not report completion in time. |
|
|
36
36
|
| `interrupt_failed` | A requested turn interrupt did not return the session to ready in time. |
|
|
37
37
|
| `model_automation_failed` | The adapter's model picker could not be recognized or driven to completion. |
|
|
@@ -40,12 +40,19 @@ Initial required error names:
|
|
|
40
40
|
| `invalid_image` | An `images` input is not attachable: an unsupported/absent byte format, empty bytes, a path that is not a readable file, or a total image count/size beyond the documented limits (C-API-44). Raised before any partial input reaches the composer. |
|
|
41
41
|
| `image_attach_failed` | An image could not be confirmed attached: the CLI's `[Image #N]` chip did not appear before the confirmation timeout, the OS clipboard could not be read/written, or terminal rendering permanently failed. No text is submitted afterward. (A session that TERMINATES mid-attach rejects with `session_not_running`, like any queued op.) (C-API-44/45/46) |
|
|
42
42
|
| `wait_timeout` | A `waitForStatus`/`waitForActivity` call did not observe its condition before the timeout, the PTY rejected a staged-draft cleanup write before successor input, or raw input replaced an initial/replay ergonomic submission awaiting empty-input confirmation (§5.3). The same code rejects queue-backed input admitted from an expired Stop callback/observer context (§6.3), before terminal-state checks even after teardown. Cleanup failures retain the pending draft and use a bounded message without raw PTY diagnostics. |
|
|
43
|
+
| `turn_failed` | The agent itself rejected an ergonomic `send`/`stream` turn and reported it through its own failure evidence: a Claude `StopFailure` hook that rejects the turn's own submission (§5.8, §6.1), or a Codex transcript `task_complete` whose `error` names the turn's own `turn_id` (§5.8), such as an unknown model or an API error. The message is the bounded rejection diagnostic of §6.1, or Codex's bounded `error.message`; `details.agentError`, when present, is Claude's `error` name (e.g. `model_not_found`) or Codex's `codex_error_info` kind (e.g. `other`) and is diagnostic only. An empty or absent reply is never this error (§5.8). |
|
|
43
44
|
| `invalid_loop` | A loop request or recognized `/loop` command violates the documented shape, interval, or UTF-8 message bounds. |
|
|
44
45
|
| `loop_limit_reached` | Creating a loop would exceed 50 unexpired definitions; existing loops are unchanged. |
|
|
45
46
|
| `loop_not_found` | Cancellation targeted an unknown or already-finished loop ID. |
|
|
46
47
|
| `loop_persistence_failed` | A loop-sidecar write required by creation, cancellation, kill, expiry, or teardown did not complete safely. |
|
|
47
48
|
| `loop_submission_failed` | Live loop scheduling or readiness-safe prompt submission failed; details identify only the loop ID. |
|
|
48
49
|
|
|
50
|
+
A confirmed command lookup failure reports `*_not_found` with `exitStatus: 127`,
|
|
51
|
+
the fixed cause ``The login shell found no `<command>` (status 127).``, and no
|
|
52
|
+
`stderr` field. Native `ENOENT` retains its native cause and diagnostic fields. A
|
|
53
|
+
resolved CLI returning 127 is `*_start_failed`, preserving its stderr and status;
|
|
54
|
+
a numeric exit status alone is never proof of failed command lookup.
|
|
55
|
+
|
|
49
56
|
Hook handler failures are normally surfaced as `hookError` events, not thrown
|
|
50
57
|
from the hook bridge path.
|
|
51
58
|
|
package/prd/12-e2e.md
CHANGED
|
@@ -17,6 +17,87 @@ CLIs, it is intentionally separate from `npm run check`. E2E coverage should be
|
|
|
17
17
|
reported separately and made as high as practical; unit/conformance tests remain
|
|
18
18
|
responsible for hard-to-force error paths and 100% default coverage.
|
|
19
19
|
|
|
20
|
+
Neither gate may write the developer's own Codex home or read its state; the e2e
|
|
21
|
+
suite only copies its `auth.json`. By default, every `test:e2e` process runs with
|
|
22
|
+
`CODEX_HOME` pointed at a private directory seeded with only a 0600 copy of that file,
|
|
23
|
+
removed when the process exits. A single e2e file run on its own gets the same default.
|
|
24
|
+
A test that needs its own Codex config uses another private home, seeded the same way,
|
|
25
|
+
for its duration. Whichever private home is active receives the project trust entries,
|
|
26
|
+
model selections, sessions, and logs Codex persists while the suite drives it, so none
|
|
27
|
+
of them reach the developer's config. The default gate runs each test file with `HOME`
|
|
28
|
+
and `CODEX_HOME` pointed at a private directory. Both gates refuse to create these
|
|
29
|
+
homes when the temp directory is inside the developer's Codex home.
|
|
30
|
+
|
|
31
|
+
The e2e suite may not write the developer's own Claude config either. By default,
|
|
32
|
+
every `test:e2e` process, and a single e2e file run on its own, runs Claude with
|
|
33
|
+
`CLAUDE_CONFIG_DIR` pointed at a private directory, removed when the process exits.
|
|
34
|
+
It is seeded with three copies: a 0600 `.credentials.json` holding the developer's
|
|
35
|
+
Claude login without its refresh token, so the copy can never rotate and so
|
|
36
|
+
invalidate the developer's own login. The login is read from where the developer's
|
|
37
|
+
own Claude reads it. On macOS that is the keychain item Claude names for the developer's
|
|
38
|
+
`CLAUDE_SECURESTORAGE_CONFIG_DIR` when it is set, else for their `CLAUDE_CONFIG_DIR`,
|
|
39
|
+
set or not, and their `.credentials.json` only when there is no such item. On other
|
|
40
|
+
platforms it is the `.credentials.json`. The suite removes
|
|
41
|
+
`CLAUDE_SECURESTORAGE_CONFIG_DIR` from its own environment, so the Claude it runs
|
|
42
|
+
reads the private copy, never the developer's item. The second copy is the developer's
|
|
43
|
+
global config without its per-project entries, MCP servers, or bypass-permissions
|
|
44
|
+
acceptance, and the third is Claude's cached model catalog. The global-config
|
|
45
|
+
entry Claude writes for each scratch project, its transcripts, and its history land
|
|
46
|
+
there, never in the developer's `~/.claude.json` or `~/.claude/`, which are only read.
|
|
47
|
+
The private directory holds none of the developer's settings, so the suite runs Claude
|
|
48
|
+
with Claude's defaults rather than the developer's permission mode, hooks, or plugins.
|
|
49
|
+
The suite refuses to create it when the temp directory is inside the developer's Claude
|
|
50
|
+
config dir.
|
|
51
|
+
Each such process also points `CLAUDE_CODE_TMPDIR`, Claude's temp root, at a second
|
|
52
|
+
private directory, removed when the process exits. Claude otherwise keeps its temp files
|
|
53
|
+
under the shared `/tmp`: a directory per working directory, holding each session's
|
|
54
|
+
scratchpad, which outlives the session, and its messaging socket. So no scratch project
|
|
55
|
+
leaves a directory there. The suite keeps that variable when it drops the other
|
|
56
|
+
`CLAUDE_CODE_` variables a parent Claude session set.
|
|
57
|
+
A test that needs its own Claude config dir copies the login the same way, without the
|
|
58
|
+
refresh token.
|
|
59
|
+
|
|
60
|
+
Both CLIs start through the developer's login shell, whose startup files run after
|
|
61
|
+
Elwood hands over its environment and could replace, unset, or unexport `CODEX_HOME`,
|
|
62
|
+
`CLAUDE_CONFIG_DIR`, or `CLAUDE_CODE_TMPDIR`. So the suite registers each private CLI home
|
|
63
|
+
and Claude temp root it creates in
|
|
64
|
+
`ELWOOD_E2E_PRIVATE_HOMES`, a JSON array of absolute paths holding each home's given and
|
|
65
|
+
real path, which the Elwood processes it starts inherit. Each e2e process discards the
|
|
66
|
+
list it inherited and registers only the homes it creates, so an inherited entry, such as
|
|
67
|
+
the developer's own home, is never accepted. Each of these variables that
|
|
68
|
+
Elwood's own environment sets to a registered home is guarded. Every login shell Elwood
|
|
69
|
+
starts, for a session or a probe, checks after its startup files that each guarded
|
|
70
|
+
variable is still exported and that the real path of the directory it names, relative
|
|
71
|
+
names resolved against the shell's working directory, is a registered home. If one is
|
|
72
|
+
not, the shell writes a stop line with why and exits 97 before running its command, so
|
|
73
|
+
no CLI starts against another home, the developer's own included. A value that is not
|
|
74
|
+
such an array stops every launch the same way. Unset or empty, as outside the suite, the
|
|
75
|
+
variable changes nothing.
|
|
76
|
+
|
|
77
|
+
The stop line starts with a token Elwood draws once per process, so neither a startup
|
|
78
|
+
file nor a command can print it. It is never written to stderr, which a startup file can
|
|
79
|
+
redirect. A session's shell writes it to its terminal, which the session's PTY captures
|
|
80
|
+
however the startup files redirected the shell's input and output, and falls back to
|
|
81
|
+
stdout only when it cannot open the terminal. A probe's shell runs in a session of its
|
|
82
|
+
own, with no terminal, so it writes the line where it wrote its start line (§9.2): on the
|
|
83
|
+
probe's private channel, which a startup file's redirection of stdout cannot hide, or, from
|
|
84
|
+
a shell that closed that channel at startup, on stdout. In that shell, a startup file that
|
|
85
|
+
hid stdout hid the start line too, so the probe is the login shell's own failure.
|
|
86
|
+
Elwood counts a launch as stopped by the guard only when its shell exited 97 and wrote
|
|
87
|
+
that line. A command that itself exits 97 is the command's own failure. A session's
|
|
88
|
+
startup check (§9.1) finds the line however much startup output came before it. Since a
|
|
89
|
+
PTY's last output can arrive after its exit (§9.4), once the check sees a status-97 exit
|
|
90
|
+
of a launch the guard checks, it waits up to one second more for the line; a launch the
|
|
91
|
+
guard does not check fails at once.
|
|
92
|
+
|
|
93
|
+
A probe runs the check after its start line (§9.2). A probe the guard stops after that
|
|
94
|
+
line is a login-shell failure (C-PERF-05) whose only diagnostic is the guard's fixed
|
|
95
|
+
reason: like any login-shell failure, its stderr is withheld. A login shell that exits
|
|
96
|
+
before the start line is still the login shell's own failure. A session whose login
|
|
97
|
+
shell the guard stops during startup (§9.1) fails with the adapter's `*_start_failed`,
|
|
98
|
+
whose message names the guard instead of repeating the shell's output. A session stopped
|
|
99
|
+
later exits with status 97, its terminal showing the stop line and the guard's reason.
|
|
100
|
+
|
|
20
101
|
The repository should also provide `npm run check:all`, an opt-in convenience
|
|
21
102
|
gate that runs the default `npm run check` gate and then `npm run test:e2e`.
|
|
22
103
|
`check:all` does not change the composition of `npm run check`; the default gate
|
package/prd/12a-cli.md
CHANGED
|
@@ -28,7 +28,13 @@ A new session defaults to the invocation directory; `-C`/`--cwd` overrides it.
|
|
|
28
28
|
When no flag, environment variable, or configuration key selects an agent, a
|
|
29
29
|
new session auto-detects one: Elwood tries `claude` first, then `codex`, and
|
|
30
30
|
uses the first whose command resolves in the user's login shell — the same
|
|
31
|
-
resolution the agent launch itself uses (§4.2)
|
|
31
|
+
resolution the agent launch itself uses (§4.2), from the effective workspace — without
|
|
32
|
+
running either agent.
|
|
33
|
+
Before this unselected new-session auto-detection, including `config effective`,
|
|
34
|
+
Elwood MUST validate the effective workspace under §12A.5, whether it comes from
|
|
35
|
+
`--cwd` or the invocation directory. A workspace usage error takes precedence over
|
|
36
|
+
`no_agent_found` or a probe failure. Explicit-agent and resume validation order is
|
|
37
|
+
unchanged; resume never probes.
|
|
32
38
|
Both probes run concurrently; the order only decides the winner. The resolved
|
|
33
39
|
agent reports the source `auto-detected`. When neither command resolves, the
|
|
34
40
|
invocation fails before any launch with the stable code `no_agent_found` and
|
|
@@ -106,12 +112,27 @@ setup turn and discards that turn's response before observing the user turn. It
|
|
|
106
112
|
is a real agent turn: tools and other side effects performed during persona setup
|
|
107
113
|
remain even though its assistant response is omitted from CLI output. Explicit
|
|
108
114
|
persona plus resume is a usage error. An agent process exit before
|
|
109
|
-
CLI-requested cleanup is `agent_exited`, including a zero-status exit.
|
|
110
|
-
|
|
115
|
+
CLI-requested cleanup is `agent_exited`, including a zero-status exit. A Claude or Codex
|
|
116
|
+
turn the agent rejects (§5.8), including the persona setup turn, is `turn_failed`
|
|
117
|
+
rather than a successful result. Response data already collected remains
|
|
118
|
+
available on later failure.
|
|
111
119
|
|
|
112
120
|
Cleanup runs exactly once. A cleanup failure never masks a primary usage,
|
|
113
121
|
agent, timeout, or interruption outcome, and it changes an otherwise successful
|
|
114
|
-
invocation to failure.
|
|
122
|
+
invocation to failure. Its diagnostic names only the typed Elwood failures behind
|
|
123
|
+
it. Each always appears as its error code, followed by its errno token and then
|
|
124
|
+
`reap` and its reap's errno token (§10 `termination_failed`) when those are valid
|
|
125
|
+
errno names, then `process groups` and the ids in its
|
|
126
|
+
`unconfirmedProcessGroupIds` (positive integers, at most 16) when it has any: for
|
|
127
|
+
example `Cleanup failed (termination_failed EPERM).`, `Cleanup failed
|
|
128
|
+
(termination_failed reap EPERM).`, or `Cleanup failed (termination_failed EAGAIN
|
|
129
|
+
process groups 4242 4243).` Those ids are for diagnosis only and may already
|
|
130
|
+
belong to other groups. For a failed teardown those are its failed
|
|
131
|
+
steps', in order (§10 `teardown_failed`). The diagnostic never carries their
|
|
132
|
+
messages or paths, and a failure with no typed cause reads `Cleanup failed.` In
|
|
133
|
+
text mode, a cleanup failure behind a different primary failure is its own stderr
|
|
134
|
+
line after the primary error's; a combined `models` listing (§12A.10) prefixes it
|
|
135
|
+
with the agent, as it does that agent's error.
|
|
115
136
|
|
|
116
137
|
### 12A.3 Output protocols
|
|
117
138
|
|
|
@@ -213,13 +234,18 @@ symlinks, non-regular files, wrong ownership, and non-private permissions.
|
|
|
213
234
|
CLI-owned state defaults to `$XDG_STATE_HOME/elwood` when that base is absolute,
|
|
214
235
|
otherwise `~/.local/state/elwood`. It never defaults to the invocation
|
|
215
236
|
workspace. CLI state directories and records MUST be private, owner-matched,
|
|
216
|
-
regular where applicable, symlink-safe, and atomically written.
|
|
237
|
+
regular where applicable, symlink-safe, and atomically written. A new session's
|
|
238
|
+
state root is made only while its workspace exists, and one at or under the
|
|
239
|
+
workspace only below it (§8.1, C-STATE-14). A workspace removed after it was
|
|
240
|
+
validated fails the launch with the adapter's `*_start_failed` (C-API-61)
|
|
241
|
+
instead of being recreated. One session
|
|
217
242
|
identity supports at most one live owner; concurrent exact resumes may fail on
|
|
218
243
|
the adapter's underlying startup conflict in v1.
|
|
219
244
|
|
|
220
|
-
Exit status is 0 for success or consumer closure, 1 for agent
|
|
221
|
-
|
|
222
|
-
|
|
245
|
+
Exit status is 0 for success or consumer closure, 1 for agent failure
|
|
246
|
+
(including `agent_exited` and `turn_failed`) or cleanup failure, 2 for usage
|
|
247
|
+
or configuration failure, 124 for timeout, and 130 for interruption. A primary
|
|
248
|
+
nonzero status survives cleanup failure. Text errors are
|
|
223
249
|
concise and go to stderr while structured protocols retain stable error codes.
|
|
224
250
|
Unknown long options identify the token and suggest the nearest documented
|
|
225
251
|
option when the match is unambiguous. Validation messages identify relevant
|
|
@@ -229,6 +255,29 @@ include sanitized event detail but never weakens §12A.3. Static arguments, envi
|
|
|
229
255
|
compatibility MUST be validated before session creation whenever validation
|
|
230
256
|
does not require a stored resume record.
|
|
231
257
|
|
|
258
|
+
The effective workspace, new or resumed, MUST be an absolute, existing directory
|
|
259
|
+
owned by the current user that no other user can replace before the agent
|
|
260
|
+
launches in it. An OS directory-search permission check MUST also confirm the
|
|
261
|
+
current user can enter it; refusal is a path-specific `invalid_arguments` usage
|
|
262
|
+
error. This is a bounded check, not an atomic launch guarantee.
|
|
263
|
+
Resolving its path as given, name by name and through every
|
|
264
|
+
symlink, every directory a name is looked up in MUST be owned by root or the
|
|
265
|
+
current user and MUST NOT be writable by group or others unless it is sticky,
|
|
266
|
+
and every directory and symlink passed MUST be owned by root or the current
|
|
267
|
+
user. A group-writable directory is accepted when its group is the user's
|
|
268
|
+
private group: the user's primary group, with the same number as the user, as
|
|
269
|
+
Debian, Ubuntu, and Fedora create it. Root's group 0 is a shared system group and
|
|
270
|
+
never counts as private, even for root. Anything else is a usage error that names
|
|
271
|
+
the directory or link and how to fix it. The replacement check reads owners and mode bits
|
|
272
|
+
only: an ACL that grants another user write access, or another member added to
|
|
273
|
+
the user's private group, is not detected, and where the platform reports no user
|
|
274
|
+
id neither the ownership nor this check applies. The path is launched and
|
|
275
|
+
stored as given. A link whose target is not UTF-8, or a path that follows more
|
|
276
|
+
than 40 links, fails as uninspectable, naming the link.
|
|
277
|
+
Workspaces under `/tmp` and the macOS temporary directories pass, those being
|
|
278
|
+
sticky or the user's own; `/tmp` itself, owned by root, fails the ownership
|
|
279
|
+
rule for every user but root.
|
|
280
|
+
|
|
232
281
|
### 12A.6 Same-terminal head mode
|
|
233
282
|
|
|
234
283
|
`--head` is an opt-in, view-only terminal mirror for a run. It requires both a
|
|
@@ -402,7 +451,12 @@ Listing sessions resolves only state-directory and output settings. Adapter,
|
|
|
402
451
|
model, permission, trust, and turn-lifecycle environment defaults are irrelevant
|
|
403
452
|
and MUST NOT prevent listing. Config files still undergo strict schema decoding.
|
|
404
453
|
Interactive foreground launches MUST resolve the executable in the same
|
|
405
|
-
interactive login-shell environment used by auto-detection
|
|
454
|
+
interactive login-shell environment and effective workspace used by auto-detection, through the same
|
|
455
|
+
bounded probe, so the user's startup files get the login shell's launch bound and
|
|
456
|
+
the lookup the command bound (§9.2, C-PERF-05). The frame carries the login
|
|
457
|
+
shell's own `$PATH`, printed by `/bin/sh`, which loads no startup file, so a
|
|
458
|
+
`printf` function or alias in the user's startup files cannot print another
|
|
459
|
+
PATH in its place. If the shell exits
|
|
406
460
|
successfully without returning a complete PATH probe frame, the foreground
|
|
407
461
|
launch MUST preserve the inherited PATH. A complete frame containing an empty
|
|
408
462
|
PATH remains authoritative. C-CLI-24/25.
|