@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reap-tree.js","sourceRoot":"","sources":["../../../src/runtime/shutdown/reap-tree.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reap-tree.js","sourceRoot":"","sources":["../../../src/runtime/shutdown/reap-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAuB,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAEhB,gBAAgB,EAChB,2BAA2B,EAC3B,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAI/B;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IACP,SAAS,CAAS;IAClB,GAAG,CAAiB;IAC7B,IAAI,GAAG,KAAK,CAAC;IACb,aAAa,GAAG,CAAC,CAAC;IAC1B,wFAAwF;IAChF,eAAe,GAAG,KAAK,CAAC;IACf,kBAAkB,GAAG,IAAI,wBAAwB,EAAE,CAAC;IACrE,uFAAuF;IAC/E,eAAe,CAA2B;IAElD,YAAY,SAAiB,EAAE,MAAsB,oBAAoB,EAAE;QACzE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,uFAAuF;QACvF,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;YAAE,OAAO;QACxE,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,sFAAsF;IACtF,eAAe,CAAC,IAAgB;QAC9B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,kCAAkC,EAAE,CAAC;YAC1C,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QACD,IAAI,EAAE,CAAC;QACP,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;;OAMG;IACH,kCAAkC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;YAAE,MAAM,IAAI,CAAC,eAAe,CAAC;IACrE,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,aAAa,CAAC,YAA2B;QAC7C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO;QAC/C,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE;gBACrD,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,eAAe;oBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC5D,OAAO,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE;oBACjF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC9B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO;YAClC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,MAAM,OAAO,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds the processes of Codex's managed app-server daemon install in a process-table
|
|
3
|
+
* read: the one thing under a session the detached walk never follows or kills (PRD §5.3
|
|
4
|
+
* and §9.4, C-LIFE-10). Codex 0.158 and later can start, for its `CODEX_HOME`, an
|
|
5
|
+
* app-server daemon and its updater loop from the copy of the CLI it installs under
|
|
6
|
+
* `$CODEX_HOME/packages/app-server-daemon/`, each in a session of its own and a child of
|
|
7
|
+
* the TUI that started it until that TUI exits: the shape of a hook. But every Codex on
|
|
8
|
+
* that home talks to the daemon, the user's own included, so neither process nor anything
|
|
9
|
+
* it started is the session's to end (docs/cli-behavior.md). The walk sees only the
|
|
10
|
+
* `shared` mark set here, and the groups `groupIdsToResume` names.
|
|
11
|
+
*
|
|
12
|
+
* Codex starts both by their full paths, which macOS `ps` shows as `comm` (`argv[0]`).
|
|
13
|
+
* Each `ps` the host spawns while a session ends costs about as much as its table read,
|
|
14
|
+
* so `comm` is read only for the processes the caller's walk can reach that could be
|
|
15
|
+
* one, each by a `ps` of its own (given several pids, `ps` reads every process): one of
|
|
16
|
+
* `roots` or a descendant, named `codex` (`ucomm`), leading its own group, and a child of
|
|
17
|
+
* a process named `codex` or of PID 1. A walk with none under its roots spawns no `ps`.
|
|
18
|
+
* At most `PATH_READS_AT_ONCE` run at once, and none starts past the read's deadline: the
|
|
19
|
+
* read then fails, as one that timed out does.
|
|
20
|
+
*
|
|
21
|
+
* Every test here is on what `ps` reports, which a process can set for itself, so one that
|
|
22
|
+
* imitates the daemon is spared as one. That gives a descendant nothing it lacks: one whose
|
|
23
|
+
* parent exits before the walk is out of its reach already (PRD §5.3).
|
|
24
|
+
*/
|
|
25
|
+
import { type ProcessEntry, type PsRunner } from "./process-table.ts";
|
|
26
|
+
/**
|
|
27
|
+
* The most path reads, each a `ps` of its own, that one table read runs at once. A real
|
|
28
|
+
* session shows at most two candidates, the daemon and its updater, so both are read in
|
|
29
|
+
* one round, with room to spare; past that, each further `ps` at once costs a loaded host
|
|
30
|
+
* about another table read just as a fleet's shutdown loads it most (docs/cli-behavior.md).
|
|
31
|
+
*/
|
|
32
|
+
export declare const PATH_READS_AT_ONCE = 4;
|
|
33
|
+
/**
|
|
34
|
+
* Where a walk's reads mark the daemon install: among `roots` and their descendants. The
|
|
35
|
+
* walk passes the set it adds each group it stops to, so a process it stopped is read
|
|
36
|
+
* itself even after its parent's exit leaves it under PID 1. `known` holds each process a
|
|
37
|
+
* read found to be one, by pid, parent, and group, so no later read of the walk probes it
|
|
38
|
+
* again. Only those are remembered, so a stale entry can only spare a process, never
|
|
39
|
+
* expose one, and a process that `exec`s the daemon is found: until a read finds it, a
|
|
40
|
+
* candidate is read again on every read.
|
|
41
|
+
*/
|
|
42
|
+
export type DaemonScope = {
|
|
43
|
+
readonly roots: ReadonlySet<number>;
|
|
44
|
+
readonly known: Set<string>;
|
|
45
|
+
};
|
|
46
|
+
/** A fresh scope for one walk from `roots`, which it reads as they stand at each read. */
|
|
47
|
+
export declare function daemonScope(roots: ReadonlySet<number>): DaemonScope;
|
|
48
|
+
/**
|
|
49
|
+
* The shared table read, with each process of Codex's daemon install in `scope` marked
|
|
50
|
+
* `shared`, all within `timeoutMs`. Without a scope, nothing is marked.
|
|
51
|
+
*/
|
|
52
|
+
export declare function listProcessTableMarkingDaemon(timeoutMs: number, scope?: DaemonScope, list?: (timeoutMs: number) => Promise<readonly ProcessEntry[]>, run?: PsRunner): Promise<readonly ProcessEntry[]>;
|
|
53
|
+
/**
|
|
54
|
+
* The groups `table` shows holding a process marked `shared`, or a process that read did
|
|
55
|
+
* not show stopped with the shape of one: it could still `exec` the daemon, as a stopped
|
|
56
|
+
* process cannot. A walk resumes, rather than kills, any of these it stopped.
|
|
57
|
+
*/
|
|
58
|
+
export declare function groupIdsToResume(table: readonly ProcessEntry[]): ReadonlySet<number>;
|
|
59
|
+
//# sourceMappingURL=shared-daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-daemon.d.ts","sourceRoot":"","sources":["../../../src/runtime/shutdown/shared-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,QAAQ,EAGd,MAAM,oBAAoB,CAAC;AAO5B;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAE/F,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,CAEnE;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,WAAoC,EAC3C,IAAI,GAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,YAAY,EAAE,CAA0B,EACtF,GAAG,GAAE,QAAkB,GACtB,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAKlC;AAyBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAMpF"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds the processes of Codex's managed app-server daemon install in a process-table
|
|
3
|
+
* read: the one thing under a session the detached walk never follows or kills (PRD §5.3
|
|
4
|
+
* and §9.4, C-LIFE-10). Codex 0.158 and later can start, for its `CODEX_HOME`, an
|
|
5
|
+
* app-server daemon and its updater loop from the copy of the CLI it installs under
|
|
6
|
+
* `$CODEX_HOME/packages/app-server-daemon/`, each in a session of its own and a child of
|
|
7
|
+
* the TUI that started it until that TUI exits: the shape of a hook. But every Codex on
|
|
8
|
+
* that home talks to the daemon, the user's own included, so neither process nor anything
|
|
9
|
+
* it started is the session's to end (docs/cli-behavior.md). The walk sees only the
|
|
10
|
+
* `shared` mark set here, and the groups `groupIdsToResume` names.
|
|
11
|
+
*
|
|
12
|
+
* Codex starts both by their full paths, which macOS `ps` shows as `comm` (`argv[0]`).
|
|
13
|
+
* Each `ps` the host spawns while a session ends costs about as much as its table read,
|
|
14
|
+
* so `comm` is read only for the processes the caller's walk can reach that could be
|
|
15
|
+
* one, each by a `ps` of its own (given several pids, `ps` reads every process): one of
|
|
16
|
+
* `roots` or a descendant, named `codex` (`ucomm`), leading its own group, and a child of
|
|
17
|
+
* a process named `codex` or of PID 1. A walk with none under its roots spawns no `ps`.
|
|
18
|
+
* At most `PATH_READS_AT_ONCE` run at once, and none starts past the read's deadline: the
|
|
19
|
+
* read then fails, as one that timed out does.
|
|
20
|
+
*
|
|
21
|
+
* Every test here is on what `ps` reports, which a process can set for itself, so one that
|
|
22
|
+
* imitates the daemon is spared as one. That gives a descendant nothing it lacks: one whose
|
|
23
|
+
* parent exits before the walk is out of its reach already (PRD §5.3).
|
|
24
|
+
*/
|
|
25
|
+
import { childrenByParent, listProcessTableShared, PS_PATH, psRunOptions, runFile, } from "./process-table.js";
|
|
26
|
+
import { processReadTimeout } from "./read-timeout.js";
|
|
27
|
+
/** The directory Codex installs its daemon's copy of the CLI in, inside `CODEX_HOME`. */
|
|
28
|
+
const DAEMON_INSTALL_DIR = "/packages/app-server-daemon/";
|
|
29
|
+
/** The short name of the Codex binary, the TUI's and the daemon's alike. */
|
|
30
|
+
const CODEX = "codex";
|
|
31
|
+
/**
|
|
32
|
+
* The most path reads, each a `ps` of its own, that one table read runs at once. A real
|
|
33
|
+
* session shows at most two candidates, the daemon and its updater, so both are read in
|
|
34
|
+
* one round, with room to spare; past that, each further `ps` at once costs a loaded host
|
|
35
|
+
* about another table read just as a fleet's shutdown loads it most (docs/cli-behavior.md).
|
|
36
|
+
*/
|
|
37
|
+
export const PATH_READS_AT_ONCE = 4;
|
|
38
|
+
/** A fresh scope for one walk from `roots`, which it reads as they stand at each read. */
|
|
39
|
+
export function daemonScope(roots) {
|
|
40
|
+
return { roots, known: new Set() };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The shared table read, with each process of Codex's daemon install in `scope` marked
|
|
44
|
+
* `shared`, all within `timeoutMs`. Without a scope, nothing is marked.
|
|
45
|
+
*/
|
|
46
|
+
export async function listProcessTableMarkingDaemon(timeoutMs, scope = daemonScope(new Set()), list = listProcessTableShared, run = runFile) {
|
|
47
|
+
const deadline = performance.now() + timeoutMs;
|
|
48
|
+
const table = await list(timeoutMs);
|
|
49
|
+
if (scope.roots.size === 0)
|
|
50
|
+
return table;
|
|
51
|
+
return markShared(table, scope, (pid) => pathOf(pid, run, deadline));
|
|
52
|
+
}
|
|
53
|
+
/** `table`, each install process in `scope` marked; one exited by its read is none. */
|
|
54
|
+
async function markShared(table, { roots, known }, readPath) {
|
|
55
|
+
// A root a read missed is taken for a `codex`, as the TUI was: only a path read confirms.
|
|
56
|
+
const names = new Map([...[...roots].map((root) => [root, CODEX]), ...nameMap(table)]);
|
|
57
|
+
const candidates = reachable(table, roots).filter((row) => couldBeFromInstall(row, names));
|
|
58
|
+
const key = (row) => `${row.pid} ${row.ppid} ${row.pgid}`;
|
|
59
|
+
const unknown = candidates.filter((row) => !known.has(key(row)));
|
|
60
|
+
const probe = async (row) => ({ row, path: await readPath(row.pid) });
|
|
61
|
+
for (let next = 0; next < unknown.length; next += PATH_READS_AT_ONCE) {
|
|
62
|
+
const reads = unknown.slice(next, next + PATH_READS_AT_ONCE).map(probe);
|
|
63
|
+
for (const { row, path } of await Promise.all(reads)) {
|
|
64
|
+
if (path.includes(DAEMON_INSTALL_DIR))
|
|
65
|
+
known.add(key(row));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const found = new Set(candidates.filter((row) => known.has(key(row))).map((row) => row.pid));
|
|
69
|
+
if (found.size === 0)
|
|
70
|
+
return table;
|
|
71
|
+
return table.map((row) => (found.has(row.pid) ? { ...row, shared: true } : row));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The groups `table` shows holding a process marked `shared`, or a process that read did
|
|
75
|
+
* not show stopped with the shape of one: it could still `exec` the daemon, as a stopped
|
|
76
|
+
* process cannot. A walk resumes, rather than kills, any of these it stopped.
|
|
77
|
+
*/
|
|
78
|
+
export function groupIdsToResume(table) {
|
|
79
|
+
const names = nameMap(table);
|
|
80
|
+
const rows = table.filter((row) => row.shared || (!row.stopped && couldBeFromInstall(row, names)));
|
|
81
|
+
return new Set(rows.map((row) => row.pgid));
|
|
82
|
+
}
|
|
83
|
+
/** Each process's short name, by pid, as `couldBeFromInstall` takes them. */
|
|
84
|
+
function nameMap(table) {
|
|
85
|
+
return new Map(table.map((row) => [row.pid, row.name]));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Whether `row` has the shape of the daemon or its updater in a table read; only its path
|
|
89
|
+
* can confirm it.
|
|
90
|
+
*/
|
|
91
|
+
function couldBeFromInstall(row, names) {
|
|
92
|
+
const live = !row.zombie;
|
|
93
|
+
const runsCodex = row.name === CODEX;
|
|
94
|
+
const leadsOwnGroup = row.pgid === row.pid;
|
|
95
|
+
const parentIsCodexOrInit = row.ppid === 1 || names.get(row.ppid) === CODEX;
|
|
96
|
+
return live && runsCodex && leadsOwnGroup && parentIsCodexOrInit;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The rows of `roots` and of every process descending from one, by parent pid. A root
|
|
100
|
+
* missing from the read still parents its children, as in `detachedDescendantGroups`.
|
|
101
|
+
*/
|
|
102
|
+
function reachable(table, roots) {
|
|
103
|
+
const children = childrenByParent(table);
|
|
104
|
+
const found = new Map();
|
|
105
|
+
const pending = table.filter((row) => roots.has(row.pid) || roots.has(row.ppid));
|
|
106
|
+
for (let row = pending.pop(); row !== undefined; row = pending.pop()) {
|
|
107
|
+
if (found.has(row.pid))
|
|
108
|
+
continue;
|
|
109
|
+
found.set(row.pid, row);
|
|
110
|
+
pending.push(...(children.get(row.pid) ?? []));
|
|
111
|
+
}
|
|
112
|
+
return [...found.values()];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The `comm` of `pid`, or `""` once it has exited. Past `deadline`, it fails as a table
|
|
116
|
+
* read that timed out does (`ETIMEDOUT`), whether it never started or ran out of time.
|
|
117
|
+
*/
|
|
118
|
+
function pathOf(pid, run, deadline) {
|
|
119
|
+
const remainingMs = Math.ceil(deadline - performance.now());
|
|
120
|
+
if (remainingMs <= 0)
|
|
121
|
+
return Promise.reject(timedOut("before its path reads"));
|
|
122
|
+
return run(PS_PATH, ["-o", "comm=", "-p", String(pid)], psRunOptions(remainingMs)).then((result) => result.stdout.trim(), (error) => {
|
|
123
|
+
if (isTargetPidMissing(error))
|
|
124
|
+
return "";
|
|
125
|
+
if (performance.now() >= deadline)
|
|
126
|
+
throw timedOut("in a path read");
|
|
127
|
+
throw error;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function timedOut(where) {
|
|
131
|
+
return processReadTimeout(`process table read timed out ${where}`);
|
|
132
|
+
}
|
|
133
|
+
/** `ps -p` found no such process: it exits 1 and prints nothing. */
|
|
134
|
+
function isTargetPidMissing(error) {
|
|
135
|
+
if (typeof error !== "object" || error === null)
|
|
136
|
+
return false;
|
|
137
|
+
return "code" in error && error.code === 1 && "stdout" in error && error.stdout === "";
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=shared-daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-daemon.js","sourceRoot":"","sources":["../../../src/runtime/shutdown/shared-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
* §8.4 teardown (typed `teardown_failed`, §10) and `runCleanupSteps` is the §9.4
|
|
4
4
|
* runtime-cleanup primitive every exit path shares (its caller wraps the failure).
|
|
5
5
|
*/
|
|
6
|
+
import { type ElwoodErrorName } from "../../core/errors.ts";
|
|
7
|
+
/** One failed teardown step: its message, plus its code and details when it was typed. */
|
|
8
|
+
export type TeardownFailure = {
|
|
9
|
+
readonly message: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly message: string;
|
|
12
|
+
readonly code: ElwoodErrorName;
|
|
13
|
+
readonly details: Readonly<Record<string, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Runs every teardown step, then rejects with `teardown_failed` if any failed. Its
|
|
17
|
+
* `details.causes` lists each failure's message, and `details.failures` keeps each
|
|
18
|
+
* typed failure's code and details too, so a reap failure's errno or process group
|
|
19
|
+
* survives teardown (§10).
|
|
20
|
+
*/
|
|
6
21
|
export declare function runTeardownSteps(steps: readonly (() => Promise<void> | void)[]): Promise<void>;
|
|
7
22
|
/**
|
|
8
23
|
* Runs every runtime-cleanup step even if one rejects, so a failing bridge stop still
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teardown.d.ts","sourceRoot":"","sources":["../../../src/runtime/shutdown/teardown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"teardown.d.ts","sourceRoot":"","sources":["../../../src/runtime/shutdown/teardown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAe,KAAK,eAAe,EAAwB,MAAM,sBAAsB,CAAC;AAE/F,0FAA0F;AAC1F,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5B;IACE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrD,CAAC;AAiBN;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAC7C,OAAO,CAAC,IAAI,CAAC,CAQf;AAQD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAC7C,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* §8.4 teardown (typed `teardown_failed`, §10) and `runCleanupSteps` is the §9.4
|
|
4
4
|
* runtime-cleanup primitive every exit path shares (its caller wraps the failure).
|
|
5
5
|
*/
|
|
6
|
-
import { elwoodError } from "../../core/errors.js";
|
|
7
|
-
/** Runs every step even if earlier ones reject, returning
|
|
6
|
+
import { ElwoodError, elwoodError, toError } from "../../core/errors.js";
|
|
7
|
+
/** Runs every step even if earlier ones reject, returning what each failed step threw. */
|
|
8
8
|
async function attemptAllSteps(steps) {
|
|
9
9
|
const failures = [];
|
|
10
10
|
for (const step of steps) {
|
|
@@ -12,19 +12,32 @@ async function attemptAllSteps(steps) {
|
|
|
12
12
|
await step();
|
|
13
13
|
}
|
|
14
14
|
catch (error) {
|
|
15
|
-
failures.push(error
|
|
15
|
+
failures.push(error);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
return failures;
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Runs every teardown step, then rejects with `teardown_failed` if any failed. Its
|
|
22
|
+
* `details.causes` lists each failure's message, and `details.failures` keeps each
|
|
23
|
+
* typed failure's code and details too, so a reap failure's errno or process group
|
|
24
|
+
* survives teardown (§10).
|
|
25
|
+
*/
|
|
20
26
|
export async function runTeardownSteps(steps) {
|
|
21
|
-
const failures = await attemptAllSteps(steps);
|
|
27
|
+
const failures = (await attemptAllSteps(steps)).map(teardownFailure);
|
|
22
28
|
if (failures.length > 0) {
|
|
23
29
|
throw elwoodError("teardown_failed", "Could not fully tear down Elwood session.", {
|
|
24
|
-
causes: failures,
|
|
30
|
+
causes: failures.map((failure) => failure.message),
|
|
31
|
+
failures,
|
|
25
32
|
});
|
|
26
33
|
}
|
|
27
34
|
}
|
|
35
|
+
function teardownFailure(error) {
|
|
36
|
+
const { message } = toError(error);
|
|
37
|
+
if (!(error instanceof ElwoodError))
|
|
38
|
+
return { message };
|
|
39
|
+
return { message, code: error.code, details: error.details };
|
|
40
|
+
}
|
|
28
41
|
/**
|
|
29
42
|
* Runs every runtime-cleanup step even if one rejects, so a failing bridge stop still
|
|
30
43
|
* disposes the terminal and finishes the transcript watcher — no resource is leaked
|
|
@@ -33,7 +46,7 @@ export async function runTeardownSteps(steps) {
|
|
|
33
46
|
* typed error (`termination_failed`/`teardown_failed`) so no new public code appears.
|
|
34
47
|
*/
|
|
35
48
|
export async function runCleanupSteps(steps) {
|
|
36
|
-
const failures = await attemptAllSteps(steps);
|
|
49
|
+
const failures = (await attemptAllSteps(steps)).map((error) => toError(error).message);
|
|
37
50
|
if (failures.length > 0)
|
|
38
51
|
throw new Error(`Runtime cleanup failed: ${failures.join("; ")}`);
|
|
39
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teardown.js","sourceRoot":"","sources":["../../../src/runtime/shutdown/teardown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"teardown.js","sourceRoot":"","sources":["../../../src/runtime/shutdown/teardown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAwB,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAW/F,0FAA0F;AAC1F,KAAK,UAAU,eAAe,CAC5B,KAA8C;IAE9C,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAA8C;IAE9C,MAAM,QAAQ,GAAG,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACrE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,WAAW,CAAC,iBAAiB,EAAE,2CAA2C,EAAE;YAChF,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;YAClD,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA8C;IAE9C,MAAM,QAAQ,GAAG,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;IACvF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7F,CAAC"}
|
|
@@ -8,6 +8,7 @@ type TerminationTimeouts = {
|
|
|
8
8
|
readonly gracefulMs: number;
|
|
9
9
|
readonly forceMs: number;
|
|
10
10
|
};
|
|
11
|
+
type TerminationReaper = Pick<SessionReaper, "reap" | "sweepDetached" | "signalLeaderPty">;
|
|
11
12
|
/**
|
|
12
13
|
* Signal the PTY, wait for exit, and reap the leader's process group. The reap is
|
|
13
14
|
* ATTEMPTED on EVERY exit path — normal exit, timeout, or a throwing PTY operation
|
|
@@ -16,7 +17,26 @@ type TerminationTimeouts = {
|
|
|
16
17
|
* typed `termination_failed` (never swallowed) and the reaper stays unlatched so a
|
|
17
18
|
* later `teardown()` RETRIES it. A successful reap latches, so a later reuse is a
|
|
18
19
|
* harmless no-op (see SessionReaper) (C-LIFE-10).
|
|
20
|
+
*
|
|
21
|
+
* Before the SIGKILL — the initial signal, or the escalation after an ignored
|
|
22
|
+
* SIGTERM — the detached-descendant sweep runs while the leader is still alive and
|
|
23
|
+
* still the parent of its `setsid()` hooks. A leader that exits on SIGTERM is not
|
|
24
|
+
* swept: the CLI's own graceful shutdown ends its hooks. One exit latch spans every
|
|
25
|
+
* phase, and once it has seen the exit, nothing more is sent to the leader's pid,
|
|
26
|
+
* which may already belong to another process: an exit during the sweep's table reads
|
|
27
|
+
* cancels the SIGKILL. A sweep failure is reported like a reap failure, after the
|
|
28
|
+
* leader is still killed and reaped unless its whole group was confirmed gone. That
|
|
29
|
+
* terminal fact cancels all later PTY and group signals without clearing old failures.
|
|
19
30
|
*/
|
|
20
|
-
export declare function terminatePty(pty: PtyProcess, signal: "SIGTERM" | "SIGKILL", reaper:
|
|
31
|
+
export declare function terminatePty(pty: PtyProcess, signal: "SIGTERM" | "SIGKILL", reaper: TerminationReaper, timeouts?: TerminationTimeouts): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* `unconfirmedProcessGroupIds`: the process-group ids a sweep failure names, if any: the
|
|
34
|
+
* groups it could not confirm reaped, the leader's own included when its group was not
|
|
35
|
+
* confirmed stopped. Like `processGroupId` they are diagnostic only; an id may already
|
|
36
|
+
* belong to another group.
|
|
37
|
+
*/
|
|
38
|
+
export declare function unconfirmedGroupsDetail(error: Error): {
|
|
39
|
+
readonly unconfirmedProcessGroupIds?: number[];
|
|
40
|
+
};
|
|
21
41
|
export {};
|
|
22
42
|
//# sourceMappingURL=terminate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminate.d.ts","sourceRoot":"","sources":["../../../src/runtime/shutdown/terminate.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"terminate.d.ts","sourceRoot":"","sources":["../../../src/runtime/shutdown/terminate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAA0B,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5E,KAAK,mBAAmB,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACrF,KAAK,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,eAAe,GAAG,iBAAiB,CAAC,CAAC;AAS3F;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,MAAM,EAAE,iBAAiB,EACzB,QAAQ,GAAE,mBAAqC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAkDf;AAgFD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,GAAG;IACrD,QAAQ,CAAC,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;CAChD,CAKA"}
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
* Shared PTY termination helper for graceful stop and force kill.
|
|
3
3
|
* Implements PRD §5.3 and §9.4.
|
|
4
4
|
*/
|
|
5
|
-
import { causeDetails,
|
|
5
|
+
import { causeDetails, elwoodError, errnoCode, toError, } from "../../core/errors.js";
|
|
6
|
+
import { PtyExitLatch } from "../../pty/exit-latch.js";
|
|
6
7
|
const defaultTimeouts = { gracefulMs: 5_000, forceMs: 1_000 };
|
|
7
8
|
const POST_EXIT_REAP_RETRIES = 4;
|
|
8
9
|
const POST_EXIT_REAP_RETRY_MS = 25;
|
|
10
|
+
const leaderGroupGoneForOutcome = {
|
|
11
|
+
"signal-sent": false,
|
|
12
|
+
"leader-group-gone": true,
|
|
13
|
+
};
|
|
9
14
|
/**
|
|
10
15
|
* Signal the PTY, wait for exit, and reap the leader's process group. The reap is
|
|
11
16
|
* ATTEMPTED on EVERY exit path — normal exit, timeout, or a throwing PTY operation
|
|
@@ -14,26 +19,52 @@ const POST_EXIT_REAP_RETRY_MS = 25;
|
|
|
14
19
|
* typed `termination_failed` (never swallowed) and the reaper stays unlatched so a
|
|
15
20
|
* later `teardown()` RETRIES it. A successful reap latches, so a later reuse is a
|
|
16
21
|
* harmless no-op (see SessionReaper) (C-LIFE-10).
|
|
22
|
+
*
|
|
23
|
+
* Before the SIGKILL — the initial signal, or the escalation after an ignored
|
|
24
|
+
* SIGTERM — the detached-descendant sweep runs while the leader is still alive and
|
|
25
|
+
* still the parent of its `setsid()` hooks. A leader that exits on SIGTERM is not
|
|
26
|
+
* swept: the CLI's own graceful shutdown ends its hooks. One exit latch spans every
|
|
27
|
+
* phase, and once it has seen the exit, nothing more is sent to the leader's pid,
|
|
28
|
+
* which may already belong to another process: an exit during the sweep's table reads
|
|
29
|
+
* cancels the SIGKILL. A sweep failure is reported like a reap failure, after the
|
|
30
|
+
* leader is still killed and reaped unless its whole group was confirmed gone. That
|
|
31
|
+
* terminal fact cancels all later PTY and group signals without clearing old failures.
|
|
17
32
|
*/
|
|
18
33
|
export async function terminatePty(pty, signal, reaper, timeouts = defaultTimeouts) {
|
|
19
34
|
let terminationError;
|
|
35
|
+
let sweepError;
|
|
20
36
|
let observedExit = false;
|
|
37
|
+
let exit;
|
|
21
38
|
try {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
observedExit
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
|
|
39
|
+
const latch = new PtyExitLatch(pty);
|
|
40
|
+
exit = latch;
|
|
41
|
+
if (signal === "SIGTERM") {
|
|
42
|
+
const outcome = reaper.signalLeaderPty(() => pty.kill("SIGTERM"));
|
|
43
|
+
observedExit =
|
|
44
|
+
leaderGroupGoneForOutcome[outcome] || (await latch.within(timeouts.gracefulMs));
|
|
45
|
+
}
|
|
46
|
+
if (!observedExit) {
|
|
47
|
+
sweepError = await reaper.sweepDetached(() => latch.exited).then(() => undefined, toError);
|
|
48
|
+
const leaderGroupGone = !latch.exited &&
|
|
49
|
+
leaderGroupGoneForOutcome[reaper.signalLeaderPty(() => pty.kill("SIGKILL"))];
|
|
50
|
+
observedExit = leaderGroupGone || (await latch.within(timeouts.forceMs));
|
|
51
|
+
if (!observedExit) {
|
|
52
|
+
terminationError = elwoodError("termination_failed", "PTY did not exit after SIGKILL.");
|
|
53
|
+
}
|
|
33
54
|
}
|
|
34
55
|
}
|
|
35
56
|
catch (error) {
|
|
36
|
-
terminationError =
|
|
57
|
+
terminationError =
|
|
58
|
+
"processGroupIds" in toError(error) ? sweepOnlyFailed(error) : ptyOperationFailed(error);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
exit?.dispose();
|
|
62
|
+
}
|
|
63
|
+
if (sweepError !== undefined) {
|
|
64
|
+
terminationError =
|
|
65
|
+
terminationError === undefined
|
|
66
|
+
? sweepOnlyFailed(sweepError)
|
|
67
|
+
: withCause(terminationError, "sweepError", sweepError);
|
|
37
68
|
}
|
|
38
69
|
// Reap on every path — even if the wait timed out or a PTY call threw — so a
|
|
39
70
|
// termination_failed outcome never leaks the descendant tree (C-LIFE-10). The
|
|
@@ -49,7 +80,7 @@ export async function terminatePty(pty, signal, reaper, timeouts = defaultTimeou
|
|
|
49
80
|
catch (reapError) {
|
|
50
81
|
if (terminationError === undefined)
|
|
51
82
|
throw reapOnlyFailed(reapError);
|
|
52
|
-
throw
|
|
83
|
+
throw withCause(terminationError, "reapError", reapError);
|
|
53
84
|
}
|
|
54
85
|
if (terminationError !== undefined)
|
|
55
86
|
throw terminationError;
|
|
@@ -70,28 +101,30 @@ async function reapAfterTermination(reaper, observedExit) {
|
|
|
70
101
|
}
|
|
71
102
|
}
|
|
72
103
|
/**
|
|
73
|
-
* Builds one error preserving BOTH the termination and
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* ElwoodError or a plain PTY Error (C-LIFE-10). Callers/tests read `.reapError`.
|
|
104
|
+
* Builds one error preserving BOTH the termination failure and a secondary cause:
|
|
105
|
+
* the reap failure (`reapError`, with its errno in `reapErrno`) or the
|
|
106
|
+
* detached-descendant sweep failure (`sweepError`). The secondary cause is carried in
|
|
107
|
+
* `details` under its own keys (NOT `details.cause`/`errno`, which the termination
|
|
108
|
+
* error may already use for its own root cause), so neither cause is dropped
|
|
109
|
+
* (C-LIFE-10).
|
|
80
110
|
*/
|
|
81
|
-
function
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
})
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
111
|
+
function withCause(terminationError, key, secondary) {
|
|
112
|
+
const reapErrno = key === "reapError" ? errnoCode(secondary) : undefined;
|
|
113
|
+
return elwoodError(terminationError.code, terminationError.message, {
|
|
114
|
+
...terminationError.details,
|
|
115
|
+
[key]: toError(secondary).message,
|
|
116
|
+
...(reapErrno === undefined ? {} : { reapErrno }),
|
|
117
|
+
...(key === "sweepError" ? unconfirmedGroupsDetail(toError(secondary)) : {}),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Wraps a throwing PTY operation (`kill` or `onExit`) as the documented typed
|
|
122
|
+
* `termination_failed`, keeping the underlying message and errno/syscall/path in
|
|
123
|
+
* details, so `stop()`/`kill()` never reject with a raw system error whose own
|
|
124
|
+
* `code` (e.g. `ESRCH`) masquerades as an Elwood error name (PRD §10, C-ERR-01).
|
|
125
|
+
*/
|
|
126
|
+
function ptyOperationFailed(error) {
|
|
127
|
+
return elwoodError("termination_failed", `Could not terminate the PTY: ${toError(error).message}`, { ...causeDetails(error), ...unconfirmedGroupsDetail(toError(error)) });
|
|
95
128
|
}
|
|
96
129
|
/**
|
|
97
130
|
* Wraps a reap-only failure (PTY termination SUCCEEDED, the group reap FAILED) as
|
|
@@ -104,26 +137,20 @@ function reapOnlyFailed(reapError) {
|
|
|
104
137
|
...causeDetails(reapError),
|
|
105
138
|
});
|
|
106
139
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
clearTimeout(timer);
|
|
124
|
-
unsubscribe?.();
|
|
125
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
126
|
-
}
|
|
127
|
-
});
|
|
140
|
+
/** The same typed wrapping when only the detached-descendant sweep failed. */
|
|
141
|
+
function sweepOnlyFailed(sweepError) {
|
|
142
|
+
return elwoodError("termination_failed", "PTY exited but its detached descendants could not be confirmed reaped.", { ...causeDetails(sweepError), ...unconfirmedGroupsDetail(toError(sweepError)) });
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* `unconfirmedProcessGroupIds`: the process-group ids a sweep failure names, if any: the
|
|
146
|
+
* groups it could not confirm reaped, the leader's own included when its group was not
|
|
147
|
+
* confirmed stopped. Like `processGroupId` they are diagnostic only; an id may already
|
|
148
|
+
* belong to another group.
|
|
149
|
+
*/
|
|
150
|
+
export function unconfirmedGroupsDetail(error) {
|
|
151
|
+
const { processGroupIds } = error;
|
|
152
|
+
return processGroupIds !== undefined && processGroupIds.length > 0
|
|
153
|
+
? { unconfirmedProcessGroupIds: [...processGroupIds] }
|
|
154
|
+
: {};
|
|
128
155
|
}
|
|
129
156
|
//# sourceMappingURL=terminate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../src/runtime/shutdown/terminate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../src/runtime/shutdown/terminate.ts"],"names":[],"mappings":"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"}
|