@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/runtime/probe/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA2CjE;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAuB;IAClD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE,CAAC;IACjF,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,gEAAgE;AAChE,MAAM,WAAW;IACE,OAAO,GAAG,CAAC,IAAI,YAAY,EAAE,EAAE,IAAI,YAAY,EAAE,CAAU,CAAC;IAE7E,IAAI,CAAC,IAAuB;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,MAAqB;QAC5C,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAiB,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,MAAM,CAAC,UAAU;oBAAE,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,CAAC,4CAA4C;IAC3D,CAAC;IAED,IAAI;QACF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,qFAAqF;QACrF,qFAAqF;QACrF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;CACF;AAED,2FAA2F;AAC3F,MAAM,gBAAgB;IACpB,IAAI,CAAC,IAAuB;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAiB;QACrB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO;QACL,oBAAoB;IACtB,CAAC;CACF"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* a reissued group id is never signaled, and a surviving updater group retains exclusion.
|
|
5
5
|
*/
|
|
6
6
|
import type { ChildProcess } from "node:child_process";
|
|
7
|
-
import { type ReapErrorCode } from "
|
|
7
|
+
import { type ReapErrorCode } from "../../core/warnings/reasons.ts";
|
|
8
8
|
/**
|
|
9
9
|
* Unconfirmed cleanup names both the reason and the group still outstanding; confirmed
|
|
10
10
|
* cleanup names neither. Both fields are optional because `CommandResult` intersects this
|
|
@@ -31,4 +31,4 @@ export declare function processGroupGone(processGroupId: number): boolean;
|
|
|
31
31
|
*/
|
|
32
32
|
export declare function waitForProbeGroups(processGroupIds: readonly number[]): Promise<readonly number[]>;
|
|
33
33
|
export declare function abortProbe(child: ChildProcess): Promise<ProbeCleanup>;
|
|
34
|
-
//# sourceMappingURL=
|
|
34
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/runtime/probe/cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AAExC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,GAAG,WAAW,CAAC;IACxD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC,CAAC;AASF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAOhE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,SAAS,MAAM,EAAE,GACjC,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAW5B;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAqC3E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { setTimeout as delay } from "node:timers/promises";
|
|
2
|
-
import { errnoCode } from "
|
|
3
|
-
import { boundedErrorToken, isReapErrorCode, } from "
|
|
2
|
+
import { errnoCode } from "../../core/errors.js";
|
|
3
|
+
import { boundedErrorToken, isReapErrorCode, } from "../../core/warnings/reasons.js";
|
|
4
4
|
const cleanupWindowMs = 1_000;
|
|
5
5
|
const leaderFallbackAfterMs = 500;
|
|
6
6
|
const cleanupRetryMs = 25;
|
|
@@ -136,4 +136,4 @@ function reapRetained() {
|
|
|
136
136
|
retryTimer = undefined;
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=
|
|
139
|
+
//# sourceMappingURL=cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/runtime/probe/cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal directory-keyed probe caching, with identity compared at read boundaries.
|
|
3
|
+
* Supports the probe implementation of PRD §9.2; directory keys are an implementation detail.
|
|
4
|
+
*/
|
|
5
|
+
import { type ProbeCache } from "../probe-cache.ts";
|
|
6
|
+
/** A probe answer, and whether its before/after directory identities matched. */
|
|
7
|
+
export type DirectoryRead<T> = {
|
|
8
|
+
readonly value: T;
|
|
9
|
+
readonly sameDirectory: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare const directoryCacheBrand: unique symbol;
|
|
12
|
+
/** Only the factory can supply the cache's required boundary-identity admission rule. */
|
|
13
|
+
export type DirectoryProbeCache<T> = ProbeCache<DirectoryRead<T>> & {
|
|
14
|
+
readonly [directoryCacheBrand]: true;
|
|
15
|
+
};
|
|
16
|
+
/** Keeps matching-boundary results only; a caller may further restrict successful values. */
|
|
17
|
+
export declare function createDirectoryProbeCache<T>(maxSettledSuccesses: number, succeeded?: (value: T) => boolean): DirectoryProbeCache<T>;
|
|
18
|
+
/**
|
|
19
|
+
* `cwd`'s answer from `cache`, else `read()`'s, keyed by path and filesystem identity.
|
|
20
|
+
* The factory refuses retention when identities observed before and after the read differ.
|
|
21
|
+
* The checks compare two snapshots; a replacement restored before the final snapshot
|
|
22
|
+
* can escape detection.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readInDirectory<T>(cache: DirectoryProbeCache<T>, cwd: string, read: () => Promise<T>): Promise<T>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=directory-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-key.d.ts","sourceRoot":"","sources":["../../../src/runtime/probe/directory-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgBtE,iFAAiF;AACjF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtF,QAAA,MAAM,mBAAmB,eAAgC,CAAC;AAE1D,yFAAyF;AACzF,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;IAClE,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC;CACtC,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,mBAAmB,EAAE,MAAM,EAC3B,SAAS,GAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAoB,GAC5C,mBAAmB,CAAC,CAAC,CAAC,CAQxB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,CAAC,CASZ"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal directory-keyed probe caching, with identity compared at read boundaries.
|
|
3
|
+
* Supports the probe implementation of PRD §9.2; directory keys are an implementation detail.
|
|
4
|
+
*/
|
|
5
|
+
import { stat } from "node:fs/promises";
|
|
6
|
+
import { createProbeCache } from "../probe-cache.js";
|
|
7
|
+
/**
|
|
8
|
+
* `cwd` and which directory it names (device and inode), so a directory deleted and made again
|
|
9
|
+
* at the same path is probed again rather than answered from the old one's result. None for a
|
|
10
|
+
* path that can't be checked.
|
|
11
|
+
*/
|
|
12
|
+
async function directoryKey(cwd) {
|
|
13
|
+
try {
|
|
14
|
+
const { dev, ino } = await stat(cwd, { bigint: true });
|
|
15
|
+
return `${dev}:${ino}:${cwd}`;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const directoryCacheBrand = Symbol("DirectoryProbeCache");
|
|
22
|
+
/** Keeps matching-boundary results only; a caller may further restrict successful values. */
|
|
23
|
+
export function createDirectoryProbeCache(maxSettledSuccesses, succeeded = () => true) {
|
|
24
|
+
return {
|
|
25
|
+
...createProbeCache(maxSettledSuccesses, (read) => read.sameDirectory && succeeded(read.value)),
|
|
26
|
+
[directoryCacheBrand]: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* `cwd`'s answer from `cache`, else `read()`'s, keyed by path and filesystem identity.
|
|
31
|
+
* The factory refuses retention when identities observed before and after the read differ.
|
|
32
|
+
* The checks compare two snapshots; a replacement restored before the final snapshot
|
|
33
|
+
* can escape detection.
|
|
34
|
+
*/
|
|
35
|
+
export async function readInDirectory(cache, cwd, read) {
|
|
36
|
+
const key = await directoryKey(cwd);
|
|
37
|
+
// A directory that can't be identified is read, but its answer is neither shared nor kept.
|
|
38
|
+
if (key === undefined)
|
|
39
|
+
return read();
|
|
40
|
+
const { value } = await cache.get(key, async () => {
|
|
41
|
+
const value = await read();
|
|
42
|
+
return { value, sameDirectory: (await directoryKey(cwd)) === key };
|
|
43
|
+
});
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=directory-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-key.js","sourceRoot":"","sources":["../../../src/runtime/probe/directory-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AAEtE;;;;GAIG;AACH,KAAK,UAAU,YAAY,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAKD,MAAM,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAO1D,6FAA6F;AAC7F,MAAM,UAAU,yBAAyB,CACvC,mBAA2B,EAC3B,YAAmC,GAAG,EAAE,CAAC,IAAI;IAE7C,OAAO;QACL,GAAG,gBAAgB,CACjB,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CACtD;QACD,CAAC,mBAAmB,CAAC,EAAE,IAAI;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA6B,EAC7B,GAAW,EACX,IAAsB;IAEtB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACpC,2FAA2F;IAC3F,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded one-shot subprocess probe used by the command-runner seam.
|
|
3
|
+
* Implements PRD §9.2 bounded probe runtime/output (C-PERF-01, C-PERF-03, C-PERF-05,
|
|
4
|
+
* C-PERF-07): a misbehaving CLI on PATH must not hang or flood memory during a `--version`,
|
|
5
|
+
* `update`, or `--help` probe, a slow login-shell profile is bounded separately from the CLI
|
|
6
|
+
* it launches, and only a few probes run at once. A probe the e2e home guard stops (PRD §12,
|
|
7
|
+
* C-E2E-24) is a login-shell failure carrying only the guard's fixed reason.
|
|
8
|
+
*/
|
|
9
|
+
import type { CommandOptions, CommandResult } from "../seams.ts";
|
|
10
|
+
/** The probe command's own default bound, from the shell's start line (C-PERF-03). */
|
|
11
|
+
export declare const probeCommandTimeoutMs = 15000;
|
|
12
|
+
/**
|
|
13
|
+
* The login shell's default bound, from spawn to its start line (C-PERF-05). Loading the
|
|
14
|
+
* user's interactive profile took 7-19 s at 16 concurrent probes on a loaded host.
|
|
15
|
+
*/
|
|
16
|
+
export declare const probeLaunchTimeoutMs = 60000;
|
|
17
|
+
/** Overrides each phase's bound. A direct test command never writes the start line, so it hits `launchMs`. */
|
|
18
|
+
export declare function setProbeTimeoutsForTests(bounds: {
|
|
19
|
+
readonly commandMs: number;
|
|
20
|
+
readonly launchMs: number;
|
|
21
|
+
}): void;
|
|
22
|
+
export declare function resetProbeTimeoutsForTests(): void;
|
|
23
|
+
/** Runs one probe once a probe slot is free; its bounds start when it spawns (C-PERF-07). */
|
|
24
|
+
export declare function runProbe(command: string, args: readonly string[], options?: CommandOptions): Promise<CommandResult>;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/probe/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgBjE,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAI3C,8GAA8G;AAC9G,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GAAG,IAAI,CAGP;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD;AAED,6FAA6F;AAC7F,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAExB"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded one-shot subprocess probe used by the command-runner seam.
|
|
3
|
+
* Implements PRD §9.2 bounded probe runtime/output (C-PERF-01, C-PERF-03, C-PERF-05,
|
|
4
|
+
* C-PERF-07): a misbehaving CLI on PATH must not hang or flood memory during a `--version`,
|
|
5
|
+
* `update`, or `--help` probe, a slow login-shell profile is bounded separately from the CLI
|
|
6
|
+
* it launches, and only a few probes run at once. A probe the e2e home guard stops (PRD §12,
|
|
7
|
+
* C-E2E-24) is a login-shell failure carrying only the guard's fixed reason.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
import { exitStatus } from "../exit-status.js";
|
|
11
|
+
import { homeGuardStopMarker, homeGuardStopped, watchForStopMarker } from "../home-guard/index.js";
|
|
12
|
+
import { CappedBuffer } from "./capped-buffer.js";
|
|
13
|
+
import { abortProbe } from "./cleanup.js";
|
|
14
|
+
import { ProbeCommandLookup } from "./lookup.js";
|
|
15
|
+
import { commandTimedOut, guardStopped, launchTimedOut, mapError, overflow, shellExited, } from "./results.js";
|
|
16
|
+
import { withProbeSlot } from "./slots.js";
|
|
17
|
+
import { announcesStart, ProbeStart, probeControlFd } from "./start.js";
|
|
18
|
+
/** The probe command's own default bound, from the shell's start line (C-PERF-03). */
|
|
19
|
+
export const probeCommandTimeoutMs = 15_000;
|
|
20
|
+
/**
|
|
21
|
+
* The login shell's default bound, from spawn to its start line (C-PERF-05). Loading the
|
|
22
|
+
* user's interactive profile took 7-19 s at 16 concurrent probes on a loaded host.
|
|
23
|
+
*/
|
|
24
|
+
export const probeLaunchTimeoutMs = 60_000;
|
|
25
|
+
let commandTimeoutMs = probeCommandTimeoutMs;
|
|
26
|
+
let launchTimeoutMs = probeLaunchTimeoutMs;
|
|
27
|
+
/** Overrides each phase's bound. A direct test command never writes the start line, so it hits `launchMs`. */
|
|
28
|
+
export function setProbeTimeoutsForTests(bounds) {
|
|
29
|
+
commandTimeoutMs = bounds.commandMs;
|
|
30
|
+
launchTimeoutMs = bounds.launchMs;
|
|
31
|
+
}
|
|
32
|
+
export function resetProbeTimeoutsForTests() {
|
|
33
|
+
commandTimeoutMs = probeCommandTimeoutMs;
|
|
34
|
+
launchTimeoutMs = probeLaunchTimeoutMs;
|
|
35
|
+
}
|
|
36
|
+
/** Runs one probe once a probe slot is free; its bounds start when it spawns (C-PERF-07). */
|
|
37
|
+
export function runProbe(command, args, options = {}) {
|
|
38
|
+
return withProbeSlot(() => spawnProbe(command, args, options));
|
|
39
|
+
}
|
|
40
|
+
function spawnProbe(command, args, options) {
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
// Probe shells are interactive so they load the same user PATH as the PTY launch. Give
|
|
43
|
+
// them a fresh session: an interactive shell otherwise enables job control on Elwood's
|
|
44
|
+
// controlling terminal and can leave its short-lived command's process group in the
|
|
45
|
+
// foreground, causing headed cleanup to stop on SIGTTOU before restoring terminal modes.
|
|
46
|
+
// A fourth pipe carries only the probe shell's start line, unless the shell closed it.
|
|
47
|
+
const child = spawn(command, [...args], {
|
|
48
|
+
cwd: options.cwd,
|
|
49
|
+
detached: true,
|
|
50
|
+
stdio: ["pipe", "pipe", "pipe", "pipe"],
|
|
51
|
+
});
|
|
52
|
+
const out = new CappedBuffer();
|
|
53
|
+
const err = new CappedBuffer();
|
|
54
|
+
// Node exposes the extra `pipe` in `stdio` as a Readable.
|
|
55
|
+
const control = child.stdio[probeControlFd];
|
|
56
|
+
let settled = false;
|
|
57
|
+
// Kill only when WE abort the probe (timeout/overflow); a normal exit or
|
|
58
|
+
// spawn failure needs no signal (C-PERF-03).
|
|
59
|
+
const settle = (result, kill = false) => {
|
|
60
|
+
if (settled)
|
|
61
|
+
return;
|
|
62
|
+
settled = true;
|
|
63
|
+
clearTimeout(timer);
|
|
64
|
+
control.off("data", onControl); // a settled probe arms no command bound
|
|
65
|
+
// The result already owns the decoded text. An unresolved probe's reaper retains the
|
|
66
|
+
// child and its listeners, and through them these captures, so the chunks are dropped
|
|
67
|
+
// here rather than left for the reaper to outlive. The listeners themselves stay: a
|
|
68
|
+
// late `close` still has to find `settled` already true, which is the guard below.
|
|
69
|
+
out.release();
|
|
70
|
+
err.release();
|
|
71
|
+
if (!kill) {
|
|
72
|
+
resolve(result);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
void abortProbe(child).then((cleanup) => resolve({
|
|
76
|
+
...result,
|
|
77
|
+
error: { ...result.error, ...cleanup },
|
|
78
|
+
}));
|
|
79
|
+
};
|
|
80
|
+
const captured = () => [
|
|
81
|
+
lookup.stripFromStdout(start.stripFromStdout(out.text())),
|
|
82
|
+
err.text(),
|
|
83
|
+
];
|
|
84
|
+
// Each phase's bound aborts the probe with its own typed timeout, for its length, when it
|
|
85
|
+
// expires.
|
|
86
|
+
const boundBy = (ms, timedOut) => {
|
|
87
|
+
const bound = setTimeout(() => settle(timedOut(ms, ...captured()), true), ms);
|
|
88
|
+
bound.unref?.();
|
|
89
|
+
return bound;
|
|
90
|
+
};
|
|
91
|
+
const onData = (buffer) => (chunk) => {
|
|
92
|
+
buffer.append(chunk);
|
|
93
|
+
if (out.overflowed || err.overflowed)
|
|
94
|
+
settle(overflow(...captured()), true);
|
|
95
|
+
};
|
|
96
|
+
const start = new ProbeStart();
|
|
97
|
+
const lookup = new ProbeCommandLookup();
|
|
98
|
+
const expectsStartLine = announcesStart(args);
|
|
99
|
+
// A shell that closed the control descriptor writes the start line on stdout (start.ts).
|
|
100
|
+
// Watched before capture, so a chunk that both starts the command and overflows the cap
|
|
101
|
+
// has its bound cleared by the overflow's settle rather than armed after it.
|
|
102
|
+
child.stdout.on("data", (chunk) => {
|
|
103
|
+
lookup.feed("stdout", chunk);
|
|
104
|
+
onStart("stdout", chunk);
|
|
105
|
+
});
|
|
106
|
+
child.stdout.on("data", onData(out));
|
|
107
|
+
child.stderr.on("data", onData(err));
|
|
108
|
+
// The start line ends the login shell's launch phase: the command's own bound begins
|
|
109
|
+
// there, so the user's profile load is never charged to the CLI (C-PERF-05).
|
|
110
|
+
function onStart(channel, chunk) {
|
|
111
|
+
if (!start.feed(channel, chunk))
|
|
112
|
+
return;
|
|
113
|
+
clearTimeout(timer);
|
|
114
|
+
timer = boundBy(commandTimeoutMs, commandTimedOut);
|
|
115
|
+
}
|
|
116
|
+
// After the start line, the control descriptor carries only the e2e home guard's stop
|
|
117
|
+
// line, which no profile's redirection of stdout can hide (PRD §12).
|
|
118
|
+
const guardStop = watchForStopMarker();
|
|
119
|
+
const onControl = (chunk) => {
|
|
120
|
+
lookup.feed("control", chunk);
|
|
121
|
+
guardStop.feed(chunk);
|
|
122
|
+
onStart("control", chunk);
|
|
123
|
+
};
|
|
124
|
+
control.on("data", onControl);
|
|
125
|
+
// Spawn failure (e.g. ENOENT) fires `error` and not `close`. Node's spawn
|
|
126
|
+
// `error` always carries a `code`, which preflight maps to `*_not_found`.
|
|
127
|
+
child.on("error", (e) => {
|
|
128
|
+
const [stdout, stderr] = captured();
|
|
129
|
+
settle({ status: null, stdout, stderr, error: mapError(e) });
|
|
130
|
+
});
|
|
131
|
+
child.on("close", (code, signal) => {
|
|
132
|
+
const [stdout, stderr] = captured();
|
|
133
|
+
// A shell that exits without announcing its command never ran it (an rc file that
|
|
134
|
+
// `exec`s another program, say): its status says nothing about the CLI (C-PERF-05).
|
|
135
|
+
if (expectsStartLine && !start.started)
|
|
136
|
+
settle(shellExited(code, stdout, stderr));
|
|
137
|
+
// The e2e home guard runs after the start line but stops the shell before the command.
|
|
138
|
+
else if (expectsStartLine &&
|
|
139
|
+
homeGuardStopped(code, () => hasHomeGuardStopMarker(stdout, guardStop)))
|
|
140
|
+
settle(guardStopped(stdout, stderr));
|
|
141
|
+
// A signal death reads as a shell reports it, 128+n.
|
|
142
|
+
else
|
|
143
|
+
settle({ status: exitStatus(code, signal), stdout, stderr, ...lookup.result(code) });
|
|
144
|
+
});
|
|
145
|
+
// The launch phase runs from spawn until the shell's start line (C-PERF-05).
|
|
146
|
+
let timer = boundBy(launchTimeoutMs, launchTimedOut);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/** Whether the guard's stop line reached the control descriptor or, from a shell that closed it, stdout. */
|
|
150
|
+
function hasHomeGuardStopMarker(stdout, stopWatcher) {
|
|
151
|
+
return stopWatcher.seen || stdout.includes(homeGuardStopMarker);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/probe/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ProbeStartChannel } from "./start.ts";
|
|
2
|
+
/** Called after user not-found handlers are removed and before the private descriptor closes. */
|
|
3
|
+
export declare function commandLookupScript(command: string): string;
|
|
4
|
+
export declare class ProbeCommandLookup {
|
|
5
|
+
private readonly watchers;
|
|
6
|
+
feed(channel: ProbeStartChannel, chunk: Buffer): void;
|
|
7
|
+
stripFromStdout(captured: string): string;
|
|
8
|
+
result(status: number | null): {
|
|
9
|
+
readonly commandLookupFailed?: true;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../../src/runtime/probe/lookup.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,YAAY,CAAC;AAKpE,iGAAiG;AACjG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGvB;IAEF,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIzC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG;QAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAA;KAAE;CAKvE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Explicit missing-command proof on the existing private probe channels (PRD §9.2, C-PERF-05). */
|
|
2
|
+
import { randomBytes } from "node:crypto";
|
|
3
|
+
import { shellQuote } from "../shell-quote.js";
|
|
4
|
+
import { StreamMarkerWatcher } from "../stream-marker.js";
|
|
5
|
+
import { probeControlFd } from "./start.js";
|
|
6
|
+
const lookupLine = `elwood-probe-lookup-failed-${randomBytes(8).toString("hex")}`;
|
|
7
|
+
const lookupText = `${lookupLine}\n`;
|
|
8
|
+
/** Called after user not-found handlers are removed and before the private descriptor closes. */
|
|
9
|
+
export function commandLookupScript(command) {
|
|
10
|
+
return `if ! command -v ${shellQuote(command)} >/dev/null 2>&1; then { echo ${lookupLine} >&${probeControlFd}; } 2>/dev/null || echo ${lookupLine}; exit 127; fi; `;
|
|
11
|
+
}
|
|
12
|
+
export class ProbeCommandLookup {
|
|
13
|
+
watchers = {
|
|
14
|
+
control: new StreamMarkerWatcher(Buffer.from(lookupText)),
|
|
15
|
+
stdout: new StreamMarkerWatcher(Buffer.from(lookupText)),
|
|
16
|
+
};
|
|
17
|
+
feed(channel, chunk) {
|
|
18
|
+
this.watchers[channel].feed(chunk);
|
|
19
|
+
}
|
|
20
|
+
stripFromStdout(captured) {
|
|
21
|
+
return this.watchers.stdout.seen ? captured.replace(lookupText, "") : captured;
|
|
22
|
+
}
|
|
23
|
+
result(status) {
|
|
24
|
+
return status === 127 && Object.values(this.watchers).some((watcher) => watcher.seen)
|
|
25
|
+
? { commandLookupFailed: true }
|
|
26
|
+
: {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/runtime/probe/lookup.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAA0B,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,UAAU,GAAG,8BAA8B,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAClF,MAAM,UAAU,GAAG,GAAG,UAAU,IAAI,CAAC;AAErC,iGAAiG;AACjG,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,mBAAmB,UAAU,CAAC,OAAO,CAAC,iCAAiC,UAAU,MAAM,cAAc,2BAA2B,UAAU,kBAAkB,CAAC;AACtK,CAAC;AAED,MAAM,OAAO,kBAAkB;IACZ,QAAQ,GAA6D;QACpF,OAAO,EAAE,IAAI,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,EAAE,IAAI,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACzD,CAAC;IAEF,IAAI,CAAC,OAA0B,EAAE,KAAa;QAC5C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,eAAe,CAAC,QAAgB;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjF,CAAC;IAED,MAAM,CAAC,MAAqB;QAC1B,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YACnF,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE;YAC/B,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A probe script's output capture: two named pipes in a directory made for that probe alone,
|
|
3
|
+
* which its command is `exec`ed into (PRD §9.2, C-PERF-03, C-PERF-05).
|
|
4
|
+
*/
|
|
5
|
+
import type { CaptureEvents, ProbeCapture, ProbeChild } from "./capture.ts";
|
|
6
|
+
/** Setup gets its own bound before a probe's shell and command timers can start. */
|
|
7
|
+
export declare const probeOutputSetupTimeoutMs = 60000;
|
|
8
|
+
/** Points the capture at another `mkfifo`, so a test can make one fail; with none, the system's. */
|
|
9
|
+
export declare function setMkfifoForTests(path?: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Two named pipes in a directory made for one probe, mode 0700, removed on release. They read
|
|
12
|
+
* as an ordinary pipe does: anything the command starts that keeps its output open keeps the
|
|
13
|
+
* probe open, a full pipe blocks its writer, and once Elwood's read ends close, a writer that
|
|
14
|
+
* remains is stopped by `SIGPIPE` when it next writes; one that stays silent lives on, as it
|
|
15
|
+
* would on an ordinary pipe. Node has no `mkfifo`, so the system's makes them.
|
|
16
|
+
*/
|
|
17
|
+
export declare class NamedPipeCapture implements ProbeCapture {
|
|
18
|
+
private readonly dir;
|
|
19
|
+
private readonly pipes;
|
|
20
|
+
private poll;
|
|
21
|
+
private constructor();
|
|
22
|
+
/** The probe's arguments, its script's output placeholder replaced by the pipes' quoted paths. */
|
|
23
|
+
args(args: readonly string[]): readonly string[];
|
|
24
|
+
/**
|
|
25
|
+
* Bounds the `mkfifo` child, killing and reaping it on expiry. Filesystem operations
|
|
26
|
+
* outside that child are not timed; setup failures release partial pipes and the directory.
|
|
27
|
+
*/
|
|
28
|
+
static create(setupTimeoutMs?: number): Promise<NamedPipeCapture>;
|
|
29
|
+
watch(child: ProbeChild, events: CaptureEvents): void;
|
|
30
|
+
private read;
|
|
31
|
+
ended(): boolean;
|
|
32
|
+
text(): [string, string];
|
|
33
|
+
release(): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=named-pipes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named-pipes.d.ts","sourceRoot":"","sources":["../../../src/runtime/probe/named-pipes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA6B5E,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAqB,GAAG,IAAI,CAEnE;AAsDD;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkC;IACxD,OAAO,CAAC,IAAI,CAA6C;IAEzD,OAAO;IAMP,kGAAkG;IAClG,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE;IAShD;;;OAGG;WACU,MAAM,CAAC,cAAc,SAA4B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAe1F,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAcrD,OAAO,CAAC,IAAI;IAMZ,KAAK,IAAI,OAAO;IAIhB,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAIxB,OAAO,IAAI,IAAI;CAKhB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A probe script's output capture: two named pipes in a directory made for that probe alone,
|
|
3
|
+
* which its command is `exec`ed into (PRD §9.2, C-PERF-03, C-PERF-05).
|
|
4
|
+
*/
|
|
5
|
+
import { execFile } from "node:child_process";
|
|
6
|
+
import { closeSync, constants, openSync, readSync } from "node:fs";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { promisify } from "node:util";
|
|
9
|
+
import { shellQuote } from "../shell-quote.js";
|
|
10
|
+
import { CappedBuffer } from "./capped-buffer.js";
|
|
11
|
+
import { makePrivateDirectory, removePrivateDirectory } from "./private-directory.js";
|
|
12
|
+
import { probeOutputRedirect } from "./start.js";
|
|
13
|
+
/**
|
|
14
|
+
* How often a named pipe is read: a nominal cadence, which a busy event loop can stretch.
|
|
15
|
+
* macOS's kqueue reports a named pipe's data but never its end, when the last writer closes
|
|
16
|
+
* it, so the reader polls instead. A full pipe blocks its writer between reads, so the cadence
|
|
17
|
+
* only delays when Elwood sees output, and its end.
|
|
18
|
+
*/
|
|
19
|
+
const capturePollMs = 25;
|
|
20
|
+
/**
|
|
21
|
+
* How much of a pipe one read takes. The cap bounds what Elwood keeps, not what it reads: the
|
|
22
|
+
* read that passes the cap takes up to this much, and the overflow then ends the probe. The
|
|
23
|
+
* writer is held only by what the pipe itself can buffer.
|
|
24
|
+
*/
|
|
25
|
+
const readChunkBytes = 64 * 1024;
|
|
26
|
+
/** The pipes' mode: only Elwood's user can open them, inside a directory only it can enter. */
|
|
27
|
+
const pipeMode = "600";
|
|
28
|
+
/** The two pipes' names in the probe's directory: the command's stdout, then its stderr. */
|
|
29
|
+
const pipeNames = ["stdout", "stderr"];
|
|
30
|
+
/** The system's `mkfifo`: Node cannot make a named pipe itself. */
|
|
31
|
+
const systemMkfifo = "/usr/bin/mkfifo";
|
|
32
|
+
let mkfifo = systemMkfifo;
|
|
33
|
+
/** Setup gets its own bound before a probe's shell and command timers can start. */
|
|
34
|
+
export const probeOutputSetupTimeoutMs = 60_000;
|
|
35
|
+
/** Points the capture at another `mkfifo`, so a test can make one fail; with none, the system's. */
|
|
36
|
+
export function setMkfifoForTests(path = systemMkfifo) {
|
|
37
|
+
mkfifo = path;
|
|
38
|
+
}
|
|
39
|
+
const run = promisify(execFile);
|
|
40
|
+
/** A named pipe's read end, and a write end that keeps it open until the command has its own. */
|
|
41
|
+
class NamedPipe {
|
|
42
|
+
buffer = new CappedBuffer();
|
|
43
|
+
scratch = Buffer.alloc(readChunkBytes);
|
|
44
|
+
reader;
|
|
45
|
+
holder;
|
|
46
|
+
closed = false;
|
|
47
|
+
path;
|
|
48
|
+
constructor(path) {
|
|
49
|
+
this.path = path;
|
|
50
|
+
}
|
|
51
|
+
open() {
|
|
52
|
+
// Without a writer a pipe reads as ended, so Elwood holds one of its own until the probe
|
|
53
|
+
// exits; the command's `exec` then opens its write end without waiting.
|
|
54
|
+
this.reader = openSync(this.path, constants.O_RDONLY | constants.O_NONBLOCK);
|
|
55
|
+
this.holder = openSync(this.path, constants.O_WRONLY | constants.O_NONBLOCK);
|
|
56
|
+
}
|
|
57
|
+
/** Lets the pipe end when every other writer has closed it. */
|
|
58
|
+
letEnd() {
|
|
59
|
+
if (this.holder !== undefined)
|
|
60
|
+
closeSync(this.holder);
|
|
61
|
+
this.holder = undefined;
|
|
62
|
+
}
|
|
63
|
+
/** Reads what is waiting, until it is drained, ends, or passes the cap. */
|
|
64
|
+
read() {
|
|
65
|
+
while (!(this.closed || this.buffer.overflowed) && this.reader !== undefined) {
|
|
66
|
+
let length;
|
|
67
|
+
try {
|
|
68
|
+
length = readSync(this.reader, this.scratch, 0, this.scratch.length, null);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// `EAGAIN`: a writer remains, but nothing is waiting. A pipe's read fails no other
|
|
72
|
+
// way, and if one did, the command's bound would still end the probe.
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (length === 0)
|
|
76
|
+
this.closed = true;
|
|
77
|
+
else
|
|
78
|
+
this.buffer.append(Buffer.from(this.scratch.subarray(0, length)));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
release() {
|
|
82
|
+
this.letEnd();
|
|
83
|
+
if (this.reader !== undefined)
|
|
84
|
+
closeSync(this.reader);
|
|
85
|
+
this.reader = undefined;
|
|
86
|
+
this.buffer.release();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Two named pipes in a directory made for one probe, mode 0700, removed on release. They read
|
|
91
|
+
* as an ordinary pipe does: anything the command starts that keeps its output open keeps the
|
|
92
|
+
* probe open, a full pipe blocks its writer, and once Elwood's read ends close, a writer that
|
|
93
|
+
* remains is stopped by `SIGPIPE` when it next writes; one that stays silent lives on, as it
|
|
94
|
+
* would on an ordinary pipe. Node has no `mkfifo`, so the system's makes them.
|
|
95
|
+
*/
|
|
96
|
+
export class NamedPipeCapture {
|
|
97
|
+
dir;
|
|
98
|
+
pipes;
|
|
99
|
+
poll;
|
|
100
|
+
constructor(dir) {
|
|
101
|
+
this.dir = dir;
|
|
102
|
+
const [stdout, stderr] = pipeNames;
|
|
103
|
+
this.pipes = [new NamedPipe(join(dir, stdout)), new NamedPipe(join(dir, stderr))];
|
|
104
|
+
}
|
|
105
|
+
/** The probe's arguments, its script's output placeholder replaced by the pipes' quoted paths. */
|
|
106
|
+
args(args) {
|
|
107
|
+
const [stdout, stderr] = this.pipes.map((pipe) => shellQuote(pipe.path));
|
|
108
|
+
const redirect = `>${stdout} 2>${stderr}`;
|
|
109
|
+
const script = args.length - 1;
|
|
110
|
+
return args.map((arg, index) => index === script ? arg.slice(0, -probeOutputRedirect.length) + redirect : arg);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Bounds the `mkfifo` child, killing and reaping it on expiry. Filesystem operations
|
|
114
|
+
* outside that child are not timed; setup failures release partial pipes and the directory.
|
|
115
|
+
*/
|
|
116
|
+
static async create(setupTimeoutMs = probeOutputSetupTimeoutMs) {
|
|
117
|
+
const capture = new NamedPipeCapture(makePrivateDirectory());
|
|
118
|
+
try {
|
|
119
|
+
await run(mkfifo, ["-m", pipeMode, ...capture.pipes.map((pipe) => pipe.path)], {
|
|
120
|
+
timeout: setupTimeoutMs,
|
|
121
|
+
killSignal: "SIGKILL",
|
|
122
|
+
});
|
|
123
|
+
for (const pipe of capture.pipes)
|
|
124
|
+
pipe.open();
|
|
125
|
+
return capture;
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
capture.release();
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
watch(child, events) {
|
|
133
|
+
child.stdout.resume(); // read for the start line only, by the runner
|
|
134
|
+
child.stderr.resume();
|
|
135
|
+
const read = () => this.read(events);
|
|
136
|
+
child.once("exit", () => {
|
|
137
|
+
for (const pipe of this.pipes)
|
|
138
|
+
pipe.letEnd();
|
|
139
|
+
read();
|
|
140
|
+
});
|
|
141
|
+
// Referenced, unlike the probe's bounds: once the command has exited, a process it started
|
|
142
|
+
// that still holds a pipe keeps the probe pending, and only this keeps the host alive to
|
|
143
|
+
// deliver its result. Release clears it however the probe settles.
|
|
144
|
+
this.poll = setInterval(read, capturePollMs);
|
|
145
|
+
}
|
|
146
|
+
read(events) {
|
|
147
|
+
for (const pipe of this.pipes)
|
|
148
|
+
pipe.read();
|
|
149
|
+
if (this.pipes.some((pipe) => pipe.buffer.overflowed))
|
|
150
|
+
events.overflowed();
|
|
151
|
+
else if (this.ended())
|
|
152
|
+
events.ended();
|
|
153
|
+
}
|
|
154
|
+
ended() {
|
|
155
|
+
return this.pipes.every((pipe) => pipe.closed);
|
|
156
|
+
}
|
|
157
|
+
text() {
|
|
158
|
+
return [this.pipes[0].buffer.text(), this.pipes[1].buffer.text()];
|
|
159
|
+
}
|
|
160
|
+
release() {
|
|
161
|
+
clearInterval(this.poll);
|
|
162
|
+
for (const pipe of this.pipes)
|
|
163
|
+
pipe.release();
|
|
164
|
+
removePrivateDirectory(this.dir, pipeNames);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=named-pipes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named-pipes.js","sourceRoot":"","sources":["../../../src/runtime/probe/named-pipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A directory made for one probe's output, mode 0700 under the system temp directory, and its
|
|
3
|
+
* removal however the probe ends (PRD §9.2, C-PERF-05).
|
|
4
|
+
*/
|
|
5
|
+
/** Makes a probe's private directory; `mkdtemp` makes it mode 0700. */
|
|
6
|
+
export declare function makePrivateDirectory(): string;
|
|
7
|
+
/**
|
|
8
|
+
* Removes a probe's private directory, which holds at most `entries`, as the probe settles: an
|
|
9
|
+
* unlink each and an `rmdir`, done at once. A directory the command changed, by what it made, locked,
|
|
10
|
+
* or removed there, is removed off the event loop instead, however large a tree it left. Never
|
|
11
|
+
* throws.
|
|
12
|
+
*/
|
|
13
|
+
export declare function removePrivateDirectory(dir: string, entries: readonly string[]): void;
|
|
14
|
+
//# sourceMappingURL=private-directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private-directory.d.ts","sourceRoot":"","sources":["../../../src/runtime/probe/private-directory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,uEAAuE;AACvE,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAQpF"}
|