@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/docs/cli-output.md
CHANGED
|
@@ -212,3 +212,7 @@ fi
|
|
|
212
212
|
Do not use `jq -r .response` alone as a success check. Error documents can
|
|
213
213
|
carry a partial `response`, and streamed text can be partial when the process
|
|
214
214
|
exits nonzero.
|
|
215
|
+
|
|
216
|
+
For retained text runs, `--show-session-id` opts into a session-ID footer on stderr.
|
|
217
|
+
Without it, use `elwood sessions` to find the ID. JSON and JSONL always keep their
|
|
218
|
+
existing `sessionId` field.
|
package/docs/cli.md
CHANGED
|
@@ -15,8 +15,9 @@ elwood run --output json < prompt.txt
|
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
`elwood "prompt"` runs in the current directory, waits for one complete turn,
|
|
18
|
-
prints the combined assistant text to stdout, then
|
|
19
|
-
|
|
18
|
+
prints the combined assistant text to stdout, then stops the agent and preserves
|
|
19
|
+
its Elwood session state for later listing or resumption. Use `--ephemeral` to
|
|
20
|
+
remove that state afterward. It does not undo files the agent changed or remove history owned by
|
|
20
21
|
the agent CLI. `elwood run "prompt"` is the same command in explicit form.
|
|
21
22
|
|
|
22
23
|
Positional words are joined with spaces. Non-empty piped stdin is appended after
|
|
@@ -141,11 +142,13 @@ combined with `--stream`, `--verbose`, `--debug`, or `--output jsonl`.
|
|
|
141
142
|
|
|
142
143
|
## Continuation and cleanup
|
|
143
144
|
|
|
144
|
-
New runs
|
|
145
|
-
|
|
145
|
+
New and resumed runs preserve state by default; `--keep` explicitly selects
|
|
146
|
+
that default. Text output contains only the agent response. Add
|
|
147
|
+
`--show-session-id` to print the retained ID on stderr, or run `elwood sessions`
|
|
148
|
+
to find it later. JSON and JSONL include it in the terminal record:
|
|
146
149
|
|
|
147
150
|
```sh
|
|
148
|
-
first=$(elwood --
|
|
151
|
+
first=$(elwood --output json "Remember that the release color is teal")
|
|
149
152
|
id=$(printf '%s' "$first" | jq -r .sessionId)
|
|
150
153
|
elwood --resume "$id" "What is the release color?"
|
|
151
154
|
elwood --resume "$id" --ephemeral "Finish this conversation"
|
|
@@ -166,10 +169,13 @@ remain. It is supported only for new sessions, never with `--resume`.
|
|
|
166
169
|
## Trust and security
|
|
167
170
|
|
|
168
171
|
Headless mode is non-interactive. With the default `--trust`, Elwood answers
|
|
169
|
-
only its allowlisted workspace-directory and extension trust dialogs
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
172
|
+
only its allowlisted workspace-directory and extension trust dialogs.
|
|
173
|
+
`--no-trust` disables those approvals. Codex hook trust is always bypassed for
|
|
174
|
+
the entire session, including third-party hooks configured in Codex, because
|
|
175
|
+
Elwood needs its own hook bridge to run. This bypass is independent of `--trust`.
|
|
176
|
+
Other recognized dialogs fail as `blocked_prompt`. The same error applies when
|
|
177
|
+
safe trust automation cannot clear a gate within five seconds; queued prompt
|
|
178
|
+
input is never sent into that gate.
|
|
173
179
|
|
|
174
180
|
Piped text and image paths are prompt input with the same authority as text
|
|
175
181
|
typed by the caller. Do not combine untrusted input with broad filesystem
|
package/docs/codex/cli.md
CHANGED
|
@@ -40,6 +40,50 @@ Useful CLI capabilities for Elwood:
|
|
|
40
40
|
terminal output and also project recognized warnings into typed `warning`
|
|
41
41
|
events with remediation commands.
|
|
42
42
|
|
|
43
|
+
## Commentary and final replies
|
|
44
|
+
|
|
45
|
+
Subscribe to `activity` to display Codex's committed user-facing progress:
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
session.on("activity", (event) => {
|
|
49
|
+
if (event.kind === "assistant_progress" && event.text) {
|
|
50
|
+
appendProgress(event.text);
|
|
51
|
+
} else if (event.kind === "assistant_message" && event.text) {
|
|
52
|
+
appendFinalReply(event.text);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Progress uses `source: "transcript"`, `label: "assistant"`, the session ID,
|
|
58
|
+
transcript path and optional native turn ID. It preserves string content and
|
|
59
|
+
ordered array-form `output_text` blocks from `response_item` messages explicitly
|
|
60
|
+
marked `phase: "commentary"`. Analysis and unknown phases never become progress.
|
|
61
|
+
Readable reasoning retains its separate `reasoning` channel; encrypted reasoning
|
|
62
|
+
is never normalized into text.
|
|
63
|
+
|
|
64
|
+
Response items are the canonical progress source. Explicit non-final legacy
|
|
65
|
+
`agent_message` mirrors remain raw transcript events with `other` summaries and
|
|
66
|
+
no normalized text, avoiding duplicate publication and false final replies.
|
|
67
|
+
Legacy unphased and final-answer behavior is preserved.
|
|
68
|
+
|
|
69
|
+
Keep progress separate from final-reply handlers: it must not clear working
|
|
70
|
+
state, consume reply context, finalize a trace, or route mentions to other
|
|
71
|
+
agents. Progress does not end a turn or change session status. Ergonomic
|
|
72
|
+
`send()` and `stream()` keep collecting their existing final-answer content;
|
|
73
|
+
use `on("activity", ...)` for progress. These are live observations, not token
|
|
74
|
+
deltas or replayed history, and their text may contain sensitive conversation
|
|
75
|
+
content just like final replies.
|
|
76
|
+
|
|
77
|
+
## Native questions
|
|
78
|
+
|
|
79
|
+
Codex modal and queued question tools surface through Elwood's shared
|
|
80
|
+
`question` event, normalized `question` activity, `listQuestions()` and
|
|
81
|
+
`answerQuestions()`. Modal question sets are one request; queued asynchronous
|
|
82
|
+
questions are independently answerable requests and can coexist with ongoing
|
|
83
|
+
work. Question-bearing asynchronous messages remain distinct from final replies,
|
|
84
|
+
even when their native record says `phase: "final_answer"`. See
|
|
85
|
+
[native questions](../questions.md) for consumer usage and lifecycle details.
|
|
86
|
+
|
|
43
87
|
## Resume Implications
|
|
44
88
|
|
|
45
89
|
Codex stores transcripts locally under Codex-owned state. Elwood should persist
|
package/docs/login-recovery.md
CHANGED
|
@@ -13,6 +13,30 @@ surfaces this so a session never wedges silently:
|
|
|
13
13
|
matching `warning` activity) carrying `recoveryCommand: "/login"`, and leaves
|
|
14
14
|
the session alive so you can recover without restarting.
|
|
15
15
|
|
|
16
|
+
## Advance renewal notices
|
|
17
|
+
|
|
18
|
+
Claude can show `Your login expires in 3 days · run /login to renew` while the
|
|
19
|
+
session is still usable. Elwood exposes this separately from `login_expired`:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
session.on("warning", (warning) => {
|
|
23
|
+
if (warning.code === "login_expiring") {
|
|
24
|
+
// Notify a human or schedule renewal according to your application's policy.
|
|
25
|
+
showRenewalNotice(warning.expiresInDays, warning.recoveryCommand);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Subscribe immediately after `startClaude` or `resumeClaude` returns to receive
|
|
31
|
+
startup observations. The same payload appears in `activity` with
|
|
32
|
+
`kind: "warning"`, `label: "login_expiring"`, and the typed warning in `raw`.
|
|
33
|
+
The CLI-reported `expiresInDays` is a duration, not an exact expiry timestamp.
|
|
34
|
+
Each distinct countdown value emits once per live session. Warnings are never
|
|
35
|
+
persisted or replayed to later subscribers. Native welcome banners and empty
|
|
36
|
+
composer footers are recognized; arbitrary transcript text is ignored. Elwood
|
|
37
|
+
does not change status or initiate login. A consumer can offer the existing
|
|
38
|
+
`session.login()` flow when the human is ready.
|
|
39
|
+
|
|
16
40
|
## Driving `/login`
|
|
17
41
|
|
|
18
42
|
`ClaudeSession.login(options)` drives the interactive `/login` flow. The
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Native question proofs
|
|
2
|
+
|
|
3
|
+
These opt-in tests exercise `listQuestions()` and `answerQuestions()` against
|
|
4
|
+
real authenticated CLI processes. Each entrypoint uses two valid-model turns.
|
|
5
|
+
Run them separately after `npm run check`; they consume model quota.
|
|
6
|
+
|
|
7
|
+
## Claude: C-E2E-18
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
ELWOOD_NATIVE_QUESTIONS_PROOF=1 node --no-warnings --test --test-concurrency=1 tests/e2e/claude-questions.e2e.ts
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The proof pins Claude Code 2.1.305 and uses `haiku`. It prefers that exact binary
|
|
14
|
+
in `~/.local/share/claude/versions/`, falling back to the installed binary only
|
|
15
|
+
when its version matches. It copies credentials into a private temporary home
|
|
16
|
+
and writes a minimal temporary configuration. Parent configuration is checked
|
|
17
|
+
for changes; it is not copied into the proof's home. The parent CLI installation
|
|
18
|
+
remains unchanged.
|
|
19
|
+
|
|
20
|
+
The first turn submits grouped single and multiple choices. The second submits
|
|
21
|
+
multiline alternative text. Both compare the native `AskUserQuestion`
|
|
22
|
+
PostToolUse answers, require an answered closure and an empty pending list,
|
|
23
|
+
and keep the original `send()` waiting for the final assistant reply.
|
|
24
|
+
|
|
25
|
+
Question events and normalized activities must correspond exactly and contain
|
|
26
|
+
no submitted answer marker. The proof recursively checks Elwood-owned state
|
|
27
|
+
before and after shutdown. Diagnostic artifacts use private, exclusive files
|
|
28
|
+
inside the sandbox. Teardown removes the sandbox and verifies that parent
|
|
29
|
+
configuration, authentication and process environment remain unchanged.
|
|
30
|
+
|
|
31
|
+
## Codex: C-E2E-19
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
ELWOOD_NATIVE_QUESTIONS_PROOF=1 node --no-warnings --test --test-concurrency=1 tests/e2e/codex-questions.e2e.ts
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The proof pins Codex 0.163.0 and uses `gpt-6-luna` with low effort. The first
|
|
38
|
+
turn asks three queued questions in one asynchronous call. It answers Note,
|
|
39
|
+
Literal, then Color through the public API, checking the other requests remain
|
|
40
|
+
available and the original turn remains running. The second turn submits one
|
|
41
|
+
three-question Plan modal, including None of the above and a named choice with
|
|
42
|
+
additional notes.
|
|
43
|
+
|
|
44
|
+
Both long answers exceed 700 characters and include CRLF and CR line endings,
|
|
45
|
+
interior tabs, indented caret rows, interior trailing spaces and outer Unicode
|
|
46
|
+
whitespace. Complete committed native free-text answers and notes must match
|
|
47
|
+
after newline normalization and outer Unicode White_Space trimming. Queued
|
|
48
|
+
selected labels are trimmed; modal selected labels remain exact (PRD §5.10).
|
|
49
|
+
The literal answers
|
|
50
|
+
`Type your answer` and `Add notes` must also match exactly; a clipped viewport
|
|
51
|
+
or placeholder rendering is not accepted as proof of the submitted value.
|
|
52
|
+
|
|
53
|
+
The proof compares complete queued reply envelopes and grouped modal answer
|
|
54
|
+
arrays, requires four answered request closures and final-only ergonomic
|
|
55
|
+
replies, and applies the same telemetry/state privacy and parent-state checks
|
|
56
|
+
as the Claude proof. Native transcripts and diagnostic captures stay inside
|
|
57
|
+
private sandbox directories that teardown removes.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Performance checks
|
|
2
|
+
|
|
3
|
+
Elwood's parent process renders terminal output, classifies frames, retains a
|
|
4
|
+
bounded replay buffer, and watches transcripts for each session. Native Claude
|
|
5
|
+
and Codex processes consume additional resources outside this process.
|
|
6
|
+
|
|
7
|
+
## Repeatable terminal load
|
|
8
|
+
|
|
9
|
+
Run these from the repository root after `npm ci`, using Node 24 or newer:
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
ELWOOD_BENCH_AGENT=claude node --expose-gc --no-warnings scripts/performance/terminal.ts 8 1 8 32
|
|
13
|
+
ELWOOD_BENCH_AGENT=codex node --expose-gc --no-warnings scripts/performance/terminal.ts 8 1 8 32
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Each child writes 8 MiB through a real PTY. The probe checks byte counts and a
|
|
17
|
+
final rendered marker, then reports elapsed time, memory, event-loop delay,
|
|
18
|
+
pending output, and resources remaining after cleanup. The selected observer
|
|
19
|
+
runs the production startup-prompt, screen-fact, turn, attention, and replay
|
|
20
|
+
code. Omit `ELWOOD_BENCH_AGENT` to measure rendering and snapshots alone.
|
|
21
|
+
|
|
22
|
+
This is a synthetic output burst. It does not launch agent CLIs, make model
|
|
23
|
+
requests, exercise hook or transcript traffic, or measure child-process memory.
|
|
24
|
+
Use it to detect regressions in Elwood's output processing; real workloads need
|
|
25
|
+
their own measurements.
|
|
26
|
+
|
|
27
|
+
### September 16, 2026 baseline
|
|
28
|
+
|
|
29
|
+
Measured on the development Mac with Node 24.7.0. Results vary with machine and
|
|
30
|
+
concurrent workload; these are observations, not performance guarantees.
|
|
31
|
+
|
|
32
|
+
| Observer | Sessions | Total output | Elapsed | Peak parent RSS | Event-loop p99 / max |
|
|
33
|
+
|---|---:|---:|---:|---:|---:|
|
|
34
|
+
| Claude | 1 | 8 MiB | 0.185 s | 110 MiB | 11.3 / 11.3 ms |
|
|
35
|
+
| Claude | 8 | 64 MiB | 0.969 s | 240 MiB | 14.4 / 16.0 ms |
|
|
36
|
+
| Claude | 32 | 256 MiB | 7.608 s | 363 MiB | 26.2 / 31.9 ms |
|
|
37
|
+
| Codex | 1 | 8 MiB | 0.243 s | 117 MiB | 19.5 / 19.5 ms |
|
|
38
|
+
| Codex | 8 | 64 MiB | 1.537 s | 248 MiB | 17.4 / 23.4 ms |
|
|
39
|
+
| Codex | 32 | 256 MiB | 9.270 s | 364 MiB | 23.9 / 42.3 ms |
|
|
40
|
+
|
|
41
|
+
At 32 sessions, final rendering finished within 10 ms of child exit. Neither
|
|
42
|
+
run retained PTY resources after cleanup, and post-GC heap usage did not increase
|
|
43
|
+
over that trial's starting heap. The remaining `PipeWrap` was the probe's stdout.
|
|
44
|
+
|
|
45
|
+
Before output batching, the snapshot-only probe took 14.497 s for one 8 MiB
|
|
46
|
+
session, queued about 8.19 MiB, and spent 14.19 s rendering after child exit.
|
|
47
|
+
The corresponding post-fix trial took 0.544 s. These two trials used the same
|
|
48
|
+
snapshot-only workload; the table above also includes production frame observers.
|
|
49
|
+
|
|
50
|
+
A separate ten-second idle probe used 128 real empty transcript files, split
|
|
51
|
+
evenly between Claude and Codex watchers at their default polling intervals. It
|
|
52
|
+
used 97.9 ms of CPU time (about 0.98% of one core), with 19.0 ms p99 event-loop
|
|
53
|
+
delay. It reported no errors, no retained heap increase, and no active resources
|
|
54
|
+
after closing the watchers. This measures idle polling, not transcript parsing
|
|
55
|
+
under active output.
|
|
56
|
+
|
|
57
|
+
## Bounds and regression coverage
|
|
58
|
+
|
|
59
|
+
- Adjacent PTY output is batched for at most 4 ms or 64 KiB, preserving order and
|
|
60
|
+
content. Renderer observations occur at batch boundaries.
|
|
61
|
+
- Real PTYs pause at 1 MiB of pending output and resume below 512 KiB. An already
|
|
62
|
+
delivered chunk can exceed the threshold. Custom PTY factories must provide
|
|
63
|
+
flow control to receive this backpressure.
|
|
64
|
+
- Runtime cleanup gives received output up to one second to render before
|
|
65
|
+
disposal. Process exit and reaping remain immediate; direct terminal disposal
|
|
66
|
+
discards pending output immediately.
|
|
67
|
+
- Tests cover batch ordering, Unicode/ANSI boundaries, slow-renderer
|
|
68
|
+
backpressure, disposal, final output on exit, and cancellation of late
|
|
69
|
+
readiness timers.
|
|
70
|
+
|
|
71
|
+
Re-run the probe after changes to rendering, frame classification, replay,
|
|
72
|
+
transcript polling, or cleanup. Compare output correctness and cleanup as well
|
|
73
|
+
as throughput, memory, and event-loop delay.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Native agent questions
|
|
2
|
+
|
|
3
|
+
Elwood exposes structured questions from the real Claude Code and Codex terminal
|
|
4
|
+
interfaces. A host such as Coal Harbor renders the questions, collects answers,
|
|
5
|
+
and calls Elwood to submit them through the native editor.
|
|
6
|
+
|
|
7
|
+
Subscribe before starting a turn. Keep the question handler active while awaiting
|
|
8
|
+
`send()` or consuming `stream()`; a blocking question needs an answer before that
|
|
9
|
+
turn can finish.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { ClaudeSession, type ElwoodQuestionAnswer } from "@with-logic/elwood";
|
|
13
|
+
|
|
14
|
+
const session = new ClaudeSession({ cwd: "/path/to/project", autotrust: true });
|
|
15
|
+
|
|
16
|
+
session.on("question", (event) => {
|
|
17
|
+
if (event.phase === "raised") showQuestionRequest(event.request);
|
|
18
|
+
else removeQuestionRequest(event.request.id, event.reason);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// After the user fills every question in one request:
|
|
22
|
+
async function submit(requestId: string, answers: readonly ElwoodQuestionAnswer[]) {
|
|
23
|
+
await session.answerQuestions(requestId, answers, { timeoutMs: 20_000 });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const reply = await session.send("Help me choose and implement the right approach.");
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The same methods and event exist on `CodexSession`, the low-level adapter
|
|
30
|
+
interfaces, and the shared `ElwoodAgentSession` interface. Lazy session controls
|
|
31
|
+
start their session when needed. A late subscriber can reconcile its UI with
|
|
32
|
+
`await session.listQuestions()`, an immutable list of available requests in
|
|
33
|
+
discovery order. Subscribe first and buffer lifecycle events while loading the
|
|
34
|
+
snapshot; install the snapshot, then replay those buffered edges by request ID.
|
|
35
|
+
This prevents a request closed during loading from reappearing in the UI.
|
|
36
|
+
|
|
37
|
+
## Request and answer contract
|
|
38
|
+
|
|
39
|
+
A request contains an opaque `id`, `agent`, `delivery` (`blocking` or `queued`),
|
|
40
|
+
and ordered `questions`. Each question contains:
|
|
41
|
+
|
|
42
|
+
- An opaque `id`, `prompt`, optional `header`, and ordered `options` with opaque
|
|
43
|
+
IDs, labels, and optional descriptions.
|
|
44
|
+
- `selection`: `single`, `multiple`, or `none`.
|
|
45
|
+
- `textMode`: `none`, `alternative` (text instead of a choice), or `additional`
|
|
46
|
+
(text may accompany a choice).
|
|
47
|
+
- `supportsSecretInput`: whether the supported native editor accepts secret input. Current
|
|
48
|
+
characterized editors advertise `false`; do not infer masking from model text.
|
|
49
|
+
|
|
50
|
+
Render these capabilities as supplied. Send one complete batch for one request:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
const [request] = await session.listQuestions();
|
|
54
|
+
if (request) {
|
|
55
|
+
const answers: readonly ElwoodQuestionAnswer[] = await collectUserAnswers(request);
|
|
56
|
+
await session.answerQuestions(request.id, answers);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
For a choice, use `{ questionId, optionIds: userSelectedOptionIds }`. For text,
|
|
61
|
+
use `{ questionId, text: "The user's answer" }`. For multiple choice, pass all
|
|
62
|
+
selected `optionIds`. Include both only when `textMode` is `additional`.
|
|
63
|
+
Every question in the selected request needs exactly one answer; the host chooses
|
|
64
|
+
when to submit. Elwood never selects defaults or answers automatically.
|
|
65
|
+
|
|
66
|
+
Unknown or duplicate question/option IDs, missing answers, unsupported
|
|
67
|
+
combinations, empty answers, and unsafe control characters reject before any
|
|
68
|
+
input. Multiline text uses bracketed paste. The 8 MiB answer-batch limit is the
|
|
69
|
+
sum of UTF-8 bytes in validated question IDs, selected option IDs and text;
|
|
70
|
+
JSON syntax and unknown fields do not count. Text must contain well-formed
|
|
71
|
+
UTF-16. Invalid answers produce `invalid_question_answer`; unknown, stale, closed
|
|
72
|
+
or previous-process request IDs produce `question_not_found`. Do not retain
|
|
73
|
+
request IDs across process restarts or resume.
|
|
74
|
+
|
|
75
|
+
## Lifecycle and input ownership
|
|
76
|
+
|
|
77
|
+
The typed `question` event has `phase: "raised"` or `"closed"`, plus the request,
|
|
78
|
+
agent and `elwoodSessionId`. Closure reasons are `answered`, `cancelled`, and
|
|
79
|
+
`unavailable`. `answered` means native acceptance was observed. Turn completion,
|
|
80
|
+
withdrawal, replacement or shutdown uses `unavailable` unless stronger native
|
|
81
|
+
evidence exists. Redraws and mirrored source records do not raise duplicates.
|
|
82
|
+
|
|
83
|
+
The normalized activity stream carries the same event in `activity.question`
|
|
84
|
+
with `kind: "question"`. Choose one surface, or deduplicate matching deliveries
|
|
85
|
+
by request ID, phase and closure reason when listening to both. A request's
|
|
86
|
+
`closed` event must still be processed after its `raised` event. Question
|
|
87
|
+
activities contain question metadata, not the user's submitted answers. They are
|
|
88
|
+
separate from final assistant text and excluded from ergonomic reply text.
|
|
89
|
+
|
|
90
|
+
A throwing or rejecting `question` or matching `activity` handler produces at
|
|
91
|
+
most one content-free `question_observer_failed` warning per live session, plus
|
|
92
|
+
its normalized warning activity. Its `phase` is `question` or `activity`, naming
|
|
93
|
+
the first failing notification channel. Other handlers and question lifecycle
|
|
94
|
+
delivery continue. The diagnostic contains no question, answer or error contents;
|
|
95
|
+
it does not authorize retrying or replaying an answer.
|
|
96
|
+
|
|
97
|
+
Answering uses a dedicated input lane and works while another send or turn is
|
|
98
|
+
waiting. Pending questions hold ordinary text, slash commands, loops and login
|
|
99
|
+
writes so those cannot enter the question editor or erase queued questions.
|
|
100
|
+
`delivery: "queued"` can coexist with an agent that is still working. Question
|
|
101
|
+
availability alone does not mean its turn has finished.
|
|
102
|
+
|
|
103
|
+
An answer call resolves after native acceptance. The default timeout is 20
|
|
104
|
+
seconds; pass a positive finite `timeoutMs` or an `AbortSignal` as `signal` to
|
|
105
|
+
bound the operation. Concurrent answer calls, human keyboard takeover,
|
|
106
|
+
interruption, shutdown, layout changes, rejected input or uncertain acceptance
|
|
107
|
+
reject with `question_answer_failed`. A submitting Enter is never blindly
|
|
108
|
+
retried. Failures may include a content-free `details.category`: `frame_wait`,
|
|
109
|
+
`adapter`, `terminal_write`, `native_acceptance`, or `aborted`.
|
|
110
|
+
|
|
111
|
+
If no physical write started, the request may remain available for another
|
|
112
|
+
attempt. If input may have reached the CLI without confirmed acceptance, Elwood
|
|
113
|
+
closes the API request once as `unavailable` and removes it from `listQuestions()`.
|
|
114
|
+
Its old ID then rejects with `question_not_found` before writing. Refresh the list
|
|
115
|
+
and terminal view; offer an answer form only for a currently available request.
|
|
116
|
+
|
|
117
|
+
Elwood keeps the uncertain native identity reserved, holding ordinary input until
|
|
118
|
+
native closure, turn end or shutdown. A redraw, changed metadata for the same
|
|
119
|
+
identity or a late write completion cannot restore the answer form. A later
|
|
120
|
+
native acknowledgement releases that reservation without a second closure event.
|
|
121
|
+
Both the physical write and native reservation must settle before ordinary input
|
|
122
|
+
resumes, in either order. An unavailable API request does not mean the CLI is
|
|
123
|
+
ready; the terminal remains available for manual inspection and recovery.
|
|
124
|
+
|
|
125
|
+
Requests and answers are live-only and are not added to Elwood's persisted state.
|
|
126
|
+
Existing raw hooks and transcripts retain their normal contents and can include
|
|
127
|
+
answers. Avoid logging them if your host treats those answers as sensitive.
|
|
128
|
+
|
|
129
|
+
## Native differences
|
|
130
|
+
|
|
131
|
+
Claude's `AskUserQuestion` can group tabbed questions into one request, including
|
|
132
|
+
single choice, checkboxes and alternative text on single-select questions.
|
|
133
|
+
Checkbox questions currently advertise `textMode: "none"`. Elwood submits the group through
|
|
134
|
+
its review page. A caller's direct Claude hook answer keeps precedence and does
|
|
135
|
+
not create a phantom terminal question. The supported automation starts from the
|
|
136
|
+
recognized first question; unsupported partial navigation fails safely. Completion
|
|
137
|
+
hooks must match the native Claude tool-use ID (`tool_use_id`), or the ordered
|
|
138
|
+
question definitions when the hook omits that ID. Unrelated Claude hooks cannot
|
|
139
|
+
acknowledge the request.
|
|
140
|
+
|
|
141
|
+
Codex's modal `request_user_input` groups questions into one acceptance unit.
|
|
142
|
+
Its current editor requires choices for every question; native Other/notes
|
|
143
|
+
supports a custom answer, and the native “None of the above” row is exposed as
|
|
144
|
+
its own option. Notes can accompany a selected choice. Queued
|
|
145
|
+
`request_user_input_async` questions are accepted
|
|
146
|
+
individually, so Elwood exposes one request per independently answerable question,
|
|
147
|
+
even if the agent asked several at once. They can disappear when the native turn
|
|
148
|
+
ends. Elwood does not extend their lifetime or invent a fixed expiry. Native Codex
|
|
149
|
+
metadata must omit `isSecret` or use boolean `false` for every question; unsupported
|
|
150
|
+
or malformed secret flags leave the complete request unavailable for automation.
|
|
151
|
+
|
|
152
|
+
Ordinary prose questions, permission prompts, trust gates, model pickers and login
|
|
153
|
+
flows retain their existing surfaces. Unknown question layouts remain available
|
|
154
|
+
through the terminal view and do not receive guessed answer keys. Native behavior
|
|
155
|
+
was characterized on Claude Code 2.1.305 and Codex 0.163.0; see
|
|
156
|
+
[CLI behavior](cli-behavior.md#native-interactive-question-records-2026-10-20) for evidence.
|
|
157
|
+
|
|
158
|
+
Codex question automation is bounded to 256 pending native requests and 1 MiB
|
|
159
|
+
of candidate metadata; each call is limited to 256 definitions and 1 MiB of
|
|
160
|
+
input metadata. Replay protection retains at most 4,096 retired identities and
|
|
161
|
+
1 MiB of key data. Overflow closes exposed requests as `unavailable` and disables
|
|
162
|
+
question automation until a new session is created. Ordinary text, slash-command,
|
|
163
|
+
loop and login writes remain held until native turn-end evidence. Raw `sendKeys()`
|
|
164
|
+
remains available for manual input and recovery. Unanswered requests have no
|
|
165
|
+
invented expiry deadline.
|
|
166
|
+
|
|
167
|
+
Codex normalizes CRLF and CR to LF and trims Rust Unicode White_Space from the
|
|
168
|
+
ends of submitted text (U+FEFF is retained). Interior whitespace is preserved.
|
|
169
|
+
Modal option labels remain exact; optional notes use the text normalization.
|
|
170
|
+
Elwood checks that long, clipped and multiline text, including text matching an
|
|
171
|
+
editor placeholder, remains in the same question editor. The call resolves only
|
|
172
|
+
after the complete accepted text matches the normalized submitted answer.
|
|
173
|
+
Budget disablement emits one content-free `question_automation_disabled` warning
|
|
174
|
+
and its normalized warning activity. Raw human terminal input remains available.
|
|
175
|
+
|
|
176
|
+
A successful Claude final submission waits for matching native completion even
|
|
177
|
+
after an empty composer appears. An interrupted, unconfirmed answer closes its
|
|
178
|
+
API request as unavailable while retaining the native identity and input hold
|
|
179
|
+
until native closure.
|
|
180
|
+
|
|
181
|
+
Aborting the call does not undo an answer already submitted to Claude.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@with-logic/elwood",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Control interactive agentic coding CLIs (Claude Code, Codex) through real terminal sessions: typed hooks, a unified activity stream, resumable sessions, and a headless CLI.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Logic App, Inc.",
|
package/prd/04-architecture.md
CHANGED
|
@@ -18,6 +18,21 @@ state, warnings, or startup prompts. Elwood MUST send `sendPrompt` and
|
|
|
18
18
|
`sendKeys` input through the headless terminal input path so parent app input,
|
|
19
19
|
programmatic prompts, and low-level keys share one terminal control mechanism.
|
|
20
20
|
|
|
21
|
+
PTY output is submitted to xterm's ordered write buffer without serializing each
|
|
22
|
+
chunk behind a separate timer. Adjacent chunks may be coalesced into bounded
|
|
23
|
+
render batches of at most 64 KiB, flushing sooner when full or after a 4 ms
|
|
24
|
+
scheduling window (subject to host event-loop scheduling); raw byte order is
|
|
25
|
+
preserved, while event chunk boundaries and
|
|
26
|
+
intermediate frames are not guaranteed. Render observers inspect each completed
|
|
27
|
+
batch before subsequent terminal writes are parsed. Real PTY
|
|
28
|
+
output pauses at 1 MiB of unrendered UTF-8 data and resumes below 512 KiB, without
|
|
29
|
+
dropping output. A paused PTY resumes as soon as its child process exits, and is
|
|
30
|
+
not paused again afterwards, so a backlog still draining at exit cannot strand
|
|
31
|
+
unread output behind a pause. The high-water mark can be exceeded by the single
|
|
32
|
+
chunk already delivered; OS/native buffers are outside this accounting. This is
|
|
33
|
+
backpressure, not a total process-memory cap. Disposing the terminal cancels pending render
|
|
34
|
+
notifications and settles outstanding write and `settled()` promises.
|
|
35
|
+
|
|
21
36
|
### 4.2 macOS shell behavior
|
|
22
37
|
|
|
23
38
|
On macOS, Elwood MUST start the PTY in the user's configured shell in a way that
|
|
@@ -97,7 +97,17 @@ tools onboarding prompt, declined through PTY input (Escape) with
|
|
|
97
97
|
automation is unconditional because declining grants nothing and an unanswered
|
|
98
98
|
onboarding prompt permanently wedges a headless session.
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
This non-trust automation has the SAME lifetime as trust automation: it is bound
|
|
101
|
+
to session disposal. Once the session begins closing — `stop()`, `kill()`, or PTY
|
|
102
|
+
exit — no further decline is attempted, and a decline already in flight settles as
|
|
103
|
+
a cancellation. Because the non-trust automation barrier parks on render settlement,
|
|
104
|
+
a write suspended there re-checks disposal when it resumes and abandons the keystroke:
|
|
105
|
+
nothing is written to a terminated PTY, and neither `startup_prompt` nor
|
|
106
|
+
`startup_prompt_write_failed` is emitted after close.
|
|
107
|
+
|
|
108
|
+
`persona` is an optional instruction message for the agent. A persona exceeding
|
|
109
|
+
8 MiB of UTF-8 text rejects startup with `input_queue_full` before preflight,
|
|
110
|
+
state creation, or process spawn. When set within this limit, Elwood
|
|
101
111
|
enqueues it before control returns to the caller, so it is guaranteed to be the
|
|
102
112
|
session's first submitted user message: it is delivered through the standard
|
|
103
113
|
message queue as soon as the session first becomes ready, ahead of any
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
## 5.10 Native questions
|
|
2
|
+
|
|
3
|
+
`ElwoodAgentSession`, both raw adapter interfaces, and both lazy session classes
|
|
4
|
+
expose `listQuestions(): Promise<readonly ElwoodQuestionRequest[]>` and
|
|
5
|
+
`answerQuestions(requestId, answers, options?): Promise<void>`. These controls
|
|
6
|
+
bypass the ergonomic turn queue; answering never creates a user turn or finishes
|
|
7
|
+
an existing `send`/`stream`. Lazy controls start the session before delegation.
|
|
8
|
+
|
|
9
|
+
A request has readonly `id`, `agent`, `delivery` (`blocking` or `queued`), and
|
|
10
|
+
ordered `questions`. Each question has readonly `id`, `prompt`, optional `header`,
|
|
11
|
+
`options` (ordered readonly `id`, `label`, optional `description`), `selection`
|
|
12
|
+
(`single`, `multiple`, or `none`), `textMode` (`none`, `alternative`, or
|
|
13
|
+
`additional`), and `supportsSecretInput`. IDs are opaque and scoped to the live process.
|
|
14
|
+
`alternative` permits text instead of options; `additional` permits text alongside
|
|
15
|
+
options. Capabilities describe only supported native input, not model intent.
|
|
16
|
+
|
|
17
|
+
The snapshot lists currently available requests in discovery order and is deeply immutable.
|
|
18
|
+
Redraws and mirrored source records retain identities. A semantic replacement
|
|
19
|
+
closes the old request as unavailable and raises a new ID. No question or answer
|
|
20
|
+
is stored in Elwood session state or restored by Elwood on resume.
|
|
21
|
+
|
|
22
|
+
`question` events carry `elwoodSessionId`, `agent`, `request`, and `phase`
|
|
23
|
+
(`raised` or `closed`). Closed events also carry `reason`: `answered`,
|
|
24
|
+
`cancelled`, or `unavailable`. `answered` requires native acceptance evidence;
|
|
25
|
+
`cancelled` requires native dismissal evidence; withdrawal, turn end, replacement,
|
|
26
|
+
and shutdown use `unavailable` when no stronger evidence exists. Matching
|
|
27
|
+
normalized activities have `kind: "question"`, `source: "terminal"`, the same
|
|
28
|
+
structured event in `question`, and a phase label. They contain request prompts,
|
|
29
|
+
not answer values. Existing raw hook/transcript observations remain unredacted.
|
|
30
|
+
Question activity is telemetry and never ergonomic answer text. The request, event
|
|
31
|
+
and normalized activity agents agree, including in their public discriminated types.
|
|
32
|
+
|
|
33
|
+
Each answer contains `questionId`, optional ordered `optionIds`, and optional
|
|
34
|
+
`text`. Exactly one answer for every question in the selected request is required.
|
|
35
|
+
Unknown/duplicate IDs, unsupported text, multiple options on single-select,
|
|
36
|
+
empty answers, and control-bearing text reject as `invalid_question_answer`
|
|
37
|
+
before any write. The complete validated answer batch is limited to 8 MiB: the sum of UTF-8 bytes
|
|
38
|
+
in its question IDs, selected option IDs and text. JSON syntax and unknown fields
|
|
39
|
+
do not count toward this limit. Malformed UTF-16 is rejected. Multiline text is safely bracketed-pasted. An unknown, closed,
|
|
40
|
+
retired, or previous-process request rejects as `question_not_found` before input.
|
|
41
|
+
|
|
42
|
+
`options` accepts optional positive finite `timeoutMs` (default 20,000) and
|
|
43
|
+
`signal: AbortSignal`. Long deadlines use bounded timer chunks. A single answer transaction owns the physical question
|
|
44
|
+
input lane; overlapping calls reject as `question_answer_failed` before reading
|
|
45
|
+
caller answer or options fields, including stale IDs and invalid batches. When
|
|
46
|
+
no attempt owns the lane, unknown or retired IDs reject as `question_not_found`
|
|
47
|
+
before input. It operates
|
|
48
|
+
even while an ordinary queued writer or ergonomic turn is waiting. Every write
|
|
49
|
+
revalidates current completed native frames, live request ownership and caller
|
|
50
|
+
intervention. Raw keys and interruption revoke the transaction. Timeout,
|
|
51
|
+
cancellation, changed/unsupported layout, rejected input and uncertain acceptance
|
|
52
|
+
reject with content-free `question_answer_failed`; a submitting Enter is never
|
|
53
|
+
blindly retried. Closing the session prevents further writes. Failures may expose
|
|
54
|
+
only fixed `details.category` categories: `frame_wait`, `adapter`, `terminal_write`,
|
|
55
|
+
`native_acceptance`, or `aborted`; they never retain raw exceptions or answer text.
|
|
56
|
+
|
|
57
|
+
A failed attempt that has not started a physical write can remain answerable. If
|
|
58
|
+
input may have reached the CLI and native acceptance is unconfirmed, the API
|
|
59
|
+
request closes once as `unavailable` and disappears from snapshots. Retrying its
|
|
60
|
+
ID rejects as `question_not_found` before input. Elwood retains the native identity
|
|
61
|
+
and holds ordinary automation until correlated native closure, turn end or
|
|
62
|
+
shutdown releases it. Redraws, changed metadata for that same reserved identity
|
|
63
|
+
and late write completion cannot republish or reauthorize the request. Native
|
|
64
|
+
closure releases this reservation silently, without a second question closure.
|
|
65
|
+
Both the physical write and the correlated native reservation must settle before
|
|
66
|
+
ordinary input can resume, whichever settles first. The API closure alone does
|
|
67
|
+
not mean the CLI is ready for ordinary input.
|
|
68
|
+
|
|
69
|
+
Pending requests and native question editors hold ordinary prompt, command,
|
|
70
|
+
loop and login writes. Native lifecycle status remains independent of queued
|
|
71
|
+
question availability. Unknown question layouts are hold-only, observable through
|
|
72
|
+
the existing terminal/attention surfaces, and never receive guessed keys.
|
|
73
|
+
|
|
74
|
+
Claude `AskUserQuestion` hooks supply grouped request metadata. A request is
|
|
75
|
+
published only when its matching native questionnaire is visible; direct caller
|
|
76
|
+
hook answers and denials retain precedence and do not create a phantom pending
|
|
77
|
+
request, even if a matching stale screen is still visible. Initial hook activity
|
|
78
|
+
keeps its existing timing; discovery waits for that exact caller decision and
|
|
79
|
+
then a fresh completed native paint.
|
|
80
|
+
Overlapping Claude hooks retain independent native tool-use identities and exact
|
|
81
|
+
caller outcomes, including out-of-order resolution and completion. A pending
|
|
82
|
+
outcome withholds only its matching candidate; it cannot suppress discovery of an
|
|
83
|
+
unrelated resolved request. Matching `PermissionRequest` mirrors retain the
|
|
84
|
+
original candidate even when their hook IDs differ. A native panel that matches
|
|
85
|
+
multiple independent candidates grants no answer authority; ownership remains
|
|
86
|
+
held until native evidence disambiguates it. ID-less completion requires one
|
|
87
|
+
uniquely matching candidate and cannot retire an ambiguous group.
|
|
88
|
+
The adapter supports the captured single-choice, checkbox, tabbed sequential
|
|
89
|
+
question and review stages, with alternative free text. It requires a recognized
|
|
90
|
+
initial first-question stage; a human-navigated unsupported partial stage rejects
|
|
91
|
+
safely. Only a matching `AskUserQuestion` completion acknowledges the whole
|
|
92
|
+
request. A supplied native completion ID must match the active request; without an ID,
|
|
93
|
+
ordered question definitions must match its prompts, headers, selection modes and
|
|
94
|
+
ordered option labels/descriptions. Unrelated tools or mismatched question
|
|
95
|
+
metadata cannot acknowledge, cancel or retire that request. The standard hook
|
|
96
|
+
timeout is unchanged and never waits for a human answer.
|
|
97
|
+
|
|
98
|
+
Codex native text acceptance normalizes CRLF and CR to LF, then trims Rust
|
|
99
|
+
Unicode White_Space at both ends (U+FEFF is retained); interior whitespace is
|
|
100
|
+
preserved. Queued selected labels are trimmed; modal selected labels remain
|
|
101
|
+
exact and optional notes use the text normalization. Long, clipped, multiline and literal placeholder text is accepted only while
|
|
102
|
+
the submitted text remains in the same native question editor. The complete
|
|
103
|
+
committed native answer must match the submitted answer before success.
|
|
104
|
+
Unsupported or opaque Codex native identities reserve ordinary automation until
|
|
105
|
+
explicit native turn end; raw human terminal input remains available.
|
|
106
|
+
Codex metadata budget overflow emits one content-free `question_automation_disabled`
|
|
107
|
+
warning and normalized warning activity per session, then disables automation.
|
|
108
|
+
|
|
109
|
+
A successful Claude final submission awaits matching native completion through
|
|
110
|
+
a newly empty composer. An interrupted, unconfirmed answer retires the API
|
|
111
|
+
request while retaining its native identity and input hold until native closure;
|
|
112
|
+
a later acknowledgement releases that reservation without another closure event.
|
|
113
|
+
|
|
114
|
+
Question notification failures are contained without changing request state or
|
|
115
|
+
native input holds. The first failed question or companion question-activity
|
|
116
|
+
observer in a live session produces the content-free `question_observer_failed`
|
|
117
|
+
warning and normalized warning activity specified in [§5.4](5.4-events.md).
|