@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,12 +2,15 @@
|
|
|
2
2
|
* Builds the best-effort `agent_update_failed` warning (PRD §9.2, C-LIFE-11) shared by both
|
|
3
3
|
* adapter preflights. A `claude update` / `codex update` that fails is contained (never fatal
|
|
4
4
|
* when the installed CLI is compatible) and surfaced as this live warning with the diagnostics
|
|
5
|
-
* the PRD allows — the installed version in use, the update probe's errno, and
|
|
6
|
-
* stderr capped at 2 KB in `raw` (the CLI updater's output, never session transcripts or
|
|
5
|
+
* the PRD allows — the installed version in use, the update probe's exit status and errno, and
|
|
6
|
+
* the updater's own stderr capped at 2 KB in `raw` (the CLI updater's output, never session transcripts or
|
|
7
7
|
* prompts). Contention is not a failed update and reports differently: an error carrying
|
|
8
8
|
* `updateReason: "active_owner"` — another process held the update lease until this caller's
|
|
9
9
|
* wait expired — becomes `errorCode: "update_active"` with a message saying the update was
|
|
10
10
|
* skipped, and no diagnostics, because no local updater ran to produce an errno or stderr.
|
|
11
|
+
* The user's login shell can also fail before the update command runs (§9.2): that reports
|
|
12
|
+
* `errorCode: "login_shell_failed"` with empty `raw`, since its stderr would be only the
|
|
13
|
+
* profile's startup output.
|
|
11
14
|
*/
|
|
12
15
|
import type { ElwoodAgentKind } from "../activity/index.ts";
|
|
13
16
|
import type { AgentUpdateFailedWarning } from "./lifecycle.ts";
|
|
@@ -21,8 +24,9 @@ export type DistributiveOmit<W, K extends PropertyKey> = W extends unknown ? Omi
|
|
|
21
24
|
export type UpdateFailedWarning = Omit<AgentUpdateFailedWarning, "elwoodSessionId">;
|
|
22
25
|
/**
|
|
23
26
|
* Build the warning from the contained update error. `installedVersion` is the parsed version the
|
|
24
|
-
* session will actually run (the preflight re-read it after the failed update). `errorCode` is
|
|
25
|
-
*
|
|
27
|
+
* session will actually run (the preflight re-read it after the failed update). `errorCode` is
|
|
28
|
+
* `login_shell_failed` when the login shell failed before the update ran, else the update
|
|
29
|
+
* probe's allowlisted `errno` (e.g. `ETIMEDOUT`) when present, else a generic token.
|
|
26
30
|
*
|
|
27
31
|
* An error carrying `updateReason: "active_owner"` is contention, not failure: another process
|
|
28
32
|
* held the update lease until this caller's wait expired, so no local update command ran. That
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/core/warnings/update.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/core/warnings/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AAEhG,2FAA2F;AAC3F,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAAC;AAkBpF;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EACtB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,OAAO,GACb,mBAAmB,CAoBrB"}
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
* Builds the best-effort `agent_update_failed` warning (PRD §9.2, C-LIFE-11) shared by both
|
|
3
3
|
* adapter preflights. A `claude update` / `codex update` that fails is contained (never fatal
|
|
4
4
|
* when the installed CLI is compatible) and surfaced as this live warning with the diagnostics
|
|
5
|
-
* the PRD allows — the installed version in use, the update probe's errno, and
|
|
6
|
-
* stderr capped at 2 KB in `raw` (the CLI updater's output, never session transcripts or
|
|
5
|
+
* the PRD allows — the installed version in use, the update probe's exit status and errno, and
|
|
6
|
+
* the updater's own stderr capped at 2 KB in `raw` (the CLI updater's output, never session transcripts or
|
|
7
7
|
* prompts). Contention is not a failed update and reports differently: an error carrying
|
|
8
8
|
* `updateReason: "active_owner"` — another process held the update lease until this caller's
|
|
9
9
|
* wait expired — becomes `errorCode: "update_active"` with a message saying the update was
|
|
10
10
|
* skipped, and no diagnostics, because no local updater ran to produce an errno or stderr.
|
|
11
|
+
* The user's login shell can also fail before the update command runs (§9.2): that reports
|
|
12
|
+
* `errorCode: "login_shell_failed"` with empty `raw`, since its stderr would be only the
|
|
13
|
+
* profile's startup output.
|
|
11
14
|
*/
|
|
12
15
|
import { ElwoodError } from "../errors.js";
|
|
13
16
|
// Cap on the stderr carried in the warning's `raw`, so a hostile/verbose updater cannot flood a
|
|
@@ -17,7 +20,7 @@ const maxStderr = 2_000;
|
|
|
17
20
|
* Reasons an update was skipped rather than attempted, and how each reads to a user. A
|
|
18
21
|
* skipped update carries no errno or updater stderr, because no local updater ran. Both
|
|
19
22
|
* reach the consumer as `errorCode: "update_active"` and differ only in timing:
|
|
20
|
-
* `active_owner` follows the full
|
|
23
|
+
* `active_owner` follows the full 165-second contention wait, while `cleanup_pending` is
|
|
21
24
|
* immediate, because a surviving updater group may outlive any bound worth waiting out.
|
|
22
25
|
*/
|
|
23
26
|
const skippedUpdates = new Map([
|
|
@@ -26,8 +29,9 @@ const skippedUpdates = new Map([
|
|
|
26
29
|
]);
|
|
27
30
|
/**
|
|
28
31
|
* Build the warning from the contained update error. `installedVersion` is the parsed version the
|
|
29
|
-
* session will actually run (the preflight re-read it after the failed update). `errorCode` is
|
|
30
|
-
*
|
|
32
|
+
* session will actually run (the preflight re-read it after the failed update). `errorCode` is
|
|
33
|
+
* `login_shell_failed` when the login shell failed before the update ran, else the update
|
|
34
|
+
* probe's allowlisted `errno` (e.g. `ETIMEDOUT`) when present, else a generic token.
|
|
31
35
|
*
|
|
32
36
|
* An error carrying `updateReason: "active_owner"` is contention, not failure: another process
|
|
33
37
|
* held the update lease until this caller's wait expired, so no local update command ran. That
|
|
@@ -39,6 +43,7 @@ export function buildUpdateWarning(agent, installedVersion, error) {
|
|
|
39
43
|
const details = error instanceof ElwoodError ? error.details : {};
|
|
40
44
|
const errno = typeof details["errno"] === "string" ? details["errno"] : undefined;
|
|
41
45
|
const stderr = typeof details["stderr"] === "string" ? details["stderr"] : "";
|
|
46
|
+
const exitStatus = typeof details["exitStatus"] === "number" ? details["exitStatus"] : undefined;
|
|
42
47
|
const skipped = skippedUpdates.get(details["updateReason"]);
|
|
43
48
|
return {
|
|
44
49
|
agent,
|
|
@@ -49,8 +54,18 @@ export function buildUpdateWarning(agent, installedVersion, error) {
|
|
|
49
54
|
? `\`${agent} update\` failed; continuing with the installed CLI ${installedVersion}.`
|
|
50
55
|
: `\`${agent} update\` skipped: ${skipped}; continuing with the installed CLI ${installedVersion}.`,
|
|
51
56
|
installedVersion,
|
|
52
|
-
errorCode: skipped === undefined ? (errno
|
|
57
|
+
errorCode: skipped === undefined ? failureCode(details, errno) : "update_active",
|
|
53
58
|
raw: stderr.slice(0, maxStderr),
|
|
59
|
+
...(exitStatus === undefined ? {} : { exitStatus }),
|
|
54
60
|
};
|
|
55
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* A login shell that timed out or exited before running `update` is the user's profile, not the
|
|
64
|
+
* updater, so it reports as `login_shell_failed` rather than the probe's errno (§9.2, C-PERF-05).
|
|
65
|
+
*/
|
|
66
|
+
function failureCode(details, errno) {
|
|
67
|
+
if (details["phase"] === "login_shell")
|
|
68
|
+
return "login_shell_failed";
|
|
69
|
+
return errno ?? "update_failed";
|
|
70
|
+
}
|
|
56
71
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/core/warnings/update.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/core/warnings/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAa3C,gGAAgG;AAChG,kGAAkG;AAClG,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,cAAc,GAAiC,IAAI,GAAG,CAAC;IAC3D,CAAC,cAAc,EAAE,iCAAiC,CAAC;IACnD,CAAC,iBAAiB,EAAE,gDAAgD,CAAC;CACtE,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAsB,EACtB,gBAAwB,EACxB,KAAc;IAEd,MAAM,OAAO,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5D,OAAO;QACL,KAAK;QACL,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,SAAS;QACnB,OAAO,EACL,OAAO,KAAK,SAAS;YACnB,CAAC,CAAC,KAAK,KAAK,uDAAuD,gBAAgB,GAAG;YACtF,CAAC,CAAC,KAAK,KAAK,sBAAsB,OAAO,uCAAuC,gBAAgB,GAAG;QACvG,gBAAgB;QAChB,SAAS,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe;QAChF,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;QAC/B,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,OAA0C,EAC1C,KAAyB;IAEzB,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,aAAa;QAAE,OAAO,oBAAoB,CAAC;IACpE,OAAO,KAAK,IAAI,eAAe,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Latches one PTY's exit from a single subscription. node-pty never replays an exit to a
|
|
3
|
+
* later subscriber, so a waiter that subscribed only after the exit would sit out its
|
|
4
|
+
* whole timeout. Shared by termination (PRD §9.4, C-LIFE-10), which awaits a process-table
|
|
5
|
+
* sweep before any SIGKILL (after a SIGTERM only when the leader outlasts it), and by
|
|
6
|
+
* Codex's `setModel` restore (§5.3, C-CODEX-14), which waits for a closing CLI to exit
|
|
7
|
+
* before restoring `config.toml`.
|
|
8
|
+
*/
|
|
9
|
+
import type { PtyProcess } from "./types.ts";
|
|
10
|
+
export declare class PtyExitLatch {
|
|
11
|
+
private observed;
|
|
12
|
+
private readonly waiters;
|
|
13
|
+
private readonly unsubscribe;
|
|
14
|
+
constructor(pty: Pick<PtyProcess, "onExit">);
|
|
15
|
+
/** Whether the exit has been observed. From then on the PTY's pid may be reused. */
|
|
16
|
+
get exited(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Resolves `true` once the exit is observed, or `false` after `timeoutMs`, so a stuck
|
|
19
|
+
* CLI cannot hold its waiter. With `unref`, the pending timer does not keep the host
|
|
20
|
+
* process alive.
|
|
21
|
+
*/
|
|
22
|
+
within(timeoutMs: number, options?: {
|
|
23
|
+
readonly unref?: boolean;
|
|
24
|
+
}): Promise<boolean>;
|
|
25
|
+
/** Drops the exit subscription; `exited` keeps what it last observed. */
|
|
26
|
+
dispose(): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=exit-latch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-latch.d.ts","sourceRoot":"","sources":["../../src/pty/exit-latch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAE7B,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;IAO3C,oFAAoF;IACpF,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAevF,yEAAyE;IACzE,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Latches one PTY's exit from a single subscription. node-pty never replays an exit to a
|
|
3
|
+
* later subscriber, so a waiter that subscribed only after the exit would sit out its
|
|
4
|
+
* whole timeout. Shared by termination (PRD §9.4, C-LIFE-10), which awaits a process-table
|
|
5
|
+
* sweep before any SIGKILL (after a SIGTERM only when the leader outlasts it), and by
|
|
6
|
+
* Codex's `setModel` restore (§5.3, C-CODEX-14), which waits for a closing CLI to exit
|
|
7
|
+
* before restoring `config.toml`.
|
|
8
|
+
*/
|
|
9
|
+
export class PtyExitLatch {
|
|
10
|
+
observed = false;
|
|
11
|
+
waiters = new Set();
|
|
12
|
+
unsubscribe;
|
|
13
|
+
constructor(pty) {
|
|
14
|
+
this.unsubscribe = pty.onExit(() => {
|
|
15
|
+
this.observed = true;
|
|
16
|
+
for (const wake of this.waiters)
|
|
17
|
+
wake();
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Whether the exit has been observed. From then on the PTY's pid may be reused. */
|
|
21
|
+
get exited() {
|
|
22
|
+
return this.observed;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolves `true` once the exit is observed, or `false` after `timeoutMs`, so a stuck
|
|
26
|
+
* CLI cannot hold its waiter. With `unref`, the pending timer does not keep the host
|
|
27
|
+
* process alive.
|
|
28
|
+
*/
|
|
29
|
+
within(timeoutMs, options = {}) {
|
|
30
|
+
if (this.observed)
|
|
31
|
+
return Promise.resolve(true);
|
|
32
|
+
return new Promise((resolve) => {
|
|
33
|
+
const settle = (exited) => {
|
|
34
|
+
clearTimeout(timer);
|
|
35
|
+
this.waiters.delete(wake);
|
|
36
|
+
resolve(exited);
|
|
37
|
+
};
|
|
38
|
+
const wake = () => settle(true);
|
|
39
|
+
const timer = setTimeout(() => settle(false), timeoutMs);
|
|
40
|
+
if (options.unref === true)
|
|
41
|
+
timer.unref();
|
|
42
|
+
this.waiters.add(wake);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/** Drops the exit subscription; `exited` keeps what it last observed. */
|
|
46
|
+
dispose() {
|
|
47
|
+
this.unsubscribe();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=exit-latch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-latch.js","sourceRoot":"","sources":["../../src/pty/exit-latch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,OAAO,YAAY;IACf,QAAQ,GAAG,KAAK,CAAC;IACR,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;IAChC,WAAW,CAAa;IAEzC,YAAY,GAA+B;QACzC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAiB,EAAE,UAAwC,EAAE;QAClE,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,CAAC,MAAe,EAAQ,EAAE;gBACvC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,MAAM,IAAI,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;YACzD,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A process's exit as a shell reports it, shared by `elwood interactive` (PRD §12A.9,
|
|
3
|
+
* C-CLI-25) and the probe runner (§9.2, C-PERF-03).
|
|
4
|
+
*/
|
|
5
|
+
/** A signal-terminated process maps to the shell convention 128 + signal number. */
|
|
6
|
+
export declare function exitStatus(code: number | null, signal: NodeJS.Signals | null): number;
|
|
7
|
+
//# sourceMappingURL=exit-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-status.d.ts","sourceRoot":"","sources":["../../src/runtime/exit-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,CAIrF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A process's exit as a shell reports it, shared by `elwood interactive` (PRD §12A.9,
|
|
3
|
+
* C-CLI-25) and the probe runner (§9.2, C-PERF-03).
|
|
4
|
+
*/
|
|
5
|
+
import { constants } from "node:os";
|
|
6
|
+
/** A signal-terminated process maps to the shell convention 128 + signal number. */
|
|
7
|
+
export function exitStatus(code, signal) {
|
|
8
|
+
if (code !== null)
|
|
9
|
+
return code;
|
|
10
|
+
const number = signal === null ? undefined : constants.signals[signal];
|
|
11
|
+
return number === undefined ? 1 : 128 + number;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=exit-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-status.js","sourceRoot":"","sources":["../../src/runtime/exit-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,IAAmB,EAAE,MAA6B;IAC3E,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the e2e home guard (PRD §12, C-E2E-24) and the code that reads its stops share: the
|
|
3
|
+
* variable listing the suite's private homes, which home variables the guard checks, the
|
|
4
|
+
* guard's exit status, and the marker that starts the line it writes, followed by its reason.
|
|
5
|
+
* The marker ends in a token drawn once per parent process, so neither a startup file nor the
|
|
6
|
+
* agent or probe command can print it, and only a shell that exited `homeGuardExitCode` after
|
|
7
|
+
* writing it counts as stopped by the guard. Owned here, apart from the guard script in
|
|
8
|
+
* `shell.ts`, so the probe runner and the startup check that read it never load the shell
|
|
9
|
+
* helpers.
|
|
10
|
+
*/
|
|
11
|
+
import { StreamMarkerWatcher } from "../stream-marker.ts";
|
|
12
|
+
/**
|
|
13
|
+
* The variable listing the e2e suite's private CLI homes as a JSON array of absolute paths,
|
|
14
|
+
* each home in its given and its real spelling.
|
|
15
|
+
*/
|
|
16
|
+
export declare const homeGuardHomesKey = "ELWOOD_E2E_PRIVATE_HOMES";
|
|
17
|
+
/** The exit status of a login shell the e2e home guard stopped. */
|
|
18
|
+
export declare const homeGuardExitCode = 97;
|
|
19
|
+
/** The marker that starts the line the guard writes, before its reason, as it exits. */
|
|
20
|
+
export declare const homeGuardStopMarker: string;
|
|
21
|
+
/** Why a launch the e2e home guard stopped failed, for its start or probe error. */
|
|
22
|
+
export declare const homeGuardStoppedReason: string;
|
|
23
|
+
/** The private CLI homes and Claude temp root protected during e2e launches. */
|
|
24
|
+
declare const homeVariables: readonly ["CLAUDE_CONFIG_DIR", "CODEX_HOME", "CLAUDE_CODE_TMPDIR"];
|
|
25
|
+
export type HomeVariable = (typeof homeVariables)[number];
|
|
26
|
+
/** The registered homes, or `undefined` when `raw` is not a JSON array of absolute paths. */
|
|
27
|
+
export declare function privateHomes(raw: string): readonly string[] | undefined;
|
|
28
|
+
/** The home variables the guard checks: those Elwood's own environment sets to one of `homes`. */
|
|
29
|
+
export declare function guardedVariables(homes: readonly string[]): readonly HomeVariable[];
|
|
30
|
+
/**
|
|
31
|
+
* Whether the guard checks a launch Elwood starts now, so that it can stop it and write the
|
|
32
|
+
* stop marker: the list is set, and either cannot be read, which stops every launch, or names a
|
|
33
|
+
* home that a guarded variable is set to.
|
|
34
|
+
*/
|
|
35
|
+
export declare function homeGuardChecksLaunch(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Whether a login shell that exited with `status` was stopped by the e2e home guard: only if
|
|
38
|
+
* its output also carried the stop marker (`sawMarker`, asked only after a status-97 exit),
|
|
39
|
+
* since the status alone could be the command's own.
|
|
40
|
+
*/
|
|
41
|
+
export declare function homeGuardStopped(status: number | null, sawMarker: () => boolean): boolean;
|
|
42
|
+
/** A watcher for the stop marker in one stream. */
|
|
43
|
+
export declare function watchForStopMarker(): StreamMarkerWatcher;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/home-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,QAAgE,CAAC;AAEjG,oFAAoF;AACpF,eAAO,MAAM,sBAAsB,QAG2B,CAAC;AAE/D,gFAAgF;AAChF,QAAA,MAAM,aAAa,oEAAqE,CAAC;AAEzF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAQvE;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,YAAY,EAAE,CAElF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAK/C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,OAAO,GAAG,OAAO,CAEzF;AAID,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,mBAAmB,CAExD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the e2e home guard (PRD §12, C-E2E-24) and the code that reads its stops share: the
|
|
3
|
+
* variable listing the suite's private homes, which home variables the guard checks, the
|
|
4
|
+
* guard's exit status, and the marker that starts the line it writes, followed by its reason.
|
|
5
|
+
* The marker ends in a token drawn once per parent process, so neither a startup file nor the
|
|
6
|
+
* agent or probe command can print it, and only a shell that exited `homeGuardExitCode` after
|
|
7
|
+
* writing it counts as stopped by the guard. Owned here, apart from the guard script in
|
|
8
|
+
* `shell.ts`, so the probe runner and the startup check that read it never load the shell
|
|
9
|
+
* helpers.
|
|
10
|
+
*/
|
|
11
|
+
import { randomBytes } from "node:crypto";
|
|
12
|
+
import { isStringArray } from "../../core/predicates.js";
|
|
13
|
+
import { StreamMarkerWatcher } from "../stream-marker.js";
|
|
14
|
+
/**
|
|
15
|
+
* The variable listing the e2e suite's private CLI homes as a JSON array of absolute paths,
|
|
16
|
+
* each home in its given and its real spelling.
|
|
17
|
+
*/
|
|
18
|
+
export const homeGuardHomesKey = "ELWOOD_E2E_PRIVATE_HOMES";
|
|
19
|
+
/** The exit status of a login shell the e2e home guard stopped. */
|
|
20
|
+
export const homeGuardExitCode = 97;
|
|
21
|
+
/** The marker that starts the line the guard writes, before its reason, as it exits. */
|
|
22
|
+
export const homeGuardStopMarker = `elwood-home-guard-stopped-${randomBytes(8).toString("hex")}`;
|
|
23
|
+
/** Why a launch the e2e home guard stopped failed, for its start or probe error. */
|
|
24
|
+
export const homeGuardStoppedReason = "the e2e home guard stopped its login shell: a startup file left CODEX_HOME, " +
|
|
25
|
+
"CLAUDE_CONFIG_DIR, or CLAUDE_CODE_TMPDIR unexported or not one of the suite's private homes, or " +
|
|
26
|
+
`${homeGuardHomesKey} is not a JSON array of absolute paths`;
|
|
27
|
+
/** The private CLI homes and Claude temp root protected during e2e launches. */
|
|
28
|
+
const homeVariables = ["CLAUDE_CONFIG_DIR", "CODEX_HOME", "CLAUDE_CODE_TMPDIR"];
|
|
29
|
+
/** The registered homes, or `undefined` when `raw` is not a JSON array of absolute paths. */
|
|
30
|
+
export function privateHomes(raw) {
|
|
31
|
+
let parsed;
|
|
32
|
+
try {
|
|
33
|
+
parsed = JSON.parse(raw);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
return isStringArray(parsed) && parsed.every((home) => home.startsWith("/")) ? parsed : undefined;
|
|
39
|
+
}
|
|
40
|
+
/** The home variables the guard checks: those Elwood's own environment sets to one of `homes`. */
|
|
41
|
+
export function guardedVariables(homes) {
|
|
42
|
+
return homeVariables.filter((name) => homes.includes(process.env[name] ?? ""));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Whether the guard checks a launch Elwood starts now, so that it can stop it and write the
|
|
46
|
+
* stop marker: the list is set, and either cannot be read, which stops every launch, or names a
|
|
47
|
+
* home that a guarded variable is set to.
|
|
48
|
+
*/
|
|
49
|
+
export function homeGuardChecksLaunch() {
|
|
50
|
+
const raw = process.env[homeGuardHomesKey] ?? "";
|
|
51
|
+
if (raw === "")
|
|
52
|
+
return false;
|
|
53
|
+
const homes = privateHomes(raw);
|
|
54
|
+
return homes === undefined || guardedVariables(homes).length > 0;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Whether a login shell that exited with `status` was stopped by the e2e home guard: only if
|
|
58
|
+
* its output also carried the stop marker (`sawMarker`, asked only after a status-97 exit),
|
|
59
|
+
* since the status alone could be the command's own.
|
|
60
|
+
*/
|
|
61
|
+
export function homeGuardStopped(status, sawMarker) {
|
|
62
|
+
return status === homeGuardExitCode && sawMarker();
|
|
63
|
+
}
|
|
64
|
+
const stopMarkerBytes = Buffer.from(homeGuardStopMarker);
|
|
65
|
+
/** A watcher for the stop marker in one stream. */
|
|
66
|
+
export function watchForStopMarker() {
|
|
67
|
+
return new StreamMarkerWatcher(stopMarkerBytes);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/home-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAE5D,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,wFAAwF;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAAG,6BAA6B,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAEjG,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GACjC,8EAA8E;IAC9E,kGAAkG;IAClG,GAAG,iBAAiB,wCAAwC,CAAC;AAE/D,gFAAgF;AAChF,MAAM,aAAa,GAAG,CAAC,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,CAAU,CAAC;AAIzF,6FAA6F;AAC7F,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACvD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,KAAK,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB,EAAE,SAAwB;IAC9E,OAAO,MAAM,KAAK,iBAAiB,IAAI,SAAS,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAEzD,mDAAmD;AACnD,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/** Restores persisted loop definitions before live resources start (PRD §5.9/§9.3). */
|
|
2
|
-
import
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export
|
|
1
|
+
/** Restores persisted loop definitions before live resources start (PRD §5.9/§9.3, C-API-20). */
|
|
2
|
+
import type { StateFileWriter } from "../state/launch-ownership.ts";
|
|
3
|
+
import { type PersistedLoopDefinition, readLoopSidecar } from "../state/loop-store.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Read definitions and durably prune expiry before a resumed PTY or bridge is created. The prune
|
|
6
|
+
* goes through the launch's `write`, with the text it was read from, so a launch that then fails
|
|
7
|
+
* restores the sidecar it found (C-API-20, C-LOOP-13).
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadRuntimeLoopDefinitions(stateDir: string, elwoodSessionId: string, write: StateFileWriter, now?: number, read?: typeof readLoopSidecar): readonly PersistedLoopDefinition[];
|
|
10
10
|
//# sourceMappingURL=loop-restore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-restore.d.ts","sourceRoot":"","sources":["../../src/runtime/loop-restore.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"loop-restore.d.ts","sourceRoot":"","sources":["../../src/runtime/loop-restore.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAGjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EACL,KAAK,uBAAuB,EAE5B,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,eAAe,EACtB,GAAG,SAAa,EAChB,IAAI,yBAAkB,GACrB,SAAS,uBAAuB,EAAE,CAgBpC"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
/** Restores persisted loop definitions before live resources start (PRD §5.9/§9.3). */
|
|
1
|
+
/** Restores persisted loop definitions before live resources start (PRD §5.9/§9.3, C-API-20). */
|
|
2
2
|
import { elwoodError } from "../core/errors.js";
|
|
3
|
-
import { pruneExpiredLoopDefinitions,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export function loadRuntimeLoopDefinitions(stateDir, elwoodSessionId, now = Date.now(),
|
|
10
|
-
const definitions =
|
|
3
|
+
import { pruneExpiredLoopDefinitions, readLoopSidecar, writeLoopDefinitions, } from "../state/loop-store.js";
|
|
4
|
+
/**
|
|
5
|
+
* Read definitions and durably prune expiry before a resumed PTY or bridge is created. The prune
|
|
6
|
+
* goes through the launch's `write`, with the text it was read from, so a launch that then fails
|
|
7
|
+
* restores the sidecar it found (C-API-20, C-LOOP-13).
|
|
8
|
+
*/
|
|
9
|
+
export function loadRuntimeLoopDefinitions(stateDir, elwoodSessionId, write, now = Date.now(), read = readLoopSidecar) {
|
|
10
|
+
const { definitions, text } = read(stateDir, elwoodSessionId);
|
|
11
11
|
const expired = definitions.find((definition) => definition.expiresAt <= now);
|
|
12
12
|
if (expired === undefined)
|
|
13
13
|
return definitions;
|
|
14
14
|
const active = pruneExpiredLoopDefinitions(definitions, now);
|
|
15
15
|
try {
|
|
16
|
-
|
|
16
|
+
writeLoopDefinitions(stateDir, elwoodSessionId, active, (path, next) => write(path, next, text));
|
|
17
17
|
}
|
|
18
18
|
catch {
|
|
19
19
|
// Details name only the loop id, never its prompt (§10 loop_persistence_failed).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-restore.js","sourceRoot":"","sources":["../../src/runtime/loop-restore.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"loop-restore.js","sourceRoot":"","sources":["../../src/runtime/loop-restore.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAEL,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAAgB,EAChB,eAAuB,EACvB,KAAsB,EACtB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAChB,IAAI,GAAG,eAAe;IAEtB,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;IAC9E,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC9C,MAAM,MAAM,GAAG,2BAA2B,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CACrE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CACxB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,iFAAiF;QACjF,MAAM,WAAW,CAAC,yBAAyB,EAAE,qCAAqC,EAAE;YAClF,MAAM,EAAE,OAAO,CAAC,EAAE;SACnB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A probe's captured stream, bounded by the per-stream byte cap. Implements the output bound of
|
|
3
|
+
* PRD §9.2 (C-PERF-03): a CLI that floods its output cannot flood Elwood's memory.
|
|
4
|
+
*/
|
|
5
|
+
/** Each captured stream's own byte cap, not the probe's total (C-PERF-03). */
|
|
6
|
+
export declare const maxProbeStreamOutputBytes = 1000000;
|
|
7
|
+
/** Accumulates stream chunks up to a hard byte cap, tracking overflow. */
|
|
8
|
+
export declare class CappedBuffer {
|
|
9
|
+
private chunks;
|
|
10
|
+
private byteLength;
|
|
11
|
+
overflowed: boolean;
|
|
12
|
+
append(chunk: Buffer): void;
|
|
13
|
+
text(): string;
|
|
14
|
+
release(): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=capped-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capped-buffer.d.ts","sourceRoot":"","sources":["../../../src/runtime/probe/capped-buffer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,UAAY,CAAC;AAEnD,0EAA0E;AAC1E,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAK;IACvB,UAAU,UAAS;IAEnB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAc3B,IAAI,IAAI,MAAM;IASd,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A probe's captured stream, bounded by the per-stream byte cap. Implements the output bound of
|
|
3
|
+
* PRD §9.2 (C-PERF-03): a CLI that floods its output cannot flood Elwood's memory.
|
|
4
|
+
*/
|
|
5
|
+
import { completeUtf8Length } from "../../core/utf8.js";
|
|
6
|
+
/** Each captured stream's own byte cap, not the probe's total (C-PERF-03). */
|
|
7
|
+
export const maxProbeStreamOutputBytes = 1_000_000;
|
|
8
|
+
/** Accumulates stream chunks up to a hard byte cap, tracking overflow. */
|
|
9
|
+
export class CappedBuffer {
|
|
10
|
+
chunks = [];
|
|
11
|
+
byteLength = 0;
|
|
12
|
+
overflowed = false;
|
|
13
|
+
append(chunk) {
|
|
14
|
+
// Once the cap is hit the probe is aborted and its pipes destroyed, so no chunk
|
|
15
|
+
// ever arrives after `overflowed` is set; the first over-cap chunk is the last.
|
|
16
|
+
const remaining = maxProbeStreamOutputBytes - this.byteLength;
|
|
17
|
+
if (chunk.length > remaining) {
|
|
18
|
+
this.chunks.push(chunk.subarray(0, remaining));
|
|
19
|
+
this.byteLength = maxProbeStreamOutputBytes;
|
|
20
|
+
this.overflowed = true;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.chunks.push(chunk);
|
|
24
|
+
this.byteLength += chunk.length;
|
|
25
|
+
}
|
|
26
|
+
text() {
|
|
27
|
+
// Byte capping can split a multibyte code point at the boundary. Drop any
|
|
28
|
+
// incomplete trailing UTF-8 sequence so the decoded string re-encodes to
|
|
29
|
+
// at most the byte cap (C-PERF-03) rather than growing via a replacement
|
|
30
|
+
// character.
|
|
31
|
+
const bytes = Buffer.concat(this.chunks);
|
|
32
|
+
return bytes.subarray(0, completeUtf8Length(bytes)).toString("utf8");
|
|
33
|
+
}
|
|
34
|
+
release() {
|
|
35
|
+
this.chunks = [];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=capped-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capped-buffer.js","sourceRoot":"","sources":["../../../src/runtime/probe/capped-buffer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AAEnD,0EAA0E;AAC1E,MAAM,OAAO,YAAY;IACf,MAAM,GAAa,EAAE,CAAC;IACtB,UAAU,GAAG,CAAC,CAAC;IACvB,UAAU,GAAG,KAAK,CAAC;IAEnB,MAAM,CAAC,KAAa;QAClB,gFAAgF;QAChF,gFAAgF;QAChF,MAAM,SAAS,GAAG,yBAAyB,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,GAAG,yBAAyB,CAAC;YAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,IAAI;QACF,0EAA0E;QAC1E,yEAAyE;QACzE,yEAAyE;QACzE,aAAa;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a probe's output is captured, bounded by the per-stream byte cap (PRD §9.2, C-PERF-03,
|
|
3
|
+
* C-PERF-05). A directly spawned command owns its stdout and stderr pipes, so they are captured
|
|
4
|
+
* as they arrive. A login shell's pipes are shared with everything its startup files run. A
|
|
5
|
+
* DEBUG or ZERR trap writes to them while the command runs, an EXIT trap and `.zlogout` write
|
|
6
|
+
* after it, and a background helper can write at any time, so no marker can tell their output
|
|
7
|
+
* from the command's. A probe script therefore `exec`s its command with stdout and stderr
|
|
8
|
+
* redirected into two named pipes in a directory made for that probe alone (`probeScript`), and
|
|
9
|
+
* the shell's own pipes are drained and never kept.
|
|
10
|
+
*/
|
|
11
|
+
import type { Readable } from "node:stream";
|
|
12
|
+
/** The probe process: what a capture reads, and the exit after which only its heirs write. */
|
|
13
|
+
export type ProbeChild = {
|
|
14
|
+
readonly stdout: Readable;
|
|
15
|
+
readonly stderr: Readable;
|
|
16
|
+
once(event: "exit", listener: () => void): unknown;
|
|
17
|
+
};
|
|
18
|
+
/** What a capture reports while it reads. */
|
|
19
|
+
export type CaptureEvents = {
|
|
20
|
+
/** A stream passed the cap. */
|
|
21
|
+
readonly overflowed: () => void;
|
|
22
|
+
/**
|
|
23
|
+
* Every named pipe has ended after the probe exited: nothing holds its write end. Only named
|
|
24
|
+
* pipes send it. A process's own pipes end before its `close`, so a capture of them is
|
|
25
|
+
* complete by then.
|
|
26
|
+
*/
|
|
27
|
+
readonly ended: () => void;
|
|
28
|
+
};
|
|
29
|
+
/** One probe's output capture. */
|
|
30
|
+
export type ProbeCapture = {
|
|
31
|
+
/** The probe's arguments as the capture runs them: a probe script's output pointed at it. */
|
|
32
|
+
args(args: readonly string[]): readonly string[];
|
|
33
|
+
/** Captures `child`'s output. */
|
|
34
|
+
watch(child: ProbeChild, events: CaptureEvents): void;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the capture is complete, once the probe's process has closed. A capture of the
|
|
37
|
+
* process's own pipes always is. Named pipes are complete once nothing holds their write ends,
|
|
38
|
+
* which a process the command started can delay past the `close`.
|
|
39
|
+
*/
|
|
40
|
+
ended(): boolean;
|
|
41
|
+
/** Each stream's capture, stdout then stderr, at most the cap. */
|
|
42
|
+
text(): [string, string];
|
|
43
|
+
/**
|
|
44
|
+
* Drops the capture, closes what it opened, and removes it. Named pipes' directory is removed
|
|
45
|
+
* at once, unless the command changed it: then the removal runs off the event loop and can
|
|
46
|
+
* finish after this returns. Safe to call twice.
|
|
47
|
+
*/
|
|
48
|
+
release(): void;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* The capture for a probe: named pipes for a script that `exec`s its command into them,
|
|
52
|
+
* nothing for a script answered by its status alone, and the pipes of any other command.
|
|
53
|
+
*/
|
|
54
|
+
export declare function probeCapture(args: readonly string[]): Promise<ProbeCapture>;
|
|
55
|
+
//# sourceMappingURL=capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/runtime/probe/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C,8FAA8F;AAC9F,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CACpD,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,YAAY,GAAG;IACzB,6FAA6F;IAC7F,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAAC;IACjD,iCAAiC;IACjC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACtD;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC;IACjB,kEAAkE;IAClE,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB;;;;OAIG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAG3E"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a probe's output is captured, bounded by the per-stream byte cap (PRD §9.2, C-PERF-03,
|
|
3
|
+
* C-PERF-05). A directly spawned command owns its stdout and stderr pipes, so they are captured
|
|
4
|
+
* as they arrive. A login shell's pipes are shared with everything its startup files run. A
|
|
5
|
+
* DEBUG or ZERR trap writes to them while the command runs, an EXIT trap and `.zlogout` write
|
|
6
|
+
* after it, and a background helper can write at any time, so no marker can tell their output
|
|
7
|
+
* from the command's. A probe script therefore `exec`s its command with stdout and stderr
|
|
8
|
+
* redirected into two named pipes in a directory made for that probe alone (`probeScript`), and
|
|
9
|
+
* the shell's own pipes are drained and never kept.
|
|
10
|
+
*/
|
|
11
|
+
import { CappedBuffer } from "./capped-buffer.js";
|
|
12
|
+
import { NamedPipeCapture } from "./named-pipes.js";
|
|
13
|
+
import { announcesStart, probeOutputRedirect } from "./start.js";
|
|
14
|
+
/**
|
|
15
|
+
* The capture for a probe: named pipes for a script that `exec`s its command into them,
|
|
16
|
+
* nothing for a script answered by its status alone, and the pipes of any other command.
|
|
17
|
+
*/
|
|
18
|
+
export function probeCapture(args) {
|
|
19
|
+
if (args.at(-1)?.endsWith(probeOutputRedirect))
|
|
20
|
+
return NamedPipeCapture.create();
|
|
21
|
+
return Promise.resolve(announcesStart(args) ? new DiscardedCapture() : new PipeCapture());
|
|
22
|
+
}
|
|
23
|
+
/** A directly spawned command's own stdout and stderr pipes. */
|
|
24
|
+
class PipeCapture {
|
|
25
|
+
buffers = [new CappedBuffer(), new CappedBuffer()];
|
|
26
|
+
args(args) {
|
|
27
|
+
return args;
|
|
28
|
+
}
|
|
29
|
+
watch(child, events) {
|
|
30
|
+
[child.stdout, child.stderr].forEach((stream, index) => {
|
|
31
|
+
const buffer = this.buffers[index];
|
|
32
|
+
stream.on("data", (chunk) => {
|
|
33
|
+
buffer.append(chunk);
|
|
34
|
+
if (buffer.overflowed)
|
|
35
|
+
events.overflowed();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
ended() {
|
|
40
|
+
return true; // the process's `close` waits for its pipes
|
|
41
|
+
}
|
|
42
|
+
text() {
|
|
43
|
+
return [this.buffers[0].text(), this.buffers[1].text()];
|
|
44
|
+
}
|
|
45
|
+
release() {
|
|
46
|
+
// An unresolved probe's reaper retains the child and its listeners, and through them
|
|
47
|
+
// these chunks, so they are dropped here rather than left for the reaper to outlive.
|
|
48
|
+
for (const buffer of this.buffers)
|
|
49
|
+
buffer.release();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** A login shell whose command's output went to `/dev/null`: its own pipes are drained. */
|
|
53
|
+
class DiscardedCapture {
|
|
54
|
+
args(args) {
|
|
55
|
+
return args;
|
|
56
|
+
}
|
|
57
|
+
watch(child) {
|
|
58
|
+
child.stdout.resume();
|
|
59
|
+
child.stderr.resume();
|
|
60
|
+
}
|
|
61
|
+
ended() {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
text() {
|
|
65
|
+
return ["", ""];
|
|
66
|
+
}
|
|
67
|
+
release() {
|
|
68
|
+
// Nothing was kept.
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=capture.js.map
|