@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
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
* Bounded, release-able collector for the first PTY output of a session.
|
|
3
3
|
*
|
|
4
4
|
* The startup usability check (see index.ts, `assertStartupUsable`) reads the
|
|
5
|
-
* agent's early output
|
|
5
|
+
* agent's early output once, at ~500ms, to detect a crash or auth banner.
|
|
6
6
|
* The PTY data handler is never detached for the session's lifetime, so a naive
|
|
7
7
|
* `startupOutput += data` accumulates a second unbounded in-memory transcript
|
|
8
8
|
* for the WHOLE session even though only the startup snapshot is ever consumed.
|
|
9
9
|
*
|
|
10
10
|
* This collector appends only while the startup gate is open and caps the buffer
|
|
11
|
-
* so a chatty CLI cannot balloon it
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* so a chatty CLI cannot balloon it. For a launch the e2e home guard checks, it also
|
|
12
|
+
* watches every chunk, past the cap, for the guard's stop marker (PRD §12, C-E2E-24):
|
|
13
|
+
* after a status-97 exit the check waits up to a second more for that marker before
|
|
14
|
+
* it settles. Once `release()` is called, when the check settles, further chunks are
|
|
15
|
+
* dropped and the retained bytes and the watcher are cleared, so no per-session
|
|
16
|
+
* transcript lingers. Implements PRD §9.1 startup usability and §9.4 resource cleanup.
|
|
15
17
|
*/
|
|
16
|
-
import type { PtyExit } from "../../pty/types.ts";
|
|
18
|
+
import type { PtyExit, PtyProcess } from "../../pty/types.ts";
|
|
17
19
|
import { type StartupAdapter } from "./index.ts";
|
|
18
20
|
export type StartupBuffer = {
|
|
19
21
|
/** Appends a PTY chunk while the gate is open; a no-op once released. */
|
|
@@ -22,8 +24,25 @@ export type StartupBuffer = {
|
|
|
22
24
|
readonly read: () => string;
|
|
23
25
|
/** Stops collecting and clears the retained buffer for the rest of the session. */
|
|
24
26
|
readonly release: () => void;
|
|
27
|
+
/**
|
|
28
|
+
* Whether the output until release, past the cap included, carried the e2e home guard's stop
|
|
29
|
+
* marker (PRD §12, C-E2E-24): the guard writes its line after the startup files' own output,
|
|
30
|
+
* however long that was. `undefined` for a launch the guard does not check, whose output is
|
|
31
|
+
* never scanned for it.
|
|
32
|
+
*/
|
|
33
|
+
readonly sawStopMarker: (() => boolean) | undefined;
|
|
25
34
|
};
|
|
26
|
-
|
|
35
|
+
/**
|
|
36
|
+
* `watchStopMarker` defaults to whether the e2e home guard checks a launch started now
|
|
37
|
+
* (`homeGuardChecksLaunch`), as it does the session's. Given a `source` PTY, the buffer reads
|
|
38
|
+
* it directly, raw and before any rendering, until release: the session's terminal stops
|
|
39
|
+
* reading a PTY that has exited, while the check may still be waiting for the guard's line.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createStartupBuffer(options?: {
|
|
42
|
+
readonly capBytes?: number;
|
|
43
|
+
readonly watchStopMarker?: boolean;
|
|
44
|
+
readonly source?: Pick<PtyProcess, "onData">;
|
|
45
|
+
}): StartupBuffer;
|
|
27
46
|
/**
|
|
28
47
|
* Runs the ~500ms startup usability check against `buffer`, then releases it on
|
|
29
48
|
* every path (success OR failure) so the collector stops appending and clears
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/buffer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAMtE,MAAM,MAAM,aAAa,GAAG;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,CAAC;CACrD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE;IACP,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;CACzC,GACL,aAAa,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,OAAO,GAAG,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -2,45 +2,63 @@
|
|
|
2
2
|
* Bounded, release-able collector for the first PTY output of a session.
|
|
3
3
|
*
|
|
4
4
|
* The startup usability check (see index.ts, `assertStartupUsable`) reads the
|
|
5
|
-
* agent's early output
|
|
5
|
+
* agent's early output once, at ~500ms, to detect a crash or auth banner.
|
|
6
6
|
* The PTY data handler is never detached for the session's lifetime, so a naive
|
|
7
7
|
* `startupOutput += data` accumulates a second unbounded in-memory transcript
|
|
8
8
|
* for the WHOLE session even though only the startup snapshot is ever consumed.
|
|
9
9
|
*
|
|
10
10
|
* This collector appends only while the startup gate is open and caps the buffer
|
|
11
|
-
* so a chatty CLI cannot balloon it
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* so a chatty CLI cannot balloon it. For a launch the e2e home guard checks, it also
|
|
12
|
+
* watches every chunk, past the cap, for the guard's stop marker (PRD §12, C-E2E-24):
|
|
13
|
+
* after a status-97 exit the check waits up to a second more for that marker before
|
|
14
|
+
* it settles. Once `release()` is called, when the check settles, further chunks are
|
|
15
|
+
* dropped and the retained bytes and the watcher are cleared, so no per-session
|
|
16
|
+
* transcript lingers. Implements PRD §9.1 startup usability and §9.4 resource cleanup.
|
|
15
17
|
*/
|
|
18
|
+
import { homeGuardChecksLaunch, watchForStopMarker } from "../home-guard/index.js";
|
|
16
19
|
import { assertStartupUsable } from "./index.js";
|
|
17
20
|
// Startup output is tiny (a banner, a prompt); this cap is comfortably larger
|
|
18
21
|
// than any real startup screen while still bounding a misbehaving CLI.
|
|
19
|
-
const
|
|
20
|
-
|
|
22
|
+
const STARTUP_BUFFER_CAP_BYTES = 64 * 1024;
|
|
23
|
+
/**
|
|
24
|
+
* `watchStopMarker` defaults to whether the e2e home guard checks a launch started now
|
|
25
|
+
* (`homeGuardChecksLaunch`), as it does the session's. Given a `source` PTY, the buffer reads
|
|
26
|
+
* it directly, raw and before any rendering, until release: the session's terminal stops
|
|
27
|
+
* reading a PTY that has exited, while the check may still be waiting for the guard's line.
|
|
28
|
+
*/
|
|
29
|
+
export function createStartupBuffer(options = {}) {
|
|
30
|
+
const cap = options.capBytes ?? STARTUP_BUFFER_CAP_BYTES;
|
|
21
31
|
let buffer = Buffer.alloc(cap);
|
|
22
32
|
let length = 0;
|
|
23
33
|
let open = true;
|
|
34
|
+
const watched = options.watchStopMarker ?? homeGuardChecksLaunch();
|
|
35
|
+
let stop = watched ? watchForStopMarker() : undefined;
|
|
36
|
+
const push = (data) => {
|
|
37
|
+
stop?.feed(Buffer.from(data));
|
|
38
|
+
if (!open || length >= cap)
|
|
39
|
+
return;
|
|
40
|
+
const remaining = cap - length;
|
|
41
|
+
// UTF-8 needs at least as many bytes as UTF-16 units. Only measure chunks
|
|
42
|
+
// already bounded by the remaining capacity; never scan a huge receipt.
|
|
43
|
+
open = data.length <= remaining && Buffer.byteLength(data, "utf8") <= remaining;
|
|
44
|
+
// The bounded write stops before an incomplete code point and copies the
|
|
45
|
+
// prefix into owned storage, without retaining the original chunk string.
|
|
46
|
+
length += buffer.write(data.slice(0, remaining), length, remaining, "utf8");
|
|
47
|
+
};
|
|
48
|
+
const unsubscribe = options.source?.onData(push);
|
|
24
49
|
return {
|
|
25
|
-
push
|
|
26
|
-
if (!open || length >= cap)
|
|
27
|
-
return;
|
|
28
|
-
const remaining = cap - length;
|
|
29
|
-
// UTF-8 needs at least as many bytes as UTF-16 units. Only measure chunks
|
|
30
|
-
// already bounded by the remaining capacity; never scan a huge receipt.
|
|
31
|
-
open = data.length <= remaining && Buffer.byteLength(data, "utf8") <= remaining;
|
|
32
|
-
// The bounded write stops before an incomplete code point and copies the
|
|
33
|
-
// prefix into owned storage, without retaining the original chunk string.
|
|
34
|
-
length += buffer.write(data.slice(0, remaining), length, remaining, "utf8");
|
|
35
|
-
},
|
|
50
|
+
push,
|
|
36
51
|
read() {
|
|
37
52
|
return buffer.toString("utf8", 0, length);
|
|
38
53
|
},
|
|
39
54
|
release() {
|
|
55
|
+
unsubscribe?.();
|
|
40
56
|
open = false;
|
|
41
57
|
buffer = Buffer.alloc(0);
|
|
42
58
|
length = 0;
|
|
59
|
+
stop = undefined;
|
|
43
60
|
},
|
|
61
|
+
sawStopMarker: watched ? () => stop?.seen ?? false : undefined,
|
|
44
62
|
};
|
|
45
63
|
}
|
|
46
64
|
/**
|
|
@@ -50,7 +68,12 @@ export function createStartupBuffer(cap = STARTUP_BUFFER_CAP) {
|
|
|
50
68
|
*/
|
|
51
69
|
export async function assertStartupThenRelease(adapter, buffer, exit) {
|
|
52
70
|
try {
|
|
53
|
-
await assertStartupUsable({
|
|
71
|
+
await assertStartupUsable({
|
|
72
|
+
adapter,
|
|
73
|
+
exit,
|
|
74
|
+
output: () => buffer.read(),
|
|
75
|
+
sawStopMarker: buffer.sawStopMarker,
|
|
76
|
+
});
|
|
54
77
|
}
|
|
55
78
|
finally {
|
|
56
79
|
buffer.release();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/runtime/startup/buffer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/runtime/startup/buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAuB,MAAM,YAAY,CAAC;AAEtE,8EAA8E;AAC9E,uEAAuE;AACvE,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAkB3C;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAII,EAAE;IAEN,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,wBAAwB,CAAC;IACzD,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,IAAI,qBAAqB,EAAE,CAAC;IACnE,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE;QAClC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,GAAG;YAAE,OAAO;QACnC,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;QAC/B,0EAA0E;QAC1E,wEAAwE;QACxE,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC;QAChF,yEAAyE;QACzE,0EAA0E;QAC1E,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO;QACL,IAAI;QACJ,IAAI;YACF,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;YACL,WAAW,EAAE,EAAE,CAAC;YAChB,IAAI,GAAG,KAAK,CAAC;YACb,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,GAAG,CAAC,CAAC;YACX,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;QACD,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAuB,EACvB,MAAqB,EACrB,IAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC;YACxB,OAAO;YACP,IAAI;YACJ,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -2,17 +2,24 @@
|
|
|
2
2
|
* Best-effort startup cleanup that preserves the original startup error.
|
|
3
3
|
* Implements PRD §9.1 and §10 error stability.
|
|
4
4
|
*/
|
|
5
|
-
import type
|
|
5
|
+
import { type ReapErrorCode } from "../../core/warnings/reasons.ts";
|
|
6
6
|
export type StartupTerminationTimeouts = {
|
|
7
7
|
readonly gracefulMs: number;
|
|
8
8
|
readonly forceMs: number;
|
|
9
9
|
};
|
|
10
|
+
/** A failed startup's PTY, ended by the session that owns its exit and its reaper. */
|
|
11
|
+
export type StartupPty = {
|
|
12
|
+
/** The leader's pid, which is also its process-group id; reported, never signaled. */
|
|
13
|
+
readonly pid: number;
|
|
14
|
+
/** Ends the PTY and reaps its group; never signals a PTY whose exit was already seen. */
|
|
15
|
+
readonly terminate: (timeouts: StartupTerminationTimeouts) => Promise<void>;
|
|
16
|
+
};
|
|
10
17
|
export type StartupCleanupResources = {
|
|
11
18
|
readonly before?: () => void;
|
|
12
19
|
readonly bridge?: {
|
|
13
20
|
readonly stop: () => Promise<void>;
|
|
14
21
|
};
|
|
15
|
-
readonly pty?:
|
|
22
|
+
readonly pty?: StartupPty;
|
|
16
23
|
readonly terminal?: {
|
|
17
24
|
readonly dispose: () => void;
|
|
18
25
|
};
|
|
@@ -20,24 +27,43 @@ export type StartupCleanupResources = {
|
|
|
20
27
|
/** Overrides the bounded PTY termination window (tests only; production defaults). */
|
|
21
28
|
readonly terminationTimeouts?: StartupTerminationTimeouts;
|
|
22
29
|
};
|
|
30
|
+
/** The parts of a failed startup's cleanup that the session itself owns. */
|
|
31
|
+
export type SessionStartupCleanup = Required<Pick<StartupCleanupResources, "before" | "pty">>;
|
|
32
|
+
/**
|
|
33
|
+
* A failed startup's PTY termination or group reap that could not be confirmed (§9.1),
|
|
34
|
+
* so part of the CLI's process tree may still be running. The errno token is
|
|
35
|
+
* allowlisted, so it is content-free. The group id is diagnostic only: once the leader is
|
|
36
|
+
* gone the number may be reissued to an unrelated group, so it is never signaled. This
|
|
37
|
+
* covers the PTY only; the other cleanup steps stay best-effort and unreported.
|
|
38
|
+
*/
|
|
39
|
+
export type UnconfirmedStartupPtyCleanup = {
|
|
40
|
+
readonly cleanupErrorCode: ReapErrorCode;
|
|
41
|
+
readonly cleanupProcessGroupId: number;
|
|
42
|
+
};
|
|
23
43
|
/**
|
|
24
44
|
* Wraps the ENTIRE `start*FromRecord` body so the fresh per-launch socket FILE the
|
|
25
45
|
* launch minted is removed on ANY failure before the session takes ownership — a
|
|
26
46
|
* failed state/runtime write, bridge start, PTY start, or guarded post-spawn step
|
|
27
47
|
* otherwise leaks a socket under `/tmp/elwood-*` (§9.1). It removes only THIS launch's
|
|
28
|
-
* own file,
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
48
|
+
* own file, and the stable home only when that leaves it empty, so a home a concurrent
|
|
49
|
+
* launch's socket is in stays (§8.1). On success ownership transfers to the returned
|
|
50
|
+
* session (teardown removes the whole home; its bridge's stop releases its socket). The
|
|
51
|
+
* cleanup is contained so it never replaces the original startup error.
|
|
52
|
+
*/
|
|
53
|
+
export declare function withSocketHomeCleanup<T>(releaseSocket: () => void, build: () => Promise<T>): Promise<T>;
|
|
54
|
+
/**
|
|
55
|
+
* Runs every cleanup step, each best-effort. Resolves to the unconfirmed PTY cleanup, or
|
|
56
|
+
* `undefined` when there was no PTY or its termination and group reap were both
|
|
57
|
+
* confirmed. Failures of the other steps never surface here.
|
|
32
58
|
*/
|
|
33
|
-
export declare function
|
|
34
|
-
export declare function cleanupStartupResources(resources: StartupCleanupResources): Promise<void>;
|
|
59
|
+
export declare function cleanupStartupResources(resources: StartupCleanupResources): Promise<UnconfirmedStartupPtyCleanup | undefined>;
|
|
35
60
|
/**
|
|
36
61
|
* Runs the post-session-construction startup steps behind ONE cleanup boundary
|
|
37
62
|
* (PRD §9.1, §9.4): if `region` rejects — a failed startup assertion, a PTY write
|
|
38
|
-
* fault, anything — the now-live PTY, bridge, terminal, and any watcher
|
|
39
|
-
*
|
|
40
|
-
*
|
|
63
|
+
* fault, anything — the now-live PTY, bridge, terminal, and any watcher are torn down
|
|
64
|
+
* via `cleanupStartupResources` before the original error rethrows. That teardown is
|
|
65
|
+
* best-effort: when the PTY's termination or group reap could not be confirmed, part of
|
|
66
|
+
* the process tree may remain, and a typed startup error names that in its details.
|
|
41
67
|
*/
|
|
42
68
|
export declare function guardStartupRegion(region: () => Promise<void>, resources: StartupCleanupResources): Promise<void>;
|
|
43
69
|
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,sFAAsF;AACtF,MAAM,MAAM,UAAU,GAAG;IACvB,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;CAC3D,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;AAE9F;;;;;;GAMG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,aAAa,EAAE,MAAM,IAAI,EACzB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,CAAC,CAWZ;AAMD;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,4BAA4B,GAAG,SAAS,CAAC,CAcnD;AA2BD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -2,25 +2,25 @@
|
|
|
2
2
|
* Best-effort startup cleanup that preserves the original startup error.
|
|
3
3
|
* Implements PRD §9.1 and §10 error stability.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { ElwoodError, elwoodError, underlyingErrno } from "../../core/errors.js";
|
|
6
|
+
import { isReapErrorCode, unknownErrorToken, } from "../../core/warnings/reasons.js";
|
|
7
7
|
/**
|
|
8
8
|
* Wraps the ENTIRE `start*FromRecord` body so the fresh per-launch socket FILE the
|
|
9
9
|
* launch minted is removed on ANY failure before the session takes ownership — a
|
|
10
10
|
* failed state/runtime write, bridge start, PTY start, or guarded post-spawn step
|
|
11
11
|
* otherwise leaks a socket under `/tmp/elwood-*` (§9.1). It removes only THIS launch's
|
|
12
|
-
* own file,
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* own file, and the stable home only when that leaves it empty, so a home a concurrent
|
|
13
|
+
* launch's socket is in stays (§8.1). On success ownership transfers to the returned
|
|
14
|
+
* session (teardown removes the whole home; its bridge's stop releases its socket). The
|
|
15
|
+
* cleanup is contained so it never replaces the original startup error.
|
|
16
16
|
*/
|
|
17
|
-
export async function withSocketHomeCleanup(
|
|
17
|
+
export async function withSocketHomeCleanup(releaseSocket, build) {
|
|
18
18
|
try {
|
|
19
19
|
return await build();
|
|
20
20
|
}
|
|
21
21
|
catch (error) {
|
|
22
22
|
try {
|
|
23
|
-
|
|
23
|
+
releaseSocket();
|
|
24
24
|
}
|
|
25
25
|
catch {
|
|
26
26
|
// Secondary: the original startup error is the one that rejects.
|
|
@@ -31,44 +31,74 @@ export async function withSocketHomeCleanup(removeOwnSocketFile, build) {
|
|
|
31
31
|
// Bounded so a failed startup never hangs on an unresponsive CLI while still
|
|
32
32
|
// giving the leader a chance to exit gracefully before the group SIGKILL reap.
|
|
33
33
|
const startupTermination = { gracefulMs: 5_000, forceMs: 1_000 };
|
|
34
|
+
/**
|
|
35
|
+
* Runs every cleanup step, each best-effort. Resolves to the unconfirmed PTY cleanup, or
|
|
36
|
+
* `undefined` when there was no PTY or its termination and group reap were both
|
|
37
|
+
* confirmed. Failures of the other steps never surface here.
|
|
38
|
+
*/
|
|
34
39
|
export async function cleanupStartupResources(resources) {
|
|
35
40
|
tryCall(resources.before);
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
// The session ends its PTY with the reaper its exit path uses, so the leader's group
|
|
42
|
+
// is SIGKILLed once (PRD §9.1, §9.4, C-LIFE-10). That kill is attempted even when the
|
|
43
|
+
// PTY signal throws, so a hook-bridge grandchild reparented to PID 1 is not left
|
|
44
|
+
// behind. A failure stays secondary: it is returned as a content-free diagnostic,
|
|
45
|
+
// never thrown in place of the startup error, and the group may still be running.
|
|
46
|
+
const unconfirmed = resources.pty
|
|
47
|
+
? await endPty(resources.pty, resources.terminationTimeouts ?? startupTermination)
|
|
48
|
+
: undefined;
|
|
44
49
|
await stopQuietly(resources.bridge);
|
|
45
50
|
tryCall(resources.after);
|
|
46
51
|
tryCall(resources.terminal?.dispose.bind(resources.terminal));
|
|
52
|
+
return unconfirmed;
|
|
47
53
|
}
|
|
48
|
-
async function
|
|
54
|
+
async function endPty(pty, timeouts) {
|
|
49
55
|
try {
|
|
50
|
-
await
|
|
56
|
+
await pty.terminate(timeouts);
|
|
57
|
+
return undefined;
|
|
51
58
|
}
|
|
52
|
-
catch {
|
|
53
|
-
|
|
59
|
+
catch (error) {
|
|
60
|
+
const errno = cleanupErrno(error);
|
|
61
|
+
return {
|
|
62
|
+
cleanupErrorCode: isReapErrorCode(errno) ? errno : unknownErrorToken,
|
|
63
|
+
cleanupProcessGroupId: pty.pid,
|
|
64
|
+
};
|
|
54
65
|
}
|
|
55
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* The errno to report: the failed group reap's errno when there is one, because that
|
|
69
|
+
* reap decides whether descendants may still be running; otherwise the termination's.
|
|
70
|
+
*/
|
|
71
|
+
function cleanupErrno(error) {
|
|
72
|
+
const reapErrno = error instanceof ElwoodError ? error.details["reapErrno"] : undefined;
|
|
73
|
+
return typeof reapErrno === "string" ? reapErrno : underlyingErrno(error);
|
|
74
|
+
}
|
|
56
75
|
/**
|
|
57
76
|
* Runs the post-session-construction startup steps behind ONE cleanup boundary
|
|
58
77
|
* (PRD §9.1, §9.4): if `region` rejects — a failed startup assertion, a PTY write
|
|
59
|
-
* fault, anything — the now-live PTY, bridge, terminal, and any watcher
|
|
60
|
-
*
|
|
61
|
-
*
|
|
78
|
+
* fault, anything — the now-live PTY, bridge, terminal, and any watcher are torn down
|
|
79
|
+
* via `cleanupStartupResources` before the original error rethrows. That teardown is
|
|
80
|
+
* best-effort: when the PTY's termination or group reap could not be confirmed, part of
|
|
81
|
+
* the process tree may remain, and a typed startup error names that in its details.
|
|
62
82
|
*/
|
|
63
83
|
export async function guardStartupRegion(region, resources) {
|
|
64
84
|
try {
|
|
65
85
|
await region();
|
|
66
86
|
}
|
|
67
87
|
catch (error) {
|
|
68
|
-
await cleanupStartupResources(resources);
|
|
69
|
-
throw error;
|
|
88
|
+
throw withCleanupFailure(error, await cleanupStartupResources(resources));
|
|
70
89
|
}
|
|
71
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Keeps the startup error's code, message, and stack and adds the unconfirmed-cleanup
|
|
93
|
+
* details. Only Elwood's own typed errors gain them: any other startup error is
|
|
94
|
+
* rethrown unchanged, never wrapped or mutated.
|
|
95
|
+
*/
|
|
96
|
+
function withCleanupFailure(error, unconfirmed) {
|
|
97
|
+
if (unconfirmed === undefined || !(error instanceof ElwoodError))
|
|
98
|
+
return error;
|
|
99
|
+
const enriched = elwoodError(error.code, error.message, { ...error.details, ...unconfirmed });
|
|
100
|
+
return Object.assign(enriched, { stack: error.stack });
|
|
101
|
+
}
|
|
72
102
|
/** Stops the bridge if one exists; a sync throw or rejection stays secondary. */
|
|
73
103
|
async function stopQuietly(bridge) {
|
|
74
104
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/runtime/startup/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/runtime/startup/cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Startup readiness checks for newly spawned agent PTYs.
|
|
3
|
-
* Implements PRD §9.1 and §10.
|
|
3
|
+
* Implements PRD §9.1 and §10, and names the e2e home guard of §12 (C-E2E-24).
|
|
4
4
|
*/
|
|
5
5
|
import type { PtyExit } from "../../pty/types.ts";
|
|
6
6
|
export type StartupAdapter = "claude" | "codex";
|
|
7
7
|
type StartupValue<T> = T | (() => T);
|
|
8
8
|
export declare function setStartupWaitMsForTests(value: number): void;
|
|
9
9
|
export declare function resetStartupWaitMsForTests(): void;
|
|
10
|
+
/**
|
|
11
|
+
* Fails a session's start when its CLI exited or asked for a login during startup. It waits
|
|
12
|
+
* `waitMs` (500 ms by default) first, then reads the exit and the output once. A status-97
|
|
13
|
+
* exit of a launch the e2e home guard checks (`sawStopMarker` set) may wait up to
|
|
14
|
+
* `stopMarkerGraceMs` more for the guard's line (PRD §12, C-E2E-24); any other check adds no
|
|
15
|
+
* wait.
|
|
16
|
+
*/
|
|
10
17
|
export declare function assertStartupUsable(input: {
|
|
11
18
|
readonly adapter: StartupAdapter;
|
|
12
19
|
readonly exit: StartupValue<PtyExit | undefined>;
|
|
13
20
|
readonly output: StartupValue<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Whether the output carried the e2e home guard's stop marker, past any cap on `output`;
|
|
23
|
+
* `undefined` for a launch the guard does not check.
|
|
24
|
+
*/
|
|
25
|
+
readonly sawStopMarker?: (() => boolean) | undefined;
|
|
14
26
|
readonly waitMs?: number;
|
|
15
27
|
}): Promise<void>;
|
|
16
28
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAChD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAUrC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB"}
|
|
@@ -1,29 +1,61 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Startup readiness checks for newly spawned agent PTYs.
|
|
3
|
-
* Implements PRD §9.1 and §10.
|
|
3
|
+
* Implements PRD §9.1 and §10, and names the e2e home guard of §12 (C-E2E-24).
|
|
4
4
|
*/
|
|
5
5
|
import { isClaudeReauthRequiredText } from "../../claude/login/expiry-screen.js";
|
|
6
|
+
import { delay } from "../../core/delay.js";
|
|
6
7
|
import { elwoodError } from "../../core/errors.js";
|
|
8
|
+
import { homeGuardExitCode, homeGuardStopped, homeGuardStoppedReason, } from "../home-guard/index.js";
|
|
7
9
|
let startupWaitMs = 500;
|
|
10
|
+
/**
|
|
11
|
+
* Once the check sees a status-97 exit of a launch the e2e home guard checks, the longest it
|
|
12
|
+
* waits for the guard's line: a PTY's last output can arrive after its exit (§9.4).
|
|
13
|
+
*/
|
|
14
|
+
const stopMarkerGraceMs = 1_000;
|
|
15
|
+
/** How often that wait looks for the line: often enough to add little to a stop's report. */
|
|
16
|
+
const stopMarkerPollMs = 10;
|
|
8
17
|
export function setStartupWaitMsForTests(value) {
|
|
9
18
|
startupWaitMs = value;
|
|
10
19
|
}
|
|
11
20
|
export function resetStartupWaitMsForTests() {
|
|
12
21
|
startupWaitMs = 500;
|
|
13
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Fails a session's start when its CLI exited or asked for a login during startup. It waits
|
|
25
|
+
* `waitMs` (500 ms by default) first, then reads the exit and the output once. A status-97
|
|
26
|
+
* exit of a launch the e2e home guard checks (`sawStopMarker` set) may wait up to
|
|
27
|
+
* `stopMarkerGraceMs` more for the guard's line (PRD §12, C-E2E-24); any other check adds no
|
|
28
|
+
* wait.
|
|
29
|
+
*/
|
|
14
30
|
export async function assertStartupUsable(input) {
|
|
15
|
-
await
|
|
31
|
+
await delay(input.waitMs ?? startupWaitMs);
|
|
16
32
|
const exit = readStartupValue(input.exit);
|
|
17
33
|
if (exit) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
34
|
+
// The guard's own line is in the output, among the user's startup output: name the guard
|
|
35
|
+
// instead of forwarding that output.
|
|
36
|
+
const stopped = await stoppedByGuard(exit.exitCode, input.sawStopMarker);
|
|
37
|
+
const guard = stopped ? `: ${homeGuardStoppedReason}` : "";
|
|
38
|
+
throw elwoodError(`${input.adapter}_start_failed`, `${input.adapter} exited during startup${guard}.`, { exitCode: exit.exitCode, signal: exit.signal });
|
|
22
39
|
}
|
|
23
40
|
if (isAuthFailure(input.adapter, readStartupValue(input.output))) {
|
|
24
41
|
throw elwoodError(`${input.adapter}_not_authenticated`, `${input.adapter} is not authenticated.`);
|
|
25
42
|
}
|
|
26
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Whether the e2e home guard stopped a session's login shell that exited with `exitCode`. For
|
|
46
|
+
* a launch the guard checks, a status-97 exit first waits, up to `stopMarkerGraceMs`, for the
|
|
47
|
+
* guard's line to arrive. A launch it does not check fails at once.
|
|
48
|
+
*/
|
|
49
|
+
async function stoppedByGuard(exitCode, sawMarker) {
|
|
50
|
+
if (sawMarker === undefined)
|
|
51
|
+
return false;
|
|
52
|
+
if (exitCode === homeGuardExitCode) {
|
|
53
|
+
const deadline = performance.now() + stopMarkerGraceMs;
|
|
54
|
+
while (!sawMarker() && performance.now() < deadline)
|
|
55
|
+
await delay(stopMarkerPollMs);
|
|
56
|
+
}
|
|
57
|
+
return homeGuardStopped(exitCode, sawMarker);
|
|
58
|
+
}
|
|
27
59
|
function isAuthFailure(adapter, output) {
|
|
28
60
|
// Claude's re-authentication banner ("Login expired" then "Please run /login")
|
|
29
61
|
// spans multiple lines, so it is matched against the WHOLE output, not per line,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/startup/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/startup/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watches one byte stream for a marker its chunks may split anywhere. A watcher keeps that
|
|
3
|
+
* stream's state, so each stream needs its own. Shared by the probe shell's start line
|
|
4
|
+
* (PRD §9.2, C-PERF-05) and the e2e home guard's stop marker (PRD §12, C-E2E-24), so both
|
|
5
|
+
* read a split marker the same way.
|
|
6
|
+
*/
|
|
7
|
+
export declare class StreamMarkerWatcher {
|
|
8
|
+
private readonly marker;
|
|
9
|
+
private tail;
|
|
10
|
+
private found;
|
|
11
|
+
constructor(marker: Buffer);
|
|
12
|
+
/** Whether the stream has carried the marker. */
|
|
13
|
+
get seen(): boolean;
|
|
14
|
+
/** True exactly once: for the chunk that completes the marker. */
|
|
15
|
+
feed(chunk: Buffer): boolean;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=stream-marker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-marker.d.ts","sourceRoot":"","sources":["../../src/runtime/stream-marker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM;IAI1B,iDAAiD;IACjD,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,kEAAkE;IAClE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAc7B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watches one byte stream for a marker its chunks may split anywhere. A watcher keeps that
|
|
3
|
+
* stream's state, so each stream needs its own. Shared by the probe shell's start line
|
|
4
|
+
* (PRD §9.2, C-PERF-05) and the e2e home guard's stop marker (PRD §12, C-E2E-24), so both
|
|
5
|
+
* read a split marker the same way.
|
|
6
|
+
*/
|
|
7
|
+
export class StreamMarkerWatcher {
|
|
8
|
+
marker;
|
|
9
|
+
tail = Buffer.alloc(0);
|
|
10
|
+
found = false;
|
|
11
|
+
constructor(marker) {
|
|
12
|
+
this.marker = marker;
|
|
13
|
+
}
|
|
14
|
+
/** Whether the stream has carried the marker. */
|
|
15
|
+
get seen() {
|
|
16
|
+
return this.found;
|
|
17
|
+
}
|
|
18
|
+
/** True exactly once: for the chunk that completes the marker. */
|
|
19
|
+
feed(chunk) {
|
|
20
|
+
if (this.found)
|
|
21
|
+
return false;
|
|
22
|
+
const window = Buffer.concat([this.tail, chunk]);
|
|
23
|
+
if (window.includes(this.marker)) {
|
|
24
|
+
this.found = true;
|
|
25
|
+
this.tail = Buffer.alloc(0);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
// Keep a copy of only what could still begin a split marker: a view would pin the whole
|
|
29
|
+
// chunk for as long as the watcher lives, as an unresolved probe's reaper retains it.
|
|
30
|
+
const keep = this.marker.length - 1;
|
|
31
|
+
this.tail = Buffer.from(window.subarray(Math.max(0, window.length - keep)));
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=stream-marker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-marker.js","sourceRoot":"","sources":["../../src/runtime/stream-marker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,OAAO,mBAAmB;IACb,MAAM,CAAS;IACxB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,GAAG,KAAK,CAAC;IAEtB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,iDAAiD;IACjD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,kEAAkE;IAClE,IAAI,CAAC,KAAa;QAChB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,wFAAwF;QACxF,sFAAsF;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { UpdateAdapter } from "./lock.ts";
|
|
2
|
+
import { type LeaseOwner } from "./owner.ts";
|
|
3
|
+
type Acquisition = {
|
|
4
|
+
readonly adapter: UpdateAdapter;
|
|
5
|
+
readonly leasePath: string;
|
|
6
|
+
readonly owner: LeaseOwner;
|
|
7
|
+
readonly completionMarkerPath: string;
|
|
8
|
+
readonly pollMs: number;
|
|
9
|
+
readonly staleMs: number;
|
|
10
|
+
readonly waitUntilMs: number;
|
|
11
|
+
readonly claim: () => Promise<boolean>;
|
|
12
|
+
};
|
|
13
|
+
/** True grants update ownership; false means no update lease acquired. */
|
|
14
|
+
export declare function acquireUpdateLease({ adapter, leasePath, owner, completionMarkerPath, pollMs, staleMs, waitUntilMs, claim, }: Acquisition): Promise<boolean>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=acquire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acquire.d.ts","sourceRoot":"","sources":["../../../src/runtime/update/acquire.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,KAAK,UAAU,EAAgB,MAAM,YAAY,CAAC;AAG3D,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC,CAAC;AAEF,0EAA0E;AAC1E,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,SAAS,EACT,KAAK,EACL,oBAAoB,EACpB,MAAM,EACN,OAAO,EACP,WAAW,EACX,KAAK,GACN,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CA6ChC"}
|