@with-logic/elwood 0.1.0 → 0.1.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 +182 -3
- package/CONTRIBUTING.md +104 -0
- package/LICENSE +1 -1
- package/README.md +295 -26
- package/SECURITY.md +42 -0
- package/dist/claude/command.d.ts +9 -2
- package/dist/claude/command.d.ts.map +1 -1
- package/dist/claude/command.js +23 -16
- package/dist/claude/command.js.map +1 -1
- package/dist/claude/model-picker.d.ts.map +1 -1
- package/dist/claude/model-picker.js +4 -3
- package/dist/claude/model-picker.js.map +1 -1
- package/dist/claude/model-switch-confirmation.js +9 -1
- package/dist/claude/model-switch-confirmation.js.map +1 -1
- package/dist/claude/screen-table.js +1 -1
- package/dist/claude/screen-table.js.map +1 -1
- package/dist/claude/session/build.d.ts.map +1 -1
- package/dist/claude/session/build.js +3 -0
- package/dist/claude/session/build.js.map +1 -1
- package/dist/claude/session/index.d.ts.map +1 -1
- package/dist/claude/session/index.js +5 -2
- package/dist/claude/session/index.js.map +1 -1
- package/dist/claude/session/resume.d.ts +1 -1
- package/dist/claude/session/resume.d.ts.map +1 -1
- package/dist/claude/session/resume.js +5 -1
- package/dist/claude/session/resume.js.map +1 -1
- package/dist/claude/session/start-or-resume.js +1 -0
- package/dist/claude/session/start-or-resume.js.map +1 -1
- package/dist/claude/simple.d.ts.map +1 -1
- package/dist/claude/simple.js +4 -0
- package/dist/claude/simple.js.map +1 -1
- package/dist/cli/args/index.d.ts +3 -1
- package/dist/cli/args/index.d.ts.map +1 -1
- package/dist/cli/args/index.js +10 -2
- package/dist/cli/args/index.js.map +1 -1
- package/dist/cli/args/options.d.ts.map +1 -1
- package/dist/cli/args/options.js +2 -0
- package/dist/cli/args/options.js.map +1 -1
- package/dist/cli/args-commands.d.ts +10 -0
- package/dist/cli/args-commands.d.ts.map +1 -0
- package/dist/cli/args-commands.js +113 -0
- package/dist/cli/args-commands.js.map +1 -0
- package/dist/cli/command-types.d.ts +26 -0
- package/dist/cli/command-types.d.ts.map +1 -0
- package/dist/cli/command-types.js +9 -0
- package/dist/cli/command-types.js.map +1 -0
- package/dist/cli/config/codec-primitives.d.ts +20 -0
- package/dist/cli/config/codec-primitives.d.ts.map +1 -0
- package/dist/cli/config/codec-primitives.js +51 -0
- package/dist/cli/config/codec-primitives.js.map +1 -0
- package/dist/cli/config/codec.d.ts.map +1 -1
- package/dist/cli/config/codec.js +4 -46
- package/dist/cli/config/codec.js.map +1 -1
- package/dist/cli/config/effective.d.ts.map +1 -1
- package/dist/cli/config/effective.js +1 -0
- package/dist/cli/config/effective.js.map +1 -1
- package/dist/cli/config/keys.d.ts +1 -1
- package/dist/cli/config/keys.d.ts.map +1 -1
- package/dist/cli/config/keys.js +1 -0
- package/dist/cli/config/keys.js.map +1 -1
- package/dist/cli/entry.d.ts +4 -2
- package/dist/cli/entry.d.ts.map +1 -1
- package/dist/cli/entry.js +2 -1
- package/dist/cli/entry.js.map +1 -1
- package/dist/cli/help.d.ts +2 -2
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +40 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/interactive/index.d.ts +26 -0
- package/dist/cli/interactive/index.d.ts.map +1 -0
- package/dist/cli/interactive/index.js +33 -0
- package/dist/cli/interactive/index.js.map +1 -0
- package/dist/cli/interactive/launch.d.ts +14 -0
- package/dist/cli/interactive/launch.d.ts.map +1 -0
- package/dist/cli/interactive/launch.js +66 -0
- package/dist/cli/interactive/launch.js.map +1 -0
- package/dist/cli/interactive/spawn.d.ts +18 -0
- package/dist/cli/interactive/spawn.d.ts.map +1 -0
- package/dist/cli/interactive/spawn.js +53 -0
- package/dist/cli/interactive/spawn.js.map +1 -0
- package/dist/cli/main-failure.d.ts +28 -0
- package/dist/cli/main-failure.d.ts.map +1 -0
- package/dist/cli/main-failure.js +78 -0
- package/dist/cli/main-failure.js.map +1 -0
- package/dist/cli/main.d.ts +12 -4
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +27 -73
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/models/index.d.ts +20 -0
- package/dist/cli/models/index.d.ts.map +1 -0
- package/dist/cli/models/index.js +63 -0
- package/dist/cli/models/index.js.map +1 -0
- package/dist/cli/models/render.d.ts +9 -0
- package/dist/cli/models/render.d.ts.map +1 -0
- package/dist/cli/models/render.js +33 -0
- package/dist/cli/models/render.js.map +1 -0
- package/dist/cli/request/index.d.ts.map +1 -1
- package/dist/cli/request/index.js +8 -2
- package/dist/cli/request/index.js.map +1 -1
- package/dist/cli/request/layers.d.ts +2 -0
- package/dist/cli/request/layers.d.ts.map +1 -1
- package/dist/cli/request/layers.js +9 -5
- package/dist/cli/request/layers.js.map +1 -1
- package/dist/cli/request/posture.d.ts +28 -0
- package/dist/cli/request/posture.d.ts.map +1 -0
- package/dist/cli/request/posture.js +70 -0
- package/dist/cli/request/posture.js.map +1 -0
- package/dist/cli/request/resolution-types.d.ts +1 -0
- package/dist/cli/request/resolution-types.d.ts.map +1 -1
- package/dist/cli/request/settings.d.ts +2 -12
- package/dist/cli/request/settings.d.ts.map +1 -1
- package/dist/cli/request/settings.js +2 -25
- package/dist/cli/request/settings.js.map +1 -1
- package/dist/cli/request/validation.d.ts +12 -0
- package/dist/cli/request/validation.d.ts.map +1 -1
- package/dist/cli/request/validation.js +30 -10
- package/dist/cli/request/validation.js.map +1 -1
- package/dist/cli/request/values.d.ts +1 -0
- package/dist/cli/request/values.d.ts.map +1 -1
- package/dist/cli/request/values.js +1 -0
- package/dist/cli/request/values.js.map +1 -1
- package/dist/cli/run/index.d.ts.map +1 -1
- package/dist/cli/run/index.js +5 -41
- package/dist/cli/run/index.js.map +1 -1
- package/dist/cli/run/subscribe.d.ts +19 -0
- package/dist/cli/run/subscribe.d.ts.map +1 -0
- package/dist/cli/run/subscribe.js +47 -0
- package/dist/cli/run/subscribe.js.map +1 -0
- package/dist/cli/session/launch.d.ts +3 -0
- package/dist/cli/session/launch.d.ts.map +1 -1
- package/dist/cli/session/launch.js +11 -0
- package/dist/cli/session/launch.js.map +1 -1
- package/dist/cli/sessions/index.d.ts +30 -0
- package/dist/cli/sessions/index.d.ts.map +1 -0
- package/dist/cli/sessions/index.js +61 -0
- package/dist/cli/sessions/index.js.map +1 -0
- package/dist/cli/sessions/list.d.ts +28 -0
- package/dist/cli/sessions/list.d.ts.map +1 -0
- package/dist/cli/sessions/list.js +63 -0
- package/dist/cli/sessions/list.js.map +1 -0
- package/dist/cli/sessions/settings.d.ts +11 -0
- package/dist/cli/sessions/settings.d.ts.map +1 -0
- package/dist/cli/sessions/settings.js +26 -0
- package/dist/cli/sessions/settings.js.map +1 -0
- package/dist/cli/table.d.ts +7 -0
- package/dist/cli/table.d.ts.map +1 -0
- package/dist/cli/table.js +14 -0
- package/dist/cli/table.js.map +1 -0
- package/dist/cli/types.d.ts +5 -1
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/codex/command.d.ts +18 -2
- package/dist/codex/command.d.ts.map +1 -1
- package/dist/codex/command.js +39 -24
- package/dist/codex/command.js.map +1 -1
- package/dist/codex/model-picker.d.ts.map +1 -1
- package/dist/codex/model-picker.js +3 -2
- package/dist/codex/model-picker.js.map +1 -1
- package/dist/codex/session/build.d.ts.map +1 -1
- package/dist/codex/session/build.js +5 -7
- package/dist/codex/session/build.js.map +1 -1
- package/dist/codex/session/index.d.ts.map +1 -1
- package/dist/codex/session/index.js +5 -2
- package/dist/codex/session/index.js.map +1 -1
- package/dist/codex/session/resume.d.ts +1 -1
- package/dist/codex/session/resume.d.ts.map +1 -1
- package/dist/codex/session/resume.js +5 -1
- package/dist/codex/session/resume.js.map +1 -1
- package/dist/codex/session/start-or-resume.js +1 -0
- package/dist/codex/session/start-or-resume.js.map +1 -1
- package/dist/codex/session/types.d.ts +3 -0
- package/dist/codex/session/types.d.ts.map +1 -1
- package/dist/codex/simple.d.ts.map +1 -1
- package/dist/codex/simple.js +4 -0
- package/dist/codex/simple.js.map +1 -1
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/high-trust.d.ts +41 -0
- package/dist/core/high-trust.d.ts.map +1 -0
- package/dist/core/high-trust.js +50 -0
- package/dist/core/high-trust.js.map +1 -0
- package/dist/core/input/index.d.ts.map +1 -1
- package/dist/core/input/index.js +15 -3
- package/dist/core/input/index.js.map +1 -1
- package/dist/core/models/input.d.ts +3 -0
- package/dist/core/models/input.d.ts.map +1 -0
- package/dist/core/models/input.js +9 -0
- package/dist/core/models/input.js.map +1 -0
- package/dist/core/models/picker.d.ts +2 -1
- package/dist/core/models/picker.d.ts.map +1 -1
- package/dist/core/models/picker.js +6 -5
- package/dist/core/models/picker.js.map +1 -1
- package/dist/core/models/tui-screen.d.ts +1 -1
- package/dist/core/models/tui-screen.d.ts.map +1 -1
- package/dist/core/models/tui-screen.js +26 -3
- package/dist/core/models/tui-screen.js.map +1 -1
- package/dist/core/trust/allowlist.d.ts +56 -0
- package/dist/core/trust/allowlist.d.ts.map +1 -0
- package/dist/core/{trust-prompts.js → trust/allowlist.js} +21 -38
- package/dist/core/trust/allowlist.js.map +1 -0
- package/dist/core/trust/prompts.d.ts +4 -46
- package/dist/core/trust/prompts.d.ts.map +1 -1
- package/dist/core/trust/prompts.js +2 -73
- package/dist/core/trust/prompts.js.map +1 -1
- package/dist/core/trust/responder.d.ts +2 -0
- package/dist/core/trust/responder.d.ts.map +1 -1
- package/dist/core/trust/responder.js +4 -0
- package/dist/core/trust/responder.js.map +1 -1
- package/dist/core/types.d.ts +3 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/runtime/launch-arguments.d.ts +12 -0
- package/dist/runtime/launch-arguments.d.ts.map +1 -0
- package/dist/runtime/launch-arguments.js +15 -0
- package/dist/runtime/launch-arguments.js.map +1 -0
- package/dist/runtime/session/base.d.ts.map +1 -1
- package/dist/runtime/session/base.js +4 -1
- package/dist/runtime/session/base.js.map +1 -1
- package/dist/runtime/session/commands.d.ts +2 -1
- package/dist/runtime/session/commands.d.ts.map +1 -1
- package/dist/runtime/session/commands.js +10 -4
- package/dist/runtime/session/commands.js.map +1 -1
- package/dist/runtime/session/lifecycle.d.ts +3 -4
- package/dist/runtime/session/lifecycle.d.ts.map +1 -1
- package/dist/runtime/session/lifecycle.js +6 -5
- package/dist/runtime/session/lifecycle.js.map +1 -1
- package/dist/state/directories.d.ts +4 -0
- package/dist/state/directories.d.ts.map +1 -0
- package/dist/state/directories.js +41 -0
- package/dist/state/directories.js.map +1 -0
- package/dist/state/files.d.ts.map +1 -1
- package/dist/state/files.js +25 -11
- package/dist/state/files.js.map +1 -1
- package/dist/state/private-session.d.ts.map +1 -1
- package/dist/state/private-session.js +2 -0
- package/dist/state/private-session.js.map +1 -1
- package/dist/state/store.d.ts.map +1 -1
- package/dist/state/store.js +7 -1
- package/dist/state/store.js.map +1 -1
- package/docs/cli-behavior.md +89 -1
- package/docs/cli-output.md +60 -0
- package/docs/cli.md +10 -2
- package/docs/codex/cli.md +57 -0
- package/docs/codex/config.md +47 -0
- package/docs/codex/hooks.md +70 -0
- package/examples/README.md +56 -0
- package/examples/full.ts +113 -0
- package/examples/minimal.ts +15 -0
- package/examples/stream.ts +39 -0
- package/examples/support.ts +71 -0
- package/package.json +17 -10
- package/prd/01-overview.md +21 -0
- package/prd/02-goals.md +47 -0
- package/prd/03-terminology.md +32 -0
- package/prd/04-architecture.md +121 -0
- package/prd/05-api/5.1-starting-claude.md +108 -0
- package/prd/05-api/5.2-resuming-claude.md +86 -0
- package/prd/05-api/5.3-claude-session-api.md +658 -0
- package/prd/05-api/5.4-events.md +145 -0
- package/prd/05-api/5.5-starting-codex.md +106 -0
- package/prd/05-api/5.6-resuming-codex.md +48 -0
- package/prd/05-api/5.7-codex-session-api.md +425 -0
- package/prd/05-api/5.8-session-api.md +122 -0
- package/prd/05-api/5.9-loops.md +170 -0
- package/prd/05-api/README.md +19 -0
- package/prd/06-claude-hook-bridge.md +164 -0
- package/prd/07-claude-policy.md +15 -0
- package/prd/07a-codex-hook-bridge.md +76 -0
- package/prd/08-state.md +127 -0
- package/prd/09-lifecycle.md +222 -0
- package/prd/10-errors.md +55 -0
- package/prd/11-test-app.md +53 -0
- package/prd/12-e2e.md +23 -0
- package/prd/12a-cli.md +375 -0
- package/prd/13-latitude.md +12 -0
- package/prd/14-conformance.md +333 -0
- package/prd/15-open-notes.md +8 -0
- package/prd/README.md +45 -0
- package/dist/claude/hook-dispatch.d.ts +0 -9
- package/dist/claude/hook-dispatch.d.ts.map +0 -1
- package/dist/claude/hook-dispatch.js +0 -12
- package/dist/claude/hook-dispatch.js.map +0 -1
- package/dist/claude/hook-events-extra.d.ts +0 -81
- package/dist/claude/hook-events-extra.d.ts.map +0 -1
- package/dist/claude/hook-events-extra.js +0 -6
- package/dist/claude/hook-events-extra.js.map +0 -1
- package/dist/claude/hook-events.d.ts +0 -101
- package/dist/claude/hook-events.d.ts.map +0 -1
- package/dist/claude/hook-events.js +0 -6
- package/dist/claude/hook-events.js.map +0 -1
- package/dist/claude/hook-names.d.ts +0 -24
- package/dist/claude/hook-names.d.ts.map +0 -1
- package/dist/claude/hook-names.js +0 -45
- package/dist/claude/hook-names.js.map +0 -1
- package/dist/claude/hooks.d.ts +0 -78
- package/dist/claude/hooks.d.ts.map +0 -1
- package/dist/claude/hooks.js +0 -6
- package/dist/claude/hooks.js.map +0 -1
- package/dist/claude/session-bridge.d.ts +0 -11
- package/dist/claude/session-bridge.d.ts.map +0 -1
- package/dist/claude/session-bridge.js +0 -18
- package/dist/claude/session-bridge.js.map +0 -1
- package/dist/claude/session-build.d.ts +0 -15
- package/dist/claude/session-build.d.ts.map +0 -1
- package/dist/claude/session-build.js +0 -147
- package/dist/claude/session-build.js.map +0 -1
- package/dist/claude/session-hook-handler.d.ts +0 -34
- package/dist/claude/session-hook-handler.d.ts.map +0 -1
- package/dist/claude/session-hook-handler.js +0 -42
- package/dist/claude/session-hook-handler.js.map +0 -1
- package/dist/claude/session-instance.d.ts +0 -42
- package/dist/claude/session-instance.d.ts.map +0 -1
- package/dist/claude/session-instance.js +0 -146
- package/dist/claude/session-instance.js.map +0 -1
- package/dist/claude/session-interface.d.ts +0 -49
- package/dist/claude/session-interface.d.ts.map +0 -1
- package/dist/claude/session-interface.js +0 -10
- package/dist/claude/session-interface.js.map +0 -1
- package/dist/claude/session-resume.d.ts +0 -8
- package/dist/claude/session-resume.d.ts.map +0 -1
- package/dist/claude/session-resume.js +0 -47
- package/dist/claude/session-resume.js.map +0 -1
- package/dist/claude/session-runtime.d.ts +0 -43
- package/dist/claude/session-runtime.d.ts.map +0 -1
- package/dist/claude/session-runtime.js +0 -105
- package/dist/claude/session-runtime.js.map +0 -1
- package/dist/claude/session-transcript.d.ts +0 -62
- package/dist/claude/session-transcript.d.ts.map +0 -1
- package/dist/claude/session-transcript.js +0 -88
- package/dist/claude/session-transcript.js.map +0 -1
- package/dist/claude/session.d.ts +0 -18
- package/dist/claude/session.d.ts.map +0 -1
- package/dist/claude/session.js +0 -58
- package/dist/claude/session.js.map +0 -1
- package/dist/claude/start-or-resume.d.ts +0 -12
- package/dist/claude/start-or-resume.d.ts.map +0 -1
- package/dist/claude/start-or-resume.js +0 -32
- package/dist/claude/start-or-resume.js.map +0 -1
- package/dist/claude/tool-hook-events.d.ts +0 -10
- package/dist/claude/tool-hook-events.d.ts.map +0 -1
- package/dist/claude/tool-hook-events.js +0 -18
- package/dist/claude/tool-hook-events.js.map +0 -1
- package/dist/claude/tool-types.d.ts +0 -158
- package/dist/claude/tool-types.d.ts.map +0 -1
- package/dist/claude/tool-types.js +0 -6
- package/dist/claude/tool-types.js.map +0 -1
- package/dist/claude/validate-input.d.ts +0 -8
- package/dist/claude/validate-input.d.ts.map +0 -1
- package/dist/claude/validate-input.js +0 -137
- package/dist/claude/validate-input.js.map +0 -1
- package/dist/claude/validate-permission-update.d.ts +0 -10
- package/dist/claude/validate-permission-update.d.ts.map +0 -1
- package/dist/claude/validate-permission-update.js +0 -72
- package/dist/claude/validate-permission-update.js.map +0 -1
- package/dist/claude/validate-result.d.ts +0 -7
- package/dist/claude/validate-result.d.ts.map +0 -1
- package/dist/claude/validate-result.js +0 -118
- package/dist/claude/validate-result.js.map +0 -1
- package/dist/claude/validate-shapes.d.ts +0 -22
- package/dist/claude/validate-shapes.d.ts.map +0 -1
- package/dist/claude/validate-shapes.js +0 -15
- package/dist/claude/validate-shapes.js.map +0 -1
- package/dist/claude/validate-tool-update.d.ts +0 -15
- package/dist/claude/validate-tool-update.d.ts.map +0 -1
- package/dist/claude/validate-tool-update.js +0 -122
- package/dist/claude/validate-tool-update.js.map +0 -1
- package/dist/cli/agent-detect.d.ts +0 -44
- package/dist/cli/agent-detect.d.ts.map +0 -1
- package/dist/cli/agent-detect.js +0 -66
- package/dist/cli/agent-detect.js.map +0 -1
- package/dist/cli/arg-errors.d.ts +0 -6
- package/dist/cli/arg-errors.d.ts.map +0 -1
- package/dist/cli/arg-errors.js +0 -44
- package/dist/cli/arg-errors.js.map +0 -1
- package/dist/cli/arg-options.d.ts +0 -26
- package/dist/cli/arg-options.d.ts.map +0 -1
- package/dist/cli/arg-options.js +0 -50
- package/dist/cli/arg-options.js.map +0 -1
- package/dist/cli/args.d.ts +0 -7
- package/dist/cli/args.d.ts.map +0 -1
- package/dist/cli/args.js +0 -70
- package/dist/cli/args.js.map +0 -1
- package/dist/cli/lifecycle-outcome.d.ts +0 -13
- package/dist/cli/lifecycle-outcome.d.ts.map +0 -1
- package/dist/cli/lifecycle-outcome.js +0 -20
- package/dist/cli/lifecycle-outcome.js.map +0 -1
- package/dist/cli/lifecycle.d.ts +0 -61
- package/dist/cli/lifecycle.d.ts.map +0 -1
- package/dist/cli/lifecycle.js +0 -152
- package/dist/cli/lifecycle.js.map +0 -1
- package/dist/cli/request-finalize.d.ts +0 -10
- package/dist/cli/request-finalize.d.ts.map +0 -1
- package/dist/cli/request-finalize.js +0 -135
- package/dist/cli/request-finalize.js.map +0 -1
- package/dist/cli/request-layers.d.ts +0 -30
- package/dist/cli/request-layers.d.ts.map +0 -1
- package/dist/cli/request-layers.js +0 -44
- package/dist/cli/request-layers.js.map +0 -1
- package/dist/cli/request-settings.d.ts +0 -34
- package/dist/cli/request-settings.d.ts.map +0 -1
- package/dist/cli/request-settings.js +0 -66
- package/dist/cli/request-settings.js.map +0 -1
- package/dist/cli/request-sources.d.ts +0 -13
- package/dist/cli/request-sources.d.ts.map +0 -1
- package/dist/cli/request-sources.js +0 -23
- package/dist/cli/request-sources.js.map +0 -1
- package/dist/cli/request-validation.d.ts +0 -18
- package/dist/cli/request-validation.d.ts.map +0 -1
- package/dist/cli/request-validation.js +0 -84
- package/dist/cli/request-validation.js.map +0 -1
- package/dist/cli/request-values.d.ts +0 -33
- package/dist/cli/request-values.d.ts.map +0 -1
- package/dist/cli/request-values.js +0 -73
- package/dist/cli/request-values.js.map +0 -1
- package/dist/cli/request.d.ts +0 -12
- package/dist/cli/request.d.ts.map +0 -1
- package/dist/cli/request.js +0 -103
- package/dist/cli/request.js.map +0 -1
- package/dist/cli/resolution-types.d.ts +0 -35
- package/dist/cli/resolution-types.d.ts.map +0 -1
- package/dist/cli/resolution-types.js +0 -6
- package/dist/cli/resolution-types.js.map +0 -1
- package/dist/cli/run-output-lines.d.ts +0 -14
- package/dist/cli/run-output-lines.d.ts.map +0 -1
- package/dist/cli/run-output-lines.js +0 -42
- package/dist/cli/run-output-lines.js.map +0 -1
- package/dist/cli/run-output.d.ts +0 -48
- package/dist/cli/run-output.d.ts.map +0 -1
- package/dist/cli/run-output.js +0 -150
- package/dist/cli/run-output.js.map +0 -1
- package/dist/cli/run.d.ts +0 -20
- package/dist/cli/run.d.ts.map +0 -1
- package/dist/cli/run.js +0 -126
- package/dist/cli/run.js.map +0 -1
- package/dist/cli/session-launch.d.ts +0 -23
- package/dist/cli/session-launch.d.ts.map +0 -1
- package/dist/cli/session-launch.js +0 -57
- package/dist/cli/session-launch.js.map +0 -1
- package/dist/cli/session.d.ts +0 -68
- package/dist/cli/session.d.ts.map +0 -1
- package/dist/cli/session.js +0 -124
- package/dist/cli/session.js.map +0 -1
- package/dist/codex/attach-images.d.ts +0 -20
- package/dist/codex/attach-images.d.ts.map +0 -1
- package/dist/codex/attach-images.js +0 -66
- package/dist/codex/attach-images.js.map +0 -1
- package/dist/codex/clipboard-lock.d.ts +0 -15
- package/dist/codex/clipboard-lock.d.ts.map +0 -1
- package/dist/codex/clipboard-lock.js +0 -16
- package/dist/codex/clipboard-lock.js.map +0 -1
- package/dist/codex/clipboard.d.ts +0 -32
- package/dist/codex/clipboard.d.ts.map +0 -1
- package/dist/codex/clipboard.js +0 -92
- package/dist/codex/clipboard.js.map +0 -1
- package/dist/codex/config-lock.d.ts +0 -21
- package/dist/codex/config-lock.d.ts.map +0 -1
- package/dist/codex/config-lock.js +0 -22
- package/dist/codex/config-lock.js.map +0 -1
- package/dist/codex/config-restore.d.ts +0 -33
- package/dist/codex/config-restore.d.ts.map +0 -1
- package/dist/codex/config-restore.js +0 -90
- package/dist/codex/config-restore.js.map +0 -1
- package/dist/codex/config-transaction.d.ts +0 -26
- package/dist/codex/config-transaction.d.ts.map +0 -1
- package/dist/codex/config-transaction.js +0 -47
- package/dist/codex/config-transaction.js.map +0 -1
- package/dist/codex/hook-dispatch.d.ts +0 -9
- package/dist/codex/hook-dispatch.d.ts.map +0 -1
- package/dist/codex/hook-dispatch.js +0 -14
- package/dist/codex/hook-dispatch.js.map +0 -1
- package/dist/codex/hook-names.d.ts +0 -19
- package/dist/codex/hook-names.d.ts.map +0 -1
- package/dist/codex/hook-names.js +0 -17
- package/dist/codex/hook-names.js.map +0 -1
- package/dist/codex/hooks.d.ts +0 -99
- package/dist/codex/hooks.d.ts.map +0 -1
- package/dist/codex/hooks.js +0 -6
- package/dist/codex/hooks.js.map +0 -1
- package/dist/codex/initial-ready.d.ts +0 -19
- package/dist/codex/initial-ready.d.ts.map +0 -1
- package/dist/codex/initial-ready.js +0 -19
- package/dist/codex/initial-ready.js.map +0 -1
- package/dist/codex/serialize.d.ts +0 -8
- package/dist/codex/serialize.d.ts.map +0 -1
- package/dist/codex/serialize.js +0 -48
- package/dist/codex/serialize.js.map +0 -1
- package/dist/codex/session-bridge.d.ts +0 -14
- package/dist/codex/session-bridge.d.ts.map +0 -1
- package/dist/codex/session-bridge.js +0 -20
- package/dist/codex/session-bridge.js.map +0 -1
- package/dist/codex/session-build.d.ts +0 -15
- package/dist/codex/session-build.d.ts.map +0 -1
- package/dist/codex/session-build.js +0 -144
- package/dist/codex/session-build.js.map +0 -1
- package/dist/codex/session-cleanup.d.ts +0 -12
- package/dist/codex/session-cleanup.d.ts.map +0 -1
- package/dist/codex/session-cleanup.js +0 -15
- package/dist/codex/session-cleanup.js.map +0 -1
- package/dist/codex/session-hooks.d.ts +0 -13
- package/dist/codex/session-hooks.d.ts.map +0 -1
- package/dist/codex/session-hooks.js +0 -54
- package/dist/codex/session-hooks.js.map +0 -1
- package/dist/codex/session-instance.d.ts +0 -50
- package/dist/codex/session-instance.d.ts.map +0 -1
- package/dist/codex/session-instance.js +0 -117
- package/dist/codex/session-instance.js.map +0 -1
- package/dist/codex/session-resume.d.ts +0 -7
- package/dist/codex/session-resume.d.ts.map +0 -1
- package/dist/codex/session-resume.js +0 -44
- package/dist/codex/session-resume.js.map +0 -1
- package/dist/codex/session-runtime.d.ts +0 -7
- package/dist/codex/session-runtime.d.ts.map +0 -1
- package/dist/codex/session-runtime.js +0 -10
- package/dist/codex/session-runtime.js.map +0 -1
- package/dist/codex/session-transcript.d.ts +0 -30
- package/dist/codex/session-transcript.d.ts.map +0 -1
- package/dist/codex/session-transcript.js +0 -53
- package/dist/codex/session-transcript.js.map +0 -1
- package/dist/codex/session-types.d.ts +0 -87
- package/dist/codex/session-types.d.ts.map +0 -1
- package/dist/codex/session-types.js +0 -6
- package/dist/codex/session-types.js.map +0 -1
- package/dist/codex/session-warnings.d.ts +0 -27
- package/dist/codex/session-warnings.d.ts.map +0 -1
- package/dist/codex/session-warnings.js +0 -54
- package/dist/codex/session-warnings.js.map +0 -1
- package/dist/codex/session.d.ts +0 -16
- package/dist/codex/session.d.ts.map +0 -1
- package/dist/codex/session.js +0 -61
- package/dist/codex/session.js.map +0 -1
- package/dist/codex/start-or-resume.d.ts +0 -12
- package/dist/codex/start-or-resume.d.ts.map +0 -1
- package/dist/codex/start-or-resume.js +0 -31
- package/dist/codex/start-or-resume.js.map +0 -1
- package/dist/codex/transcript/cursor-io.d.ts +0 -7
- package/dist/codex/transcript/cursor-io.d.ts.map +0 -1
- package/dist/codex/transcript/cursor-io.js +0 -7
- package/dist/codex/transcript/cursor-io.js.map +0 -1
- package/dist/codex/transcript/cursor.d.ts +0 -8
- package/dist/codex/transcript/cursor.d.ts.map +0 -1
- package/dist/codex/transcript/cursor.js +0 -8
- package/dist/codex/transcript/cursor.js.map +0 -1
- package/dist/codex/transcript/drops.d.ts +0 -9
- package/dist/codex/transcript/drops.d.ts.map +0 -1
- package/dist/codex/transcript/drops.js +0 -9
- package/dist/codex/transcript/drops.js.map +0 -1
- package/dist/codex/transcript.d.ts +0 -12
- package/dist/codex/transcript.d.ts.map +0 -1
- package/dist/codex/transcript.js +0 -10
- package/dist/codex/transcript.js.map +0 -1
- package/dist/codex/validate-result.d.ts +0 -7
- package/dist/codex/validate-result.d.ts.map +0 -1
- package/dist/codex/validate-result.js +0 -84
- package/dist/codex/validate-result.js.map +0 -1
- package/dist/codex/validate.d.ts +0 -11
- package/dist/codex/validate.d.ts.map +0 -1
- package/dist/codex/validate.js +0 -88
- package/dist/codex/validate.js.map +0 -1
- package/dist/core/activity-lifecycle.d.ts +0 -21
- package/dist/core/activity-lifecycle.d.ts.map +0 -1
- package/dist/core/activity-lifecycle.js +0 -45
- package/dist/core/activity-lifecycle.js.map +0 -1
- package/dist/core/activity-meta.d.ts +0 -13
- package/dist/core/activity-meta.d.ts.map +0 -1
- package/dist/core/activity-meta.js +0 -67
- package/dist/core/activity-meta.js.map +0 -1
- package/dist/core/activity-transcript.d.ts +0 -19
- package/dist/core/activity-transcript.d.ts.map +0 -1
- package/dist/core/activity-transcript.js +0 -60
- package/dist/core/activity-transcript.js.map +0 -1
- package/dist/core/activity.d.ts +0 -51
- package/dist/core/activity.d.ts.map +0 -1
- package/dist/core/activity.js +0 -81
- package/dist/core/activity.js.map +0 -1
- package/dist/core/control-queue-state.d.ts +0 -29
- package/dist/core/control-queue-state.d.ts.map +0 -1
- package/dist/core/control-queue-state.js +0 -95
- package/dist/core/control-queue-state.js.map +0 -1
- package/dist/core/control-queue-traits.d.ts +0 -54
- package/dist/core/control-queue-traits.d.ts.map +0 -1
- package/dist/core/control-queue-traits.js +0 -118
- package/dist/core/control-queue-traits.js.map +0 -1
- package/dist/core/control-queue-types.d.ts +0 -45
- package/dist/core/control-queue-types.d.ts.map +0 -1
- package/dist/core/control-queue-types.js +0 -7
- package/dist/core/control-queue-types.js.map +0 -1
- package/dist/core/control-queue.d.ts +0 -21
- package/dist/core/control-queue.d.ts.map +0 -1
- package/dist/core/control-queue.js +0 -98
- package/dist/core/control-queue.js.map +0 -1
- package/dist/core/list-models.d.ts +0 -44
- package/dist/core/list-models.d.ts.map +0 -1
- package/dist/core/list-models.js +0 -73
- package/dist/core/list-models.js.map +0 -1
- package/dist/core/model-picker.d.ts +0 -22
- package/dist/core/model-picker.d.ts.map +0 -1
- package/dist/core/model-picker.js +0 -58
- package/dist/core/model-picker.js.map +0 -1
- package/dist/core/model-rows.d.ts +0 -21
- package/dist/core/model-rows.d.ts.map +0 -1
- package/dist/core/model-rows.js +0 -57
- package/dist/core/model-rows.js.map +0 -1
- package/dist/core/probe-state.d.ts +0 -21
- package/dist/core/probe-state.d.ts.map +0 -1
- package/dist/core/probe-state.js +0 -39
- package/dist/core/probe-state.js.map +0 -1
- package/dist/core/session-input-abort.d.ts +0 -10
- package/dist/core/session-input-abort.d.ts.map +0 -1
- package/dist/core/session-input-abort.js +0 -44
- package/dist/core/session-input-abort.js.map +0 -1
- package/dist/core/session-input.d.ts +0 -37
- package/dist/core/session-input.d.ts.map +0 -1
- package/dist/core/session-input.js +0 -154
- package/dist/core/session-input.js.map +0 -1
- package/dist/core/session-warnings.d.ts +0 -20
- package/dist/core/session-warnings.d.ts.map +0 -1
- package/dist/core/session-warnings.js +0 -32
- package/dist/core/session-warnings.js.map +0 -1
- package/dist/core/simple/loop-controls.d.ts +0 -7
- package/dist/core/simple/loop-controls.d.ts.map +0 -1
- package/dist/core/simple/loop-controls.js +0 -7
- package/dist/core/simple/loop-controls.js.map +0 -1
- package/dist/core/startup-automation.d.ts +0 -54
- package/dist/core/startup-automation.d.ts.map +0 -1
- package/dist/core/startup-automation.js +0 -40
- package/dist/core/startup-automation.js.map +0 -1
- package/dist/core/startup-frame.d.ts +0 -39
- package/dist/core/startup-frame.d.ts.map +0 -1
- package/dist/core/startup-frame.js +0 -60
- package/dist/core/startup-frame.js.map +0 -1
- package/dist/core/startup-write.d.ts +0 -47
- package/dist/core/startup-write.d.ts.map +0 -1
- package/dist/core/startup-write.js +0 -73
- package/dist/core/startup-write.js.map +0 -1
- package/dist/core/trust-blocking.d.ts +0 -22
- package/dist/core/trust-blocking.d.ts.map +0 -1
- package/dist/core/trust-blocking.js +0 -38
- package/dist/core/trust-blocking.js.map +0 -1
- package/dist/core/trust-prompts.d.ts +0 -135
- package/dist/core/trust-prompts.d.ts.map +0 -1
- package/dist/core/trust-prompts.js.map +0 -1
- package/dist/core/trust-responder.d.ts +0 -48
- package/dist/core/trust-responder.d.ts.map +0 -1
- package/dist/core/trust-responder.js +0 -119
- package/dist/core/trust-responder.js.map +0 -1
- package/dist/core/tui-screen.d.ts +0 -21
- package/dist/core/tui-screen.d.ts.map +0 -1
- package/dist/core/tui-screen.js +0 -56
- package/dist/core/tui-screen.js.map +0 -1
- package/dist/core/update-warning.d.ts +0 -25
- package/dist/core/update-warning.d.ts.map +0 -1
- package/dist/core/update-warning.js +0 -33
- package/dist/core/update-warning.js.map +0 -1
- package/dist/core/warning-lifecycle.d.ts +0 -23
- package/dist/core/warning-lifecycle.d.ts.map +0 -1
- package/dist/core/warning-lifecycle.js +0 -6
- package/dist/core/warning-lifecycle.js.map +0 -1
- package/dist/core/warning-reasons.d.ts +0 -62
- package/dist/core/warning-reasons.d.ts.map +0 -1
- package/dist/core/warning-reasons.js +0 -121
- package/dist/core/warning-reasons.js.map +0 -1
- package/dist/core/warnings.d.ts +0 -145
- package/dist/core/warnings.d.ts.map +0 -1
- package/dist/core/warnings.js +0 -12
- package/dist/core/warnings.js.map +0 -1
- package/dist/runtime/cleanup-latch.d.ts +0 -27
- package/dist/runtime/cleanup-latch.d.ts.map +0 -1
- package/dist/runtime/cleanup-latch.js +0 -43
- package/dist/runtime/cleanup-latch.js.map +0 -1
- package/dist/runtime/initial-ready-advance.d.ts +0 -22
- package/dist/runtime/initial-ready-advance.d.ts.map +0 -1
- package/dist/runtime/initial-ready-advance.js +0 -39
- package/dist/runtime/initial-ready-advance.js.map +0 -1
- package/dist/runtime/initial-ready-fallback.d.ts +0 -12
- package/dist/runtime/initial-ready-fallback.d.ts.map +0 -1
- package/dist/runtime/initial-ready-fallback.js +0 -20
- package/dist/runtime/initial-ready-fallback.js.map +0 -1
- package/dist/runtime/initial-ready.d.ts +0 -49
- package/dist/runtime/initial-ready.d.ts.map +0 -1
- package/dist/runtime/initial-ready.js +0 -81
- package/dist/runtime/initial-ready.js.map +0 -1
- package/dist/runtime/reap-tree.d.ts +0 -62
- package/dist/runtime/reap-tree.d.ts.map +0 -1
- package/dist/runtime/reap-tree.js +0 -108
- package/dist/runtime/reap-tree.js.map +0 -1
- package/dist/runtime/session-base-types.d.ts +0 -36
- package/dist/runtime/session-base-types.d.ts.map +0 -1
- package/dist/runtime/session-base-types.js +0 -14
- package/dist/runtime/session-base-types.js.map +0 -1
- package/dist/runtime/session-base.d.ts +0 -48
- package/dist/runtime/session-base.d.ts.map +0 -1
- package/dist/runtime/session-base.js +0 -76
- package/dist/runtime/session-base.js.map +0 -1
- package/dist/runtime/session-commands.d.ts +0 -43
- package/dist/runtime/session-commands.d.ts.map +0 -1
- package/dist/runtime/session-commands.js +0 -52
- package/dist/runtime/session-commands.js.map +0 -1
- package/dist/runtime/session-exit.d.ts +0 -16
- package/dist/runtime/session-exit.d.ts.map +0 -1
- package/dist/runtime/session-exit.js +0 -32
- package/dist/runtime/session-exit.js.map +0 -1
- package/dist/runtime/session-image-attach.d.ts +0 -45
- package/dist/runtime/session-image-attach.d.ts.map +0 -1
- package/dist/runtime/session-image-attach.js +0 -82
- package/dist/runtime/session-image-attach.js.map +0 -1
- package/dist/runtime/session-lifecycle.d.ts +0 -61
- package/dist/runtime/session-lifecycle.d.ts.map +0 -1
- package/dist/runtime/session-lifecycle.js +0 -164
- package/dist/runtime/session-lifecycle.js.map +0 -1
- package/dist/runtime/session-loops.d.ts +0 -32
- package/dist/runtime/session-loops.d.ts.map +0 -1
- package/dist/runtime/session-loops.js +0 -62
- package/dist/runtime/session-loops.js.map +0 -1
- package/dist/runtime/session-readiness.d.ts +0 -18
- package/dist/runtime/session-readiness.d.ts.map +0 -1
- package/dist/runtime/session-readiness.js +0 -22
- package/dist/runtime/session-readiness.js.map +0 -1
- package/dist/runtime/session-reap.d.ts +0 -28
- package/dist/runtime/session-reap.d.ts.map +0 -1
- package/dist/runtime/session-reap.js +0 -51
- package/dist/runtime/session-reap.js.map +0 -1
- package/dist/runtime/session-resize.d.ts +0 -20
- package/dist/runtime/session-resize.d.ts.map +0 -1
- package/dist/runtime/session-resize.js +0 -26
- package/dist/runtime/session-resize.js.map +0 -1
- package/dist/runtime/session-shutdown-binding.d.ts +0 -30
- package/dist/runtime/session-shutdown-binding.d.ts.map +0 -1
- package/dist/runtime/session-shutdown-binding.js +0 -37
- package/dist/runtime/session-shutdown-binding.js.map +0 -1
- package/dist/runtime/session-shutdown.d.ts +0 -60
- package/dist/runtime/session-shutdown.d.ts.map +0 -1
- package/dist/runtime/session-shutdown.js +0 -140
- package/dist/runtime/session-shutdown.js.map +0 -1
- package/dist/runtime/session-status-wiring.d.ts +0 -38
- package/dist/runtime/session-status-wiring.d.ts.map +0 -1
- package/dist/runtime/session-status-wiring.js +0 -41
- package/dist/runtime/session-status-wiring.js.map +0 -1
- package/dist/runtime/session-status.d.ts +0 -7
- package/dist/runtime/session-status.d.ts.map +0 -1
- package/dist/runtime/session-status.js +0 -22
- package/dist/runtime/session-status.js.map +0 -1
- package/dist/runtime/shutdown-coordinator.d.ts +0 -57
- package/dist/runtime/shutdown-coordinator.d.ts.map +0 -1
- package/dist/runtime/shutdown-coordinator.js +0 -77
- package/dist/runtime/shutdown-coordinator.js.map +0 -1
- package/dist/runtime/startup-buffer.d.ts +0 -33
- package/dist/runtime/startup-buffer.d.ts.map +0 -1
- package/dist/runtime/startup-buffer.js +0 -53
- package/dist/runtime/startup-buffer.js.map +0 -1
- package/dist/runtime/startup-cleanup.d.ts +0 -43
- package/dist/runtime/startup-cleanup.d.ts.map +0 -1
- package/dist/runtime/startup-cleanup.js +0 -89
- package/dist/runtime/startup-cleanup.js.map +0 -1
- package/dist/runtime/startup.d.ts +0 -17
- package/dist/runtime/startup.d.ts.map +0 -1
- package/dist/runtime/startup.js +0 -47
- package/dist/runtime/startup.js.map +0 -1
- package/dist/runtime/status-emit.d.ts +0 -14
- package/dist/runtime/status-emit.d.ts.map +0 -1
- package/dist/runtime/status-emit.js +0 -15
- package/dist/runtime/status-emit.js.map +0 -1
- package/dist/runtime/teardown.d.ts +0 -15
- package/dist/runtime/teardown.d.ts.map +0 -1
- package/dist/runtime/teardown.js +0 -40
- package/dist/runtime/teardown.js.map +0 -1
- package/dist/runtime/terminate.d.ts +0 -22
- package/dist/runtime/terminate.d.ts.map +0 -1
- package/dist/runtime/terminate.js +0 -129
- package/dist/runtime/terminate.js.map +0 -1
- package/dist/runtime/update-lock.d.ts +0 -19
- package/dist/runtime/update-lock.d.ts.map +0 -1
- package/dist/runtime/update-lock.js +0 -183
- package/dist/runtime/update-lock.js.map +0 -1
- package/dist/runtime/update-once.d.ts +0 -40
- package/dist/runtime/update-once.d.ts.map +0 -1
- package/dist/runtime/update-once.js +0 -88
- package/dist/runtime/update-once.js.map +0 -1
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Explicit shutdown/teardown orchestration for AgentSessionBase, extracted to keep
|
|
3
|
-
* the base within the file-size cap. Implements PRD §5.3/§9.4 (C-LIFE-10): every
|
|
4
|
-
* path ATTEMPTS/RETRIES the leader's process-group reap and propagates a reap failure
|
|
5
|
-
* as a typed error (never swallows it), while an already-terminal session is never
|
|
6
|
-
* re-signaled — node-pty does not replay the exit and the pid may be recycled.
|
|
7
|
-
*/
|
|
8
|
-
import type { ElwoodSessionStatus } from "../core/types.ts";
|
|
9
|
-
import type { PtyProcess } from "../pty/types.ts";
|
|
10
|
-
import type { SessionReapPolicy } from "./session-reap.ts";
|
|
11
|
-
import type { ShutdownContext, ShutdownCoordinator } from "./shutdown-coordinator.ts";
|
|
12
|
-
import type { StatusEvidenceKind } from "./status-evidence.ts";
|
|
13
|
-
/** Evidence kinds an explicit shutdown submits once it drives the PTY to exit. */
|
|
14
|
-
export type ShutdownEvidence = "stop_completed" | "kill_completed" | "teardown_completed";
|
|
15
|
-
/** The reap surface shutdown drives: the typed-throw reap plus the retryable one-shot. */
|
|
16
|
-
export type ShutdownReapPolicy = Pick<SessionReapPolicy, "orThrow"> & {
|
|
17
|
-
readonly reaper: Pick<SessionReapPolicy["reaper"], "reap">;
|
|
18
|
-
};
|
|
19
|
-
/** The session surface the shutdown/teardown orchestration drives. */
|
|
20
|
-
export type ShutdownHost = {
|
|
21
|
-
readonly pty: PtyProcess;
|
|
22
|
-
readonly stateDir: string;
|
|
23
|
-
readonly elwoodSessionId: string;
|
|
24
|
-
/** The session's stable socket home; teardown removes it whole (§8.1). */
|
|
25
|
-
readonly socketHome: string;
|
|
26
|
-
readonly reapPolicy: ShutdownReapPolicy;
|
|
27
|
-
readonly status: () => ElwoodSessionStatus;
|
|
28
|
-
readonly claimShutdown: (evidence: ShutdownEvidence) => void;
|
|
29
|
-
readonly pauseLoops: () => void;
|
|
30
|
-
readonly clearLoops: (reason: "kill" | "teardown") => Promise<void>;
|
|
31
|
-
readonly cleanupRuntime: () => Promise<void>;
|
|
32
|
-
readonly submitEvidence: (kind: StatusEvidenceKind) => void;
|
|
33
|
-
};
|
|
34
|
-
/** The three public shutdown verbs bound to a coordinator and lazy host. */
|
|
35
|
-
type ManagedShutdown = {
|
|
36
|
-
readonly stop: () => Promise<void>;
|
|
37
|
-
readonly kill: () => Promise<void>;
|
|
38
|
-
readonly teardown: () => Promise<void>;
|
|
39
|
-
};
|
|
40
|
-
/** Binds `stop`/`kill`/`teardown` to one coordinator + lazily-built host (C-LIFE-10). */
|
|
41
|
-
export declare function managedShutdown(coordinator: ShutdownCoordinator, host: () => ShutdownHost): ManagedShutdown;
|
|
42
|
-
/**
|
|
43
|
-
* Graceful stop / force kill. Does NOT re-signal when the PTY was already signaled
|
|
44
|
-
* (by a prior shutdown, even one that threw before going terminal) or the session is
|
|
45
|
-
* already terminal — node-pty won't replay exit (the wait would time out) and the pid
|
|
46
|
-
* may be recycled. In that case it performs a one-shot survivor reap that rejects with
|
|
47
|
-
* a typed error on failure and leaves the reap retryable; a first, live shutdown marks
|
|
48
|
-
* signal ownership, terminates the PTY (which reaps on every path), and records
|
|
49
|
-
* shutdown evidence (C-LIFE-10).
|
|
50
|
-
*/
|
|
51
|
-
export declare function runShutdown(host: ShutdownHost, signal: "SIGTERM" | "SIGKILL", evidence: ShutdownEvidence, ctx: ShutdownContext): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Teardown: terminate a still-live PTY (unless it was already signaled), reap
|
|
54
|
-
* (retrying a prior failed reap), stop the runtime, record teardown evidence, and
|
|
55
|
-
* remove owned session files. Each step runs even if an earlier one rejected, so a
|
|
56
|
-
* leaked group is always reaped; a re-signal is refused once signal ownership is held.
|
|
57
|
-
*/
|
|
58
|
-
export declare function runTeardown(host: ShutdownHost, ctx: ShutdownContext): Promise<void>;
|
|
59
|
-
export {};
|
|
60
|
-
//# sourceMappingURL=session-shutdown.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-shutdown.d.ts","sourceRoot":"","sources":["../../src/runtime/session-shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;AAE1F,0FAA0F;AAC1F,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG;IACpE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;CAC5D,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,4EAA4E;AAC5E,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,yFAAyF;AACzF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,mBAAmB,EAChC,IAAI,EAAE,MAAM,YAAY,GACvB,eAAe,CAMjB;AAuCD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AAkBD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBzF"}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Explicit shutdown/teardown orchestration for AgentSessionBase, extracted to keep
|
|
3
|
-
* the base within the file-size cap. Implements PRD §5.3/§9.4 (C-LIFE-10): every
|
|
4
|
-
* path ATTEMPTS/RETRIES the leader's process-group reap and propagates a reap failure
|
|
5
|
-
* as a typed error (never swallows it), while an already-terminal session is never
|
|
6
|
-
* re-signaled — node-pty does not replay the exit and the pid may be recycled.
|
|
7
|
-
*/
|
|
8
|
-
import { elwoodError } from "../core/errors.js";
|
|
9
|
-
import { terminalStatuses } from "../core/status-categories.js";
|
|
10
|
-
import { removeSessionFiles } from "../state/store.js";
|
|
11
|
-
import { runTeardownSteps } from "./teardown.js";
|
|
12
|
-
import { terminatePty } from "./terminate.js";
|
|
13
|
-
/** Binds `stop`/`kill`/`teardown` to one coordinator + lazily-built host (C-LIFE-10). */
|
|
14
|
-
export function managedShutdown(coordinator, host) {
|
|
15
|
-
return {
|
|
16
|
-
stop: () => runManagedShutdown(coordinator, "stop", host),
|
|
17
|
-
kill: () => runManagedShutdown(coordinator, "kill", host),
|
|
18
|
-
teardown: () => runManagedShutdown(coordinator, "teardown", host),
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
// Each public verb's orchestration. The host is the ONE owner of loop pausing: `stop`
|
|
22
|
-
// pauses timers and keeps definitions for resume; `kill`/`teardown` clear them (§8.4).
|
|
23
|
-
const shutdownVerbs = {
|
|
24
|
-
stop: (host, ctx) => {
|
|
25
|
-
host.pauseLoops();
|
|
26
|
-
return runShutdown(host, "SIGTERM", "stop_completed", ctx);
|
|
27
|
-
},
|
|
28
|
-
kill: (host, ctx) => runKillShutdown(host, () => runShutdown(host, "SIGKILL", "kill_completed", ctx)),
|
|
29
|
-
teardown: (host, ctx) => runTeardown(host, ctx),
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* Route a public `stop`/`kill`/`teardown` through the session's coordinator so the
|
|
33
|
-
* PTY is signaled at most once and overlapping callers join the in-flight shutdown
|
|
34
|
-
* (C-LIFE-10). The host is built lazily inside the coordinated operation, which is
|
|
35
|
-
* told whether the PTY was `alreadySignaled` so a retry never re-signals it.
|
|
36
|
-
*/
|
|
37
|
-
function runManagedShutdown(coordinator, verb, host) {
|
|
38
|
-
return coordinator.run(verb, (ctx) => shutdownVerbs[verb](host(), ctx));
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* True when the PTY must NOT be signaled: either a prior shutdown already signaled it
|
|
42
|
-
* (a predecessor that signaled+reaped but threw before submitting terminal status must
|
|
43
|
-
* not trigger a re-signal of a possibly-recycled PID) OR the session already reached a
|
|
44
|
-
* terminal status. Signal ownership is tracked INDEPENDENTLY of lifecycle status so a
|
|
45
|
-
* non-terminal-but-already-signaled state still refuses a second signal (C-LIFE-10).
|
|
46
|
-
*/
|
|
47
|
-
function mustNotSignal(host, ctx) {
|
|
48
|
-
return ctx.alreadySignaled || terminalStatuses.has(host.status());
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Graceful stop / force kill. Does NOT re-signal when the PTY was already signaled
|
|
52
|
-
* (by a prior shutdown, even one that threw before going terminal) or the session is
|
|
53
|
-
* already terminal — node-pty won't replay exit (the wait would time out) and the pid
|
|
54
|
-
* may be recycled. In that case it performs a one-shot survivor reap that rejects with
|
|
55
|
-
* a typed error on failure and leaves the reap retryable; a first, live shutdown marks
|
|
56
|
-
* signal ownership, terminates the PTY (which reaps on every path), and records
|
|
57
|
-
* shutdown evidence (C-LIFE-10).
|
|
58
|
-
*/
|
|
59
|
-
export async function runShutdown(host, signal, evidence, ctx) {
|
|
60
|
-
host.claimShutdown(evidence); // Claim the exit before signaling.
|
|
61
|
-
if (mustNotSignal(host, ctx)) {
|
|
62
|
-
host.reapPolicy.orThrow(); // Typed rejection on failure; never swallows.
|
|
63
|
-
await cleanupOrThrowTermination(host);
|
|
64
|
-
return; // Already signaled / terminal: no new signal, no evidence to submit.
|
|
65
|
-
}
|
|
66
|
-
ctx.markSignaled();
|
|
67
|
-
await terminatePty(host.pty, signal, host.reapPolicy.reaper);
|
|
68
|
-
await cleanupOrThrowTermination(host);
|
|
69
|
-
host.submitEvidence(evidence);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Runs runtime cleanup, folding its raw aggregate failure into the stable public
|
|
73
|
-
* `termination_failed` error. `runCleanupSteps` rejects with a bare `Error` on the
|
|
74
|
-
* assumption that its caller wraps it; `stop()`/`kill()` are that caller, so without
|
|
75
|
-
* this an untyped Error would escape the public shutdown boundary (PRD §10).
|
|
76
|
-
*/
|
|
77
|
-
async function cleanupOrThrowTermination(host) {
|
|
78
|
-
try {
|
|
79
|
-
await host.cleanupRuntime();
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
throw elwoodError("termination_failed", "Could not clean up the Elwood runtime.", {
|
|
83
|
-
cause: error instanceof Error ? error.message : String(error),
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Teardown: terminate a still-live PTY (unless it was already signaled), reap
|
|
89
|
-
* (retrying a prior failed reap), stop the runtime, record teardown evidence, and
|
|
90
|
-
* remove owned session files. Each step runs even if an earlier one rejected, so a
|
|
91
|
-
* leaked group is always reaped; a re-signal is refused once signal ownership is held.
|
|
92
|
-
*/
|
|
93
|
-
export async function runTeardown(host, ctx) {
|
|
94
|
-
host.claimShutdown("teardown_completed");
|
|
95
|
-
const shouldSignal = () => !mustNotSignal(host, ctx);
|
|
96
|
-
await runPermanentShutdown(host, "teardown", () => runTeardownSteps([
|
|
97
|
-
() => {
|
|
98
|
-
if (!shouldSignal())
|
|
99
|
-
return undefined;
|
|
100
|
-
ctx.markSignaled();
|
|
101
|
-
return terminatePty(host.pty, "SIGKILL", host.reapPolicy.reaper);
|
|
102
|
-
},
|
|
103
|
-
() => host.reapPolicy.reaper.reap(), // No-op once latched; retries a failed reap.
|
|
104
|
-
() => host.cleanupRuntime(),
|
|
105
|
-
() => host.submitEvidence("teardown_completed"),
|
|
106
|
-
() => removeSessionFiles({
|
|
107
|
-
stateDir: host.stateDir,
|
|
108
|
-
elwoodSessionId: host.elwoodSessionId,
|
|
109
|
-
socketHome: host.socketHome,
|
|
110
|
-
}),
|
|
111
|
-
]));
|
|
112
|
-
}
|
|
113
|
-
/** Clear durable loops first, but always finish process/file cleanup before rejecting. */
|
|
114
|
-
async function runPermanentShutdown(host, reason, cleanup) {
|
|
115
|
-
let loopFailure;
|
|
116
|
-
let cleanupFailure;
|
|
117
|
-
try {
|
|
118
|
-
await host.clearLoops(reason);
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
loopFailure = error;
|
|
122
|
-
}
|
|
123
|
-
try {
|
|
124
|
-
await cleanup();
|
|
125
|
-
}
|
|
126
|
-
catch (error) {
|
|
127
|
-
cleanupFailure = error;
|
|
128
|
-
}
|
|
129
|
-
if (loopFailure !== undefined)
|
|
130
|
-
throw loopFailure;
|
|
131
|
-
if (cleanupFailure !== undefined)
|
|
132
|
-
throw cleanupFailure;
|
|
133
|
-
}
|
|
134
|
-
/** Kill stops live timers first, but keeps durable definitions until termination succeeds. */
|
|
135
|
-
async function runKillShutdown(host, cleanup) {
|
|
136
|
-
host.pauseLoops();
|
|
137
|
-
await cleanup();
|
|
138
|
-
await host.clearLoops("kill");
|
|
139
|
-
}
|
|
140
|
-
//# sourceMappingURL=session-shutdown.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-shutdown.js","sourceRoot":"","sources":["../../src/runtime/session-shutdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Connects lifecycle status transitions to the control queue, loops, event
|
|
3
|
-
* delivery, and cleanup (PRD §5.3/§5.9, C-API-42). Status and activity events are
|
|
4
|
-
* emitted here; a throwing status listener PROPAGATES by design — the
|
|
5
|
-
* `initial_ready` transition relies on it to trigger its release-and-warn fallback.
|
|
6
|
-
* The engine commits its live `current` status BEFORE emitting, so a throw here can
|
|
7
|
-
* never leave the emitted event disagreeing with that live status (§8.2).
|
|
8
|
-
*/
|
|
9
|
-
import { type ElwoodActivityEvent, type ElwoodAgentKind } from "../core/activity.ts";
|
|
10
|
-
import type { CompactEmitter } from "../core/compact.ts";
|
|
11
|
-
import type { ControlQueue } from "../core/control-queue.ts";
|
|
12
|
-
import type { ElwoodSessionStatus, Unsubscribe } from "../core/types.ts";
|
|
13
|
-
import type { LoopEventEmitter, SessionLoops } from "./session-loops.ts";
|
|
14
|
-
import { SessionStatusEngine } from "./status-evidence.ts";
|
|
15
|
-
type StatusEvent = {
|
|
16
|
-
readonly elwoodSessionId: string;
|
|
17
|
-
readonly status: ElwoodSessionStatus;
|
|
18
|
-
};
|
|
19
|
-
/** The emitter surface a session's status, compact, loop, and activity wiring needs. */
|
|
20
|
-
export type SessionStatusEmitter = CompactEmitter & LoopEventEmitter & {
|
|
21
|
-
emit(event: "status", payload: StatusEvent): void;
|
|
22
|
-
emit(event: "activity", payload: ElwoodActivityEvent): void;
|
|
23
|
-
on(event: "activity", handler: (event: ElwoodActivityEvent) => void): Unsubscribe;
|
|
24
|
-
};
|
|
25
|
-
type StatusWiringInput = {
|
|
26
|
-
readonly agent: ElwoodAgentKind;
|
|
27
|
-
readonly elwoodSessionId: string;
|
|
28
|
-
readonly emitter: SessionStatusEmitter;
|
|
29
|
-
readonly queue: ControlQueue;
|
|
30
|
-
readonly loops: SessionLoops;
|
|
31
|
-
readonly markReady: () => void;
|
|
32
|
-
readonly cleanup: () => void;
|
|
33
|
-
};
|
|
34
|
-
export declare function createSessionStatusEngine(input: StatusWiringInput): SessionStatusEngine;
|
|
35
|
-
/** Deliver the status event and its derived activity event (a listener throw propagates). */
|
|
36
|
-
export declare function emitStatusEvents(emitter: SessionStatusEmitter, agent: ElwoodAgentKind, id: string, status: ElwoodSessionStatus): void;
|
|
37
|
-
export {};
|
|
38
|
-
//# sourceMappingURL=session-status-wiring.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-status-wiring.d.ts","sourceRoot":"","sources":["../../src/runtime/session-status-wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,KAAK,WAAW,GAAG;IAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAE9F,wFAAwF;AACxF,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAC/C,gBAAgB,GAAG;IACjB,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,WAAW,CAAC;CACnF,CAAC;AAEJ,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CAyBvF;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,eAAe,EACtB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,mBAAmB,GAC1B,IAAI,CAGN"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Connects lifecycle status transitions to the control queue, loops, event
|
|
3
|
-
* delivery, and cleanup (PRD §5.3/§5.9, C-API-42). Status and activity events are
|
|
4
|
-
* emitted here; a throwing status listener PROPAGATES by design — the
|
|
5
|
-
* `initial_ready` transition relies on it to trigger its release-and-warn fallback.
|
|
6
|
-
* The engine commits its live `current` status BEFORE emitting, so a throw here can
|
|
7
|
-
* never leave the emitted event disagreeing with that live status (§8.2).
|
|
8
|
-
*/
|
|
9
|
-
import { activityFromStatus, } from "../core/activity.js";
|
|
10
|
-
import { SessionStatusEngine } from "./status-evidence.js";
|
|
11
|
-
export function createSessionStatusEngine(input) {
|
|
12
|
-
// Both a turn in progress and a blocking dialog suspend delivery the same way:
|
|
13
|
-
// the queue stops draining and due loops wait (§5.9: "a due loop waits while the
|
|
14
|
-
// session is running, blocked, or otherwise unable to accept a message"). Neither
|
|
15
|
-
// implies a NEW turn — that is `turnStarted`, driven by the queue's own submission.
|
|
16
|
-
const suspend = () => {
|
|
17
|
-
input.loops.running();
|
|
18
|
-
input.queue.suspendReadiness();
|
|
19
|
-
};
|
|
20
|
-
return new SessionStatusEngine({
|
|
21
|
-
onReady: input.markReady,
|
|
22
|
-
emitStatus: (status) => emitStatusEvents(input.emitter, input.agent, input.elwoodSessionId, status),
|
|
23
|
-
queueRunning: suspend,
|
|
24
|
-
queueReady: () => {
|
|
25
|
-
input.loops.ready();
|
|
26
|
-
input.queue.markReady();
|
|
27
|
-
},
|
|
28
|
-
queueBlocked: suspend,
|
|
29
|
-
queueClose: () => {
|
|
30
|
-
input.loops.pause();
|
|
31
|
-
input.queue.close();
|
|
32
|
-
},
|
|
33
|
-
cleanup: input.cleanup,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
/** Deliver the status event and its derived activity event (a listener throw propagates). */
|
|
37
|
-
export function emitStatusEvents(emitter, agent, id, status) {
|
|
38
|
-
emitter.emit("status", { elwoodSessionId: id, status });
|
|
39
|
-
emitter.emit("activity", activityFromStatus(agent, id, status));
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=session-status-wiring.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-status-wiring.js","sourceRoot":"","sources":["../../src/runtime/session-status-wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAsB3D,MAAM,UAAU,yBAAyB,CAAC,KAAwB;IAChE,+EAA+E;IAC/E,iFAAiF;IACjF,kFAAkF;IAClF,oFAAoF;IACpF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC,CAAC;IACF,OAAO,IAAI,mBAAmB,CAAC;QAC7B,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC;QAC7E,YAAY,EAAE,OAAO;QACrB,UAAU,EAAE,GAAG,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;QACD,YAAY,EAAE,OAAO;QACrB,UAAU,EAAE,GAAG,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;AACL,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,gBAAgB,CAC9B,OAA6B,EAC7B,KAAsB,EACtB,EAAU,EACV,MAA2B;IAE3B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared lifecycle status helpers for in-memory sessions.
|
|
3
|
-
* Implements PRD §5 lifecycle guarantees.
|
|
4
|
-
*/
|
|
5
|
-
import type { ElwoodSessionStatus } from "../core/types.ts";
|
|
6
|
-
export declare function canTransition(current: ElwoodSessionStatus, next: ElwoodSessionStatus): boolean;
|
|
7
|
-
//# sourceMappingURL=session-status.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-status.d.ts","sourceRoot":"","sources":["../../src/runtime/session-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAW9F"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared lifecycle status helpers for in-memory sessions.
|
|
3
|
-
* Implements PRD §5 lifecycle guarantees.
|
|
4
|
-
*/
|
|
5
|
-
import { terminalStatuses } from "../core/status-categories.js";
|
|
6
|
-
export function canTransition(current, next) {
|
|
7
|
-
if (current === next)
|
|
8
|
-
return false;
|
|
9
|
-
if (current === "torn_down")
|
|
10
|
-
return false;
|
|
11
|
-
// `teardown` is the final cleanup and may supersede any earlier terminal
|
|
12
|
-
// status (e.g. tearing down an already-exited session).
|
|
13
|
-
if (next === "torn_down")
|
|
14
|
-
return true;
|
|
15
|
-
// Otherwise a terminated session keeps its first terminal status: no
|
|
16
|
-
// terminal status transitions to another, so a racing `exited` cannot
|
|
17
|
-
// override a controlled `stopped`/`killed`.
|
|
18
|
-
if (terminalStatuses.has(current))
|
|
19
|
-
return false;
|
|
20
|
-
return true;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=session-status.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-status.js","sourceRoot":"","sources":["../../src/runtime/session-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,MAAM,UAAU,aAAa,CAAC,OAA4B,EAAE,IAAyB;IACnF,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,OAAO,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC1C,yEAAyE;IACzE,wDAAwD;IACxD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACtC,qEAAqE;IACrE,sEAAsE;IACtE,4CAA4C;IAC5C,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Serializes a session's overlapping stop/kill/teardown so the PTY is signaled at
|
|
3
|
-
* most once (PRD §5.3/§9.4, C-LIFE-10). Concurrent shutdown calls can each snapshot
|
|
4
|
-
* a non-terminal status and race into `terminatePty`; if the OS process exits before
|
|
5
|
-
* node-pty's exit callback updates status, a later caller could signal the numeric
|
|
6
|
-
* PID again AFTER the kernel recycled it, and duplicate waiters / first-wins evidence
|
|
7
|
-
* could mislabel a force-killed exit as merely stopped.
|
|
8
|
-
*
|
|
9
|
-
* Two pieces of state, tracked SEPARATELY, make this safe and still retryable:
|
|
10
|
-
* - `signaled` — sticky, set the first time any shutdown signals the PTY. It is
|
|
11
|
-
* NEVER cleared. A later caller that finds it set does NOT re-signal solely
|
|
12
|
-
* because the lifecycle status is still non-terminal (a predecessor that
|
|
13
|
-
* signaled+reaped but threw before submitting terminal status must not cause a
|
|
14
|
-
* re-signal of a possibly-recycled PID); it may still reap/cleanup/teardown.
|
|
15
|
-
* - `inFlight` — the current in-flight run, CLEARED on settlement (with identity
|
|
16
|
-
* protection). A failed `stop()`/`kill()`/`teardown()` therefore does not return
|
|
17
|
-
* a permanently rejected promise to every later caller: once it settles, a later
|
|
18
|
-
* call starts a fresh operation that RETRIES reap/cleanup/removal without
|
|
19
|
-
* re-signaling the PTY (C-LIFE-10 retry posture).
|
|
20
|
-
*/
|
|
21
|
-
/** Ordered so a later request can tell whether it escalates the in-flight one. */
|
|
22
|
-
export type ShutdownLevel = "stop" | "kill" | "teardown";
|
|
23
|
-
/** What a coordinated shutdown operation is told about prior signal ownership. */
|
|
24
|
-
export type ShutdownContext = {
|
|
25
|
-
/** True once ANY prior shutdown signaled the PTY — do not re-signal, only reap/cleanup. */
|
|
26
|
-
readonly alreadySignaled: boolean;
|
|
27
|
-
/** Record that this operation is about to signal the PTY (idempotent). */
|
|
28
|
-
readonly markSignaled: () => void;
|
|
29
|
-
};
|
|
30
|
-
type ShutdownOperation = (context: ShutdownContext) => Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* One coordinator per session. `run` is claimed synchronously: it records the
|
|
33
|
-
* in-flight request before returning control, so a concurrent caller entering the
|
|
34
|
-
* same tick sees it and joins instead of starting a second, racing shutdown.
|
|
35
|
-
*/
|
|
36
|
-
export declare class ShutdownCoordinator {
|
|
37
|
-
private inFlight;
|
|
38
|
-
private signaled;
|
|
39
|
-
/**
|
|
40
|
-
* Claim (or join) the in-flight shutdown for `level`, running `operation` only
|
|
41
|
-
* when this call actually owns work:
|
|
42
|
-
* - No in-flight run: this caller owns it; `operation` runs immediately.
|
|
43
|
-
* - In-flight run of an equal-or-higher level: JOIN it (await the same promise);
|
|
44
|
-
* `operation` never runs, so the PTY is not signaled a second time.
|
|
45
|
-
* - In-flight run of a LOWER level (escalation): chain `operation` AFTER the
|
|
46
|
-
* in-flight run settles, so it observes the terminal status that run produced.
|
|
47
|
-
* The operation is told whether the PTY was `alreadySignaled` so it reaps/cleans
|
|
48
|
-
* up instead of re-signaling. On settlement `inFlight` is cleared (identity-guarded)
|
|
49
|
-
* so a later call can retry a failed reap/cleanup without re-signaling.
|
|
50
|
-
*/
|
|
51
|
-
run(level: ShutdownLevel, operation: ShutdownOperation): Promise<void>;
|
|
52
|
-
/** Drop the active entry once it settles, but never clobber a newer one. */
|
|
53
|
-
private clear;
|
|
54
|
-
private context;
|
|
55
|
-
}
|
|
56
|
-
export {};
|
|
57
|
-
//# sourceMappingURL=shutdown-coordinator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown-coordinator.d.ts","sourceRoot":"","sources":["../../src/runtime/shutdown-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAIzD,kFAAkF;AAClF,MAAM,MAAM,eAAe,GAAG;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;CACnC,CAAC;AAEF,KAAK,iBAAiB,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAGrE;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAuB;IAGvC,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtE,4EAA4E;IAC5E,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;CAQhB"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Serializes a session's overlapping stop/kill/teardown so the PTY is signaled at
|
|
3
|
-
* most once (PRD §5.3/§9.4, C-LIFE-10). Concurrent shutdown calls can each snapshot
|
|
4
|
-
* a non-terminal status and race into `terminatePty`; if the OS process exits before
|
|
5
|
-
* node-pty's exit callback updates status, a later caller could signal the numeric
|
|
6
|
-
* PID again AFTER the kernel recycled it, and duplicate waiters / first-wins evidence
|
|
7
|
-
* could mislabel a force-killed exit as merely stopped.
|
|
8
|
-
*
|
|
9
|
-
* Two pieces of state, tracked SEPARATELY, make this safe and still retryable:
|
|
10
|
-
* - `signaled` — sticky, set the first time any shutdown signals the PTY. It is
|
|
11
|
-
* NEVER cleared. A later caller that finds it set does NOT re-signal solely
|
|
12
|
-
* because the lifecycle status is still non-terminal (a predecessor that
|
|
13
|
-
* signaled+reaped but threw before submitting terminal status must not cause a
|
|
14
|
-
* re-signal of a possibly-recycled PID); it may still reap/cleanup/teardown.
|
|
15
|
-
* - `inFlight` — the current in-flight run, CLEARED on settlement (with identity
|
|
16
|
-
* protection). A failed `stop()`/`kill()`/`teardown()` therefore does not return
|
|
17
|
-
* a permanently rejected promise to every later caller: once it settles, a later
|
|
18
|
-
* call starts a fresh operation that RETRIES reap/cleanup/removal without
|
|
19
|
-
* re-signaling the PTY (C-LIFE-10 retry posture).
|
|
20
|
-
*/
|
|
21
|
-
const levelRank = { stop: 0, kill: 1, teardown: 2 };
|
|
22
|
-
/**
|
|
23
|
-
* One coordinator per session. `run` is claimed synchronously: it records the
|
|
24
|
-
* in-flight request before returning control, so a concurrent caller entering the
|
|
25
|
-
* same tick sees it and joins instead of starting a second, racing shutdown.
|
|
26
|
-
*/
|
|
27
|
-
export class ShutdownCoordinator {
|
|
28
|
-
inFlight;
|
|
29
|
-
// Sticky: once the PTY is signaled it must never be signaled again (recycled PID),
|
|
30
|
-
// independently of whether a run reached a terminal status before it settled.
|
|
31
|
-
signaled = false;
|
|
32
|
-
/**
|
|
33
|
-
* Claim (or join) the in-flight shutdown for `level`, running `operation` only
|
|
34
|
-
* when this call actually owns work:
|
|
35
|
-
* - No in-flight run: this caller owns it; `operation` runs immediately.
|
|
36
|
-
* - In-flight run of an equal-or-higher level: JOIN it (await the same promise);
|
|
37
|
-
* `operation` never runs, so the PTY is not signaled a second time.
|
|
38
|
-
* - In-flight run of a LOWER level (escalation): chain `operation` AFTER the
|
|
39
|
-
* in-flight run settles, so it observes the terminal status that run produced.
|
|
40
|
-
* The operation is told whether the PTY was `alreadySignaled` so it reaps/cleans
|
|
41
|
-
* up instead of re-signaling. On settlement `inFlight` is cleared (identity-guarded)
|
|
42
|
-
* so a later call can retry a failed reap/cleanup without re-signaling.
|
|
43
|
-
*/
|
|
44
|
-
run(level, operation) {
|
|
45
|
-
const current = this.inFlight;
|
|
46
|
-
if (current && levelRank[current.level] >= levelRank[level])
|
|
47
|
-
return current.promise;
|
|
48
|
-
const invoke = () => operation(this.context());
|
|
49
|
-
// No in-flight run: this caller owns it and starts SYNCHRONOUSLY (no microtask gap
|
|
50
|
-
// before the PTY signal). An escalation chains AFTER the lower-level in-flight run
|
|
51
|
-
// so it observes the terminal status that run produced; the predecessor's rejection
|
|
52
|
-
// is absorbed here (each shutdown still surfaces its own failure to its own caller).
|
|
53
|
-
const promise = current ? current.promise.then(invoke, invoke) : invoke();
|
|
54
|
-
const entry = { level, promise };
|
|
55
|
-
this.inFlight = entry;
|
|
56
|
-
// Clear on settlement so a settled failure never permanently blocks a retry — but
|
|
57
|
-
// only if this is still the active entry (a newer run must not be clobbered). The
|
|
58
|
-
// rejection is swallowed on THIS observer only; the `promise` returned to the
|
|
59
|
-
// caller still rejects so each shutdown surfaces its own failure.
|
|
60
|
-
promise.then(() => this.clear(entry), () => this.clear(entry));
|
|
61
|
-
return promise;
|
|
62
|
-
}
|
|
63
|
-
/** Drop the active entry once it settles, but never clobber a newer one. */
|
|
64
|
-
clear(entry) {
|
|
65
|
-
if (this.inFlight === entry)
|
|
66
|
-
this.inFlight = undefined;
|
|
67
|
-
}
|
|
68
|
-
context() {
|
|
69
|
-
return {
|
|
70
|
-
alreadySignaled: this.signaled,
|
|
71
|
-
markSignaled: () => {
|
|
72
|
-
this.signaled = true;
|
|
73
|
-
},
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=shutdown-coordinator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown-coordinator.js","sourceRoot":"","sources":["../../src/runtime/shutdown-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,MAAM,SAAS,GAA4C,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAa7F;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IACtB,QAAQ,CAAuB;IACvC,mFAAmF;IACnF,8EAA8E;IACtE,QAAQ,GAAG,KAAK,CAAC;IAEzB;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,KAAoB,EAAE,SAA4B;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC;QACpF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,mFAAmF;QACnF,mFAAmF;QACnF,oFAAoF;QACpF,qFAAqF;QACrF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,kFAAkF;QAClF,kFAAkF;QAClF,8EAA8E;QAC9E,kEAAkE;QAClE,OAAO,CAAC,IAAI,CACV,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACvB,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CACxB,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,4EAA4E;IACpE,KAAK,CAAC,KAAe;QAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IACzD,CAAC;IAEO,OAAO;QACb,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,QAAQ;YAC9B,YAAY,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bounded, release-able collector for the first PTY output of a session.
|
|
3
|
-
*
|
|
4
|
-
* The startup usability check (see startup.ts, `assertStartupUsable`) reads the
|
|
5
|
-
* agent's early output exactly once at ~500ms to detect a crash or auth banner.
|
|
6
|
-
* The PTY data handler is never detached for the session's lifetime, so a naive
|
|
7
|
-
* `startupOutput += data` accumulates a second unbounded in-memory transcript
|
|
8
|
-
* for the WHOLE session even though only the startup snapshot is ever consumed.
|
|
9
|
-
*
|
|
10
|
-
* This collector appends only while the startup gate is open and caps the buffer
|
|
11
|
-
* so a chatty CLI cannot balloon it; once `release()` is called (right after the
|
|
12
|
-
* usability check reads it) further chunks are dropped and the retained string is
|
|
13
|
-
* cleared, so no per-session transcript lingers. Implements PRD §9.1 startup
|
|
14
|
-
* usability and §9.4 resource cleanup.
|
|
15
|
-
*/
|
|
16
|
-
import type { PtyExit } from "../pty/types.ts";
|
|
17
|
-
import { type StartupAdapter } from "./startup.ts";
|
|
18
|
-
export type StartupBuffer = {
|
|
19
|
-
/** Appends a PTY chunk while the gate is open; a no-op once released. */
|
|
20
|
-
readonly push: (data: string) => void;
|
|
21
|
-
/** Returns the collected startup output (empty once released). */
|
|
22
|
-
readonly read: () => string;
|
|
23
|
-
/** Stops collecting and clears the retained buffer for the rest of the session. */
|
|
24
|
-
readonly release: () => void;
|
|
25
|
-
};
|
|
26
|
-
export declare function createStartupBuffer(cap?: number): StartupBuffer;
|
|
27
|
-
/**
|
|
28
|
-
* Runs the ~500ms startup usability check against `buffer`, then releases it on
|
|
29
|
-
* every path (success OR failure) so the collector stops appending and clears
|
|
30
|
-
* its retained string for the rest of the session (§9.1, §9.4).
|
|
31
|
-
*/
|
|
32
|
-
export declare function assertStartupThenRelease(adapter: StartupAdapter, buffer: StartupBuffer, exit: () => PtyExit | undefined): Promise<void>;
|
|
33
|
-
//# sourceMappingURL=startup-buffer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"startup-buffer.d.ts","sourceRoot":"","sources":["../../src/runtime/startup-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAMxE,MAAM,MAAM,aAAa,GAAG;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAA2B,GAAG,aAAa,CAiBnF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,OAAO,GAAG,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bounded, release-able collector for the first PTY output of a session.
|
|
3
|
-
*
|
|
4
|
-
* The startup usability check (see startup.ts, `assertStartupUsable`) reads the
|
|
5
|
-
* agent's early output exactly once at ~500ms to detect a crash or auth banner.
|
|
6
|
-
* The PTY data handler is never detached for the session's lifetime, so a naive
|
|
7
|
-
* `startupOutput += data` accumulates a second unbounded in-memory transcript
|
|
8
|
-
* for the WHOLE session even though only the startup snapshot is ever consumed.
|
|
9
|
-
*
|
|
10
|
-
* This collector appends only while the startup gate is open and caps the buffer
|
|
11
|
-
* so a chatty CLI cannot balloon it; once `release()` is called (right after the
|
|
12
|
-
* usability check reads it) further chunks are dropped and the retained string is
|
|
13
|
-
* cleared, so no per-session transcript lingers. Implements PRD §9.1 startup
|
|
14
|
-
* usability and §9.4 resource cleanup.
|
|
15
|
-
*/
|
|
16
|
-
import { assertStartupUsable } from "./startup.js";
|
|
17
|
-
// Startup output is tiny (a banner, a prompt); this cap is comfortably larger
|
|
18
|
-
// than any real startup screen while still bounding a misbehaving CLI.
|
|
19
|
-
const STARTUP_BUFFER_CAP = 64 * 1024;
|
|
20
|
-
export function createStartupBuffer(cap = STARTUP_BUFFER_CAP) {
|
|
21
|
-
let buffer = "";
|
|
22
|
-
let open = true;
|
|
23
|
-
return {
|
|
24
|
-
push(data) {
|
|
25
|
-
if (!open || buffer.length >= cap)
|
|
26
|
-
return;
|
|
27
|
-
buffer += data;
|
|
28
|
-
if (buffer.length > cap)
|
|
29
|
-
buffer = buffer.slice(0, cap);
|
|
30
|
-
},
|
|
31
|
-
read() {
|
|
32
|
-
return buffer;
|
|
33
|
-
},
|
|
34
|
-
release() {
|
|
35
|
-
open = false;
|
|
36
|
-
buffer = "";
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Runs the ~500ms startup usability check against `buffer`, then releases it on
|
|
42
|
-
* every path (success OR failure) so the collector stops appending and clears
|
|
43
|
-
* its retained string for the rest of the session (§9.1, §9.4).
|
|
44
|
-
*/
|
|
45
|
-
export async function assertStartupThenRelease(adapter, buffer, exit) {
|
|
46
|
-
try {
|
|
47
|
-
await assertStartupUsable({ adapter, exit, output: () => buffer.read() });
|
|
48
|
-
}
|
|
49
|
-
finally {
|
|
50
|
-
buffer.release();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=startup-buffer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"startup-buffer.js","sourceRoot":"","sources":["../../src/runtime/startup-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,mBAAmB,EAAuB,MAAM,cAAc,CAAC;AAExE,8EAA8E;AAC9E,uEAAuE;AACvE,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AAWrC,MAAM,UAAU,mBAAmB,CAAC,MAAc,kBAAkB;IAClE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,OAAO;QACL,IAAI,CAAC,IAAY;YACf,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG;gBAAE,OAAO;YAC1C,MAAM,IAAI,IAAI,CAAC;YACf,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,IAAI;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO;YACL,IAAI,GAAG,KAAK,CAAC;YACb,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAuB,EACvB,MAAqB,EACrB,IAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Best-effort startup cleanup that preserves the original startup error.
|
|
3
|
-
* Implements PRD §9.1 and §10 error stability.
|
|
4
|
-
*/
|
|
5
|
-
import type { PtyProcess } from "../pty/types.ts";
|
|
6
|
-
export type StartupTerminationTimeouts = {
|
|
7
|
-
readonly gracefulMs: number;
|
|
8
|
-
readonly forceMs: number;
|
|
9
|
-
};
|
|
10
|
-
export type StartupCleanupResources = {
|
|
11
|
-
readonly before?: () => void;
|
|
12
|
-
readonly bridge?: {
|
|
13
|
-
readonly stop: () => Promise<void>;
|
|
14
|
-
};
|
|
15
|
-
readonly pty?: PtyProcess;
|
|
16
|
-
readonly terminal?: {
|
|
17
|
-
readonly dispose: () => void;
|
|
18
|
-
};
|
|
19
|
-
readonly after?: () => void;
|
|
20
|
-
/** Overrides the bounded PTY termination window (tests only; production defaults). */
|
|
21
|
-
readonly terminationTimeouts?: StartupTerminationTimeouts;
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* Wraps the ENTIRE `start*FromRecord` body so the fresh per-launch socket FILE the
|
|
25
|
-
* launch minted is removed on ANY failure before the session takes ownership — a
|
|
26
|
-
* failed state/runtime write, bridge start, PTY start, or guarded post-spawn step
|
|
27
|
-
* otherwise leaks a socket under `/tmp/elwood-*` (§9.1). It removes only THIS launch's
|
|
28
|
-
* own file, never the shared stable home a concurrent launch may still own; the home is
|
|
29
|
-
* deterministic, so the session's next start/resume/teardown collects any empty
|
|
30
|
-
* leftover. On success ownership transfers to the returned session (teardown removes the
|
|
31
|
-
* whole home). The cleanup is contained so it never replaces the original startup error.
|
|
32
|
-
*/
|
|
33
|
-
export declare function withSocketHomeCleanup<T>(removeOwnSocketFile: () => void, build: () => Promise<T>): Promise<T>;
|
|
34
|
-
export declare function cleanupStartupResources(resources: StartupCleanupResources): Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Runs the post-session-construction startup steps behind ONE cleanup boundary
|
|
37
|
-
* (PRD §9.1, §9.4): if `region` rejects — a failed startup assertion, a PTY write
|
|
38
|
-
* fault, anything — the now-live PTY, bridge, terminal, and any watcher
|
|
39
|
-
* are torn down via `cleanupStartupResources` before the original error rethrows, so
|
|
40
|
-
* a rejected `startClaude`/`startCodex` never leaks live resources.
|
|
41
|
-
*/
|
|
42
|
-
export declare function guardStartupRegion(region: () => Promise<void>, resources: StartupCleanupResources): Promise<void>;
|
|
43
|
-
//# sourceMappingURL=startup-cleanup.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"startup-cleanup.d.ts","sourceRoot":"","sources":["../../src/runtime/startup-cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;CAC3D,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,mBAAmB,EAAE,MAAM,IAAI,EAC/B,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,CAAC,CAWZ;AAMD,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F;AAUD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,IAAI,CAAC,CAOf"}
|