@with-logic/elwood 0.2.0 → 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 +571 -1
- package/CONTRIBUTING.md +3 -0
- package/README.md +6 -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 +9 -6
- package/dist/runtime/session/base.js.map +1 -1
- package/dist/runtime/session/commands.d.ts +6 -4
- 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 +15 -13
- package/dist/runtime/session/picker.d.ts.map +1 -1
- package/dist/runtime/session/picker.js +49 -27
- 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/cursor.d.ts +1 -1
- package/dist/terminal/cursor.d.ts.map +1 -1
- package/dist/terminal/cursor.js +36 -1
- package/dist/terminal/cursor.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/docs/embedding.md +7 -0
- package/docs/performance/terminal-engines.md +88 -0
- package/docs/performance.md +120 -0
- 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
|
@@ -53,7 +53,7 @@ interface SendOptions {
|
|
|
53
53
|
// with an explicit format (never both — the alternatives are mutually exclusive).
|
|
54
54
|
// Bytes are written to a short-lived temp file so the adapter attach paths (which
|
|
55
55
|
// are file- or clipboard-based) have something to read; the temp file is removed
|
|
56
|
-
// (best-effort) after the submission is attached.
|
|
56
|
+
// (best-effort) after the submission is attached, or at once when the attach is aborted.
|
|
57
57
|
type ImageInput =
|
|
58
58
|
| { readonly path: string }
|
|
59
59
|
| { readonly data: Uint8Array; readonly format: "png" | "jpeg" | "gif" | "webp" };
|
|
@@ -144,6 +144,24 @@ failing MCP server's retry spinner) or a session whose readiness hook never
|
|
|
144
144
|
arrives (a missing or failed hook bridge) must not starve readiness forever, so
|
|
145
145
|
initial readiness fires no later than a fixed deadline after the first rendered
|
|
146
146
|
frame even when neither a hook nor (on cold start) any composer signal arrives.
|
|
147
|
+
Codex's deadline releases readiness only onto a frame showing a configured
|
|
148
|
+
session's composer outside any blocking dialog. Codex 0.164 paints a boot
|
|
149
|
+
composer before its session is configured and adds the model footer beneath the
|
|
150
|
+
composer once it is; under load its directory-trust gate followed 11 to 31
|
|
151
|
+
seconds after its first frame, so a deadline releasing the boot composer reported
|
|
152
|
+
`ready` before trust was answered and drained the queue toward that gate. A Codex
|
|
153
|
+
deadline that expires before the configured composer paints fires on the first
|
|
154
|
+
frame that shows it (after any blocking dialog clears, as below); work on screen
|
|
155
|
+
does not delay it. A backstop 60 seconds after the first rendered frame, twice
|
|
156
|
+
the longest gate delay measured, releases readiness without that composer, so a
|
|
157
|
+
footer Elwood does not recognize delays readiness but never starves it. Codex's
|
|
158
|
+
deadline is therefore two-stage, and 10 seconds is not its maximum: a gate that
|
|
159
|
+
paints after the backstop can still follow `ready`. When the backstop releases
|
|
160
|
+
readiness while the latest frame shows no configured composer, Codex emits one
|
|
161
|
+
live-only, content-free `initial_ready_backstop` warning (§5.7), so a host can
|
|
162
|
+
tell that readiness from readiness on configured-composer evidence. A backstop
|
|
163
|
+
mark that a blocking dialog deferred until the configured composer painted does
|
|
164
|
+
not warn.
|
|
147
165
|
Subsequent turn readiness comes from
|
|
148
166
|
completion signals such as an unblocked `Stop` hook. A Stop captures the current
|
|
149
167
|
queue-backed caller submission before notifying observers or invoking handlers. If a newer
|
|
@@ -352,7 +370,10 @@ submits the text, BEFORE the text's submitting Enter, so a single call produces
|
|
|
352
370
|
a single agent turn carrying both. An image given as bytes is written to a
|
|
353
371
|
short-lived temp file (the adapter attach paths are file- or clipboard-based);
|
|
354
372
|
Elwood attempts to remove every such temp file after the submission is attached,
|
|
355
|
-
on success or failure (best-effort — see the residual limitations below).
|
|
373
|
+
on success or failure (best-effort — see the residual limitations below). When the
|
|
374
|
+
attach is aborted, as when its session closes, Elwood removes the temp files at once,
|
|
375
|
+
so `stop`, `kill`, and `teardown` resolve with an in-flight attach's temp files gone
|
|
376
|
+
unless that removal fails; the attach then retries it once it unwinds.
|
|
356
377
|
|
|
357
378
|
Inputs are validated and bounded BEFORE any temp file is written or any input
|
|
358
379
|
reaches the composer, and a validation failure rejects the whole call so nothing
|
|
@@ -405,21 +426,38 @@ CLIs (Claude 2.1.215, codex-cli 0.144.6):
|
|
|
405
426
|
is the clipboard contents is accepted by design. When the restore itself fails,
|
|
406
427
|
the attach result is unchanged (still success) but Elwood surfaces a content-free
|
|
407
428
|
`clipboard_restore_failed` warning (no clipboard contents) so the possible loss
|
|
408
|
-
of the user's prior clipboard is diagnosable rather than silent.
|
|
429
|
+
of the user's prior clipboard is diagnosable rather than silent. Codex saves
|
|
430
|
+
each pasted image as a `codex-clipboard-*.png` file directly in its temp
|
|
431
|
+
directory and never removes it. Once a Codex session's CLI has exited, by
|
|
432
|
+
`stop`, `kill`, `teardown`, or on its own, Elwood removes (best-effort) every
|
|
433
|
+
such file the session's transcript recorded as a `local_image` of a user
|
|
434
|
+
message while Elwood watched it, one file at a time, before the session emits
|
|
435
|
+
`terminal:exit` and before that `stop`, `kill`, or `teardown` resolves. It
|
|
436
|
+
removes no other file: not an image the caller named by its own path, not a
|
|
437
|
+
copy the transcript never named, and not a path with a `..` segment, which a
|
|
438
|
+
link could lead out of the temp directory. A copy already gone is not a
|
|
439
|
+
failure. A removal that fails leaves that copy for the OS to reap and does not
|
|
440
|
+
stop the removals after it; when any fails, the session emits one content-free
|
|
441
|
+
`image_copy_removal_failed` warning (§5.7), before `terminal:exit`, carrying the
|
|
442
|
+
first failure's errno token, or `UnknownError` when it has none. When every copy
|
|
443
|
+
was removed or was already gone, there is no warning.
|
|
409
444
|
|
|
410
445
|
Image attachment carries several accepted residual limitations. First, temp-file
|
|
411
|
-
removal
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
446
|
+
removal is best-effort: the primary attach/materialize error is always preserved
|
|
447
|
+
(a cleanup failure never masks it), and a failed removal surfaces no distinct error.
|
|
448
|
+
A removal that fails when the attach is aborted is retried once, when the attach
|
|
449
|
+
unwinds, which `stop`, `kill`, and `teardown` do not wait for; a removal that fails
|
|
450
|
+
as the attach unwinds is not retried. Either leaves the file in the OS temp directory
|
|
451
|
+
for the OS to reap. Second, the
|
|
415
452
|
Codex clipboard lock serializes attachments within a SINGLE Elwood process only;
|
|
416
453
|
two Elwood processes sharing one OS clipboard are not coordinated, so a
|
|
417
454
|
cross-process cross-attach remains possible (callers running concurrent
|
|
418
455
|
Elwood processes that attach Codex images should serialize that themselves).
|
|
419
|
-
Third, session close during an in-flight attach rejects the operation
|
|
420
|
-
the text write,
|
|
421
|
-
|
|
422
|
-
|
|
456
|
+
Third, session close during an in-flight attach rejects the operation, blocks
|
|
457
|
+
the text write, and removes the attach's temp files at once (best-effort, per the
|
|
458
|
+
first limitation), but does not join the attach's clipboard-restore finalizer or its
|
|
459
|
+
retry of a failed removal; on an abrupt teardown those may not complete before
|
|
460
|
+
process exit (clipboard restore is already best-effort).
|
|
423
461
|
Fourth, failed-attach cleanup follows the owned, deferred cleanup rule above.
|
|
424
462
|
The clear uses kill-to-line-start plus kill-to-line-end, but does not run an
|
|
425
463
|
adapter-specific transactional confirm-and-restore
|
|
@@ -431,6 +469,11 @@ metadata: this defeats stray transcript/assistant `[Image #N]` text on
|
|
|
431
469
|
non-composer lines, but a running-turn render that puts a prompt-glyph line
|
|
432
470
|
on-screen at the confirmation moment, or a chip on a wrapped composer
|
|
433
471
|
continuation row, is a known edge the glyph heuristic does not perfectly resolve.
|
|
472
|
+
Sixth, Codex's copy of a pasted image is removed only once a transcript names it,
|
|
473
|
+
which happens when the message is submitted: an image whose attach fails or is
|
|
474
|
+
aborted after its Ctrl+V leaves its copy for the OS to reap. Copies are also
|
|
475
|
+
removed only from Elwood's own temp directory, so a login shell that points Codex
|
|
476
|
+
at another `TMPDIR` leaves them.
|
|
434
477
|
|
|
435
478
|
Turn boundaries MUST be observable even when no completion hook fires. Claude
|
|
436
479
|
does not fire a `Stop` hook when a running turn is interrupted (Escape), so
|
|
@@ -452,8 +495,10 @@ fires the turn-end transition even when the working token was never visible.
|
|
|
452
495
|
Together the sources cover every width. Turn start is a rendered-state signal:
|
|
453
496
|
the on-screen working token where it fits, plus the OSC window-title working
|
|
454
497
|
spinner (C-TURN-05): the braille range on both adapters and Claude's observed
|
|
455
|
-
`◐ `
|
|
456
|
-
|
|
498
|
+
half-circle prefixes, `◐ ` and `◑ `, which Claude 2.1.310 alternates between for the
|
|
499
|
+
whole turn. Every frame of that animation reads as working. This signal is
|
|
500
|
+
width-independent and reveals a running turn even when the footer token is elided; a
|
|
501
|
+
caller `sendMessage`/`sendPrompt` also moves
|
|
457
502
|
the session to `running`. Normal completion comes from the `Stop` hook, and
|
|
458
503
|
interrupts from the working-token edge on wide screens or the end banner
|
|
459
504
|
anywhere. Hook-driven readiness (`Stop`) remains a redundant turn-end source;
|
|
@@ -466,8 +511,13 @@ are suppressed until the composer has stayed quiet and non-blocking (composer
|
|
|
466
511
|
visible, no working token, no blocking dialog) for a SUSTAINED run of consecutive
|
|
467
512
|
frames, not merely one. The replay repaints those footers in bursts separated by
|
|
468
513
|
brief quiet gaps, so a single quiet frame does not prove the replay finished; any
|
|
469
|
-
working or blocking frame during suppression resets the run.
|
|
470
|
-
|
|
514
|
+
working or blocking frame during suppression resets the run. A frame showing the
|
|
515
|
+
CLI's own resume-loading placeholder is not quiet either: Codex 0.164 paints
|
|
516
|
+
`Resuming session…` above a live composer, repaints it, and only then loads the
|
|
517
|
+
conversation under a working title. Once that placeholder has painted and the load's
|
|
518
|
+
working indicator has been seen, the first quiet composer ends suppression, because
|
|
519
|
+
an idle CLI may not repaint again. Once the quiet run is reached, detection behaves
|
|
520
|
+
exactly as it does post-readiness on a cold start.
|
|
471
521
|
Explicit running evidence (a caller submission,
|
|
472
522
|
a hook) releases that suppression IMMEDIATELY — a real turn has begun, so the replay
|
|
473
523
|
is over by definition — and synchronizes the watcher into the running state without
|
|
@@ -547,11 +597,43 @@ type AgentModelOption = {
|
|
|
547
597
|
|
|
548
598
|
`id` is a stable lowercase selector (the Claude option label, such as `haiku`,
|
|
549
599
|
or the Codex model slug, such as `gpt-5.4`). `isCurrent` reflects the model the
|
|
550
|
-
session is using now; `isDefault` reflects the CLI's configured default.
|
|
551
|
-
|
|
600
|
+
session is using now; `isDefault` reflects the CLI's configured default. Codex
|
|
601
|
+
draws a `(default)` marker only on some versions (0.164 marks just the
|
|
602
|
+
`(current)` row), so when none renders, its default is the model a plain `codex`
|
|
603
|
+
launch would run with the `CODEX_HOME` the session's own Codex process runs
|
|
604
|
+
with, as its launch script reports it (§4.2, C-CODEX-24): the `model` of the
|
|
605
|
+
profile that `config.toml`'s root `profile` key selects, else its root `model`
|
|
606
|
+
key. Elwood reads it once per listing, after the picker closes, under the lock
|
|
607
|
+
for that `config.toml` that `setModel` holds through its restore, so an
|
|
608
|
+
in-flight switch on the same file by another session in the same process is
|
|
609
|
+
never reported as the default (the lock is process-local, like the restore it
|
|
610
|
+
guards). A `config.toml` that exists but cannot be read rejects the listing
|
|
611
|
+
with `model_automation_failed`, with `details.path` and `details.code`. Elwood
|
|
612
|
+
reads `config.toml` only as a regular file of at most 1 MiB (1,048,576 bytes), opened without waiting for a writer
|
|
613
|
+
(C-CODEX-25): the file may sit where the agent can replace it, and a FIFO in its
|
|
614
|
+
place would otherwise block the whole process until something wrote to it. A
|
|
615
|
+
directory (`EISDIR`), a FIFO, socket, or device (`EFTYPE`, including a socket
|
|
616
|
+
macOS refuses to open), or a larger file (`EFBIG`) cannot be read. The
|
|
617
|
+
session's own `model`, `profile`, and `configOverrides` launch options are not
|
|
618
|
+
the default. When the config names no model (Codex then runs a built-in default
|
|
619
|
+
it does not identify) or names one the picker does not list, no Codex row is the
|
|
620
|
+
default.
|
|
552
621
|
|
|
553
622
|
Model operations hold an exclusive session-input queue slot for the entire
|
|
554
623
|
open/navigate/apply-or-cancel flow, including waiting for the dialog to clear.
|
|
624
|
+
A dialog has cleared only once no stage of it, complete or partly painted, has
|
|
625
|
+
been the bottom-most region across five readings at least 40 ms apart; any
|
|
626
|
+
reading that shows one restarts the count. Dialog text above a conversation or
|
|
627
|
+
composer row, such as a transcript quoting the picker's title, is not the dialog.
|
|
628
|
+
One frame without the picker is not enough: a blank or half-painted repaint lacks
|
|
629
|
+
it too, and the picker can paint again after it, where a released Enter would
|
|
630
|
+
apply the highlighted model. Absence is counted rather than positive composer
|
|
631
|
+
clearance because model operations also run during a turn, when the composer is
|
|
632
|
+
never clear. A dialog that does not stay gone by the deadline fails the operation
|
|
633
|
+
with `model_automation_failed`. Each reading first renders everything the terminal
|
|
634
|
+
has received, as before a picker key, so a repaint still queued for rendering is
|
|
635
|
+
counted; a reading whose received output cannot be rendered fails the operation
|
|
636
|
+
the same way, since the last frame proves nothing.
|
|
555
637
|
Concurrent model operations and normal submissions cannot interleave writes:
|
|
556
638
|
they are dispatched only after the operation settles. The queue wait and picker
|
|
557
639
|
operation share the supplied `timeoutMs` budget, so an operation still queued at
|
|
@@ -583,9 +665,17 @@ change that may never happen.
|
|
|
583
665
|
Every picker wait and write MUST be gated on the operation's own dialog, not on a
|
|
584
666
|
bare header match: a header alone is untrusted candidate evidence that transcript
|
|
585
667
|
or agent output can satisfy, so navigating or cancelling on it could send keys into
|
|
586
|
-
a running turn, the real composer, or another prompt.
|
|
587
|
-
|
|
588
|
-
|
|
668
|
+
a running turn, the real composer, or another prompt. Every picker key — a
|
|
669
|
+
navigation arrow, the selecting key, a follow-up's answer, listing's Escape, and
|
|
670
|
+
cleanup's Escape — is decided on everything RECEIVED, not the last rendered
|
|
671
|
+
frame: Elwood renders and observes all received PTY output, re-checks the
|
|
672
|
+
operation's own dialog on that frame, and writes before further output is
|
|
673
|
+
delivered, so a prompt already in the PTY buffer never receives a key aimed at
|
|
674
|
+
the picker (C-API-56). When the screen cannot be vouched for, an operation's key
|
|
675
|
+
is withheld and the operation rejects with `model_automation_failed`, and
|
|
676
|
+
cleanup's Escape is withheld; an operation cancelled meanwhile (its deadline, the
|
|
677
|
+
session closing, or caller input) rejects with that cancellation's own error, as
|
|
678
|
+
it does at any other step. A single clear frame does not end cleanup once a
|
|
589
679
|
dialog has been seen, because a repainting picker is briefly unrecognizable.
|
|
590
680
|
When session termination races a Codex `setModel`, the call rejects at once rather
|
|
591
681
|
than waiting out the exit bound, and the exit barrier is consulted on every outcome,
|
|
@@ -605,11 +695,15 @@ the active picker operation: it rejects with `model_automation_failed` and sends
|
|
|
605
695
|
no further navigation or cleanup keys into the human-owned generation. A foreign
|
|
606
696
|
picker hold survives partial repaints and clears only after five consecutive
|
|
607
697
|
positive native-composer observations, never from an empty or unrecognized frame.
|
|
698
|
+
A dialog that survived Elwood's own cleanup clears the same way. Observations
|
|
699
|
+
count at least 40 ms apart, so readings bunched into one instant, or a burst of
|
|
700
|
+
repaints, count once. An idle CLI does not repaint, so the evidence is the same
|
|
701
|
+
completed frame read over time, not a run of new frames.
|
|
608
702
|
Only the bottom-most region of the viewport is a model dialog: dialog text with a
|
|
609
703
|
conversation or composer row below it is transcript content (a reply quoting a
|
|
610
704
|
picker), which Elwood neither cancels nor holds on. Unrelated dialogs, including a
|
|
611
705
|
`PreModelSwitch` hook confirmation, are left for the caller.
|
|
612
|
-
Codex retains its
|
|
706
|
+
Codex retains its configuration transaction lock, but acquires it INSIDE
|
|
613
707
|
the session queue slot: claiming the lock first would let a following submission
|
|
614
708
|
dispatch while the switch waited on another session's transaction, sending under the
|
|
615
709
|
old model. When the
|
|
@@ -629,8 +723,29 @@ configuration lock when its session closes MUST reject promptly with
|
|
|
629
723
|
NOT then apply its switch when the lock frees.
|
|
630
724
|
|
|
631
725
|
`listModels` opens the picker, parses the rendered rows, cancels the picker
|
|
632
|
-
with Escape, and MUST leave the session's model unchanged.
|
|
633
|
-
the
|
|
726
|
+
with Escape, and MUST leave the session's model unchanged. It returns EVERY row
|
|
727
|
+
the picker lists, in picker order, including rows outside a scrolling window:
|
|
728
|
+
Claude shows at most ten rows of a longer list, numbering rows by their absolute
|
|
729
|
+
position, marking a window that starts past row 1 with `↑` and one that ends
|
|
730
|
+
before the last row with `↓`, and counting the rows below it with `… +K models`.
|
|
731
|
+
Elwood reveals the hidden rows by moving the cursor one row at a time with the
|
|
732
|
+
arrow keys, never past either end of the list, each key gated on the operation's
|
|
733
|
+
own live picker and each move confirmed on screen, and merges the windows by row
|
|
734
|
+
number. Arrow keys only move the highlight; the Escape that follows keeps both
|
|
735
|
+
the model and its effort level. A list that fits its window is read without any
|
|
736
|
+
arrow key. While a walk still needs rows (a listing, or `setModel` before its
|
|
737
|
+
target is rendered), the rendered count and row numbers are validated rather
|
|
738
|
+
than trusted: the walk never acts on a frame that marks rows hidden below
|
|
739
|
+
without a positive count, has a row number or list length that is not an exact
|
|
740
|
+
integer, or states a list length other than the first one it read. Claude
|
|
741
|
+
repaints a scrolled window across more than one render, so such a frame is
|
|
742
|
+
waited out; if no frame that adds up renders, or the cursor does not move, the
|
|
743
|
+
walk rejects with `model_automation_failed`, because one timeout bounds the
|
|
744
|
+
whole walk however many rows the picker claims.
|
|
745
|
+
`setModel` selects the requested row through cursor navigation, walking the
|
|
746
|
+
window the same way only until the requested row is rendered, so every id
|
|
747
|
+
`listModels` returns is selectable; an unknown id walks the whole list and the
|
|
748
|
+
rejection lists every row. Elwood itself MUST NOT persist a
|
|
634
749
|
new default model into the user's configuration (§4.5): for Claude it applies
|
|
635
750
|
with the session-only key rather than Enter, and it never selects rows via
|
|
636
751
|
number keys because Claude's number shortcut immediately saves the choice as
|
|
@@ -648,8 +763,14 @@ MUST leave that decision to the human and keep it classified as a blocking
|
|
|
648
763
|
prompt. For Codex, the Codex CLI itself persists the confirmed
|
|
649
764
|
picker selection (model and reasoning effort) into the user's `config.toml` —
|
|
650
765
|
there is no session-only affordance — so Elwood compensates: it snapshots
|
|
651
|
-
`config.toml`
|
|
652
|
-
|
|
766
|
+
the session's `config.toml` (the one in the `CODEX_HOME` its Codex process runs
|
|
767
|
+
with, §4.2) before opening the picker (a `config.toml` that cannot be read, by
|
|
768
|
+
the rule above, fails `setModel` with `model_automation_failed` before the picker
|
|
769
|
+
opens, because Codex would persist its selection into a file Elwood could not
|
|
770
|
+
restore) and, after the switch is confirmed, rereads it the same way (one that
|
|
771
|
+
cannot be read then rejects the call with `model_automation_failed`,
|
|
772
|
+
`details.path`, and `details.code`, or, once the call has settled, puts that
|
|
773
|
+
code in the warning's `raw`) and restores the prior contents if and only if the file differs solely in the
|
|
653
774
|
root-level `model` and `model_reasoning_effort` keys the picker writes
|
|
654
775
|
(compare-and-swap on the untouched remainder). The restore never affects the
|
|
655
776
|
live session, which keeps the switched model because Codex reads its config
|
|
@@ -661,9 +782,19 @@ revokes restoration authority: Elwood leaves any resulting config change in plac
|
|
|
661
782
|
and emits that same warning with a content-free takeover explanation. It must
|
|
662
783
|
not restore its snapshot over a model choice the human may have just made. Elwood confirms the CLI's own default
|
|
663
784
|
reasoning level for the chosen Codex model. The whole snapshot/apply/restore
|
|
664
|
-
transaction holds a
|
|
665
|
-
the SAME Elwood process cannot interleave and leave the
|
|
666
|
-
|
|
785
|
+
transaction holds a lock for that `config.toml` so two concurrent `setModel`
|
|
786
|
+
switches on one file in the SAME Elwood process cannot interleave and leave the
|
|
787
|
+
wrong default. The lock is per file, the one the session's launch reported
|
|
788
|
+
(C-CODEX-24): every path that names the same file (a symlinked home or config,
|
|
789
|
+
another letter case, or another Unicode form) shares one lock, even before Codex
|
|
790
|
+
creates the file: a dangling symlink shares its target's lock. Lock keys ignore
|
|
791
|
+
Unicode normalization and fold letter case fully, as APFS does (`ß` and `ss` are
|
|
792
|
+
one name), for every path, existing or not, so a key never changes when its file
|
|
793
|
+
appears. Sessions whose config paths have different keys never wait on each
|
|
794
|
+
other; paths that differ only in case share a key on every volume, so on a
|
|
795
|
+
case-sensitive volume two such files share a lock, which only serializes them. A config
|
|
796
|
+
path that cannot be resolved (a symlink loop, say) rejects the operation with
|
|
797
|
+
`model_automation_failed`, `details.path`, and `details.errno`. This lock is process-local: two SEPARATE Elwood processes sharing one `config.toml` can
|
|
667
798
|
still interleave their transactions. That cross-process race is an accepted
|
|
668
799
|
current limitation (the compare-and-swap still refuses to clobber an unrelated
|
|
669
800
|
edit; the residual risk is a transiently-persisted picker model surviving as the
|
|
@@ -880,7 +1011,8 @@ terminal object between Node and the browser.
|
|
|
880
1011
|
`stop` attempts graceful process termination while preserving Elwood metadata and
|
|
881
1012
|
loop definitions for resume. It should wait for process exit for a bounded grace period, then escalate
|
|
882
1013
|
to force termination so callers do not get a terminal status while the process is
|
|
883
|
-
still indefinitely alive. `
|
|
1014
|
+
still indefinitely alive. A Codex `stop` or `teardown` called during or right after a
|
|
1015
|
+
`Stop` hook first gives Codex up to 2 seconds to record that turn (§5.7). `kill` force-terminates the process and permanently
|
|
884
1016
|
clears its loop definitions. `teardown` removes
|
|
885
1017
|
Elwood-owned state for the session and must not remove Claude-owned transcripts,
|
|
886
1018
|
auth, or project/user settings that Elwood did not create.
|
|
@@ -894,19 +1026,114 @@ signaling the exited PTY or waiting for another exit notification. Terminal exit
|
|
|
894
1026
|
terminal status, and natural-exit reaping occur once even if PTY callbacks reenter.
|
|
895
1027
|
|
|
896
1028
|
`stop`, `kill`, and `teardown` MUST reap the full PTY process tree, not only the
|
|
897
|
-
PTY leader
|
|
1029
|
+
PTY leader, except Codex's shared app-server daemon, its updater, and what they
|
|
1030
|
+
started, which every Codex on the same `CODEX_HOME` shares (the walk below spares them). The adapter CLI spawns helper subprocesses that are descendants of
|
|
898
1031
|
the PTY leader — notably the per-session hook bridge (`node hook-bridge.mjs`) the
|
|
899
1032
|
CLI runs on each hook — and signaling only the leader can orphan them, leaking a
|
|
900
|
-
process tree that accumulates across launch/quit cycles. Elwood
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
leader's exit — which a parent-pid walk cannot.
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
still
|
|
909
|
-
|
|
1033
|
+
process tree that accumulates across launch/quit cycles. Elwood reaps them in two
|
|
1034
|
+
parts. A descendant that stays in the leader's process group MUST be reaped by
|
|
1035
|
+
SIGKILLing that group: node-pty starts the leader as its own session leader, so such
|
|
1036
|
+
a descendant is reached by a group SIGKILL even after it has been reparented to PID 1
|
|
1037
|
+
by the leader's exit — which a parent-pid walk cannot. A descendant that moved into
|
|
1038
|
+
a process group of its own, as each hook command does, is outside that kill and is
|
|
1039
|
+
reaped by the detached-descendant walk below. The group reap MUST run for `stop()`,
|
|
1040
|
+
`kill()`, and `teardown()`, including when the leader has already exited on its own
|
|
1041
|
+
(an already-terminal session still reaps the group). A dead or empty group is a
|
|
1042
|
+
no-op. If the detached sweep confirms the entire leader group gone (SIGSTOP
|
|
1043
|
+
returns ESRCH, or a bounded fresh read after EPERM shows no live group member),
|
|
1044
|
+
that fact is terminal for this session: no later PTY or group signal may reuse its
|
|
1045
|
+
numeric id, including the final reap and subsequent shutdown attempts. This never
|
|
1046
|
+
clears an earlier unresolved descendant-sweep failure. An exit callback arriving
|
|
1047
|
+
during a detached sweep leaves the group reap to that sweep’s shutdown owner,
|
|
1048
|
+
after its pending confirmation settles. A live or failed confirming read still
|
|
1049
|
+
permits the normal final reap and preserves any unresolved sweep failure. A `teardown()` that rejects in-flight control-queue operations MUST still
|
|
1050
|
+
complete: rejecting a pending `sendMessage`/`compact`/model operation does not
|
|
1051
|
+
skip the group reap or the rest of teardown.
|
|
1052
|
+
|
|
1053
|
+
Native process-table scans and daemon-path probes share a process-wide limit of
|
|
1054
|
+
two in-flight subprocesses. Admission is FIFO and its wait consumes the read’s
|
|
1055
|
+
existing timeout; an expired queued read starts no subprocess and reports ETIMEDOUT.
|
|
1056
|
+
A native slot is retained until that subprocess runner settles, including failure.
|
|
1057
|
+
Per-session observation requests still coalesce before admission; a short consumer’s
|
|
1058
|
+
timeout cannot cancel the shared read needed by another consumer.
|
|
1059
|
+
|
|
1060
|
+
Not every descendant stays in that group. Both CLIs start each hook command with
|
|
1061
|
+
`setsid()`, in its own session and process group, and Codex starts MCP servers in
|
|
1062
|
+
their own process group. While the leader is alive its parent-pid link is the only
|
|
1063
|
+
thing that ties such a descendant to the session. So whenever Elwood SIGKILLs a
|
|
1064
|
+
live leader — `kill()`, `teardown()`, and the escalation after a `stop()` or
|
|
1065
|
+
startup-cleanup SIGTERM the leader did not exit on — it MUST first reap the
|
|
1066
|
+
leader's detached descendants: SIGSTOP the leader's process group so it cannot
|
|
1067
|
+
start another hook, walk the host process table by parent pid from the leader,
|
|
1068
|
+
SIGSTOP each process group outside the leader's that holds a live descendant,
|
|
1069
|
+
repeat the walk until a read converges (below), then SIGKILL each group it
|
|
1070
|
+
stopped, deepest first, but one it resumes as holding Codex's daemon (below).
|
|
1071
|
+
|
|
1072
|
+
Only descendants of the leader are signaled: every member of such a group descends
|
|
1073
|
+
from the leader, and the host's own group is never signaled. One descendant is never
|
|
1074
|
+
killed: Codex's managed app-server daemon. The walk may stop its group, but then resumes
|
|
1075
|
+
it. Codex 0.158 and later can start, for its
|
|
1076
|
+
`CODEX_HOME`, an app-server daemon and its updater loop from the copy of the CLI it
|
|
1077
|
+
installs under `$CODEX_HOME/packages/app-server-daemon/`, each in a session of its own
|
|
1078
|
+
and a child of the TUI that started it until that TUI exits. The daemon belongs to the
|
|
1079
|
+
`CODEX_HOME`, shared by every Codex using it, the user's own included, so the walk MUST
|
|
1080
|
+
NOT descend into such a process: one whose binary is named `codex`, that leads its own
|
|
1081
|
+
process group, whose parent is a process named `codex` or PID 1, and whose path as `ps`
|
|
1082
|
+
shows it (`comm`, its `argv[0]`, which Codex sets to the full path) has a
|
|
1083
|
+
`/packages/app-server-daemon/` directory in it. Neither it nor anything it started is
|
|
1084
|
+
killed: the TUI forks the daemon as a `codex` group leader and then `exec`s it, so a group
|
|
1085
|
+
the walk stopped is resumed (SIGCONT), not killed, when the latest read shows it holding
|
|
1086
|
+
the daemon, or a process not shown stopped that could still become it; a SIGCONT
|
|
1087
|
+
refused for any reason but the group being gone fails the walk. These tests read what
|
|
1088
|
+
`ps` reports, which a process can set for itself, so a descendant that imitates the
|
|
1089
|
+
daemon is spared like it: the walk reaps a tree that stays in reach, as a descendant
|
|
1090
|
+
whose own parent exits before the walk already does not (below). Each read also lists
|
|
1091
|
+
every process's short name, which `ps` prints raw, so a name with a newline in it could
|
|
1092
|
+
forge a row: a read with any line that is not one whole row, or one process twice, is
|
|
1093
|
+
not used. A group id read from the table can be reused once that group is gone, a
|
|
1094
|
+
SIGSTOP takes effect only once it is delivered, and a table read sees each process at
|
|
1095
|
+
its own moment, so Elwood
|
|
1096
|
+
relies only on processes it holds: ones that read stopped, inside a group Elwood
|
|
1097
|
+
stopped, in a read and in the read before it. A group is stopped only once a held
|
|
1098
|
+
process is a parent of one of its members: a stopped parent cannot reap its exited
|
|
1099
|
+
child, so the group keeps its id until the signal. The walk succeeds only on a
|
|
1100
|
+
read that converges: it shows the leader itself live, leaves no live group
|
|
1101
|
+
unreached, and shows every live process in every group Elwood stopped, the
|
|
1102
|
+
leader's included, as held, so none of them can have started a process the read
|
|
1103
|
+
missed.
|
|
1104
|
+
A process forked while a group's SIGSTOP is being sent can miss it, so whenever a
|
|
1105
|
+
read shows a live process in a group Elwood stopped that is not stopped, Elwood
|
|
1106
|
+
MUST send that group SIGSTOP again. With no hook in flight that takes two reads,
|
|
1107
|
+
and each level of nesting, or a process that missed its group's SIGSTOP, adds two
|
|
1108
|
+
more. If the leader's group cannot be stopped, no other group is signaled and the
|
|
1109
|
+
walk fails, unless the leader had already exited: its group is gone, or holds only
|
|
1110
|
+
unreaped zombies, which a fresh read must show. The walk
|
|
1111
|
+
reaches only descendants still linked to the leader by parent pid: a process whose
|
|
1112
|
+
own parent exited earlier has been reparented to PID 1 and is not traced. The
|
|
1113
|
+
walk's process-table reads share one ten-second deadline, and the walk runs
|
|
1114
|
+
before the leader's existing SIGKILL wait, which keeps its own bound. Once the
|
|
1115
|
+
leader's exit has been observed, its pid may belong to another process: Elwood
|
|
1116
|
+
then sends the leader no further SIGSTOP or SIGKILL and stops no further group. A
|
|
1117
|
+
group it has already stopped is still killed, or resumed as holding the daemon,
|
|
1118
|
+
because a stopped process cannot exit and so keeps its id. (The process-group reap above still runs.) If the walk
|
|
1119
|
+
cannot complete — the table cannot be read, no read converges by the deadline,
|
|
1120
|
+
the leader's group cannot be stopped, a live group cannot be stopped or killed, a
|
|
1121
|
+
group held as the daemon's cannot be resumed, or the leader's exit is observed before
|
|
1122
|
+
a read converges —
|
|
1123
|
+
Elwood still SIGKILLs the leader (unless it has exited) and reaps its group, then
|
|
1124
|
+
rejects because the tree could not be confirmed reaped: `stop()` and `kill()` with
|
|
1125
|
+
`termination_failed`, `teardown()` with `teardown_failed`, either naming the
|
|
1126
|
+
reason. Once the leader is gone that cannot be retried, so every later `stop()`,
|
|
1127
|
+
`kill()`, or `teardown()` of the session rejects the same way instead of reporting
|
|
1128
|
+
success. A leader that exits on SIGTERM within the graceful window is not walked,
|
|
1129
|
+
so the `stop()` leaves running any detached descendant the CLI's own shutdown does
|
|
1130
|
+
not end. Claude ends an in-flight hook itself. Codex 0.164 does not end the shell it
|
|
1131
|
+
starts in a session of its own a few seconds after launch to snapshot the user's
|
|
1132
|
+
shell environment: a `stop()` while that shell sources a slow profile leaves the
|
|
1133
|
+
shell, and whatever the profile started, running under PID 1. (A human's `/quit`
|
|
1134
|
+
then leaves the profile's processes running too.) Nor is a leader that exits on its
|
|
1135
|
+
own before Elwood signals it walked: nothing links its detached descendants to the
|
|
1136
|
+
session any more.
|
|
910
1137
|
|
|
911
1138
|
### Automated input and pending decisions
|
|
912
1139
|
|
package/prd/05-api/5.4-events.md
CHANGED
|
@@ -131,14 +131,44 @@ session-owned coordinator gives each observed dialog generation its own
|
|
|
131
131
|
reservation and bounded five-second deadline, beginning at first candidate
|
|
132
132
|
observation. Partial first paints receive that interval without an immediate
|
|
133
133
|
`blocked` transition. Numbered and cursor layouts share the same safety checks:
|
|
134
|
-
before every number,
|
|
135
|
-
the same generation, native header, and exact affirmative choice must
|
|
136
|
-
valid. Cursor selection movement and completion of native option rows do not
|
|
134
|
+
before every number, selection, confirmation, and retry, the session must still
|
|
135
|
+
be live and the same generation, native header, and exact affirmative choice must
|
|
136
|
+
remain valid. Cursor selection movement and completion of native option rows do not
|
|
137
137
|
alone replace a generation. Clearing and reappearance do. An older completion
|
|
138
138
|
cannot release or settle a newer generation's reservation.
|
|
139
139
|
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
A numbered answer's first write types its number. A frame that still shows the
|
|
141
|
+
gate does not prove the CLI ignored that write: under load a CLI can take it and
|
|
142
|
+
paint its next screen after the retry interval, and the number typed again would
|
|
143
|
+
be submitted from its composer as a user message. Retries therefore never type
|
|
144
|
+
the number on that evidence alone. Codex's answer retries, at bounded intervals,
|
|
145
|
+
as Enter alone while the rendered caret is on the affirmative: on the gate Enter confirms that option, and
|
|
146
|
+
on Codex's empty composer it submits nothing. Otherwise (any Claude layout, or a
|
|
147
|
+
caret on another option) the number is typed again only after a frame rendered
|
|
148
|
+
from output received after the last write still shows the gate. Once Elwood has
|
|
149
|
+
started writing a gate's number, every later attempt at that gate retries the
|
|
150
|
+
same way, even when that write or a retry was rejected (a rejected write may
|
|
151
|
+
still have reached the CLI), until another complete dialog replaces the gate and
|
|
152
|
+
the CLI draws it afresh. A cursor layout never receives a relative arrow or a bare
|
|
153
|
+
Enter: Elwood selects the affirmative by its absolute row (Home, then one Down
|
|
154
|
+
per option above it), repeats that selection while the rendered cursor is
|
|
155
|
+
elsewhere, and sends Enter only in the same write as the selection, once the
|
|
156
|
+
rendered cursor is on the affirmative. A delayed, duplicated, or lost key, or a
|
|
157
|
+
CLI that resets its own selection after Elwood read the frame, therefore cannot
|
|
158
|
+
confirm another option.
|
|
159
|
+
Raw input through `sendKeys`, `terminal.sendInput`, or `xterm.input` while a
|
|
160
|
+
trust dialog generation is on screen hands that generation to the caller. Its
|
|
161
|
+
attempt is cancelled before the caller's keys are written, and Elwood writes
|
|
162
|
+
nothing more to it, even if it repaints or outlives its five-second deadline
|
|
163
|
+
(it then falls back to `blocked` as below). The frame Elwood reads can trail
|
|
164
|
+
the CLI, so a retry typed after the caller's keys could land in the composer
|
|
165
|
+
and submit them. A later dialog generation is answered as usual. The same raw
|
|
166
|
+
input ends a running Codex update-skip attempt before the caller's keys are
|
|
167
|
+
written, so none of its retries follow them. A Codex update prompt that is on
|
|
168
|
+
screen, or that left the screen without positive native composer clearance,
|
|
169
|
+
then belongs to the caller: Elwood writes no skip to it, even when its frame
|
|
170
|
+
loses and regains the prompt, until positive native composer clearance. An
|
|
171
|
+
update prompt appearing after that clearance is handled as usual.
|
|
142
172
|
An unambiguous changed versioned Codex update banner, a bannered replacement with
|
|
143
173
|
changed or removed safe-option bindings and a valid safe choice, or a fresh unambiguous
|
|
144
174
|
banner with a valid current safe choice after update eligibility was revoked,
|
|
@@ -153,8 +183,16 @@ that a key was written or that the prompt was answered.
|
|
|
153
183
|
|
|
154
184
|
With a live frame reader, `startup_prompt` is emitted only after a fulfilled
|
|
155
185
|
confirmation and a verified native composer or distinct native successor gate.
|
|
156
|
-
An unknown replacement is not successful clearance.
|
|
157
|
-
|
|
186
|
+
An unknown replacement is not successful clearance. Nor does a frame without the
|
|
187
|
+
gate end a fulfilled confirmation: once the confirming write fulfills, blank,
|
|
188
|
+
banner-only, or other dialog-free frames (the CLI erased the answered dialog and
|
|
189
|
+
is painting its next screen) neither settle nor cancel the attempt, which writes
|
|
190
|
+
nothing while the gate is absent. Later verified clearance reports it exactly
|
|
191
|
+
once; the same gate's return resumes answering within its remaining budget; a
|
|
192
|
+
changed gate, a complete off-allowlist gate (C-ATTN-03), expiry, and closing
|
|
193
|
+
cancel it without a report.
|
|
194
|
+
Lost revalidation before the confirmation fulfills cancels that attempt quietly,
|
|
195
|
+
retaining input ownership while clearance is unverified.
|
|
158
196
|
Stop, kill, teardown, startup cleanup, and PTY exit cancel all trust attempts and
|
|
159
197
|
timers before disposal; late completions emit neither success nor warnings.
|
|
160
198
|
Only an actual rejected PTY write in a still-live matching attempt produces the
|
|
@@ -162,9 +200,19 @@ content-free `startup_prompt_write_failed` warning.
|
|
|
162
200
|
|
|
163
201
|
If automation cannot safely clear the gate within five seconds, the live session
|
|
164
202
|
MUST enter recoverable `blocked` status and emit the existing human `attention`
|
|
165
|
-
activity, even without another terminal frame.
|
|
166
|
-
|
|
167
|
-
|
|
203
|
+
activity, even without another terminal frame. Those five seconds count only time
|
|
204
|
+
the gate is on the current rendered frame. A frame without it — the CLI erased an
|
|
205
|
+
answered dialog and is still painting its next screen — pauses the deadline, and
|
|
206
|
+
the same gate's return resumes the remainder rather than a fresh interval, so the
|
|
207
|
+
budget is five seconds of cumulative visible time. A gate that leaves the frame
|
|
208
|
+
before those five seconds are spent and stays absent until verified clearance
|
|
209
|
+
therefore never produces `blocked` or `attention`, however long the CLI then
|
|
210
|
+
takes to paint its composer: no prompt is left for a human to answer. A gate that
|
|
211
|
+
returns spends only what remains and falls back once its visible time reaches
|
|
212
|
+
five seconds. Its input hold is unchanged and lasts until verified clearance. Unsupported
|
|
213
|
+
layouts and exhausted attempts use this same fallback; they never cause blind
|
|
214
|
+
input or false write warnings. An unchanged redraw cannot restart an expired
|
|
215
|
+
attempt indefinitely.
|
|
168
216
|
A newly valid layout or a new dialog generation re-arms bounded safe automation;
|
|
169
217
|
once fallback has occurred, the public block remains until verified clearance.
|
|
170
218
|
Raw `sendKeys` remains available for human recovery, while queued persona,
|
|
@@ -201,6 +249,18 @@ An exact-shaped native working row remains ambiguous even with a visible input
|
|
|
201
249
|
cursor: Codex permits typing while running, and its title spinner is configurable.
|
|
202
250
|
Such a row conservatively retains the hold, including an identical transcript quotation.
|
|
203
251
|
|
|
252
|
+
Claude's verified composer is the empty `❯` row between its two rules, plus native
|
|
253
|
+
chrome: the permission-mode footer as the very next row, or the `Claude Code v…`
|
|
254
|
+
version banner. The footer proves the composer in every permission mode the CLI
|
|
255
|
+
offers (manual, plan, accept edits, auto, don't ask, bypass permissions), with or
|
|
256
|
+
without vim's `-- INSERT --` prefix, the transient `← for agents` and `? for
|
|
257
|
+
shortcuts` hints, and the right-aligned token count or effort level. The banner
|
|
258
|
+
MUST NOT be required, because it scrolls out of the viewport in a long session.
|
|
259
|
+
Trust clearance, foreign model-picker release (C-API-55) and empty-input
|
|
260
|
+
observation (C-API-56) share this evidence. A footer quoted anywhere other than
|
|
261
|
+
directly under the composer's bottom rule is transcript, not chrome, and a footer
|
|
262
|
+
truncated on a narrow terminal does not prove the composer.
|
|
263
|
+
|
|
204
264
|
An unrecognized gate behind a recognized native header prefix is hold-only
|
|
205
265
|
under every `autotrust` value. The recognized prefixes are exactly the
|
|
206
266
|
line-leading `Do you`, `Quick safety`, `Is this`, `Load this`, `Trust the`, `Trust this`,
|
|
@@ -224,6 +284,13 @@ NOT a general guarantee: a gate whose header starts with any other words, whose
|
|
|
224
284
|
footer is not yet painted or not one of those rows, or that carries other rows
|
|
225
285
|
below its options is outside this grammar and is not held.
|
|
226
286
|
|
|
287
|
+
Codex 0.164 draws two more footers when hook trust is not bypassed:
|
|
288
|
+
`enter continue · esc back` on its folder-access gate, whose decline then reads
|
|
289
|
+
`Back to Agent Command Center`, and `enter confirm · esc skip` on `Hooks need review`.
|
|
290
|
+
Neither is one of the rows above. Each ends a dialog only under the allowlisted gate
|
|
291
|
+
that draws it, with that gate's header, explanation, and options, so under any other
|
|
292
|
+
header or options, including conversation text, it makes no frame a trust gate.
|
|
293
|
+
|
|
227
294
|
Two prompts are exceptions to the `autotrust` gate. Codex hook trust
|
|
228
295
|
(`hook_trust`) is always enabled because the session requires its hook bridge.
|
|
229
296
|
Codex's hook-trust bypass is session-wide: it trusts ALL configured hooks,
|
|
@@ -33,7 +33,9 @@ declare function startCodex(options: StartCodexOptions): Promise<CodexSessionApi
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Elwood sets the PTY working directory and also passes Codex `--cd <cwd>` so
|
|
36
|
-
Codex's own session state and the shell's current directory agree.
|
|
36
|
+
Codex's own session state and the shell's current directory agree. `cwd` MUST
|
|
37
|
+
already be a directory, with the same `codex_start_failed` rejection, the same
|
|
38
|
+
check after preflight, and the same guarantees as `startClaude` (§5.1, C-API-61).
|
|
37
39
|
|
|
38
40
|
`reasoningEffort`, when set, is forwarded as the Codex `-c
|
|
39
41
|
model_reasoning_effort=<value>` config override so the session starts at the
|
|
@@ -26,7 +26,10 @@ Because the default state store is project-local, callers that resume from a
|
|
|
26
26
|
different process working directory must pass the original `cwd` or the explicit
|
|
27
27
|
`stateDir` used at start time. Calling `resumeCodex({ elwoodSessionId })`
|
|
28
28
|
without `cwd` or `stateDir` uses the current process working directory to
|
|
29
|
-
discover the project-local state store.
|
|
29
|
+
discover the project-local state store. Codex relaunches in the record's `cwd`
|
|
30
|
+
even when a `cwd` is given, since a given `cwd` only locates the state store.
|
|
31
|
+
The record's `cwd` must still be a directory, checked before and after
|
|
32
|
+
preflight as on start, and `details.cwd` names it (§5.1, C-API-61).
|
|
30
33
|
|
|
31
34
|
`resumeCodex` must verify that the persisted Elwood session record belongs to
|
|
32
35
|
the Codex adapter before launching. Passing a Claude session ID to `resumeCodex`
|