@with-logic/elwood 0.1.3 → 0.2.0
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 +383 -2
- package/CONTRIBUTING.md +29 -18
- package/README.md +32 -7
- package/dist/bridge/parse.d.ts.map +1 -1
- package/dist/bridge/parse.js +2 -1
- package/dist/bridge/parse.js.map +1 -1
- package/dist/bridge/server.d.ts.map +1 -1
- package/dist/bridge/server.js +6 -2
- package/dist/bridge/server.js.map +1 -1
- package/dist/claude/attach-images.d.ts +3 -1
- package/dist/claude/attach-images.d.ts.map +1 -1
- package/dist/claude/attach-images.js +11 -10
- package/dist/claude/attach-images.js.map +1 -1
- package/dist/claude/composer/empty-input.d.ts +4 -0
- package/dist/claude/composer/empty-input.d.ts.map +1 -0
- package/dist/claude/composer/empty-input.js +28 -0
- package/dist/claude/composer/empty-input.js.map +1 -0
- package/dist/claude/composer/footer.d.ts +3 -0
- package/dist/claude/composer/footer.d.ts.map +1 -0
- package/dist/claude/composer/footer.js +3 -0
- package/dist/claude/composer/footer.js.map +1 -0
- package/dist/claude/composer/staged-input.d.ts +7 -0
- package/dist/claude/composer/staged-input.d.ts.map +1 -0
- package/dist/claude/composer/staged-input.js +18 -0
- package/dist/claude/composer/staged-input.js.map +1 -0
- package/dist/claude/hooks/common-result.d.ts +5 -0
- package/dist/claude/hooks/common-result.d.ts.map +1 -0
- package/dist/claude/hooks/common-result.js +3 -0
- package/dist/claude/hooks/common-result.js.map +1 -0
- package/dist/claude/hooks/dispatch.d.ts +2 -1
- package/dist/claude/hooks/dispatch.d.ts.map +1 -1
- package/dist/claude/hooks/dispatch.js +3 -1
- package/dist/claude/hooks/dispatch.js.map +1 -1
- package/dist/claude/hooks/events-extra.d.ts +5 -4
- package/dist/claude/hooks/events-extra.d.ts.map +1 -1
- package/dist/claude/hooks/index.d.ts +10 -10
- package/dist/claude/hooks/index.d.ts.map +1 -1
- package/dist/claude/hooks/index.js +1 -4
- package/dist/claude/hooks/index.js.map +1 -1
- package/dist/claude/hooks/inputs/control.d.ts +25 -0
- package/dist/claude/hooks/inputs/control.d.ts.map +1 -0
- package/dist/claude/hooks/inputs/control.js +3 -0
- package/dist/claude/hooks/inputs/control.js.map +1 -0
- package/dist/claude/hooks/stop-failure.d.ts +10 -0
- package/dist/claude/hooks/stop-failure.d.ts.map +1 -0
- package/dist/claude/hooks/stop-failure.js +18 -0
- package/dist/claude/hooks/stop-failure.js.map +1 -0
- package/dist/claude/hooks/tool-types.d.ts +12 -10
- package/dist/claude/hooks/tool-types.d.ts.map +1 -1
- package/dist/claude/login/notice.d.ts +3 -0
- package/dist/claude/login/notice.d.ts.map +1 -0
- package/dist/claude/login/notice.js +3 -0
- package/dist/claude/login/notice.js.map +1 -0
- package/dist/claude/login/renewal.d.ts +13 -0
- package/dist/claude/login/renewal.d.ts.map +1 -0
- package/dist/claude/login/renewal.js +97 -0
- package/dist/claude/login/renewal.js.map +1 -0
- package/dist/claude/model-composer.d.ts +2 -0
- package/dist/claude/model-composer.d.ts.map +1 -0
- package/dist/claude/model-composer.js +12 -0
- package/dist/claude/model-composer.js.map +1 -0
- package/dist/claude/model-picker.d.ts.map +1 -1
- package/dist/claude/model-picker.js +42 -8
- package/dist/claude/model-picker.js.map +1 -1
- package/dist/claude/model-switch-confirmation.d.ts +6 -0
- package/dist/claude/model-switch-confirmation.d.ts.map +1 -1
- package/dist/claude/model-switch-confirmation.js +77 -4
- package/dist/claude/model-switch-confirmation.js.map +1 -1
- package/dist/claude/preflight.d.ts.map +1 -1
- package/dist/claude/preflight.js +2 -4
- package/dist/claude/preflight.js.map +1 -1
- package/dist/claude/questions/answer.d.ts +9 -0
- package/dist/claude/questions/answer.d.ts.map +1 -0
- package/dist/claude/questions/answer.js +84 -0
- package/dist/claude/questions/answer.js.map +1 -0
- package/dist/claude/questions/bind-answers.d.ts +14 -0
- package/dist/claude/questions/bind-answers.d.ts.map +1 -0
- package/dist/claude/questions/bind-answers.js +36 -0
- package/dist/claude/questions/bind-answers.js.map +1 -0
- package/dist/claude/questions/candidate.d.ts +23 -0
- package/dist/claude/questions/candidate.d.ts.map +1 -0
- package/dist/claude/questions/candidate.js +47 -0
- package/dist/claude/questions/candidate.js.map +1 -0
- package/dist/claude/questions/correlation.d.ts +15 -0
- package/dist/claude/questions/correlation.d.ts.map +1 -0
- package/dist/claude/questions/correlation.js +23 -0
- package/dist/claude/questions/correlation.js.map +1 -0
- package/dist/claude/questions/hook-decisions.d.ts +19 -0
- package/dist/claude/questions/hook-decisions.d.ts.map +1 -0
- package/dist/claude/questions/hook-decisions.js +52 -0
- package/dist/claude/questions/hook-decisions.js.map +1 -0
- package/dist/claude/questions/index.d.ts +27 -0
- package/dist/claude/questions/index.d.ts.map +1 -0
- package/dist/claude/questions/index.js +161 -0
- package/dist/claude/questions/index.js.map +1 -0
- package/dist/claude/questions/navigation.d.ts +24 -0
- package/dist/claude/questions/navigation.d.ts.map +1 -0
- package/dist/claude/questions/navigation.js +37 -0
- package/dist/claude/questions/navigation.js.map +1 -0
- package/dist/claude/questions/rows.d.ts +19 -0
- package/dist/claude/questions/rows.d.ts.map +1 -0
- package/dist/claude/questions/rows.js +64 -0
- package/dist/claude/questions/rows.js.map +1 -0
- package/dist/claude/questions/screen.d.ts +29 -0
- package/dist/claude/questions/screen.d.ts.map +1 -0
- package/dist/claude/questions/screen.js +103 -0
- package/dist/claude/questions/screen.js.map +1 -0
- package/dist/claude/screen-table.d.ts +19 -2
- package/dist/claude/screen-table.d.ts.map +1 -1
- package/dist/claude/screen-table.js +48 -4
- package/dist/claude/screen-table.js.map +1 -1
- package/dist/claude/serialize.d.ts.map +1 -1
- package/dist/claude/serialize.js +22 -6
- package/dist/claude/serialize.js.map +1 -1
- package/dist/claude/session/build.d.ts +1 -12
- package/dist/claude/session/build.d.ts.map +1 -1
- package/dist/claude/session/build.js +42 -55
- package/dist/claude/session/build.js.map +1 -1
- package/dist/claude/session/hook-handler.d.ts +3 -2
- package/dist/claude/session/hook-handler.d.ts.map +1 -1
- package/dist/claude/session/hook-handler.js +44 -18
- package/dist/claude/session/hook-handler.js.map +1 -1
- package/dist/claude/session/index.d.ts +2 -1
- package/dist/claude/session/index.d.ts.map +1 -1
- package/dist/claude/session/index.js +23 -8
- package/dist/claude/session/index.js.map +1 -1
- package/dist/claude/session/instance.d.ts +17 -5
- package/dist/claude/session/instance.d.ts.map +1 -1
- package/dist/claude/session/instance.js +25 -12
- package/dist/claude/session/instance.js.map +1 -1
- package/dist/claude/session/interface.d.ts +2 -1
- package/dist/claude/session/interface.d.ts.map +1 -1
- package/dist/claude/session/questions.d.ts +9 -0
- package/dist/claude/session/questions.d.ts.map +1 -0
- package/dist/claude/session/questions.js +19 -0
- package/dist/claude/session/questions.js.map +1 -0
- package/dist/claude/session/resume.d.ts.map +1 -1
- package/dist/claude/session/resume.js +35 -26
- package/dist/claude/session/resume.js.map +1 -1
- package/dist/claude/session/runtime.d.ts +10 -0
- package/dist/claude/session/runtime.d.ts.map +1 -1
- package/dist/claude/session/runtime.js +8 -5
- package/dist/claude/session/runtime.js.map +1 -1
- package/dist/claude/session/startup-warnings.d.ts +5 -0
- package/dist/claude/session/startup-warnings.d.ts.map +1 -0
- package/dist/claude/session/startup-warnings.js +7 -0
- package/dist/claude/session/startup-warnings.js.map +1 -0
- package/dist/claude/session/transcript.d.ts +2 -0
- package/dist/claude/session/transcript.d.ts.map +1 -1
- package/dist/claude/session/transcript.js +21 -3
- package/dist/claude/session/transcript.js.map +1 -1
- package/dist/claude/startup-prompts.d.ts +35 -3
- package/dist/claude/startup-prompts.d.ts.map +1 -1
- package/dist/claude/startup-prompts.js +81 -15
- package/dist/claude/startup-prompts.js.map +1 -1
- package/dist/claude/transcript/index.d.ts.map +1 -1
- package/dist/claude/transcript/index.js +3 -2
- package/dist/claude/transcript/index.js.map +1 -1
- package/dist/claude/validate/event-fields.d.ts +6 -0
- package/dist/claude/validate/event-fields.d.ts.map +1 -0
- package/dist/claude/validate/event-fields.js +103 -0
- package/dist/claude/validate/event-fields.js.map +1 -0
- package/dist/claude/validate/input.d.ts.map +1 -1
- package/dist/claude/validate/input.js +12 -41
- package/dist/claude/validate/input.js.map +1 -1
- package/dist/claude/validate/shapes.d.ts +1 -1
- package/dist/claude/validate/shapes.d.ts.map +1 -1
- package/dist/claude/validate/shapes.js +1 -1
- package/dist/claude/validate/shapes.js.map +1 -1
- package/dist/claude/validate/tool-shapes.d.ts +102 -0
- package/dist/claude/validate/tool-shapes.d.ts.map +1 -0
- package/dist/claude/validate/tool-shapes.js +83 -0
- package/dist/claude/validate/tool-shapes.js.map +1 -0
- package/dist/claude/validate/tool-update.d.ts +2 -11
- package/dist/claude/validate/tool-update.d.ts.map +1 -1
- package/dist/claude/validate/tool-update.js +11 -112
- package/dist/claude/validate/tool-update.js.map +1 -1
- package/dist/claude/validate/tool-values.d.ts +7 -0
- package/dist/claude/validate/tool-values.d.ts.map +1 -0
- package/dist/claude/validate/tool-values.js +30 -0
- package/dist/claude/validate/tool-values.js.map +1 -0
- package/dist/cli/args/options.d.ts.map +1 -1
- package/dist/cli/args/options.js +1 -0
- package/dist/cli/args/options.js.map +1 -1
- package/dist/cli/args-commands.d.ts.map +1 -1
- package/dist/cli/args-commands.js +3 -0
- package/dist/cli/args-commands.js.map +1 -1
- package/dist/cli/config/store.d.ts.map +1 -1
- package/dist/cli/config/store.js +2 -1
- package/dist/cli/config/store.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/interactive/effort.d.ts +5 -0
- package/dist/cli/interactive/effort.d.ts.map +1 -0
- package/dist/cli/interactive/effort.js +13 -0
- package/dist/cli/interactive/effort.js.map +1 -0
- package/dist/cli/interactive/launch.d.ts.map +1 -1
- package/dist/cli/interactive/launch.js +1 -1
- package/dist/cli/interactive/launch.js.map +1 -1
- package/dist/cli/lifecycle/index.d.ts +3 -6
- package/dist/cli/lifecycle/index.d.ts.map +1 -1
- package/dist/cli/lifecycle/index.js +6 -13
- package/dist/cli/lifecycle/index.js.map +1 -1
- package/dist/cli/models/settings.d.ts +2 -0
- package/dist/cli/models/settings.d.ts.map +1 -1
- package/dist/cli/request/index.d.ts.map +1 -1
- package/dist/cli/request/index.js +1 -0
- package/dist/cli/request/index.js.map +1 -1
- package/dist/cli/run/index.d.ts.map +1 -1
- package/dist/cli/run/index.js +3 -1
- package/dist/cli/run/index.js.map +1 -1
- package/dist/cli/run/output.d.ts.map +1 -1
- package/dist/cli/run/output.js +1 -0
- package/dist/cli/run/output.js.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 +2 -0
- package/dist/cli/session/index.d.ts.map +1 -1
- package/dist/cli/session/index.js +3 -0
- package/dist/cli/session/index.js.map +1 -1
- package/dist/cli/session/launch.d.ts +0 -3
- package/dist/cli/session/launch.d.ts.map +1 -1
- package/dist/cli/session/launch.js +0 -11
- package/dist/cli/session/launch.js.map +1 -1
- package/dist/cli/sessions/list.d.ts.map +1 -1
- package/dist/cli/sessions/list.js +5 -4
- package/dist/cli/sessions/list.js.map +1 -1
- package/dist/cli/types.d.ts +2 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/update-attention.d.ts +2 -1
- package/dist/cli/update-attention.d.ts.map +1 -1
- package/dist/cli/update-attention.js +11 -2
- package/dist/cli/update-attention.js.map +1 -1
- package/dist/codex/accepted-turn.d.ts +4 -0
- package/dist/codex/accepted-turn.d.ts.map +1 -0
- package/dist/codex/accepted-turn.js +17 -0
- package/dist/codex/accepted-turn.js.map +1 -0
- package/dist/codex/config/transaction.d.ts +22 -0
- package/dist/codex/config/transaction.d.ts.map +1 -1
- package/dist/codex/config/transaction.js +61 -31
- package/dist/codex/config/transaction.js.map +1 -1
- package/dist/codex/hooks/index.d.ts +6 -1
- package/dist/codex/hooks/index.d.ts.map +1 -1
- package/dist/codex/hooks/validate-result.d.ts.map +1 -1
- package/dist/codex/hooks/validate-result.js +2 -1
- package/dist/codex/hooks/validate-result.js.map +1 -1
- package/dist/codex/hooks/validate.d.ts.map +1 -1
- package/dist/codex/hooks/validate.js +1 -3
- package/dist/codex/hooks/validate.js.map +1 -1
- package/dist/codex/hooks/values.d.ts +3 -0
- package/dist/codex/hooks/values.d.ts.map +1 -0
- package/dist/codex/hooks/values.js +5 -0
- package/dist/codex/hooks/values.js.map +1 -0
- package/dist/codex/images/attach.d.ts +3 -1
- package/dist/codex/images/attach.d.ts.map +1 -1
- package/dist/codex/images/attach.js +10 -11
- package/dist/codex/images/attach.js.map +1 -1
- package/dist/codex/images/clipboard.d.ts.map +1 -1
- package/dist/codex/images/clipboard.js +11 -3
- package/dist/codex/images/clipboard.js.map +1 -1
- package/dist/codex/model-picker.d.ts.map +1 -1
- package/dist/codex/model-picker.js +23 -5
- package/dist/codex/model-picker.js.map +1 -1
- package/dist/codex/preflight.d.ts.map +1 -1
- package/dist/codex/preflight.js +2 -2
- package/dist/codex/preflight.js.map +1 -1
- package/dist/codex/questions/acceptance.d.ts +18 -0
- package/dist/codex/questions/acceptance.d.ts.map +1 -0
- package/dist/codex/questions/acceptance.js +70 -0
- package/dist/codex/questions/acceptance.js.map +1 -0
- package/dist/codex/questions/adapter.d.ts +26 -0
- package/dist/codex/questions/adapter.d.ts.map +1 -0
- package/dist/codex/questions/adapter.js +163 -0
- package/dist/codex/questions/adapter.js.map +1 -0
- package/dist/codex/questions/candidate-acceptance.d.ts +5 -0
- package/dist/codex/questions/candidate-acceptance.d.ts.map +1 -0
- package/dist/codex/questions/candidate-acceptance.js +8 -0
- package/dist/codex/questions/candidate-acceptance.js.map +1 -0
- package/dist/codex/questions/candidate-authority.d.ts +10 -0
- package/dist/codex/questions/candidate-authority.d.ts.map +1 -0
- package/dist/codex/questions/candidate-authority.js +25 -0
- package/dist/codex/questions/candidate-authority.js.map +1 -0
- package/dist/codex/questions/candidate-disable.d.ts +5 -0
- package/dist/codex/questions/candidate-disable.d.ts.map +1 -0
- package/dist/codex/questions/candidate-disable.js +14 -0
- package/dist/codex/questions/candidate-disable.js.map +1 -0
- package/dist/codex/questions/candidate-publication.d.ts +7 -0
- package/dist/codex/questions/candidate-publication.d.ts.map +1 -0
- package/dist/codex/questions/candidate-publication.js +8 -0
- package/dist/codex/questions/candidate-publication.js.map +1 -0
- package/dist/codex/questions/candidate-reservation.d.ts +6 -0
- package/dist/codex/questions/candidate-reservation.d.ts.map +1 -0
- package/dist/codex/questions/candidate-reservation.js +7 -0
- package/dist/codex/questions/candidate-reservation.js.map +1 -0
- package/dist/codex/questions/candidate-store.d.ts +53 -0
- package/dist/codex/questions/candidate-store.d.ts.map +1 -0
- package/dist/codex/questions/candidate-store.js +188 -0
- package/dist/codex/questions/candidate-store.js.map +1 -0
- package/dist/codex/questions/candidate.d.ts +40 -0
- package/dist/codex/questions/candidate.d.ts.map +1 -0
- package/dist/codex/questions/candidate.js +39 -0
- package/dist/codex/questions/candidate.js.map +1 -0
- package/dist/codex/questions/candidates.d.ts +16 -0
- package/dist/codex/questions/candidates.d.ts.map +1 -0
- package/dist/codex/questions/candidates.js +113 -0
- package/dist/codex/questions/candidates.js.map +1 -0
- package/dist/codex/questions/chrome.d.ts +10 -0
- package/dist/codex/questions/chrome.d.ts.map +1 -0
- package/dist/codex/questions/chrome.js +21 -0
- package/dist/codex/questions/chrome.js.map +1 -0
- package/dist/codex/questions/definitions.d.ts +19 -0
- package/dist/codex/questions/definitions.d.ts.map +1 -0
- package/dist/codex/questions/definitions.js +86 -0
- package/dist/codex/questions/definitions.js.map +1 -0
- package/dist/codex/questions/draft.d.ts +25 -0
- package/dist/codex/questions/draft.d.ts.map +1 -0
- package/dist/codex/questions/draft.js +76 -0
- package/dist/codex/questions/draft.js.map +1 -0
- package/dist/codex/questions/driver-support.d.ts +6 -0
- package/dist/codex/questions/driver-support.d.ts.map +1 -0
- package/dist/codex/questions/driver-support.js +7 -0
- package/dist/codex/questions/driver-support.js.map +1 -0
- package/dist/codex/questions/driver.d.ts +10 -0
- package/dist/codex/questions/driver.d.ts.map +1 -0
- package/dist/codex/questions/driver.js +139 -0
- package/dist/codex/questions/driver.js.map +1 -0
- package/dist/codex/questions/frame.d.ts +36 -0
- package/dist/codex/questions/frame.d.ts.map +1 -0
- package/dist/codex/questions/frame.js +138 -0
- package/dist/codex/questions/frame.js.map +1 -0
- package/dist/codex/questions/labels.d.ts +6 -0
- package/dist/codex/questions/labels.d.ts.map +1 -0
- package/dist/codex/questions/labels.js +6 -0
- package/dist/codex/questions/labels.js.map +1 -0
- package/dist/codex/questions/limits.d.ts +18 -0
- package/dist/codex/questions/limits.d.ts.map +1 -0
- package/dist/codex/questions/limits.js +61 -0
- package/dist/codex/questions/limits.js.map +1 -0
- package/dist/codex/questions/native-pending.d.ts +7 -0
- package/dist/codex/questions/native-pending.d.ts.map +1 -0
- package/dist/codex/questions/native-pending.js +37 -0
- package/dist/codex/questions/native-pending.js.map +1 -0
- package/dist/codex/questions/owned-editor.d.ts +12 -0
- package/dist/codex/questions/owned-editor.d.ts.map +1 -0
- package/dist/codex/questions/owned-editor.js +37 -0
- package/dist/codex/questions/owned-editor.js.map +1 -0
- package/dist/codex/questions/pending-submissions.d.ts +12 -0
- package/dist/codex/questions/pending-submissions.d.ts.map +1 -0
- package/dist/codex/questions/pending-submissions.js +42 -0
- package/dist/codex/questions/pending-submissions.js.map +1 -0
- package/dist/codex/questions/records.d.ts +29 -0
- package/dist/codex/questions/records.d.ts.map +1 -0
- package/dist/codex/questions/records.js +113 -0
- package/dist/codex/questions/records.js.map +1 -0
- package/dist/codex/questions/selection.d.ts +3 -0
- package/dist/codex/questions/selection.d.ts.map +1 -0
- package/dist/codex/questions/selection.js +18 -0
- package/dist/codex/questions/selection.js.map +1 -0
- package/dist/codex/questions/session.d.ts +6 -0
- package/dist/codex/questions/session.d.ts.map +1 -0
- package/dist/codex/questions/session.js +21 -0
- package/dist/codex/questions/session.js.map +1 -0
- package/dist/codex/screen/clearance.d.ts +17 -0
- package/dist/codex/screen/clearance.d.ts.map +1 -0
- package/dist/codex/screen/clearance.js +170 -0
- package/dist/codex/screen/clearance.js.map +1 -0
- package/dist/codex/screen/empty-input.d.ts +4 -0
- package/dist/codex/screen/empty-input.d.ts.map +1 -0
- package/dist/codex/screen/empty-input.js +10 -0
- package/dist/codex/screen/empty-input.js.map +1 -0
- package/dist/codex/screen/live-clearance.d.ts +6 -0
- package/dist/codex/screen/live-clearance.d.ts.map +1 -0
- package/dist/codex/screen/live-clearance.js +34 -0
- package/dist/codex/screen/live-clearance.js.map +1 -0
- package/dist/codex/screen/retained-clearance.d.ts +19 -0
- package/dist/codex/screen/retained-clearance.d.ts.map +1 -0
- package/dist/codex/screen/retained-clearance.js +67 -0
- package/dist/codex/screen/retained-clearance.js.map +1 -0
- package/dist/codex/screen/staged-input.d.ts +7 -0
- package/dist/codex/screen/staged-input.d.ts.map +1 -0
- package/dist/codex/screen/staged-input.js +40 -0
- package/dist/codex/screen/staged-input.js.map +1 -0
- package/dist/codex/screen/working.d.ts +4 -0
- package/dist/codex/screen/working.d.ts.map +1 -0
- package/dist/codex/screen/working.js +5 -0
- package/dist/codex/screen/working.js.map +1 -0
- package/dist/codex/screen-table.d.ts +4 -1
- package/dist/codex/screen-table.d.ts.map +1 -1
- package/dist/codex/screen-table.js +44 -11
- package/dist/codex/screen-table.js.map +1 -1
- package/dist/codex/session/build.d.ts +1 -0
- package/dist/codex/session/build.d.ts.map +1 -1
- package/dist/codex/session/build.js +62 -68
- package/dist/codex/session/build.js.map +1 -1
- package/dist/codex/session/caller-input.d.ts +18 -0
- package/dist/codex/session/caller-input.d.ts.map +1 -0
- package/dist/codex/session/caller-input.js +50 -0
- package/dist/codex/session/caller-input.js.map +1 -0
- package/dist/codex/session/cleanup.d.ts +2 -1
- package/dist/codex/session/cleanup.d.ts.map +1 -1
- package/dist/codex/session/cleanup.js +3 -2
- package/dist/codex/session/cleanup.js.map +1 -1
- package/dist/codex/session/cli-exit.d.ts +24 -0
- package/dist/codex/session/cli-exit.d.ts.map +1 -0
- package/dist/codex/session/cli-exit.js +43 -0
- package/dist/codex/session/cli-exit.js.map +1 -0
- package/dist/codex/session/hooks.d.ts +3 -0
- package/dist/codex/session/hooks.d.ts.map +1 -1
- package/dist/codex/session/hooks.js +66 -13
- package/dist/codex/session/hooks.js.map +1 -1
- package/dist/codex/session/index.d.ts +2 -1
- package/dist/codex/session/index.d.ts.map +1 -1
- package/dist/codex/session/index.js +23 -8
- package/dist/codex/session/index.js.map +1 -1
- package/dist/codex/session/initial-ready.d.ts +6 -0
- package/dist/codex/session/initial-ready.d.ts.map +1 -0
- package/dist/codex/session/initial-ready.js +9 -0
- package/dist/codex/session/initial-ready.js.map +1 -0
- package/dist/codex/session/instance.d.ts +19 -4
- package/dist/codex/session/instance.d.ts.map +1 -1
- package/dist/codex/session/instance.js +60 -30
- package/dist/codex/session/instance.js.map +1 -1
- package/dist/codex/session/resume.d.ts.map +1 -1
- package/dist/codex/session/resume.js +35 -26
- package/dist/codex/session/resume.js.map +1 -1
- package/dist/codex/session/runtime.d.ts.map +1 -1
- package/dist/codex/session/runtime.js +1 -2
- package/dist/codex/session/runtime.js.map +1 -1
- package/dist/codex/session/startup-warnings.d.ts +11 -0
- package/dist/codex/session/startup-warnings.d.ts.map +1 -0
- package/dist/codex/session/startup-warnings.js +9 -0
- package/dist/codex/session/startup-warnings.js.map +1 -0
- package/dist/codex/session/transcript.d.ts +3 -1
- package/dist/codex/session/transcript.d.ts.map +1 -1
- package/dist/codex/session/transcript.js +51 -8
- package/dist/codex/session/transcript.js.map +1 -1
- package/dist/codex/session/types.d.ts +4 -3
- package/dist/codex/session/types.d.ts.map +1 -1
- package/dist/codex/session/update-attention.d.ts +4 -0
- package/dist/codex/session/update-attention.d.ts.map +1 -0
- package/dist/codex/session/update-attention.js +18 -0
- package/dist/codex/session/update-attention.js.map +1 -0
- package/dist/codex/session/warnings.d.ts +2 -1
- package/dist/codex/session/warnings.d.ts.map +1 -1
- package/dist/codex/session/warnings.js +2 -1
- package/dist/codex/session/warnings.js.map +1 -1
- package/dist/codex/simple.d.ts +1 -0
- package/dist/codex/simple.d.ts.map +1 -1
- package/dist/codex/simple.js +2 -0
- package/dist/codex/simple.js.map +1 -1
- package/dist/codex/startup-prompts.d.ts +29 -14
- package/dist/codex/startup-prompts.d.ts.map +1 -1
- package/dist/codex/startup-prompts.js +113 -93
- package/dist/codex/startup-prompts.js.map +1 -1
- package/dist/codex/startup-warnings.d.ts +10 -0
- package/dist/codex/startup-warnings.d.ts.map +1 -0
- package/dist/codex/startup-warnings.js +65 -0
- package/dist/codex/startup-warnings.js.map +1 -0
- package/dist/codex/transcript/summary.d.ts +1 -1
- package/dist/codex/transcript/summary.d.ts.map +1 -1
- package/dist/codex/transcript/summary.js +18 -7
- package/dist/codex/transcript/summary.js.map +1 -1
- package/dist/codex/transcript/types.d.ts +23 -12
- package/dist/codex/transcript/types.d.ts.map +1 -1
- package/dist/codex/transcript/watcher.d.ts.map +1 -1
- package/dist/codex/transcript/watcher.js +2 -1
- package/dist/codex/transcript/watcher.js.map +1 -1
- package/dist/codex/update/classification.d.ts +27 -0
- package/dist/codex/update/classification.d.ts.map +1 -0
- package/dist/codex/update/classification.js +28 -0
- package/dist/codex/update/classification.js.map +1 -0
- package/dist/codex/update/evidence.d.ts +22 -0
- package/dist/codex/update/evidence.d.ts.map +1 -0
- package/dist/codex/update/evidence.js +69 -0
- package/dist/codex/update/evidence.js.map +1 -0
- package/dist/codex/update/layout.d.ts +7 -0
- package/dist/codex/update/layout.d.ts.map +1 -0
- package/dist/codex/update/layout.js +65 -0
- package/dist/codex/update/layout.js.map +1 -0
- package/dist/codex/update/recognition.d.ts +3 -0
- package/dist/codex/update/recognition.d.ts.map +1 -0
- package/dist/codex/update/recognition.js +7 -0
- package/dist/codex/update/recognition.js.map +1 -0
- package/dist/codex/update/selection.d.ts +7 -0
- package/dist/codex/update/selection.d.ts.map +1 -0
- package/dist/codex/update/selection.js +10 -0
- package/dist/codex/update/selection.js.map +1 -0
- package/dist/codex/update/skip-attempt.d.ts +25 -0
- package/dist/codex/update/skip-attempt.d.ts.map +1 -0
- package/dist/codex/update/skip-attempt.js +64 -0
- package/dist/codex/update/skip-attempt.js.map +1 -0
- package/dist/codex/update/tracker.d.ts +37 -0
- package/dist/codex/update/tracker.d.ts.map +1 -0
- package/dist/codex/update/tracker.js +156 -0
- package/dist/codex/update/tracker.js.map +1 -0
- package/dist/codex/update-identity.d.ts +23 -0
- package/dist/codex/update-identity.d.ts.map +1 -0
- package/dist/codex/update-identity.js +46 -0
- package/dist/codex/update-identity.js.map +1 -0
- package/dist/codex/update-prompt.d.ts +26 -17
- package/dist/codex/update-prompt.d.ts.map +1 -1
- package/dist/codex/update-prompt.js +65 -62
- package/dist/codex/update-prompt.js.map +1 -1
- package/dist/core/activity/index.d.ts +24 -3
- package/dist/core/activity/index.d.ts.map +1 -1
- package/dist/core/activity/index.js.map +1 -1
- package/dist/core/activity/meta.d.ts +6 -1
- package/dist/core/activity/meta.d.ts.map +1 -1
- package/dist/core/activity/meta.js.map +1 -1
- package/dist/core/activity/transcript.d.ts +4 -1
- package/dist/core/activity/transcript.d.ts.map +1 -1
- package/dist/core/activity/transcript.js +28 -18
- package/dist/core/activity/transcript.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/async-mutex.d.ts +14 -8
- package/dist/core/async-mutex.d.ts.map +1 -1
- package/dist/core/async-mutex.js +48 -12
- package/dist/core/async-mutex.js.map +1 -1
- package/dist/core/attention.d.ts +6 -2
- package/dist/core/attention.d.ts.map +1 -1
- package/dist/core/attention.js +23 -9
- package/dist/core/attention.js.map +1 -1
- package/dist/core/control-queue/admission-scan.d.ts +10 -0
- package/dist/core/control-queue/admission-scan.d.ts.map +1 -0
- package/dist/core/control-queue/admission-scan.js +28 -0
- package/dist/core/control-queue/admission-scan.js.map +1 -0
- package/dist/core/control-queue/admission.d.ts +15 -0
- package/dist/core/control-queue/admission.d.ts.map +1 -0
- package/dist/core/control-queue/admission.js +70 -0
- package/dist/core/control-queue/admission.js.map +1 -0
- package/dist/core/control-queue/budget.d.ts +15 -0
- package/dist/core/control-queue/budget.d.ts.map +1 -0
- package/dist/core/control-queue/budget.js +33 -0
- package/dist/core/control-queue/budget.js.map +1 -0
- package/dist/core/control-queue/index.d.ts +6 -3
- package/dist/core/control-queue/index.d.ts.map +1 -1
- package/dist/core/control-queue/index.js +52 -28
- package/dist/core/control-queue/index.js.map +1 -1
- package/dist/core/control-queue/scan.d.ts +10 -0
- package/dist/core/control-queue/scan.d.ts.map +1 -0
- package/dist/core/control-queue/scan.js +24 -0
- package/dist/core/control-queue/scan.js.map +1 -0
- package/dist/core/control-queue/state.d.ts +19 -3
- package/dist/core/control-queue/state.d.ts.map +1 -1
- package/dist/core/control-queue/state.js +87 -15
- package/dist/core/control-queue/state.js.map +1 -1
- package/dist/core/control-queue/submission.d.ts +8 -0
- package/dist/core/control-queue/submission.d.ts.map +1 -0
- package/dist/core/control-queue/submission.js +41 -0
- package/dist/core/control-queue/submission.js.map +1 -0
- package/dist/core/control-queue/traits.d.ts +6 -9
- package/dist/core/control-queue/traits.d.ts.map +1 -1
- package/dist/core/control-queue/traits.js +2 -15
- package/dist/core/control-queue/traits.js.map +1 -1
- package/dist/core/control-queue/types.d.ts +28 -2
- package/dist/core/control-queue/types.d.ts.map +1 -1
- package/dist/core/errors.d.ts +7 -2
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +7 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/freeze-hook-event.d.ts +6 -0
- package/dist/core/freeze-hook-event.d.ts.map +1 -0
- package/dist/core/freeze-hook-event.js +16 -0
- package/dist/core/freeze-hook-event.js.map +1 -0
- package/dist/core/hook-dispatch.d.ts +3 -2
- package/dist/core/hook-dispatch.d.ts.map +1 -1
- package/dist/core/hook-dispatch.js +14 -6
- package/dist/core/hook-dispatch.js.map +1 -1
- package/dist/core/hook-observation.d.ts +24 -0
- package/dist/core/hook-observation.d.ts.map +1 -0
- package/dist/core/hook-observation.js +68 -0
- package/dist/core/hook-observation.js.map +1 -0
- package/dist/core/hook-result.d.ts +12 -2
- package/dist/core/hook-result.d.ts.map +1 -1
- package/dist/core/hook-result.js +10 -9
- package/dist/core/hook-result.js.map +1 -1
- package/dist/core/hook-timeout.d.ts.map +1 -1
- package/dist/core/hook-timeout.js +3 -2
- package/dist/core/hook-timeout.js.map +1 -1
- package/dist/core/images/capture.d.ts +14 -0
- package/dist/core/images/capture.d.ts.map +1 -0
- package/dist/core/images/capture.js +35 -0
- package/dist/core/images/capture.js.map +1 -0
- package/dist/core/images/chip-wait.d.ts +14 -16
- package/dist/core/images/chip-wait.d.ts.map +1 -1
- package/dist/core/images/chip-wait.js +31 -34
- package/dist/core/images/chip-wait.js.map +1 -1
- package/dist/core/images/queued-budget.d.ts +18 -0
- package/dist/core/images/queued-budget.d.ts.map +1 -0
- package/dist/core/images/queued-budget.js +41 -0
- package/dist/core/images/queued-budget.js.map +1 -0
- package/dist/core/inert-record.d.ts +3 -0
- package/dist/core/inert-record.d.ts.map +1 -0
- package/dist/core/inert-record.js +6 -0
- package/dist/core/inert-record.js.map +1 -0
- package/dist/core/input/abort.d.ts +33 -2
- package/dist/core/input/abort.d.ts.map +1 -1
- package/dist/core/input/abort.js +42 -2
- package/dist/core/input/abort.js.map +1 -1
- package/dist/core/input/clear-ack.d.ts +10 -0
- package/dist/core/input/clear-ack.d.ts.map +1 -0
- package/dist/core/input/clear-ack.js +26 -0
- package/dist/core/input/clear-ack.js.map +1 -0
- package/dist/core/input/composer-cleanup.d.ts +33 -0
- package/dist/core/input/composer-cleanup.d.ts.map +1 -0
- package/dist/core/input/composer-cleanup.js +127 -0
- package/dist/core/input/composer-cleanup.js.map +1 -0
- package/dist/core/input/constants.d.ts +12 -0
- package/dist/core/input/constants.d.ts.map +1 -0
- package/dist/core/input/constants.js +12 -0
- package/dist/core/input/constants.js.map +1 -0
- package/dist/core/input/empty-frame.d.ts +4 -0
- package/dist/core/input/empty-frame.d.ts.map +1 -0
- package/dist/core/input/empty-frame.js +15 -0
- package/dist/core/input/empty-frame.js.map +1 -0
- package/dist/core/input/index.d.ts +8 -25
- package/dist/core/input/index.d.ts.map +1 -1
- package/dist/core/input/index.js +67 -102
- package/dist/core/input/index.js.map +1 -1
- package/dist/core/input/paste-guard.d.ts +34 -0
- package/dist/core/input/paste-guard.d.ts.map +1 -0
- package/dist/core/input/paste-guard.js +2 -0
- package/dist/core/input/paste-guard.js.map +1 -0
- package/dist/core/input/paste-nudge.d.ts +10 -0
- package/dist/core/input/paste-nudge.d.ts.map +1 -0
- package/dist/core/input/paste-nudge.js +91 -0
- package/dist/core/input/paste-nudge.js.map +1 -0
- package/dist/core/input/render-observation.d.ts +3 -0
- package/dist/core/input/render-observation.d.ts.map +1 -0
- package/dist/core/input/render-observation.js +38 -0
- package/dist/core/input/render-observation.js.map +1 -0
- package/dist/core/input/render-wakeup.d.ts +10 -0
- package/dist/core/input/render-wakeup.d.ts.map +1 -0
- package/dist/core/input/render-wakeup.js +45 -0
- package/dist/core/input/render-wakeup.js.map +1 -0
- package/dist/core/input/sanitize.d.ts +11 -0
- package/dist/core/input/sanitize.d.ts.map +1 -0
- package/dist/core/input/sanitize.js +19 -0
- package/dist/core/input/sanitize.js.map +1 -0
- package/dist/core/input/staged-composer.d.ts +12 -0
- package/dist/core/input/staged-composer.d.ts.map +1 -0
- package/dist/core/input/staged-composer.js +56 -0
- package/dist/core/input/staged-composer.js.map +1 -0
- package/dist/core/input/submission-cancel.d.ts +6 -0
- package/dist/core/input/submission-cancel.d.ts.map +1 -0
- package/dist/core/input/submission-cancel.js +18 -0
- package/dist/core/input/submission-cancel.js.map +1 -0
- package/dist/core/json-shape.d.ts +2 -0
- package/dist/core/json-shape.d.ts.map +1 -0
- package/dist/core/json-shape.js +6 -0
- package/dist/core/json-shape.js.map +1 -0
- package/dist/core/json-snapshot.d.ts +10 -0
- package/dist/core/json-snapshot.d.ts.map +1 -0
- package/dist/core/json-snapshot.js +84 -0
- package/dist/core/json-snapshot.js.map +1 -0
- package/dist/core/loops/scheduler.d.ts +1 -1
- package/dist/core/loops/scheduler.d.ts.map +1 -1
- package/dist/core/loops/scheduler.js +1 -2
- package/dist/core/loops/scheduler.js.map +1 -1
- package/dist/core/models/dialog-region.d.ts +16 -0
- package/dist/core/models/dialog-region.d.ts.map +1 -0
- package/dist/core/models/dialog-region.js +133 -0
- package/dist/core/models/dialog-region.js.map +1 -0
- package/dist/core/models/input.d.ts +1 -1
- package/dist/core/models/input.d.ts.map +1 -1
- package/dist/core/models/input.js.map +1 -1
- package/dist/core/models/intervention.d.ts +3 -0
- package/dist/core/models/intervention.d.ts.map +1 -0
- package/dist/core/models/intervention.js +12 -0
- package/dist/core/models/intervention.js.map +1 -0
- package/dist/core/models/picker.d.ts +14 -1
- package/dist/core/models/picker.d.ts.map +1 -1
- package/dist/core/models/picker.js +27 -6
- package/dist/core/models/picker.js.map +1 -1
- package/dist/core/models/rows.d.ts +42 -2
- package/dist/core/models/rows.d.ts.map +1 -1
- package/dist/core/models/rows.js +30 -3
- package/dist/core/models/rows.js.map +1 -1
- package/dist/core/models/tui-screen.d.ts +11 -1
- package/dist/core/models/tui-screen.d.ts.map +1 -1
- package/dist/core/models/tui-screen.js +22 -4
- package/dist/core/models/tui-screen.js.map +1 -1
- package/dist/core/module-require.d.ts +1 -1
- package/dist/core/module-require.js +1 -1
- package/dist/core/persona.d.ts +5 -4
- package/dist/core/persona.d.ts.map +1 -1
- package/dist/core/persona.js +18 -3
- package/dist/core/persona.js.map +1 -1
- package/dist/core/predicates.d.ts +9 -1
- package/dist/core/predicates.d.ts.map +1 -1
- package/dist/core/predicates.js +12 -2
- package/dist/core/predicates.js.map +1 -1
- package/dist/core/questions/abort.d.ts +2 -0
- package/dist/core/questions/abort.d.ts.map +1 -0
- package/dist/core/questions/abort.js +21 -0
- package/dist/core/questions/abort.js.map +1 -0
- package/dist/core/questions/activity-fields.d.ts +5 -0
- package/dist/core/questions/activity-fields.d.ts.map +1 -0
- package/dist/core/questions/activity-fields.js +15 -0
- package/dist/core/questions/activity-fields.js.map +1 -0
- package/dist/core/questions/activity.d.ts +6 -0
- package/dist/core/questions/activity.d.ts.map +1 -0
- package/dist/core/questions/activity.js +2 -0
- package/dist/core/questions/activity.js.map +1 -0
- package/dist/core/questions/adapter.d.ts +15 -0
- package/dist/core/questions/adapter.d.ts.map +1 -0
- package/dist/core/questions/adapter.js +2 -0
- package/dist/core/questions/adapter.js.map +1 -0
- package/dist/core/questions/attempt.d.ts +26 -0
- package/dist/core/questions/attempt.d.ts.map +1 -0
- package/dist/core/questions/attempt.js +85 -0
- package/dist/core/questions/attempt.js.map +1 -0
- package/dist/core/questions/controller.d.ts +24 -0
- package/dist/core/questions/controller.d.ts.map +1 -0
- package/dist/core/questions/controller.js +83 -0
- package/dist/core/questions/controller.js.map +1 -0
- package/dist/core/questions/correlation.d.ts +8 -0
- package/dist/core/questions/correlation.d.ts.map +1 -0
- package/dist/core/questions/correlation.js +11 -0
- package/dist/core/questions/correlation.js.map +1 -0
- package/dist/core/questions/cursor-provenance.d.ts +12 -0
- package/dist/core/questions/cursor-provenance.d.ts.map +1 -0
- package/dist/core/questions/cursor-provenance.js +19 -0
- package/dist/core/questions/cursor-provenance.js.map +1 -0
- package/dist/core/questions/deadline.d.ts +2 -0
- package/dist/core/questions/deadline.d.ts.map +1 -0
- package/dist/core/questions/deadline.js +11 -0
- package/dist/core/questions/deadline.js.map +1 -0
- package/dist/core/questions/dispatch.d.ts +17 -0
- package/dist/core/questions/dispatch.d.ts.map +1 -0
- package/dist/core/questions/dispatch.js +46 -0
- package/dist/core/questions/dispatch.js.map +1 -0
- package/dist/core/questions/errors.d.ts +8 -0
- package/dist/core/questions/errors.d.ts.map +1 -0
- package/dist/core/questions/errors.js +10 -0
- package/dist/core/questions/errors.js.map +1 -0
- package/dist/core/questions/input.d.ts +13 -0
- package/dist/core/questions/input.d.ts.map +1 -0
- package/dist/core/questions/input.js +93 -0
- package/dist/core/questions/input.js.map +1 -0
- package/dist/core/questions/io.d.ts +23 -0
- package/dist/core/questions/io.d.ts.map +1 -0
- package/dist/core/questions/io.js +2 -0
- package/dist/core/questions/io.js.map +1 -0
- package/dist/core/questions/notification-errors.d.ts +14 -0
- package/dist/core/questions/notification-errors.d.ts.map +1 -0
- package/dist/core/questions/notification-errors.js +45 -0
- package/dist/core/questions/notification-errors.js.map +1 -0
- package/dist/core/questions/observers.d.ts +17 -0
- package/dist/core/questions/observers.d.ts.map +1 -0
- package/dist/core/questions/observers.js +57 -0
- package/dist/core/questions/observers.js.map +1 -0
- package/dist/core/questions/registry.d.ts +35 -0
- package/dist/core/questions/registry.d.ts.map +1 -0
- package/dist/core/questions/registry.js +158 -0
- package/dist/core/questions/registry.js.map +1 -0
- package/dist/core/questions/transaction.d.ts +23 -0
- package/dist/core/questions/transaction.d.ts.map +1 -0
- package/dist/core/questions/transaction.js +97 -0
- package/dist/core/questions/transaction.js.map +1 -0
- package/dist/core/questions/types.d.ts +62 -0
- package/dist/core/questions/types.d.ts.map +1 -0
- package/dist/core/questions/types.js +2 -0
- package/dist/core/questions/types.js.map +1 -0
- package/dist/core/questions/validate.d.ts +16 -0
- package/dist/core/questions/validate.d.ts.map +1 -0
- package/dist/core/questions/validate.js +95 -0
- package/dist/core/questions/validate.js.map +1 -0
- package/dist/core/rendered-observers.d.ts +7 -2
- package/dist/core/rendered-observers.d.ts.map +1 -1
- package/dist/core/rendered-observers.js +44 -10
- package/dist/core/rendered-observers.js.map +1 -1
- package/dist/core/screen-facts.d.ts +8 -3
- package/dist/core/screen-facts.d.ts.map +1 -1
- package/dist/core/screen-facts.js +6 -3
- package/dist/core/screen-facts.js.map +1 -1
- package/dist/core/simple/boundary-observer.d.ts +30 -0
- package/dist/core/simple/boundary-observer.d.ts.map +1 -0
- package/dist/core/simple/boundary-observer.js +111 -0
- package/dist/core/simple/boundary-observer.js.map +1 -0
- package/dist/core/simple/boundary-signal.d.ts +31 -0
- package/dist/core/simple/boundary-signal.d.ts.map +1 -0
- package/dist/core/simple/boundary-signal.js +19 -0
- package/dist/core/simple/boundary-signal.js.map +1 -0
- package/dist/core/simple/captured-input.d.ts +19 -0
- package/dist/core/simple/captured-input.d.ts.map +1 -0
- package/dist/core/simple/captured-input.js +78 -0
- package/dist/core/simple/captured-input.js.map +1 -0
- package/dist/core/simple/close.d.ts +6 -0
- package/dist/core/simple/close.d.ts.map +1 -0
- package/dist/core/simple/close.js +20 -0
- package/dist/core/simple/close.js.map +1 -0
- package/dist/core/simple/events.d.ts +2 -2
- package/dist/core/simple/events.js +2 -2
- package/dist/core/simple/loop-boundary.d.ts +12 -0
- package/dist/core/simple/loop-boundary.d.ts.map +1 -0
- package/dist/core/simple/loop-boundary.js +68 -0
- package/dist/core/simple/loop-boundary.js.map +1 -0
- package/dist/core/simple/loop-hold.d.ts +7 -0
- package/dist/core/simple/loop-hold.d.ts.map +1 -0
- package/dist/core/simple/loop-hold.js +9 -0
- package/dist/core/simple/loop-hold.js.map +1 -0
- package/dist/core/simple/native-boundary.d.ts +15 -0
- package/dist/core/simple/native-boundary.d.ts.map +1 -0
- package/dist/core/simple/native-boundary.js +18 -0
- package/dist/core/simple/native-boundary.js.map +1 -0
- package/dist/core/simple/native-idle.d.ts +17 -0
- package/dist/core/simple/native-idle.d.ts.map +1 -0
- package/dist/core/simple/native-idle.js +25 -0
- package/dist/core/simple/native-idle.js.map +1 -0
- package/dist/core/simple/observe-boundary.d.ts +28 -0
- package/dist/core/simple/observe-boundary.d.ts.map +1 -0
- package/dist/core/simple/observe-boundary.js +13 -0
- package/dist/core/simple/observe-boundary.js.map +1 -0
- package/dist/core/simple/owned-loop.d.ts +8 -0
- package/dist/core/simple/owned-loop.d.ts.map +1 -0
- package/dist/core/simple/owned-loop.js +42 -0
- package/dist/core/simple/owned-loop.js.map +1 -0
- package/dist/core/simple/session.d.ts +7 -7
- package/dist/core/simple/session.d.ts.map +1 -1
- package/dist/core/simple/session.js +20 -33
- package/dist/core/simple/session.js.map +1 -1
- package/dist/core/simple/submission-context.d.ts +13 -0
- package/dist/core/simple/submission-context.d.ts.map +1 -0
- package/dist/core/simple/submission-context.js +35 -0
- package/dist/core/simple/submission-context.js.map +1 -0
- package/dist/core/simple/turn/bounds.d.ts +22 -0
- package/dist/core/simple/turn/bounds.d.ts.map +1 -0
- package/dist/core/simple/turn/bounds.js +22 -0
- package/dist/core/simple/turn/bounds.js.map +1 -0
- package/dist/core/simple/turn/defaults.d.ts +24 -0
- package/dist/core/simple/turn/defaults.d.ts.map +1 -0
- package/dist/core/simple/turn/defaults.js +34 -0
- package/dist/core/simple/turn/defaults.js.map +1 -0
- package/dist/core/simple/turn-acceptance.d.ts +20 -3
- package/dist/core/simple/turn-acceptance.d.ts.map +1 -1
- package/dist/core/simple/turn-acceptance.js +55 -5
- package/dist/core/simple/turn-acceptance.js.map +1 -1
- package/dist/core/simple/turn-boundary.d.ts +7 -2
- package/dist/core/simple/turn-boundary.d.ts.map +1 -1
- package/dist/core/simple/turn-boundary.js +17 -5
- package/dist/core/simple/turn-boundary.js.map +1 -1
- package/dist/core/simple/turn-gate.d.ts.map +1 -1
- package/dist/core/simple/turn-gate.js +1 -11
- package/dist/core/simple/turn-gate.js.map +1 -1
- package/dist/core/simple/turn-identity.d.ts +28 -0
- package/dist/core/simple/turn-identity.d.ts.map +1 -0
- package/dist/core/simple/turn-identity.js +74 -0
- package/dist/core/simple/turn-identity.js.map +1 -0
- package/dist/core/simple/turn-types.d.ts +11 -4
- package/dist/core/simple/turn-types.d.ts.map +1 -1
- package/dist/core/simple/turn-types.js +1 -6
- package/dist/core/simple/turn-types.js.map +1 -1
- package/dist/core/simple/turn.d.ts +7 -30
- package/dist/core/simple/turn.d.ts.map +1 -1
- package/dist/core/simple/turn.js +75 -75
- package/dist/core/simple/turn.js.map +1 -1
- package/dist/core/startup/barrier.d.ts +37 -0
- package/dist/core/startup/barrier.d.ts.map +1 -0
- package/dist/core/startup/barrier.js +59 -0
- package/dist/core/startup/barrier.js.map +1 -0
- package/dist/core/startup/frame.d.ts +2 -0
- package/dist/core/startup/frame.d.ts.map +1 -1
- package/dist/core/startup/frame.js +12 -0
- package/dist/core/startup/frame.js.map +1 -1
- package/dist/core/startup/warnings.d.ts +5 -0
- package/dist/core/startup/warnings.d.ts.map +1 -0
- package/dist/core/startup/warnings.js +14 -0
- package/dist/core/startup/warnings.js.map +1 -0
- package/dist/core/startup/write.d.ts +13 -11
- package/dist/core/startup/write.d.ts.map +1 -1
- package/dist/core/startup/write.js +12 -5
- package/dist/core/startup/write.js.map +1 -1
- package/dist/core/stop-input.d.ts +19 -0
- package/dist/core/stop-input.d.ts.map +1 -0
- package/dist/core/stop-input.js +47 -0
- package/dist/core/stop-input.js.map +1 -0
- package/dist/core/terminal-options.d.ts +13 -3
- package/dist/core/terminal-options.d.ts.map +1 -1
- package/dist/core/terminal-options.js +17 -7
- package/dist/core/terminal-options.js.map +1 -1
- package/dist/core/terminal-replay.d.ts +1 -0
- package/dist/core/terminal-replay.d.ts.map +1 -1
- package/dist/core/terminal-replay.js +6 -0
- package/dist/core/terminal-replay.js.map +1 -1
- package/dist/core/timers.d.ts +15 -0
- package/dist/core/timers.d.ts.map +1 -0
- package/dist/core/timers.js +17 -0
- package/dist/core/timers.js.map +1 -0
- package/dist/core/trust/allowlist.d.ts +24 -1
- package/dist/core/trust/allowlist.d.ts.map +1 -1
- package/dist/core/trust/allowlist.js +39 -12
- package/dist/core/trust/allowlist.js.map +1 -1
- package/dist/core/trust/blocking.d.ts +21 -10
- package/dist/core/trust/blocking.d.ts.map +1 -1
- package/dist/core/trust/blocking.js +64 -18
- package/dist/core/trust/blocking.js.map +1 -1
- package/dist/core/trust/clearance.d.ts +20 -0
- package/dist/core/trust/clearance.d.ts.map +1 -0
- package/dist/core/trust/clearance.js +25 -0
- package/dist/core/trust/clearance.js.map +1 -0
- package/dist/core/trust/copy.d.ts +19 -0
- package/dist/core/trust/copy.d.ts.map +1 -0
- package/dist/core/trust/copy.js +23 -0
- package/dist/core/trust/copy.js.map +1 -0
- package/dist/core/trust/dialog.d.ts +28 -0
- package/dist/core/trust/dialog.d.ts.map +1 -0
- package/dist/core/trust/dialog.js +96 -0
- package/dist/core/trust/dialog.js.map +1 -0
- package/dist/core/trust/options.d.ts +9 -0
- package/dist/core/trust/options.d.ts.map +1 -0
- package/dist/core/trust/options.js +9 -0
- package/dist/core/trust/options.js.map +1 -0
- package/dist/core/trust/prompts.d.ts +16 -37
- package/dist/core/trust/prompts.d.ts.map +1 -1
- package/dist/core/trust/prompts.js +10 -18
- package/dist/core/trust/prompts.js.map +1 -1
- package/dist/core/trust/responder.d.ts +27 -45
- package/dist/core/trust/responder.d.ts.map +1 -1
- package/dist/core/trust/responder.js +178 -108
- package/dist/core/trust/responder.js.map +1 -1
- package/dist/core/trust/types.d.ts +36 -0
- package/dist/core/trust/types.d.ts.map +1 -0
- package/dist/core/trust/types.js +17 -0
- package/dist/core/trust/types.js.map +1 -0
- package/dist/core/trust/view.d.ts +31 -0
- package/dist/core/trust/view.d.ts.map +1 -0
- package/dist/core/trust/view.js +52 -0
- package/dist/core/trust/view.js.map +1 -0
- package/dist/core/trust/write.d.ts +31 -0
- package/dist/core/trust/write.d.ts.map +1 -0
- package/dist/core/trust/write.js +148 -0
- package/dist/core/trust/write.js.map +1 -0
- package/dist/core/turn-state.d.ts +6 -0
- package/dist/core/turn-state.d.ts.map +1 -1
- package/dist/core/turn-state.js +31 -1
- package/dist/core/turn-state.js.map +1 -1
- package/dist/core/types.d.ts +4 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/warnings/auth.d.ts +25 -0
- package/dist/core/warnings/auth.d.ts.map +1 -0
- package/dist/core/warnings/auth.js +2 -0
- package/dist/core/warnings/auth.js.map +1 -0
- package/dist/core/warnings/index.d.ts +9 -16
- package/dist/core/warnings/index.d.ts.map +1 -1
- package/dist/core/warnings/index.js +2 -3
- package/dist/core/warnings/index.js.map +1 -1
- package/dist/core/warnings/lifecycle.d.ts +25 -1
- package/dist/core/warnings/lifecycle.d.ts.map +1 -1
- package/dist/core/warnings/lifecycle.js +1 -1
- package/dist/core/warnings/questions.d.ts +23 -0
- package/dist/core/warnings/questions.d.ts.map +1 -0
- package/dist/core/warnings/questions.js +2 -0
- package/dist/core/warnings/questions.js.map +1 -0
- package/dist/core/warnings/session.d.ts +3 -2
- package/dist/core/warnings/session.d.ts.map +1 -1
- package/dist/core/warnings/session.js +3 -2
- package/dist/core/warnings/session.js.map +1 -1
- package/dist/core/warnings/transcript.d.ts +12 -0
- package/dist/core/warnings/transcript.d.ts.map +1 -0
- package/dist/core/warnings/transcript.js +2 -0
- package/dist/core/warnings/transcript.js.map +1 -0
- package/dist/core/warnings/update.d.ts +11 -2
- package/dist/core/warnings/update.d.ts.map +1 -1
- package/dist/core/warnings/update.js +27 -4
- package/dist/core/warnings/update.js.map +1 -1
- package/dist/events/emitter.d.ts +18 -2
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +61 -14
- package/dist/events/emitter.js.map +1 -1
- package/dist/events/observer-errors.d.ts +9 -0
- package/dist/events/observer-errors.d.ts.map +1 -0
- package/dist/events/observer-errors.js +68 -0
- package/dist/events/observer-errors.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/pty/node.d.ts.map +1 -1
- package/dist/pty/node.js +4 -0
- package/dist/pty/node.js.map +1 -1
- package/dist/pty/types.d.ts +5 -0
- package/dist/pty/types.d.ts.map +1 -1
- package/dist/runtime/probe-cleanup.d.ts +34 -0
- package/dist/runtime/probe-cleanup.d.ts.map +1 -0
- package/dist/runtime/probe-cleanup.js +139 -0
- package/dist/runtime/probe-cleanup.js.map +1 -0
- package/dist/runtime/probe.d.ts.map +1 -1
- package/dist/runtime/probe.js +18 -25
- package/dist/runtime/probe.js.map +1 -1
- package/dist/runtime/readiness/initial-ready.d.ts +13 -11
- package/dist/runtime/readiness/initial-ready.d.ts.map +1 -1
- package/dist/runtime/readiness/initial-ready.js +23 -18
- package/dist/runtime/readiness/initial-ready.js.map +1 -1
- package/dist/runtime/seams.d.ts +2 -1
- package/dist/runtime/seams.d.ts.map +1 -1
- package/dist/runtime/seams.js.map +1 -1
- package/dist/runtime/session/attention-clearance.d.ts +5 -0
- package/dist/runtime/session/attention-clearance.d.ts.map +1 -0
- package/dist/runtime/session/attention-clearance.js +20 -0
- package/dist/runtime/session/attention-clearance.js.map +1 -0
- package/dist/runtime/session/base.d.ts +17 -4
- package/dist/runtime/session/base.d.ts.map +1 -1
- package/dist/runtime/session/base.js +68 -14
- package/dist/runtime/session/base.js.map +1 -1
- package/dist/runtime/session/commands.d.ts +17 -3
- package/dist/runtime/session/commands.d.ts.map +1 -1
- package/dist/runtime/session/commands.js +60 -13
- package/dist/runtime/session/commands.js.map +1 -1
- package/dist/runtime/session/foreign-picker.d.ts +8 -0
- package/dist/runtime/session/foreign-picker.d.ts.map +1 -0
- package/dist/runtime/session/foreign-picker.js +18 -0
- package/dist/runtime/session/foreign-picker.js.map +1 -0
- package/dist/runtime/session/frames.d.ts +27 -0
- package/dist/runtime/session/frames.d.ts.map +1 -0
- package/dist/runtime/session/frames.js +80 -0
- package/dist/runtime/session/frames.js.map +1 -0
- package/dist/runtime/session/image-attach.d.ts +3 -15
- package/dist/runtime/session/image-attach.d.ts.map +1 -1
- package/dist/runtime/session/image-attach.js +9 -27
- package/dist/runtime/session/image-attach.js.map +1 -1
- package/dist/runtime/session/lifecycle.d.ts +20 -14
- package/dist/runtime/session/lifecycle.d.ts.map +1 -1
- package/dist/runtime/session/lifecycle.js +49 -47
- package/dist/runtime/session/lifecycle.js.map +1 -1
- package/dist/runtime/session/loops.d.ts +10 -1
- package/dist/runtime/session/loops.d.ts.map +1 -1
- package/dist/runtime/session/loops.js +61 -19
- package/dist/runtime/session/loops.js.map +1 -1
- package/dist/runtime/session/native-submission.d.ts +10 -0
- package/dist/runtime/session/native-submission.d.ts.map +1 -0
- package/dist/runtime/session/native-submission.js +62 -0
- package/dist/runtime/session/native-submission.js.map +1 -0
- package/dist/runtime/session/not-running.d.ts +13 -0
- package/dist/runtime/session/not-running.d.ts.map +1 -0
- package/dist/runtime/session/not-running.js +28 -0
- package/dist/runtime/session/not-running.js.map +1 -0
- package/dist/runtime/session/paste-recovery.d.ts +15 -0
- package/dist/runtime/session/paste-recovery.d.ts.map +1 -0
- package/dist/runtime/session/paste-recovery.js +30 -0
- package/dist/runtime/session/paste-recovery.js.map +1 -0
- package/dist/runtime/session/picker-cleanup.d.ts +56 -0
- package/dist/runtime/session/picker-cleanup.d.ts.map +1 -0
- package/dist/runtime/session/picker-cleanup.js +126 -0
- package/dist/runtime/session/picker-cleanup.js.map +1 -0
- package/dist/runtime/session/picker-input.d.ts +17 -0
- package/dist/runtime/session/picker-input.d.ts.map +1 -0
- package/dist/runtime/session/picker-input.js +74 -0
- package/dist/runtime/session/picker-input.js.map +1 -0
- package/dist/runtime/session/picker.d.ts +56 -0
- package/dist/runtime/session/picker.d.ts.map +1 -0
- package/dist/runtime/session/picker.js +143 -0
- package/dist/runtime/session/picker.js.map +1 -0
- package/dist/runtime/session/questions.d.ts +23 -0
- package/dist/runtime/session/questions.d.ts.map +1 -0
- package/dist/runtime/session/questions.js +25 -0
- package/dist/runtime/session/questions.js.map +1 -0
- package/dist/runtime/session/readiness.d.ts +6 -3
- package/dist/runtime/session/readiness.d.ts.map +1 -1
- package/dist/runtime/session/readiness.js +19 -8
- package/dist/runtime/session/readiness.js.map +1 -1
- package/dist/runtime/session/shutdown-binding.d.ts +9 -0
- package/dist/runtime/session/shutdown-binding.d.ts.map +1 -1
- package/dist/runtime/session/shutdown-binding.js +57 -8
- package/dist/runtime/session/shutdown-binding.js.map +1 -1
- package/dist/runtime/session/shutdown.d.ts +2 -5
- package/dist/runtime/session/shutdown.d.ts.map +1 -1
- package/dist/runtime/session/shutdown.js +12 -13
- package/dist/runtime/session/shutdown.js.map +1 -1
- package/dist/runtime/session/status-wiring.d.ts +9 -4
- package/dist/runtime/session/status-wiring.d.ts.map +1 -1
- package/dist/runtime/session/status-wiring.js +8 -5
- package/dist/runtime/session/status-wiring.js.map +1 -1
- package/dist/runtime/session/stop-completion.d.ts +23 -0
- package/dist/runtime/session/stop-completion.d.ts.map +1 -0
- package/dist/runtime/session/stop-completion.js +32 -0
- package/dist/runtime/session/stop-completion.js.map +1 -0
- package/dist/runtime/session/turn-submission.d.ts +9 -0
- package/dist/runtime/session/turn-submission.d.ts.map +1 -0
- package/dist/runtime/session/turn-submission.js +19 -0
- package/dist/runtime/session/turn-submission.js.map +1 -0
- package/dist/runtime/shutdown/terminal.d.ts +10 -0
- package/dist/runtime/shutdown/terminal.d.ts.map +1 -0
- package/dist/runtime/shutdown/terminal.js +38 -0
- package/dist/runtime/shutdown/terminal.js.map +1 -0
- package/dist/runtime/startup/buffer.d.ts +1 -1
- package/dist/runtime/startup/buffer.d.ts.map +1 -1
- package/dist/runtime/startup/buffer.js +14 -8
- package/dist/runtime/startup/buffer.js.map +1 -1
- package/dist/runtime/status-evidence.d.ts +7 -3
- package/dist/runtime/status-evidence.d.ts.map +1 -1
- package/dist/runtime/status-evidence.js +12 -10
- package/dist/runtime/status-evidence.js.map +1 -1
- package/dist/runtime/update/lock.d.ts +7 -0
- package/dist/runtime/update/lock.d.ts.map +1 -1
- package/dist/runtime/update/lock.js +102 -121
- package/dist/runtime/update/lock.js.map +1 -1
- package/dist/runtime/update/owner.d.ts +54 -0
- package/dist/runtime/update/owner.d.ts.map +1 -0
- package/dist/runtime/update/owner.js +131 -0
- package/dist/runtime/update/owner.js.map +1 -0
- package/dist/runtime/update/retained-lease.d.ts +13 -0
- package/dist/runtime/update/retained-lease.d.ts.map +1 -0
- package/dist/runtime/update/retained-lease.js +40 -0
- package/dist/runtime/update/retained-lease.js.map +1 -0
- package/dist/runtime/update/waiting.d.ts +4 -0
- package/dist/runtime/update/waiting.d.ts.map +1 -0
- package/dist/runtime/update/waiting.js +95 -0
- package/dist/runtime/update/waiting.js.map +1 -0
- package/dist/state/canonical-path.d.ts +2 -0
- package/dist/state/canonical-path.d.ts.map +1 -0
- package/dist/state/canonical-path.js +22 -0
- package/dist/state/canonical-path.js.map +1 -0
- package/dist/state/launch-ownership.d.ts +21 -0
- package/dist/state/launch-ownership.d.ts.map +1 -0
- package/dist/state/launch-ownership.js +154 -0
- package/dist/state/launch-ownership.js.map +1 -0
- package/dist/state/launch-publication.d.ts +7 -0
- package/dist/state/launch-publication.d.ts.map +1 -0
- package/dist/state/launch-publication.js +53 -0
- package/dist/state/launch-publication.js.map +1 -0
- package/dist/state/private-read.js +2 -1
- package/dist/state/private-read.js.map +1 -1
- package/dist/state/private-session.d.ts +1 -1
- package/dist/state/private-session.d.ts.map +1 -1
- package/dist/state/private-session.js +4 -1
- package/dist/state/private-session.js.map +1 -1
- package/dist/state/runtime-paths.d.ts +10 -9
- package/dist/state/runtime-paths.d.ts.map +1 -1
- package/dist/state/runtime-paths.js +14 -12
- package/dist/state/runtime-paths.js.map +1 -1
- package/dist/state/socket-home.d.ts +8 -4
- package/dist/state/socket-home.d.ts.map +1 -1
- package/dist/state/socket-home.js +31 -7
- package/dist/state/socket-home.js.map +1 -1
- package/dist/state/startup-ownership.d.ts +4 -0
- package/dist/state/startup-ownership.d.ts.map +1 -0
- package/dist/state/startup-ownership.js +14 -0
- package/dist/state/startup-ownership.js.map +1 -0
- package/dist/state/store.d.ts +1 -1
- package/dist/state/store.d.ts.map +1 -1
- package/dist/state/store.js +2 -2
- package/dist/state/store.js.map +1 -1
- package/dist/terminal/coordinates.d.ts +7 -0
- package/dist/terminal/coordinates.d.ts.map +1 -0
- package/dist/terminal/coordinates.js +6 -0
- package/dist/terminal/coordinates.js.map +1 -0
- package/dist/terminal/cursor.d.ts +40 -0
- package/dist/terminal/cursor.d.ts.map +1 -0
- package/dist/terminal/cursor.js +116 -0
- package/dist/terminal/cursor.js.map +1 -0
- package/dist/terminal/headless.d.ts +7 -5
- package/dist/terminal/headless.d.ts.map +1 -1
- package/dist/terminal/headless.js +47 -35
- package/dist/terminal/headless.js.map +1 -1
- package/dist/terminal/pty-output.d.ts +37 -0
- package/dist/terminal/pty-output.d.ts.map +1 -0
- package/dist/terminal/pty-output.js +109 -0
- package/dist/terminal/pty-output.js.map +1 -0
- package/dist/terminal/render-queue.d.ts +30 -0
- package/dist/terminal/render-queue.d.ts.map +1 -0
- package/dist/terminal/render-queue.js +105 -0
- package/dist/terminal/render-queue.js.map +1 -0
- package/dist/terminal/snapshot.d.ts +5 -0
- package/dist/terminal/snapshot.d.ts.map +1 -0
- package/dist/terminal/snapshot.js +13 -0
- package/dist/terminal/snapshot.js.map +1 -0
- package/docs/api.md +8 -1
- package/docs/cli-behavior.md +930 -43
- package/docs/cli-output.md +4 -0
- package/docs/cli.md +15 -9
- package/docs/codex/cli.md +44 -0
- package/docs/login-recovery.md +24 -0
- package/docs/native-question-proofs.md +57 -0
- package/docs/performance.md +73 -0
- package/docs/questions.md +181 -0
- package/package.json +1 -1
- package/prd/04-architecture.md +15 -0
- package/prd/05-api/5.1-starting-claude.md +11 -1
- package/prd/05-api/5.10-questions.md +117 -0
- package/prd/05-api/5.3-claude-session-api.md +293 -24
- package/prd/05-api/5.4-events.md +159 -32
- package/prd/05-api/5.5-starting-codex.md +85 -18
- package/prd/05-api/5.7-codex-session-api.md +143 -5
- package/prd/05-api/5.8-session-api.md +58 -6
- package/prd/05-api/5.9-loops.md +11 -1
- package/prd/05-api/README.md +2 -0
- package/prd/06-claude-hook-bridge.md +115 -0
- package/prd/07-claude-policy.md +2 -0
- package/prd/07a-codex-hook-bridge.md +90 -0
- package/prd/08-state.md +51 -10
- package/prd/09-lifecycle.md +79 -3
- package/prd/10-errors.md +9 -2
- package/prd/12a-cli.md +13 -7
- package/prd/13-latitude.md +89 -0
- package/prd/14-conformance.md +84 -30
- package/prd/16-maintainer-review.md +75 -0
- package/prd/README.md +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,14 +4,395 @@ All notable **consumer-facing** changes to Elwood are recorded here: new or
|
|
|
4
4
|
changed public API, session/lifecycle behavior, activity/event shapes, and bug
|
|
5
5
|
fixes a host application would notice. Internal refactors, test-only changes,
|
|
6
6
|
and doc tweaks are omitted. The format follows
|
|
7
|
-
[Keep a Changelog](https://keepachangelog.com)
|
|
8
|
-
|
|
7
|
+
[Keep a Changelog](https://keepachangelog.com). Changes accumulate under
|
|
8
|
+
**Unreleased** and move into a versioned section for each release.
|
|
9
9
|
|
|
10
10
|
Observable behavior is specified in `prd/`; the conformance criteria that
|
|
11
11
|
back each entry are listed in `prd/14-conformance.md`.
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.2.0] - 2026-10-22
|
|
16
|
+
|
|
17
|
+
- Codex question turns settle after native completion even when consecutive answer echoes contain caret-like multiline text.
|
|
18
|
+
|
|
19
|
+
- Preserve overlapping Claude question requests across out-of-order hook outcomes;
|
|
20
|
+
require unambiguous native panel evidence before exposing answer authority.
|
|
21
|
+
|
|
22
|
+
- Cancel question writes before physical dispatch when the operation aborts, including after its final frame guard.
|
|
23
|
+
- Retain uncertain native answer reservations until both the physical write and correlated native ownership settle.
|
|
24
|
+
- Preserve in-flight question request IDs through same-key metadata redraws so late native acceptance closes the original request.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
- Preserve the first question-observer failure diagnostic when pending listener
|
|
28
|
+
promises exceed the notification registration cap.
|
|
29
|
+
|
|
30
|
+
- Keep native Claude questionnaires blocking when question text contains composer-like carets, fences, or navigation-footer copy.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
- Report contained question and companion activity listener failures once per
|
|
34
|
+
live session with a content-free `question_observer_failed` warning.
|
|
35
|
+
|
|
36
|
+
- Expose live Claude and Codex questionnaires through typed `question` events,
|
|
37
|
+
structured normalized activity, `listQuestions()` and `answerQuestions()`;
|
|
38
|
+
submit grouped forms and independent queued answers while preserving running
|
|
39
|
+
turns, guarding native editors and verifying native acceptance. Budget
|
|
40
|
+
disablement emits a content-free `question_automation_disabled` warning.
|
|
41
|
+
|
|
42
|
+
- Enforce the existing required payloads in transcript activity types: Codex progress carries text and its Codex/transcript identity, and Claude transcript projections retain their per-kind required fields.
|
|
43
|
+
|
|
44
|
+
- Keep Codex turns running through native working pulses and hold input at blocking modal and queued question editors; recognize the captured Plan mode footer when verifying an empty composer.
|
|
45
|
+
|
|
46
|
+
- Recognize Claude Code 2.1.305 question dialogs as blocking input and accept its captured manual-mode footer when verifying an empty composer.
|
|
47
|
+
|
|
48
|
+
- Expose committed Codex commentary as readable `assistant_progress` activity, distinct from final answers; suppress non-final legacy mirrors so progress neither duplicates nor completes replies.
|
|
49
|
+
|
|
50
|
+
- Expose Claude's advance login-renewal notices as `login_expiring` warnings and activities with `expiresInDays` and `/login`, including startup and resume, without interrupting the session.
|
|
51
|
+
|
|
52
|
+
- Report a submission-specific `wait_timeout` when raw input replaces ergonomic input awaiting empty-composer confirmation, preserving model-picker diagnostics for picker operations.
|
|
53
|
+
- Codex recovery now withholds retry Enter and empty-input acknowledgement when partial native approval rows remain above a retained composer.
|
|
54
|
+
- Keep ergonomic response collection behind selected loop and persona completion; bind Codex transcript content and Stop completeness to the native acceptance of the caller's own submitted turn, including headless CLI sessions.
|
|
55
|
+
|
|
56
|
+
- Prevent retained working and interrupt frames from releasing input physically submitted inside Stop callbacks; expired raw Stop input retains its timeout error after teardown.
|
|
57
|
+
- Stop ergonomic turn recovery when its consumer settles, retaining captured images and the next turn’s slot until input cleanup and the current native boundary finish.
|
|
58
|
+
|
|
59
|
+
- Retain staged text and images for initial and replay ergonomic submissions until fresh native empty-input evidence, preserving cancellation cleanup and the ordinary first-Enter send contract.
|
|
60
|
+
|
|
61
|
+
- Preserve asynchronous hook decisions after the generated bridge child finishes sending its request, instead of closing the reply stream early.
|
|
62
|
+
- Recover image-only and whitespace submissions only from a fresh live composer render after each Enter attempt; cached text or image drafts cannot trigger an extra Enter.
|
|
63
|
+
|
|
64
|
+
- Preserve each observer registration’s async context when listeners reuse a pending Promise.
|
|
65
|
+
|
|
66
|
+
- Require a current first-party banner for every automated Codex update-menu selection, withholding all bannerless choices while retaining the input hold; renumbered or removed safe options revoke the old retry, and a fresh bounded bannered block can recover from overflow.
|
|
67
|
+
- Keep landing-page pickup responsive while preparing every suspended-animation sheet, cancelling obsolete pickup work on drop, reset or teardown.
|
|
68
|
+
- Clear completed Codex trust gates when the native idle composer displays its warning-count footer, so queued input can reach readiness.
|
|
69
|
+
|
|
70
|
+
- Bound each session’s queued input to 1,024 outstanding operations and 8 MiB of text; excess submissions reject with `input_queue_full` without writing to the terminal, and oversized personas reject before session startup.
|
|
71
|
+
- Preserve Codex hook input, decisions, and turn bookkeeping when observers mutate, throw, or reject, with one bounded `hook_observer_failed` warning per hook and a distinct lifecycle warning for standalone initial-ready observer rejections.
|
|
72
|
+
|
|
73
|
+
- Reject late queue-backed input from context-preserving continuations of completed or timed-out Stop callbacks and observers, so it cannot overtake a successor released by that Stop.
|
|
74
|
+
|
|
75
|
+
- Keep a prompt submitted from a Stop callback running when the older Stop completes, without blocking immediate callback input.
|
|
76
|
+
|
|
77
|
+
- Recover swallowed prompt Enters only from the live idle composer, without mistaking transcript text or working frames for staged input. Fresh empty input ends recovery; unverifiable frames get bounded observation retries.
|
|
78
|
+
|
|
79
|
+
- Prepare complete automatic landing-page gestures and facing actions before playback, releasing obsolete task loads without interrupting manual input.
|
|
80
|
+
- Discard expired automatic landing-page actions before readiness checks, preventing late assets from triggering an obsolete gesture or facing change.
|
|
81
|
+
- Reuse decoded idle sheets across landing-page actions instead of repeatedly fetching and decoding them after playback changes.
|
|
82
|
+
|
|
83
|
+
- Prepare and retain the complete initial idle animation before replacing the landing-page fallback.
|
|
84
|
+
|
|
85
|
+
- Prepare complete landing-page gesture and facing animations before delivery, cancel obsolete requests, and avoid loading input that cannot play in the current state.
|
|
86
|
+
|
|
87
|
+
- Stop background recovery Enter presses when the native composer is positively empty, even if submitted text remains in the transcript.
|
|
88
|
+
|
|
89
|
+
- Avoid repeatedly scanning blocked turn input when model and login controls cross a queued backlog.
|
|
90
|
+
|
|
91
|
+
- Stop background paste-recovery Enter presses after native submission activity, including while the first physical Enter is pending.
|
|
92
|
+
|
|
93
|
+
- Require one current native update-option block before sending a skip key. Ambiguous repaints revoke the attempt; only fresh unambiguous banner evidence with a current safe choice can reauthorize it and renew its bounded CLI grace, including the same version pair.
|
|
94
|
+
|
|
95
|
+
- Recognize Codex’s native ✨ update banner when its options are clipped, keeping the partial updater input-blocking.
|
|
96
|
+
|
|
97
|
+
- Renew the CLI update grace period once for a changed Codex version banner, using generation-tagged attention without reporting a successful skip.
|
|
98
|
+
|
|
99
|
+
- Treat a changed Codex update version banner as a new appearance, cancelling old retries and allowing a fresh bounded skip attempt.
|
|
100
|
+
|
|
101
|
+
- Keep Codex update retries revoked after unknown or blank replacement frames until authoritative native composer clearance or fresh banner evidence appears; late writes cannot report an answer for a superseded dialog.
|
|
102
|
+
- Hold scheduled loop delivery through ergonomic caller turns, preventing a due
|
|
103
|
+
loop from accepting or completing a caller prompt that needs recovery.
|
|
104
|
+
|
|
105
|
+
- Recognize Claude 2.1.281's half-circle working title, keeping active turns and
|
|
106
|
+
trust holds from appearing idle while the input composer remains visible.
|
|
107
|
+
|
|
108
|
+
- Keep startup persona responses out of ergonomic caller turns, including when
|
|
109
|
+
the persona and caller submit identical text or its transcript arrives after
|
|
110
|
+
readiness. Closing cancels waiting callers even if process shutdown fails.
|
|
111
|
+
|
|
112
|
+
- Preserve cancellation when a queued submission's pending physical write later
|
|
113
|
+
succeeds, so the cancelled operation cannot report success. Commit successful
|
|
114
|
+
loop delivery before running observers can cancel it, preserving fired telemetry.
|
|
115
|
+
|
|
116
|
+
- Stop delayed paste-recovery Enter keys after raw caller input takes ownership of
|
|
117
|
+
the draft, including direct terminal and xterm input.
|
|
118
|
+
|
|
119
|
+
- Report an automated Codex update skip as answered only after verified native
|
|
120
|
+
composer clearance; completed writes without a reader or into replaced dialogs
|
|
121
|
+
settle quietly without false startup success.
|
|
122
|
+
|
|
123
|
+
- Recognize Codex 0.156.1 capitalized model footers when confirming an empty
|
|
124
|
+
native composer, so cancelled draft cleanup can release queued successor input.
|
|
125
|
+
|
|
126
|
+
- Recognize Codex 0.156.1 folder-access trust prompts, keeping queued input held
|
|
127
|
+
and approving only the known choice when `autotrust` is enabled.
|
|
128
|
+
|
|
129
|
+
- Keep queued Codex input held when an update screen becomes an unknown or partial
|
|
130
|
+
dialog, until its live native composer returns; a stale visible cursor cannot
|
|
131
|
+
clear replacement text above the old composer. Specific trust rules retain their
|
|
132
|
+
diagnostic labels; other retained holds report `codex-unidentified-dialog`.
|
|
133
|
+
|
|
134
|
+
- Retry an ignored Codex prompt Enter when the staged paste contains stripped
|
|
135
|
+
control characters, tabs, or carriage-return line breaks.
|
|
136
|
+
|
|
137
|
+
- Preserve picker and cancelled-draft cleanup authority across automatic terminal
|
|
138
|
+
protocol replies and startup automation; actual caller input still revokes it.
|
|
139
|
+
|
|
140
|
+
- Clear cancelled staged text and images before successor input, deferring cleanup
|
|
141
|
+
through dialogs. Failed cleanup holds the draft; raw input through `sendKeys`,
|
|
142
|
+
`terminal.sendInput`, or `xterm.input` revokes cleanup authority, and shutdown drops
|
|
143
|
+
deferred cleanup without waiting. A physical clear must be confirmed by a fresh
|
|
144
|
+
native empty composer before successor input; Claude recognizes both its native
|
|
145
|
+
idle screen and its post-picker composer.
|
|
146
|
+
|
|
147
|
+
- Hold image paste keys until received terminal output has rendered and blocking
|
|
148
|
+
dialogs have cleared, then capture the chip count immediately before pasting.
|
|
149
|
+
Permanent render failures reject the attachment and release its clipboard lock;
|
|
150
|
+
session cancellation also prevents pending image input.
|
|
151
|
+
|
|
152
|
+
- Cancel Codex update retry timers and pending automated keys when the session closes,
|
|
153
|
+
suppressing late startup success and write-failure warnings after disposal.
|
|
154
|
+
|
|
155
|
+
- Release cancelled config-lock and clipboard-lock waiters immediately, including
|
|
156
|
+
captured session state, while active holders retain ownership through cleanup.
|
|
157
|
+
|
|
158
|
+
- Select Codex update-skip choices only from a current validated first-party
|
|
159
|
+
banner and safe-option block, after the update action when present. Selection
|
|
160
|
+
uses the current numbering and never selects an update action whose label also
|
|
161
|
+
contains a skip phrase.
|
|
162
|
+
|
|
163
|
+
- Keep an acquired Codex config or clipboard lock operation pending until its task
|
|
164
|
+
finishes cleanup when cancellation arrives; cancellable config-lock waiters still
|
|
165
|
+
cancel immediately. Codex model-switch deadlines also
|
|
166
|
+
cancel config-lock waits and release the waiting session input slot. A timeout
|
|
167
|
+
before successful `/model` dispatch never cancels a picker opened by someone else,
|
|
168
|
+
and the initial picker-screen wait honors the same operation deadline. Ordinary
|
|
169
|
+
queued text and images remain held through foreign picker repaints. Raw user
|
|
170
|
+
input revokes active picker navigation and cleanup, including config restoration
|
|
171
|
+
that could overwrite a human choice; uncertain changed defaults emit the existing
|
|
172
|
+
persistence warning.
|
|
173
|
+
|
|
174
|
+
- Keep queued input suspended when a human dialog clears while the agent is still working,
|
|
175
|
+
including deferred startup readiness. A caller prompt held by the dialog reasserts running
|
|
176
|
+
when it submits, before a queued follow-up can dispatch. Blank or caret-only repaints
|
|
177
|
+
retain the hold until a verified idle composer, and resumed working clearance preserves
|
|
178
|
+
the next idle transition.
|
|
179
|
+
|
|
180
|
+
- Refresh attention diagnostics when a blocked session switches to a differently
|
|
181
|
+
classified prompt, so consumers see the current human decision instead of a
|
|
182
|
+
stale update-prompt label. Repainting the same blocking rules stays quiet.
|
|
183
|
+
- Keep a visible human prompt blocked through caller submissions and rendered turn
|
|
184
|
+
starts or endings, including late Stop hooks. Readiness resumes only after clearance.
|
|
185
|
+
|
|
186
|
+
- Preserve live-loop cancellation notifications through delayed or retried kill and teardown cleanup. Previously, pausing the scheduler before clearing definitions could suppress these events.
|
|
187
|
+
|
|
188
|
+
- Keep each live launch’s hook policy bound to its own bridge artifacts during resume. Pending resumes reconcile durable loops at activation; destructive predecessor shutdown joins the reservation outcome, and rollback attempts all files before reporting restoration failures.
|
|
189
|
+
|
|
190
|
+
- Claude and Codex transcript and diagnostic listeners can stop a session without
|
|
191
|
+
moving pending activity past terminal exit, duplicating finalization, or signaling
|
|
192
|
+
an already-exited PTY while its final transcript records are being delivered.
|
|
193
|
+
An exit immediately after startup waits for already-scheduled warning delivery,
|
|
194
|
+
preserving both subscriber visibility and diagnostic-before-exit ordering.
|
|
195
|
+
A session resumed from an exit listener retains its files, socket, and loops when
|
|
196
|
+
the old launch finishes a deferred or repeated teardown, including through supported
|
|
197
|
+
state-path aliases. Failed launches restore their own published files, CLI cleanup
|
|
198
|
+
preserves newer owners, and superseded loop mutations reject instead of silently
|
|
199
|
+
reporting success.
|
|
200
|
+
|
|
201
|
+
- Keep human-owned trust gates blocked through partial and unknown replacement
|
|
202
|
+
frames. Queued caller input resumes only after positive native clearance. Both
|
|
203
|
+
adapters withhold trust retries and human clearance while received output is
|
|
204
|
+
still rendering or the terminal has reported a render failure. Claude also waits
|
|
205
|
+
for its visible native input cursor after the final composer paint and retains
|
|
206
|
+
the hold while its native working title remains active.
|
|
207
|
+
|
|
208
|
+
- Recognize Codex's native composer beneath numbered transcript output and with
|
|
209
|
+
its older model footer. A newly painted bare caret cannot borrow an earlier
|
|
210
|
+
composer's footer to release input held for a human dialog. Live clearance now
|
|
211
|
+
requires its visible input cursor after all received batches render; native approval
|
|
212
|
+
headers still override a stale visible cursor. Partial dialogs stay held while
|
|
213
|
+
ordinary transcript prose and numbered user prompts remain valid. Exact-shaped
|
|
214
|
+
native working rows remain conservatively held. Active work and incomplete
|
|
215
|
+
welcome-box fragments cannot release input.
|
|
216
|
+
|
|
217
|
+
- Keep Codex transcript polling and activity delivery running after a public listener
|
|
218
|
+
throws, so later records (including turn failure evidence) still reach subscribers.
|
|
219
|
+
The content-free `transcript_listener_error` warning identifies the failed delivery
|
|
220
|
+
channel at most once per watcher, after synchronous transcript delivery;
|
|
221
|
+
`transcript_poll_stopped` remains reserved for actual reader failures.
|
|
222
|
+
|
|
223
|
+
- Detect startup authentication errors from PTY bytes as soon as they arrive.
|
|
224
|
+
Slow or stalled terminal rendering no longer lets an already-received error
|
|
225
|
+
escape the bounded startup check in either adapter. Startup capture retains only
|
|
226
|
+
a complete UTF-8 prefix within 64 KiB, including for oversized raw chunks.
|
|
227
|
+
|
|
228
|
+
- Reject hook rewrites with unsafe JSON values or accessors before serialization, and stop wide-value inspection at the validation budget.
|
|
229
|
+
|
|
230
|
+
- Reject cyclic and excessively deep or wide schema-less hook inputs
|
|
231
|
+
and rewrites without throwing. Validation allows at most 128 edges of depth
|
|
232
|
+
and 100,000 value visits, counting repeated children on each path. Invalid rewrites
|
|
233
|
+
now report `invalid_response` and return no decision instead of reaching the JSON
|
|
234
|
+
serializer with an unserializable graph.
|
|
235
|
+
- Reject `NaN` and `±Infinity` in numeric Claude hook fields, for every tool. Because
|
|
236
|
+
`JSON.stringify` encodes them as `null`, a hook handler that returned one in an
|
|
237
|
+
`updatedInput` rewrite used to send the CLI a `null` where its schema requires a
|
|
238
|
+
number. Concrete tool schemas enforce this per field; schema-less tools (MCP,
|
|
239
|
+
generic, future) enforce it structurally over the whole value, nested records and
|
|
240
|
+
arrays included. Such a rewrite is now an invalid result: the bridge fails open with
|
|
241
|
+
no decision and emits `hookError`.
|
|
242
|
+
|
|
243
|
+
- Bind the Claude browser-tools decline to session disposal. After `stop()`,
|
|
244
|
+
`kill()`, or PTY exit the decline is no longer attempted, and one already in flight
|
|
245
|
+
settles as a cancellation, so a closed session no longer emits a late
|
|
246
|
+
`startup_prompt` / `startup_prompt_write_failed`. The keystroke itself is bound too:
|
|
247
|
+
the non-trust automation barrier waits for render settlement, and a write parked there
|
|
248
|
+
is interrupted immediately on disposal, releases its observation timer, and never
|
|
249
|
+
delivers a stale Escape to a dead PTY. Trust automation already had this lifetime.
|
|
250
|
+
|
|
251
|
+
- Preserve Claude hook decisions and lifecycle progress when observational listeners
|
|
252
|
+
throw or return rejecting Promises, with one bounded `hook_observer_failed` warning
|
|
253
|
+
per affected invocation. Pending observers do not delay hook replies; diagnostic
|
|
254
|
+
retention is capped at 1,024 registrations per emitter. Promise constructor/species
|
|
255
|
+
metadata must permit native reaction attachment; attachment throws are reported
|
|
256
|
+
and remain retryable. Warning payloads are
|
|
257
|
+
frozen before delivery. Incoming
|
|
258
|
+
Claude hook events are deeply frozen before observation, and throwing observers
|
|
259
|
+
no longer truncate subsequent hook-scoped status or transcript notifications.
|
|
260
|
+
|
|
261
|
+
- Snapshot Claude hook responses before validation so later mutations or custom accessors cannot replace validated rewrites on the wire. Capture wire output and blocking decisions before activity listeners run.
|
|
262
|
+
|
|
263
|
+
- Preserve Claude `StopFailure` hooks with missing or changed diagnostic fields. Those
|
|
264
|
+
fields are now typed as optional `unknown`, matching ingress. Browser logs show a
|
|
265
|
+
bounded rejection reason instead of unrelated assistant text or a blank summary.
|
|
266
|
+
|
|
267
|
+
- Route Codex tool-keyed hooks from own properties only. A `PreToolUse` map is a
|
|
268
|
+
plain object, so a tool name matching an inherited member (anything on
|
|
269
|
+
`Object.prototype`, or a key on a caller-supplied prototype) used to resolve to a
|
|
270
|
+
function the caller never registered for that tool and run it against the hook
|
|
271
|
+
event. Both the exact-name and `unknown` lookups now require an own property,
|
|
272
|
+
matching Claude routing.
|
|
273
|
+
- Hold the cross-process update lease for an aborted updater's surviving process
|
|
274
|
+
group. An update probe that was aborted without confirming its process group had
|
|
275
|
+
exited used to release the lease anyway, so another Elwood host could start a
|
|
276
|
+
competing installer while the first updater's descendants were still running.
|
|
277
|
+
- Bound the cleanup of an aborted version, capability, or update probe to one
|
|
278
|
+
extra second: retry process-group termination, fall back to the direct child,
|
|
279
|
+
and keep an unresolved group on an asynchronous reaper that never extends host
|
|
280
|
+
shutdown or retains captured output. A process group is signaled only while its
|
|
281
|
+
leader is unreaped, so a reissued group id is never killed. An update probe whose
|
|
282
|
+
group stays unconfirmed now reports that group in its typed error details.
|
|
283
|
+
- Serialize `listModels`/`setModel` through the session input queue: a model
|
|
284
|
+
operation owns the queue until its picker flow settles, so overlapping model
|
|
285
|
+
calls, queued commands, and messages can no longer be typed into a picker while
|
|
286
|
+
the operation that opened it is running. `compact`'s delayed recovery Enter is
|
|
287
|
+
cancelled once a later operation takes the composer, rather than queued behind it.
|
|
288
|
+
- A Codex `setModel` interrupted by session termination waits for the CLI process
|
|
289
|
+
to exit before restoring `config.toml`, bounded at five seconds so a process that
|
|
290
|
+
never reports an exit cannot hold the shared config lock. Session status alone
|
|
291
|
+
(`stopped`, `killed`, `torn_down`) no longer releases the restore, since teardown
|
|
292
|
+
records those even when its signal did not take. The wait now applies whether the
|
|
293
|
+
switch succeeded or failed: the question is whether the dying CLI can still write
|
|
294
|
+
`config.toml`, not whether Elwood's automation worked.
|
|
295
|
+
- A Codex `setModel` still waiting for the process-wide `config.toml` lock rejects
|
|
296
|
+
with `session_not_running` as soon as its own session closes, instead of staying
|
|
297
|
+
pending until the session ahead of it finishes its transaction and exit wait. A
|
|
298
|
+
cancelled call never runs its switch when the lock frees.
|
|
299
|
+
- Stop non-trust startup automation from writing into a trust gate that arrived while
|
|
300
|
+
the previous screen was still rendering. The Codex update skip (including its retries)
|
|
301
|
+
and the Claude browser-tools decline now observe all received PTY output and re-check
|
|
302
|
+
the settled frame before writing, the guarantee queued caller input already had. A
|
|
303
|
+
withheld write is silent and stays retryable; the trust responder is unaffected and
|
|
304
|
+
still answers trust gates itself.
|
|
305
|
+
- Hold queued input on an unrecognized gate behind a recognized native header
|
|
306
|
+
prefix (`Do you`, `Is this`, `Trust the`, ... — PRD §5.4 lists them): a reworded
|
|
307
|
+
question with selectable options and a frame-ending native footer, and no
|
|
308
|
+
conversation above, now blocks for a human with the attention label
|
|
309
|
+
`<agent>-unknown_gate-prompt` under every `autotrust` value and is never answered
|
|
310
|
+
automatically; previously readiness could type the queued message and Enter
|
|
311
|
+
into it. Gates outside that grammar (other leading words, other footers) are
|
|
312
|
+
still not held. Dialogs that already block keep their existing labels.
|
|
313
|
+
- Bound Codex in-TUI update skipping to one attempt per appearance of the update
|
|
314
|
+
screen: an exhausted retry no longer restarts on the next frame of the same
|
|
315
|
+
screen, and a stale attempt's late completion cannot start an overlapping retry
|
|
316
|
+
loop or report success or a write failure for the newer screen. A skip write
|
|
317
|
+
rejected after the update screen already cleared no longer fails a healthy
|
|
318
|
+
headless run as `blocked_prompt`. A reappearing update screen is still skipped again.
|
|
319
|
+
- Emit the `attention` activity for a blocking prompt that painted while the
|
|
320
|
+
session was still `starting`. Such a session already became `blocked`, but
|
|
321
|
+
without the human-decision event, so a headless `elwood` run never reported
|
|
322
|
+
`blocked_prompt`.
|
|
323
|
+
- A failed `listModels`/`setModel` now cancels the model dialog it left open
|
|
324
|
+
before releasing queued input, and holds queued messages, commands, and `/login`
|
|
325
|
+
while a dialog it could not cancel stays visible. Picker text quoted in a reply
|
|
326
|
+
is never cancelled, so cleanup cannot interrupt a running turn.
|
|
327
|
+
- `setModel` no longer resolves on the partially painted frame that precedes
|
|
328
|
+
Claude's cache warning (it reported success without confirming the switch), and
|
|
329
|
+
queued input stays held while a Claude switch dialog is still painting.
|
|
330
|
+
- Model-picker cleanup also covers a dialog that paints up to a second after the
|
|
331
|
+
failure (a late picker, Codex's reasoning level, Claude's cache warning). A model
|
|
332
|
+
operation now rejects without writing when model picker text is already visible.
|
|
333
|
+
- `compact`'s recovery Enter can no longer be typed into a model picker opened by
|
|
334
|
+
a concurrent `listModels`/`setModel` (where Enter saves the highlighted model as
|
|
335
|
+
the default): it now waits for the picker operation to release the input queue.
|
|
336
|
+
- Snapshot image bytes and relative paths when facade methods are called, including
|
|
337
|
+
turns queued behind another response or waiting for session startup. Facade copies
|
|
338
|
+
count against the same 200 MiB per-session ceiling as sends on the raw `session`.
|
|
339
|
+
- Reject FIFO state/config files without hanging.
|
|
340
|
+
- Runtime cleanup drains received terminal output before disposing the renderer —
|
|
341
|
+
for up to one second, including output that arrives while it drains — so the
|
|
342
|
+
final `terminal:data` tail is delivered (possibly after `terminal:exit`) instead
|
|
343
|
+
of dropped. `--head` now mirrors through cleanup, so the agent's final frames
|
|
344
|
+
(for example its last words before an unexpected exit) are no longer cut off.
|
|
345
|
+
- Bind automatic trust approvals to the active dialog and revalidate every write,
|
|
346
|
+
preventing quoted transcript headers or unknown intervening titles from
|
|
347
|
+
authorizing unrelated permissions. Cancel stale trust attempts quietly while
|
|
348
|
+
keeping readiness and queued input gated until the native dialog clears. Retry
|
|
349
|
+
early numbered trust writes that the CLI has not yet consumed. Bound both
|
|
350
|
+
navigation styles to the session and current dialog generation; unsupported or
|
|
351
|
+
exhausted trust automation becomes a recoverable block after five seconds.
|
|
352
|
+
Image attachment is held by the same trust gate as text input.
|
|
353
|
+
- Require a trust dialog's native explanatory copy before any automatic approval:
|
|
354
|
+
a bare allowlisted header with affirmative options is held, never typed into,
|
|
355
|
+
and becomes answerable only once its native body paints (recoverable `blocked`
|
|
356
|
+
after five seconds otherwise). Skill, plugin, and MCP gates are unchanged.
|
|
357
|
+
- Release the cross-process update lease atomically. A second Elwood process polling
|
|
358
|
+
at the instant the owner released could recover the half-removed lease as stale
|
|
359
|
+
and run a duplicate `autoupdate` right after the first.
|
|
360
|
+
- Publish the cross-process update lease atomically. An Elwood process killed
|
|
361
|
+
while claiming the lease could leave a partial owner record that made every
|
|
362
|
+
later `autoupdate` on that machine skip its update until the cache was removed
|
|
363
|
+
by hand.
|
|
364
|
+
- Queued input now renders and observes all PTY output already received before
|
|
365
|
+
each write, so a trust or permission dialog that was received but not yet
|
|
366
|
+
rendered still holds the paste, its Enter, and recovery Enters. The compact
|
|
367
|
+
recovery Enter follows the same rule and is cancelled once a later queued
|
|
368
|
+
operation dispatches. On the terminal handle, `settled()` now also covers output
|
|
369
|
+
received while waiting (it still never rejects), and the new read-only
|
|
370
|
+
`renderFailed` property reports a failed render, after which queued input stays
|
|
371
|
+
withheld.
|
|
372
|
+
- Keep text CLI output limited to agent responses by default. Use
|
|
373
|
+
`--show-session-id` to print the retained session ID on stderr, or find it
|
|
374
|
+
with `elwood sessions`. Session retention and JSON/JSONL records are unchanged.
|
|
375
|
+
- Batch terminal rendering, improving throughput across parallel sessions:
|
|
376
|
+
adjacent PTY chunks share one render and one `terminal:data` event (at most
|
|
377
|
+
64 KiB, flushed within 4 ms), so event chunk boundaries and intermediate frames
|
|
378
|
+
are no longer guaranteed. Direct terminal disposal settles pending writes
|
|
379
|
+
immediately. Real PTY reads pause when unrendered output reaches 1 MiB and resume
|
|
380
|
+
below 512 KiB, so a runaway producer cannot grow the render backlog without bound;
|
|
381
|
+
a paused PTY resumes as soon as its child exits, so a draining backlog cannot
|
|
382
|
+
strand unread tail output.
|
|
383
|
+
- Recognize only native Codex warning banners, keeping quoted private prompt text
|
|
384
|
+
out of warning events by requiring the current native welcome region.
|
|
385
|
+
- Validate all concrete Claude tool input fields and typed hook fields, constrain
|
|
386
|
+
permission rewrites to tool-specific handlers, and accept nullable Codex descriptions.
|
|
387
|
+
- Bound the wait for another Elwood process's `autoupdate` to 60 seconds. A
|
|
388
|
+
contender that is still waiting then skips its update and continues with the
|
|
389
|
+
installed CLI, reporting `agent_update_failed` with `errorCode: "update_active"`
|
|
390
|
+
instead of waiting indefinitely; the active owner's lease is never evicted.
|
|
391
|
+
- Match Claude task identifiers and plan permission objects to the native hook
|
|
392
|
+
schemas so valid task and plan inputs reach their handlers.
|
|
393
|
+
- Contain clipboard pipe failures during Codex image attachment, and retain the
|
|
394
|
+
clipboard lock until the restore process exits.
|
|
395
|
+
|
|
15
396
|
## [0.1.3] - 2026-09-14
|
|
16
397
|
|
|
17
398
|
- Keep live session warnings quiet in text and JSON CLI output, including model
|
package/CONTRIBUTING.md
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
# Contributing
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
Elwood is open source, but we do not accept outside pull requests. GitHub
|
|
4
|
+
restricts PR creation to repository collaborators with write access or higher.
|
|
5
|
+
You are welcome to use and fork Elwood under its MIT license, and to report
|
|
6
|
+
security concerns through `SECURITY.md`. Issue creation is limited to repository
|
|
7
|
+
collaborators.
|
|
8
|
+
|
|
9
|
+
The instructions below are for maintainers. This project is spec-first:
|
|
10
|
+
`prd/` is the contract for observable behavior, and `CLAUDE.md` (also linked as
|
|
11
|
+
`AGENTS.md`) is the implementation guide. Read both before changing code.
|
|
7
12
|
|
|
8
13
|
## Requirements
|
|
9
14
|
|
|
@@ -60,6 +65,12 @@ directories automatically.
|
|
|
60
65
|
|
|
61
66
|
## Pull requests
|
|
62
67
|
|
|
68
|
+
- Use branches in this repository. Fork PRs are not reviewed by automation.
|
|
69
|
+
- After the first automatic review, post exactly `/review` as a new PR
|
|
70
|
+
comment to request another. Only current maintainers can trigger it.
|
|
71
|
+
- The twelve-lens shared AI review can approve a completed review with no blocker or
|
|
72
|
+
major findings. Required CI checks and branch protections still apply; the
|
|
73
|
+
review workflow does not merge PRs. See [.github/PIPELINE.md](.github/PIPELINE.md).
|
|
63
74
|
- Keep pull requests small and focused on one change.
|
|
64
75
|
- Do not include secrets, access tokens, credentials, or private data in
|
|
65
76
|
issues, tests, logs, screenshots, or fixtures.
|
|
@@ -88,17 +99,17 @@ like everything else but are excluded from the coverage gate.
|
|
|
88
99
|
|
|
89
100
|
## Repository map
|
|
90
101
|
|
|
91
|
-
| Path
|
|
92
|
-
|
|
93
|
-
| `prd/`
|
|
94
|
-
| `src/index.ts`
|
|
95
|
-
| `src/core/`
|
|
96
|
-
| `src/runtime/`
|
|
97
|
-
| `src/claude/`, `src/codex/` | The two adapters: launch, hooks, transcripts, validation.
|
|
98
|
-
| `src/cli/`
|
|
99
|
-
| `src/state/`
|
|
100
|
-
| `src/bridge/`
|
|
101
|
-
| `src/terminal/`, `src/pty/` | Headless xterm.js model and node-pty adapter.
|
|
102
|
-
| `dev/`
|
|
103
|
-
| `tests/`
|
|
104
|
-
| `docs/`
|
|
102
|
+
| Path | Purpose |
|
|
103
|
+
| --------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
104
|
+
| `prd/` | Source of truth for behavior and conformance criteria (one file per section). |
|
|
105
|
+
| `src/index.ts` | Public package exports. |
|
|
106
|
+
| `src/core/` | Adapter-neutral session machinery: control queue, status detection, turns, loops, images, warnings. |
|
|
107
|
+
| `src/runtime/` | Shared session base class, startup checks, teardown, and test seams. |
|
|
108
|
+
| `src/claude/`, `src/codex/` | The two adapters: launch, hooks, transcripts, validation. |
|
|
109
|
+
| `src/cli/` | The `elwood` executable. |
|
|
110
|
+
| `src/state/` | Session records and private sidecar files. |
|
|
111
|
+
| `src/bridge/` | Local hook bridge server and generated bridge script. |
|
|
112
|
+
| `src/terminal/`, `src/pty/` | Headless xterm.js model and node-pty adapter. |
|
|
113
|
+
| `dev/` | Local terminal and browser dev apps (not published, not coverage-gated). |
|
|
114
|
+
| `tests/` | Unit, conformance, and e2e suites. |
|
|
115
|
+
| `docs/` | Guides and the record of empirically learned CLI behavior. |
|
package/README.md
CHANGED
|
@@ -22,11 +22,20 @@ elwood "Explain this project's architecture."
|
|
|
22
22
|
```ts
|
|
23
23
|
import { ClaudeSession } from "@with-logic/elwood";
|
|
24
24
|
|
|
25
|
-
const session = new ClaudeSession({
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const session = new ClaudeSession({
|
|
26
|
+
cwd: "/path/to/project",
|
|
27
|
+
autotrust: true, // Approve allowlisted trust prompts for this known project.
|
|
28
|
+
});
|
|
29
|
+
try {
|
|
30
|
+
console.log(await session.send("Explain this project."));
|
|
31
|
+
} finally {
|
|
32
|
+
await session.close();
|
|
33
|
+
}
|
|
28
34
|
```
|
|
29
35
|
|
|
36
|
+
Use `autotrust` only for workspaces and extensions you trust. Otherwise, run the
|
|
37
|
+
agent directly in the same directory first and approve its trust prompts.
|
|
38
|
+
|
|
30
39
|
---
|
|
31
40
|
|
|
32
41
|
## Why Elwood
|
|
@@ -122,6 +131,7 @@ output protocols, head mode, and continuation.
|
|
|
122
131
|
`elwoodSessionId`. `ClaudeSession` / `CodexSession` add `send`, `stream`, and
|
|
123
132
|
`close` on top of the full control surface (`sendMessage`, `sendPrompt`,
|
|
124
133
|
`sendGuidance`, `sendKeys`, `interrupt`, `compact`, `listModels`, `setModel`,
|
|
134
|
+
`listQuestions`, `answerQuestions`,
|
|
125
135
|
loops, `waitForStatus`, `stop`, `kill`, `teardown`). The eager `startClaude` /
|
|
126
136
|
`startCodex` factories are deprecated but still available.
|
|
127
137
|
|
|
@@ -134,6 +144,18 @@ context; they fail open on error.
|
|
|
134
144
|
assistant messages, reasoning, tool calls and results, web searches, hooks,
|
|
135
145
|
warnings, and lifecycle. Most host UIs render this and nothing else.
|
|
136
146
|
|
|
147
|
+
Codex commentary arrives as `assistant_progress` with normalized `text`; final
|
|
148
|
+
replies remain `assistant_message`. Render progress while keeping the turn
|
|
149
|
+
working. Progress is available through `on("activity", ...)`, and is excluded
|
|
150
|
+
from ergonomic `send()` results and `stream()` text. See
|
|
151
|
+
[Codex commentary](docs/codex/cli.md#commentary-and-final-replies) for the contract.
|
|
152
|
+
|
|
153
|
+
**Agent questions.** Subscribe to `question` events or `question` activities to
|
|
154
|
+
show native Claude and Codex questionnaires. `listQuestions()` returns available
|
|
155
|
+
requests; `answerQuestions()` submits the user's choices or text through the
|
|
156
|
+
native editor, including while `send()` is waiting. Queued Codex questions can
|
|
157
|
+
remain available while the agent works. See [native questions](docs/questions.md).
|
|
158
|
+
|
|
137
159
|
**Terminal stream.** `terminal:data` carries the raw PTY bytes so a host can
|
|
138
160
|
mirror the agent in its own xterm. A late subscriber first receives up to
|
|
139
161
|
128 KB of replayed history as one chunk. `sendKeys(Uint8Array)` forwards a
|
|
@@ -180,8 +202,9 @@ combined with `--stream`, `--verbose`, `--debug`, or `--output jsonl`.
|
|
|
180
202
|
### Continuation and cleanup
|
|
181
203
|
|
|
182
204
|
New and resumed headless runs preserve Elwood state by default. A resumable
|
|
183
|
-
session ID is
|
|
184
|
-
|
|
205
|
+
session ID is included in the terminal record for JSON and JSONL. Text output
|
|
206
|
+
prints only the agent response; use `--show-session-id` for an ID footer on
|
|
207
|
+
stderr or `elwood sessions` to list retained sessions. `--keep` explicitly selects the default; use `--ephemeral` for
|
|
185
208
|
one-off runs that should remove their Elwood state afterward:
|
|
186
209
|
|
|
187
210
|
```sh
|
|
@@ -418,7 +441,7 @@ session.on("activity", (event) => {
|
|
|
418
441
|
| `hook` | Every parsed and validated adapter hook event. |
|
|
419
442
|
| `hook:<Name>` | Hook-specific handler registration with typed response guidance. |
|
|
420
443
|
| `hookError` | Handler timeout, thrown handler, invalid input, invalid response, or bridge error. Hooks fail open. |
|
|
421
|
-
| `warning` | Non-fatal environment issue, such as an unparseable version
|
|
444
|
+
| `warning` | Non-fatal environment issue, such as an unparseable version, a failed autoupdate, or Claude's `login_expiring` notice with `expiresInDays` and `/login` ([renewal and recovery](docs/login-recovery.md)). |
|
|
422
445
|
| `loop` | Redacted lifecycle for persisted recurring prompts. |
|
|
423
446
|
| `terminal:data` | Raw PTY output for a visual terminal renderer. |
|
|
424
447
|
| `terminal:exit` | PTY process exit, emitted exactly once. |
|
|
@@ -466,7 +489,9 @@ immediate; both are safe after the process has already exited.
|
|
|
466
489
|
for the entire launched session even without autotrust. Codex update dialogs
|
|
467
490
|
are skipped, and Claude browser-tools onboarding is dismissed. Other recognized
|
|
468
491
|
dialogs leave the session `blocked` for a human; the CLI fails such runs as
|
|
469
|
-
`blocked_prompt`.
|
|
492
|
+
`blocked_prompt`. If safe trust automation cannot clear a gate within five
|
|
493
|
+
seconds, the library also leaves it `blocked`, retaining queued input. A later
|
|
494
|
+
supported layout can retry automatically; `sendKeys` permits manual recovery.
|
|
470
495
|
- `--high-trust` (library `highTrust: true`) is the agent-neutral "never ask"
|
|
471
496
|
switch: Claude `bypassPermissions`, or Codex `danger-full-access` with
|
|
472
497
|
approval policy `never`. It removes the agent's own guardrails, so point it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/bridge/parse.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/bridge/parse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAEnC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAsB9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,CAQjF;AAED,wBAAgB,UAAU,IAAI,mBAAmB,CAEhD"}
|
package/dist/bridge/parse.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Bridge request parsing and fail-open result helpers.
|
|
3
3
|
* Implements PRD §6.2 and §6.3.
|
|
4
4
|
*/
|
|
5
|
+
import { inertRecord } from "../core/inert-record.js";
|
|
5
6
|
export function parseBridgeMessage(data) {
|
|
6
7
|
try {
|
|
7
8
|
const parsed = JSON.parse(data);
|
|
@@ -40,6 +41,6 @@ export function hookEventNameFrom(input) {
|
|
|
40
41
|
: "Unknown";
|
|
41
42
|
}
|
|
42
43
|
export function noDecision() {
|
|
43
|
-
return { exitCode: 0, stdout: "", stderr: "" };
|
|
44
|
+
return inertRecord({ exitCode: 0, stdout: "", stderr: "" });
|
|
44
45
|
}
|
|
45
46
|
//# sourceMappingURL=parse.js.map
|
package/dist/bridge/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/bridge/parse.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/bridge/parse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AActD,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAI7B,CAAC;QACF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QACnE,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACzE,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,CAAC,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ;oBAC5C,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE;oBAC7C,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,MAAM,GACV,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzD,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,OAAO,MAAM,CAAC,iBAAiB,CAAC,KAAK,QAAQ;QAClD,CAAC,CAAE,MAAM,CAAC,iBAAiB,CAAqC;QAChE,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/bridge/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC9E,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,KAAK,IAAI,CAAC;AACrF,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAE7D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAG3C,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,kBAAkB,EAC/B,eAAe,CAAC,EAAE,MAAM;IAUpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAUb,YAAY;IAiB1B,OAAO,CAAC,WAAW;YAQL,MAAM;CA0BrB"}
|
package/dist/bridge/server.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { existsSync, unlinkSync } from "node:fs";
|
|
6
6
|
import { createServer } from "node:net";
|
|
7
|
+
import { inertRecord } from "../core/inert-record.js";
|
|
7
8
|
import { MAX_HOOK_REQUEST_BYTES } from "./limits.js";
|
|
8
9
|
import { hookEventNameFrom, noDecision, parseBridgeMessage, parseHookInput } from "./parse.js";
|
|
9
10
|
export class HookBridgeServer {
|
|
@@ -26,7 +27,8 @@ export class HookBridgeServer {
|
|
|
26
27
|
async start() {
|
|
27
28
|
if (existsSync(this.socketPath))
|
|
28
29
|
unlinkSync(this.socketPath);
|
|
29
|
-
|
|
30
|
+
// The child FIN ends its request, not its wait for our asynchronous reply.
|
|
31
|
+
const server = createServer({ allowHalfOpen: true }, (socket) => {
|
|
30
32
|
this.sockets.add(socket);
|
|
31
33
|
// Accumulate RAW bytes, not per-chunk strings: decoding each chunk on its own
|
|
32
34
|
// would insert replacement chars whenever a multibyte code point straddles two
|
|
@@ -49,7 +51,9 @@ export class HookBridgeServer {
|
|
|
49
51
|
// stops reading and releases the FD instead of lingering half-open — a
|
|
50
52
|
// post-response client write can no longer reach a second dispatch.
|
|
51
53
|
const data = Buffer.concat(chunks).toString("utf8"); // decode once, whole
|
|
52
|
-
|
|
54
|
+
const { exitCode, stdout, stderr } = result ?? (await this.handleSafely(data));
|
|
55
|
+
const envelope = inertRecord({ exitCode, stdout, stderr });
|
|
56
|
+
socket.end(JSON.stringify(envelope), () => socket.destroy());
|
|
53
57
|
};
|
|
54
58
|
socket.on("data", (chunk) => {
|
|
55
59
|
// Count raw bytes and fail open the instant the request envelope crosses
|