@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/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`
|
|
@@ -53,10 +53,14 @@ type ElwoodWarningEvent =
|
|
|
53
53
|
// timeout/`errno`); never terminal transcripts, prompts, tokens, or secrets.
|
|
54
54
|
// `errorCode: "update_active"` means no local update command ran: another
|
|
55
55
|
// updater still held the adapter's lease after the bounded wait, or its
|
|
56
|
-
// surviving process group still does (§9.2).
|
|
56
|
+
// surviving process group still does (§9.2). `errorCode: "login_shell_failed"`
|
|
57
|
+
// means the user's login shell failed before the update command ran (§9.2).
|
|
57
58
|
readonly installedVersion: string;
|
|
58
59
|
readonly errorCode: string;
|
|
59
60
|
readonly raw: string;
|
|
61
|
+
// The update command's exit status, 128+n if a signal killed it; absent when
|
|
62
|
+
// it reported none (a timeout, an overflow, a login-shell failure, contention).
|
|
63
|
+
readonly exitStatus?: number;
|
|
60
64
|
}
|
|
61
65
|
| {
|
|
62
66
|
readonly elwoodSessionId: string;
|
|
@@ -238,6 +242,32 @@ type ElwoodWarningEvent =
|
|
|
238
242
|
readonly message: string;
|
|
239
243
|
readonly raw: string;
|
|
240
244
|
}
|
|
245
|
+
| {
|
|
246
|
+
// Codex-only: once the CLI exited, Elwood could not remove a copy Codex saved of
|
|
247
|
+
// an image pasted into it (§5.3), so the copy is left for the OS to reap. At most
|
|
248
|
+
// one per session, before `terminal:exit`. Content-free: the first failure's errno
|
|
249
|
+
// token (such as `EPERM`), else `UnknownError`; never a path or image data.
|
|
250
|
+
readonly elwoodSessionId: string;
|
|
251
|
+
readonly agent: "codex";
|
|
252
|
+
readonly source: "lifecycle";
|
|
253
|
+
readonly code: "image_copy_removal_failed";
|
|
254
|
+
readonly severity: "warning";
|
|
255
|
+
readonly message: string;
|
|
256
|
+
readonly errorCode: string;
|
|
257
|
+
readonly raw: string;
|
|
258
|
+
}
|
|
259
|
+
| {
|
|
260
|
+
// Codex-only: `stop()`/`teardown()` saw no record of the turn its `Stop` hook
|
|
261
|
+
// ended within the full 2 seconds, and shutdown proceeds, so that turn may be
|
|
262
|
+
// lost. Emitted before the signal. A fixed, content-free message and raw token only.
|
|
263
|
+
readonly elwoodSessionId: string;
|
|
264
|
+
readonly agent: "codex";
|
|
265
|
+
readonly source: "lifecycle";
|
|
266
|
+
readonly code: "turn_commit_wait_expired";
|
|
267
|
+
readonly severity: "warning";
|
|
268
|
+
readonly message: string;
|
|
269
|
+
readonly raw: string;
|
|
270
|
+
}
|
|
241
271
|
| {
|
|
242
272
|
readonly elwoodSessionId: string;
|
|
243
273
|
readonly agent: "claude" | "codex";
|
|
@@ -289,6 +319,18 @@ type ElwoodWarningEvent =
|
|
|
289
319
|
readonly message: string;
|
|
290
320
|
readonly raw: string;
|
|
291
321
|
}
|
|
322
|
+
| {
|
|
323
|
+
// The initial-readiness backstop released readiness while the latest
|
|
324
|
+
// frame showed no configured composer (the model footer), for example after
|
|
325
|
+
// a footer layout change (§5.3, C-API-28). Content-free.
|
|
326
|
+
readonly elwoodSessionId: string;
|
|
327
|
+
readonly agent: "codex";
|
|
328
|
+
readonly source: "lifecycle";
|
|
329
|
+
readonly code: "initial_ready_backstop";
|
|
330
|
+
readonly severity: "warning";
|
|
331
|
+
readonly message: string;
|
|
332
|
+
readonly raw: string;
|
|
333
|
+
}
|
|
292
334
|
};
|
|
293
335
|
```
|
|
294
336
|
|
|
@@ -321,6 +363,14 @@ away cannot regain authority. Every assistant-marker row ends recognition,
|
|
|
321
363
|
including one that resembles a status spinner: recognition fails toward fewer
|
|
322
364
|
warnings, never forged ones.
|
|
323
365
|
|
|
366
|
+
Codex 0.154 and later collapse these failures to a count: `⚠ 1 MCP startup issue ·
|
|
367
|
+
ctrl + t for details` in 0.154, and a `⚠ N warning(s) · f2 to view` badge at the end
|
|
368
|
+
of the composer footer in 0.164. A count names no server and no recovery command, so
|
|
369
|
+
it is not a warning source, and Elwood never opens the CLI's detail view (in 0.164, a
|
|
370
|
+
transcript overlay that also renders the conversation). On these versions a session
|
|
371
|
+
therefore emits no MCP startup warning, and the 0.164 badge reads as part of the
|
|
372
|
+
idle composer.
|
|
373
|
+
|
|
324
374
|
A startup prompt Elwood auto-answers is marked settled and emits its
|
|
325
375
|
`startup_prompt` activity ONLY after its PTY `sendInput` write actually fulfills.
|
|
326
376
|
For trust prompts, live revalidation additionally confirms the native dialog has
|
|
@@ -369,8 +419,13 @@ budget — so aggregate terminal read work is watcher-bounded, not per-retire.
|
|
|
369
419
|
Second, each individual drain call stops at a small wall-clock slice, so it
|
|
370
420
|
returns to the event loop promptly instead of monopolizing it grinding a
|
|
371
421
|
hundreds-of-MiB backlog; whatever is still unread when the shared budget or the
|
|
372
|
-
slice is spent is accounted as a content-free drop.
|
|
373
|
-
|
|
422
|
+
slice is spent is accounted as a content-free drop. The slice can stop a call's
|
|
423
|
+
read of a transcript only after its first unread chunk, for up to 16 transcripts a
|
|
424
|
+
call (what one live scan reads): a host too loaded to begin the drain within its
|
|
425
|
+
slice still reads what each of them committed since the last poll, up to one chunk,
|
|
426
|
+
and any bytes past that chunk may still be dropped as `"unread_backlog"`. A record
|
|
427
|
+
the bound cuts off is part of that drop, never reported as `"unparseable"`.
|
|
428
|
+
Termination and retirement therefore always complete in bounded-latency work — capped by both the shared
|
|
374
429
|
budget and the per-call slice — rather than an unbounded synchronous drain.
|
|
375
430
|
|
|
376
431
|
When the first hook to carry a transcript path is a turn-boundary hook, Elwood
|
|
@@ -388,7 +443,14 @@ than the recovery bound therefore never silently loses all of its committed
|
|
|
388
443
|
activity. The `transcript_read_error`
|
|
389
444
|
warning is emitted when a transcript filesystem read is contained (a
|
|
390
445
|
rotation/removal/permission race): the watcher never crashes the host, but also
|
|
391
|
-
does not swallow it silently.
|
|
446
|
+
does not swallow it silently. A transcript that has not been created yet is not
|
|
447
|
+
a read race: Claude names its transcript in `SessionStart` before its first turn
|
|
448
|
+
writes the file, so until Elwood has seen the file exist, a missing file is
|
|
449
|
+
waited on silently. Once the file has existed, its removal still warns, and any
|
|
450
|
+
other read failure warns whether or not the file was ever seen. Both adapters'
|
|
451
|
+
transcripts follow these rules. A removed Codex transcript is therefore not read
|
|
452
|
+
as a truncated, empty one: each poll warns while it is missing, as does the final
|
|
453
|
+
flush if it is still missing. The `transcript_poll_stopped` warning is emitted
|
|
392
454
|
when a programming error escapes the periodic transcript poll OR the final flush
|
|
393
455
|
at PTY exit: the watcher stops itself and surfaces a bounded reason rather than
|
|
394
456
|
letting the failure become an unhandled rejection or abort the exit path. A
|
|
@@ -504,7 +566,8 @@ that exceeds it is discarded through its next newline (so a pathological no-newl
|
|
|
504
566
|
line can neither exhaust memory nor cause quadratic re-concatenation) and its bytes
|
|
505
567
|
are accounted as an `"oversized"` drop. At teardown — the final flush at PTY exit —
|
|
506
568
|
the reader drains to end only within a bounded chunk budget and a small wall-clock
|
|
507
|
-
slice
|
|
569
|
+
slice, which can end the drain only after its first unread chunk; whatever is still
|
|
570
|
+
unread when that bound is spent, including a record it cuts off, is accounted as an
|
|
508
571
|
`"unread_backlog"` drop rather than read in a single unbounded synchronous loop, so
|
|
509
572
|
the flush returns to the event loop promptly. Codex data loss is surfaced through
|
|
510
573
|
the SAME content-free `transcript_records_dropped` warning as Claude's (now
|
|
@@ -560,4 +623,23 @@ status. Parent applications should not receive delayed transcript activity after
|
|
|
560
623
|
the session has already emitted `terminal:exit`, `exited`, `stopped`, or
|
|
561
624
|
`killed`.
|
|
562
625
|
|
|
626
|
+
Codex runs the `Stop` hook before it records the turn's completion
|
|
627
|
+
(`task_complete`) in its transcript, and Elwood reports `ready` from that hook. If
|
|
628
|
+
Codex is signaled after the hook returns but before it writes that record, it exits
|
|
629
|
+
without the record, and the resumed conversation then ends as interrupted. So once a
|
|
630
|
+
`Stop` hook with a `transcript_path` arrives, `stop()` and `teardown()` give Codex a
|
|
631
|
+
bounded time to record the turn before signaling the process, including when a hook
|
|
632
|
+
observer, hook handler, or `ready` listener calls them. The wait ends at the first of:
|
|
633
|
+
a transcript record of that turn's end (`task_complete`, `turn_complete`,
|
|
634
|
+
`turn_aborted`, or `turn_failed` carrying the hook's `turn_id`); a hook result that
|
|
635
|
+
blocks the stop, since the turn then continues; the CLI's exit; or 2 seconds. After 2
|
|
636
|
+
seconds shutdown proceeds, and a turn Codex has still not recorded can be lost; it is
|
|
637
|
+
not waited for again. The session first emits one `turn_commit_wait_expired` warning
|
|
638
|
+
(with its `activity`), even when `stop()` and `teardown()` overlap, so a host can tell
|
|
639
|
+
that stop from an ordinary one. The warning states only that Elwood saw no record in
|
|
640
|
+
time. Both calls still reject queued input and pause loops at once.
|
|
641
|
+
`kill()` never waits. With no such turn pending, shutdown starts in the same tick as
|
|
642
|
+
the call. A CLI that exits on its own during the wait reports `exited`, because Elwood
|
|
643
|
+
did not signal it (C-LIFE-13).
|
|
644
|
+
|
|
563
645
|
Native question snapshots and answering are shared controls; see [§5.10](5.10-questions.md).
|
|
@@ -65,7 +65,7 @@ after `Stop` never clears an installed signal — so the adapter-neutral turn ru
|
|
|
65
65
|
reads the normalized signal, never raw provider hook field names. Once `ready` is
|
|
66
66
|
observed, the turn ends the instant the transcript-collected assistant text CONTAINS
|
|
67
67
|
that expected text, so it waits exactly as long as the transcript needs. When no completeness signal is available for a turn — a pure-tool
|
|
68
|
-
turn, or an empty/null `last_assistant_message`
|
|
68
|
+
turn, or an empty/null `last_assistant_message` — the turn falls
|
|
69
69
|
back to a bounded quiet-window settle after `ready` (no new content for a short
|
|
70
70
|
window). When a NON-EMPTY expected text IS present but never appears in the
|
|
71
71
|
transcript within `catchUpMs` of `ready`, the turn does NOT fall back to the quiet
|
|
@@ -133,6 +133,37 @@ collection. They refine causal serialization rather than authenticate caller-own
|
|
|
133
133
|
configuration or unrelated host processes; Claude transcript activity carries no `turnId`, so for Claude the
|
|
134
134
|
serialized-slot boundary is the sole isolation guarantee (which is why releasing the
|
|
135
135
|
slot on the real agent boundary, not on consumer cancellation, is load-bearing).
|
|
136
|
+
|
|
137
|
+
**Rejected turn.** When Claude rejects a turn, the turn fails with `turn_failed` (§10):
|
|
138
|
+
`send` rejects and `stream` throws after yielding any events it already collected. The
|
|
139
|
+
evidence is a `StopFailure` hook (§6.1), which Claude fires instead of `Stop` when, for
|
|
140
|
+
example, the selected model does not exist. The hook counts only for the turn whose
|
|
141
|
+
own submission it rejects: the turn must already have observed its own
|
|
142
|
+
`UserPromptSubmit`, whose prompt is the submitted text as pasted, without the control
|
|
143
|
+
characters §5.3 removes, and when both hooks carry `prompt_id` the two must match. A
|
|
144
|
+
`StopFailure` that arrives before the turn's own submission hook, or that names
|
|
145
|
+
another `prompt_id`, belongs to an earlier turn whose hook arrived late and is
|
|
146
|
+
ignored. The error message is the bounded diagnostic of §6.1, never assistant text,
|
|
147
|
+
and `details.agentError` carries the hook's `error` name when one is present. When Codex
|
|
148
|
+
rejects a turn, it fires no `Stop` hook at all. Its evidence is the committed transcript's
|
|
149
|
+
`event_msg` `task_complete` record whose `error` is an object (§7A), and that record ends
|
|
150
|
+
the turn instead of `Stop`. The record counts only when its `turn_id` is the one the
|
|
151
|
+
turn's own `UserPromptSubmit` reported, so a record from another turn is ignored, and a
|
|
152
|
+
`task_complete` whose `error` is absent or `null` is not a rejection. The error message is
|
|
153
|
+
the record's `error.message`, bounded like the §6.1 diagnostic (2,000 characters). When that
|
|
154
|
+
message is absent or blank, the error message is a generic rejection, which names the
|
|
155
|
+
error kind when one is usable (`Codex rejected the turn: <kind>`) and otherwise is
|
|
156
|
+
`Codex rejected the turn.`
|
|
157
|
+
`details.agentError` is the `error.codex_error_info` kind: its string value (for example
|
|
158
|
+
`other`), or the single key of its object form (for example `http_connection_failed`).
|
|
159
|
+
A rejection is a consumer failure like any other: the serialized slot is still held
|
|
160
|
+
until the real `ready` or terminal boundary and its transcript drain, and acceptance
|
|
161
|
+
recovery never replays a rejected prompt. Only adapter failure evidence fails a turn;
|
|
162
|
+
an empty reply, a `Stop` with an empty `last_assistant_message`, and a pure-tool
|
|
163
|
+
turn still succeed. Rejection evidence that arrives after the turn has already
|
|
164
|
+
settled does not reopen it. The raw session API does not interpret rejection: it
|
|
165
|
+
emits the `StopFailure` `hook` event and its hook `activity`, or the Codex
|
|
166
|
+
`task_complete` `codex:transcript` event and its transcript `activity`, as before.
|
|
136
167
|
Because a turn has no default timeout, its buffered state is BOUNDED: the oracle
|
|
137
168
|
matches against a rolling window of recent assistant text (not the whole turn, and
|
|
138
169
|
capped even when the Stop hook's expected text is itself huge), and a turn whose
|
|
@@ -40,6 +40,8 @@ input and fail open until first-class types are added. Elwood should add an
|
|
|
40
40
|
unknown-but-safe event path before promising forward-compatible hook handling.
|
|
41
41
|
|
|
42
42
|
`StopFailure` identifies a rejected Claude turn even when diagnostic fields drift.
|
|
43
|
+
Ergonomic `send`/`stream` turns and headless CLI runs fail such a turn with
|
|
44
|
+
`turn_failed` (§5.8, §12A.2).
|
|
43
45
|
After validating the common hook envelope, ingress MUST admit missing or arbitrarily
|
|
44
46
|
shaped `error`, `error_details`, and `last_assistant_message` fields. Their public
|
|
45
47
|
TypeScript types are optional `unknown`; consumers must narrow them before use.
|
|
@@ -89,6 +89,11 @@ should read the committed live transcript data with one bounded per-pass scan
|
|
|
89
89
|
reserved for PTY exit) so parent applications receive transcript-derived turn
|
|
90
90
|
activity before the ready transition whenever Codex has already written it.
|
|
91
91
|
|
|
92
|
+
A turn Codex rejects (for example an unknown model) fires no `Stop`. Its only
|
|
93
|
+
evidence is the committed transcript's `event_msg` `task_complete` record whose
|
|
94
|
+
`error` is an object, tagged with the turn's `turn_id`. For ergonomic turns that
|
|
95
|
+
record is the turn's boundary instead of `Stop` (§5.8).
|
|
96
|
+
|
|
92
97
|
### 7A.4 Non-Hook Transcript Activity
|
|
93
98
|
|
|
94
99
|
Current Codex hooks do not cover every TUI-visible activity. Reasoning/status
|
package/prd/08-state.md
CHANGED
|
@@ -14,10 +14,52 @@ spellings address the same session store. When Elwood initializes the default
|
|
|
14
14
|
project-local state directory, it should create `.elwood/.gitignore` when that
|
|
15
15
|
file does not already exist. Elwood MUST NOT overwrite an existing gitignore
|
|
16
16
|
file and MUST NOT create gitignore files in caller-provided custom state
|
|
17
|
-
directories unless a future explicit option asks it to.
|
|
17
|
+
directories unless a future explicit option asks it to. The default ignore file is
|
|
18
|
+
fully written before installation, which must preserve a concurrently created
|
|
19
|
+
file. Failed installation must not leave an empty or partial default ignore. A complete
|
|
20
|
+
published ignore is retained if later installation cleanup or directory syncing
|
|
21
|
+
fails, since another start may already rely on it. Existing entries must be
|
|
22
|
+
regular files, never symlinks, and their directory is synced before setup accepts them. Successful syncs
|
|
23
|
+
may be reused for up to 32 unchanged file/parent observations per process; changed
|
|
24
|
+
observations and failed syncs are never retained. This does not cache safety checks.
|
|
25
|
+
The default ignore’s parent path must also pass the owner, mode-bit, sticky-bit,
|
|
26
|
+
and private-primary-group lookup checks used for CLI workspaces (§12A.5), including
|
|
27
|
+
link targets. These checks prevent replacement by other users; they do not inspect
|
|
28
|
+
ACLs or isolate another process running as the same user or root.
|
|
18
29
|
The default `.elwood/` directory and generated `.elwood/.gitignore` should be
|
|
19
30
|
readable by normal local tooling, while session-specific subdirectories remain
|
|
20
31
|
private.
|
|
32
|
+
A state directory is made only while the session's `cwd` exists, and `cwd`
|
|
33
|
+
itself is never made. One at or under `cwd`, the default `.elwood/` or a
|
|
34
|
+
caller-provided `stateDir`, is made only below it, one directory at a time,
|
|
35
|
+
however either path is spelled (in another letter case on a case-insensitive
|
|
36
|
+
volume, or through a symlink). A caller-provided `stateDir` elsewhere is
|
|
37
|
+
created with its missing parents, and `cwd` is checked again once it, its
|
|
38
|
+
`sessions` directory, and the new session's directory are made: if `cwd` was
|
|
39
|
+
removed meanwhile, every directory that setup made is removed again, except one
|
|
40
|
+
another start has put its session directory in, and the start fails, with the
|
|
41
|
+
`cleanupErrorCode` of any directory that could not be removed. A start that
|
|
42
|
+
finds a directory removed under it by such a start makes it again while its own
|
|
43
|
+
`cwd` exists. The `sessions` directory, each session
|
|
44
|
+
directory, and every state file are made only inside their existing parent: a
|
|
45
|
+
missing parent fails the write with `ENOENT`. So a removed worktree, or a
|
|
46
|
+
removed state directory, is never recreated by a start, a resume, or a running
|
|
47
|
+
session's later writes. A start fails instead, before its agent is spawned, and
|
|
48
|
+
so does a write whose state directory is gone, as when it was in the removed
|
|
49
|
+
worktree; a running session whose state directory is elsewhere keeps writing
|
|
50
|
+
there (C-STATE-14). If state preparation fails, its empty owned scaffolding is removed.
|
|
51
|
+
The default shared state root and `sessions` directory are retained: another setup,
|
|
52
|
+
including one without a session ID yet, may already rely on them. Only the failed
|
|
53
|
+
attempt's empty named session directory is removed there. A complete published
|
|
54
|
+
default ignore is shared configuration and is never rolled back by that attempt.
|
|
55
|
+
Custom-state empty scaffolding remains eligible for removal. Cleanup attempts every
|
|
56
|
+
eligible directory and preserves the primary setup failure with its first cleanup
|
|
57
|
+
code, including inside typed error details.
|
|
58
|
+
|
|
59
|
+
Custom rollback preserves entries whose parent lookup crosses a foreign-owned or
|
|
60
|
+
non-sticky shared writable ancestor, using the existing mode-bit, private-group and
|
|
61
|
+
sticky-directory policy. Root-owned sticky `/tmp` remains eligible. These bounded
|
|
62
|
+
observations provide no same-user/root isolation or ACL audit.
|
|
21
63
|
|
|
22
64
|
Before creating or changing state, Elwood MUST reject a symlink at the state
|
|
23
65
|
root, sessions directory, or session directory, and reject user-owned symlink
|
|
@@ -43,12 +85,22 @@ reused; the socket path is a per-launch runtime value, embedded only in the gene
|
|
|
43
85
|
private bridge script and never in the session record, so a
|
|
44
86
|
recorded socket path can never be trusted. `teardown` removes the whole socket
|
|
45
87
|
home (every launch's socket) along with the session directory, so no per-launch
|
|
46
|
-
socket can leak undiscoverably across restart/resume cycles.
|
|
88
|
+
socket can leak undiscoverably across restart/resume cycles. Each Codex launch also
|
|
89
|
+
writes its `CODEX_HOME` report (§4.2) into the socket home, named after that
|
|
90
|
+
launch's socket file, so a failed first start leaves nothing in the session
|
|
91
|
+
directory. The report is removed when its launch's PTY exits, a failed start
|
|
92
|
+
included, and teardown removes any that remain with the home. A launch that ends
|
|
93
|
+
without teardown — `stop`, `kill`, the agent exiting, or a failed start — removes
|
|
94
|
+
its own socket file and then the socket home if that left it empty, so a session
|
|
95
|
+
that is never torn down leaves nothing in the OS temp dir; a home that still holds
|
|
96
|
+
another launch's socket is kept, and the session's next start or resume
|
|
97
|
+
recreates the home. Across separate Elwood
|
|
47
98
|
processes, running two live sessions with the same full identity (`stateDir`,
|
|
48
99
|
adapter, and session id) is unsupported: the processes share files and socket
|
|
49
100
|
homes without a cross-process ownership protocol. Within one process, overlapping
|
|
50
101
|
resume and cleanup follow the successor protocol below. A failed start removes
|
|
51
|
-
only its own socket file, preserving any
|
|
102
|
+
only its own socket file (and the home only once it is empty), preserving any
|
|
103
|
+
overlapping launch. `stateDir`
|
|
52
104
|
length MUST NOT constrain whether a session can start.
|
|
53
105
|
|
|
54
106
|
Within one Elwood process, a validated resume attempt revokes the prior launch's
|
|
@@ -64,8 +116,10 @@ committed successor keeps its state, while a failed successor permits the predec
|
|
|
64
116
|
to finish the requested cleanup before its shutdown promise resolves. A pending
|
|
65
117
|
successor does not activate loop timers. Successful activation rereads the latest
|
|
66
118
|
durable loop definitions and revokes prior scheduling in the same synchronous commit,
|
|
67
|
-
so a successful predecessor cancellation or creation is preserved.
|
|
68
|
-
|
|
119
|
+
so a successful predecessor cancellation or creation is preserved. Activation prunes
|
|
120
|
+
loops that expired since the launch read them as part of the startup publication. An
|
|
121
|
+
activation read or prune failure stops the built launch before ownership rolls back,
|
|
122
|
+
and rollback restores that prune. If resume fails,
|
|
69
123
|
ownership returns to the prior
|
|
70
124
|
viable launch only when no newer reservation or launch has replaced that attempt.
|
|
71
125
|
A failed overlapping launch therefore preserves the original live launch's cleanup
|
|
@@ -78,7 +132,8 @@ settings instead use fresh per-launch filenames permanently bound to that launch
|
|
|
78
132
|
PTY. Pending or committed successors never redirect a predecessor's hook policy. A failed
|
|
79
133
|
attempt restores each prior file only while it still owns the reservation and the
|
|
80
134
|
file still contains that attempt's exact published bytes. A newer predecessor
|
|
81
|
-
record update
|
|
135
|
+
record or loop update, even one whose bytes match the attempt's, or a newer
|
|
136
|
+
generation is preserved. If a predecessor updates a file
|
|
82
137
|
between two pending-launch writes, that external version becomes the rollback
|
|
83
138
|
baseline for the later write. Pending-launch hook record writes participate in the
|
|
84
139
|
same transaction. Superseded or failed generations cannot publish metadata.
|
|
@@ -155,7 +210,8 @@ core state must not become a transcript store.
|
|
|
155
210
|
|
|
156
211
|
### 8.4 Cleanup
|
|
157
212
|
|
|
158
|
-
Runtime files needed for resume/debugging are kept by default after `stop`.
|
|
213
|
+
Runtime files needed for resume/debugging are kept by default after `stop`. The
|
|
214
|
+
socket home is not among them: `stop` removes it once it is empty (§8.1).
|
|
159
215
|
Loop definitions are likewise kept after `stop`, unexpected exit, or process
|
|
160
216
|
failure. `kill` permanently removes all loop definitions while preserving the
|
|
161
217
|
ordinary session record; a later resume has no loops.
|