@with-logic/elwood 0.1.2 → 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 +396 -2
- package/CONTRIBUTING.md +29 -18
- package/README.md +50 -19
- 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 +15 -11
- 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/main.d.ts.map +1 -1
- package/dist/cli/main.js +9 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/models/combined.d.ts +6 -0
- package/dist/cli/models/combined.d.ts.map +1 -0
- package/dist/cli/models/combined.js +92 -0
- package/dist/cli/models/combined.js.map +1 -0
- package/dist/cli/models/index.d.ts +2 -0
- package/dist/cli/models/index.d.ts.map +1 -1
- package/dist/cli/models/index.js +15 -4
- package/dist/cli/models/index.js.map +1 -1
- package/dist/cli/models/render.d.ts +4 -0
- package/dist/cli/models/render.d.ts.map +1 -1
- package/dist/cli/models/render.js +28 -1
- package/dist/cli/models/render.js.map +1 -1
- package/dist/cli/models/result.d.ts +13 -0
- package/dist/cli/models/result.d.ts.map +1 -0
- package/dist/cli/models/result.js +2 -0
- package/dist/cli/models/result.js.map +1 -0
- package/dist/cli/models/settings.d.ts +63 -0
- package/dist/cli/models/settings.d.ts.map +1 -0
- package/dist/cli/models/settings.js +24 -0
- package/dist/cli/models/settings.js.map +1 -0
- package/dist/cli/models/signals.d.ts +11 -0
- package/dist/cli/models/signals.d.ts.map +1 -0
- package/dist/cli/models/signals.js +21 -0
- package/dist/cli/models/signals.js.map +1 -0
- package/dist/cli/request/index.d.ts.map +1 -1
- package/dist/cli/request/index.js +2 -1
- package/dist/cli/request/index.js.map +1 -1
- package/dist/cli/request/validation.d.ts.map +1 -1
- package/dist/cli/request/validation.js +0 -4
- package/dist/cli/request/validation.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 +4 -6
- 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 +44 -10
- package/docs/cli.md +18 -11
- 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 +50 -17
- package/prd/13-latitude.md +89 -0
- package/prd/14-conformance.md +86 -32
- package/prd/16-maintainer-review.md +75 -0
- package/prd/README.md +1 -0
|
@@ -8,8 +8,8 @@ control surface (`sendMessage`, `sendPrompt`, `sendGuidance`, `sendKeys`, `resiz
|
|
|
8
8
|
`cancelLoop`, `on`/`off`, `waitForStatus`, `waitForActivity`,
|
|
9
9
|
`stop`/`kill`/`teardown`, and Claude's `login`). Every method is
|
|
10
10
|
lazy-start-aware. The class is a thin wrapper over the same PTY-backed session the
|
|
11
|
-
`start*` factories build — it adds no new
|
|
12
|
-
|
|
11
|
+
`start*` factories build — it adds no new persistence behavior. Private submission
|
|
12
|
+
and native-boundary evidence isolates collection without changing public hook payloads. The `startClaude`/`startCodex` factories remain as the low-level
|
|
13
13
|
eager entry points but are DEPRECATED in favor of the class; they still return the
|
|
14
14
|
same live session object (typed `ClaudeSessionApi`/`CodexSessionApi`) the class wraps.
|
|
15
15
|
|
|
@@ -34,6 +34,23 @@ with one another; control methods (`interrupt`, `sendKeys`, `createLoop`,
|
|
|
34
34
|
`listLoops`, `cancelLoop`, `stop`, `kill`, …) go
|
|
35
35
|
through immediately so an intervention reaches a running turn rather than queuing.
|
|
36
36
|
|
|
37
|
+
**Image ownership.** Every image-bearing facade call snapshots bytes and absolute
|
|
38
|
+
paths synchronously, before lazy startup or turn queueing, with the validation and
|
|
39
|
+
200 MiB per-session clone ceiling from §5.3. That ceiling is ONE budget per
|
|
40
|
+
session: the facade and the raw session it exposes through `session` reserve
|
|
41
|
+
against the same 200 MiB, so mixing both surfaces cannot retain more than either
|
|
42
|
+
alone. Raw facade submissions release their
|
|
43
|
+
reservation when submission settles. Ergonomic `send`/`stream` turns retain their
|
|
44
|
+
reservation until the real turn boundary, because acceptance recovery may replay
|
|
45
|
+
the captured images. Consumer timeout or cancellation alone does not release it;
|
|
46
|
+
closing or killing the session reaches the boundary. Pending copies and the serialized
|
|
47
|
+
slot are released only after any cancelled acceptance-recovery submission finishes
|
|
48
|
+
its initial or replay physical write and immediate cleanup; dialog-blocked draft cleanup remains
|
|
49
|
+
owned by the input queue and must finish before a successor writes. Recovery stops when the consumer settles,
|
|
50
|
+
on either success or failure. An earlier `ready` followed by replay `running` is not
|
|
51
|
+
completion evidence for that replay; a failed consumer still waits for a new real
|
|
52
|
+
`ready` or terminal boundary and the required transcript drain.
|
|
53
|
+
|
|
37
54
|
**Turn boundary.** A "turn" begins when a `send`/`stream` submits its prompt and
|
|
38
55
|
ends when its content is complete. A turn's assistant text is transcript-sourced
|
|
39
56
|
(C-CLAUDE-15) and the transcript is written ASYNCHRONOUSLY, so the text can arrive
|
|
@@ -57,13 +74,27 @@ failure, not a quiet success). A terminal status ends the turn immediately (it i
|
|
|
57
74
|
final). A turn may legitimately run for HOURS (running a test
|
|
58
75
|
suite, polling a PR), so there is NO whole-turn timeout by default — a still-live turn
|
|
59
76
|
is never failed by a clock; a caller may pass an OPT-IN `timeoutMs` whole-turn
|
|
60
|
-
ceiling
|
|
77
|
+
ceiling, armed once at the first physical submitting Enter, without waiting for
|
|
78
|
+
fresh-empty input confirmation. Both initial and replay ergonomic submissions retain
|
|
79
|
+
input ownership until that confirmation or cancellation cleanup. The facade does not
|
|
80
|
+
queue a whole-prompt replay while an awaited writer still owns native Enter recovery.
|
|
81
|
+
A failure after Enter still waits for the real native boundary; a rejected submission
|
|
82
|
+
that never reached Enter releases immediately. The tight cap is `catchUpMs` (default 10000 ms), armed only ONCE `ready`
|
|
61
83
|
fires: the agent is done, so the transcript flush should be near-instant — if it
|
|
62
84
|
stalls past `catchUpMs`, the turn rejects with `wait_timeout` rather than leaving the
|
|
63
85
|
caller hanging. Turns
|
|
64
86
|
are serialized: overlapping `send`/`stream` calls queue and run one at a time in call
|
|
65
87
|
order, so a turn's activity never interleaves with another's. This serialization covers
|
|
66
|
-
the ergonomic `send`/`stream` turns
|
|
88
|
+
the ergonomic `send`/`stream` turns and scheduled loop delivery: once its slot is
|
|
89
|
+
reserved and the underlying session is available, an ergonomic turn holds due loop
|
|
90
|
+
input until its real boundary,
|
|
91
|
+
including acceptance recovery and post-failure transcript drain. A loop selected before that hold reserves its native boundary before preparation
|
|
92
|
+
or physical submission; the caller waits for its completion and transcript drain
|
|
93
|
+
BEFORE installing its collector. A loop merely queued behind the hold cannot
|
|
94
|
+
prevent the caller's submission or recovery, or jump ahead of a successor caller
|
|
95
|
+
whose serialized slot is already reserved. Startup persona input drains before
|
|
96
|
+
caller collection by the same rule.
|
|
97
|
+
The raw turn-producing control methods
|
|
67
98
|
(`sendMessage`, `sendPrompt`, `sendGuidance`) submit immediately and are NOT part of
|
|
68
99
|
the ergonomic turn queue, so calling one CONCURRENTLY with an in-flight `send`/`stream`
|
|
69
100
|
turn is unsupported — its produced turn can interleave with the ergonomic turn's
|
|
@@ -79,8 +110,27 @@ reliable "turn done" signal: a real `ready` (a busy agent is `running`, not read
|
|
|
79
110
|
terminal status, then a short transcript-drain settle. A hung agent holds the slot until
|
|
80
111
|
`close()`/`kill()` forces a terminal status. The facade subscribes to `activity` BEFORE
|
|
81
112
|
submitting so no early event of the turn is missed. Where the adapter tags activity with a
|
|
82
|
-
`turnId` (Codex), the facade
|
|
83
|
-
|
|
113
|
+
`turnId` (Codex), the facade binds it only from an authenticated native
|
|
114
|
+
`UserPromptSubmit` for its physically attempted submission. The adapter normalizes
|
|
115
|
+
that acceptance and the submitted payload; prompt equality alone, replayed content,
|
|
116
|
+
`running`, and a late `Stop` cannot establish identity. Before acceptance, tagged
|
|
117
|
+
and untagged content cannot enter the collector. After acceptance, tagged content
|
|
118
|
+
and the Stop completeness signal must match that identity; a prior Stop cannot
|
|
119
|
+
replace its oracle. Untagged transcript records remain isolated by causal
|
|
120
|
+
serialization and predecessor drain.
|
|
121
|
+
A failed or interrupted consumer retains an unresolved attempted native boundary
|
|
122
|
+
until trustworthy completion or terminal shutdown, rather than assigning the next
|
|
123
|
+
unknown native generation to its successor. An earlier `ready` alone cannot
|
|
124
|
+
complete a newly accepted generation. Completion can combine its own matching,
|
|
125
|
+
unblocked Stop with a current positively empty, unblocked composer rendered from
|
|
126
|
+
native output received after the owned Enter; a cached pre-Enter frame or a
|
|
127
|
+
geometry-only change does not supply that evidence. Hookless completion may instead
|
|
128
|
+
come from the existing classified native rendered end edge for the currently
|
|
129
|
+
accepted generation, with post-Enter output progress and no input block. A raw
|
|
130
|
+
`interrupt()` return or a generic status change is not that evidence.
|
|
131
|
+
These rules also apply to headless CLI
|
|
132
|
+
collection. They refine causal serialization rather than authenticate caller-owned
|
|
133
|
+
configuration or unrelated host processes; Claude transcript activity carries no `turnId`, so for Claude the
|
|
84
134
|
serialized-slot boundary is the sole isolation guarantee (which is why releasing the
|
|
85
135
|
slot on the real agent boundary, not on consumer cancellation, is load-bearing).
|
|
86
136
|
Because a turn has no default timeout, its buffered state is BOUNDED: the oracle
|
|
@@ -120,3 +170,5 @@ text-collection semantics are identical.
|
|
|
120
170
|
**Teardown.** `close()` stops the underlying session (falling back to `kill` on a
|
|
121
171
|
stop failure) and is a no-op if the session never started; it is the ergonomic
|
|
122
172
|
counterpart to `stop`/`kill`/`teardown` and safe to call in a `finally`.
|
|
173
|
+
|
|
174
|
+
Native question snapshots and answering are shared controls; see [§5.10](5.10-questions.md).
|
package/prd/05-api/5.9-loops.md
CHANGED
|
@@ -127,6 +127,14 @@ with no separate wall-clock delivery deadline. A candidate that settles before
|
|
|
127
127
|
committing a turn releases the next due candidate immediately while readiness
|
|
128
128
|
remains available.
|
|
129
129
|
|
|
130
|
+
An ergonomic `send`/`stream` turn holds queued loop delivery once its serialized
|
|
131
|
+
slot is reserved and the session is available, through its real boundary (§5.8),
|
|
132
|
+
so a due loop cannot supply
|
|
133
|
+
acceptance or completion evidence for a swallowed caller prompt. Caller controls
|
|
134
|
+
and recovery submissions remain eligible ahead of held loops. Nested holds release
|
|
135
|
+
independently; the final release resumes eligible due delivery, while shutdown or
|
|
136
|
+
loop cancellation discards pending delivery under the existing rules.
|
|
137
|
+
|
|
130
138
|
If the process stops or exits before a due prompt is submitted, its transient
|
|
131
139
|
due state is discarded and its definition becomes `waiting` for resume. A live
|
|
132
140
|
scheduling or submission failure emits a `failed` loop event and rearms the
|
|
@@ -141,7 +149,9 @@ If the loop already committed its prompt, cancellation does not interrupt that
|
|
|
141
149
|
active agent turn. An unknown, expired, cancelled, or otherwise finished ID
|
|
142
150
|
fails with `loop_not_found` and cannot affect another loop. `listLoops` and
|
|
143
151
|
`cancelLoop` remain available on stopped or exited raw sessions; `createLoop`
|
|
144
|
-
does not.
|
|
152
|
+
does not. Once a successful same-process resume supersedes a raw session, its
|
|
153
|
+
`createLoop` and `cancelLoop` reject with `session_not_running`; they cannot report
|
|
154
|
+
a durable change that the successor did not receive. The lazy wrappers apply the existing lazy-start behavior to all three
|
|
145
155
|
methods when no underlying session exists yet.
|
|
146
156
|
|
|
147
157
|
The `loop` event is live-only and follows the union above. `created` carries a
|
package/prd/05-api/README.md
CHANGED
|
@@ -17,3 +17,5 @@ concepts in this section, including the stable `ElwoodErrorName` union.
|
|
|
17
17
|
- [5.7 CodexSessionApi (the raw live session)](5.7-codex-session-api.md)
|
|
18
18
|
- [5.8 The session API — `ClaudeSession` / `CodexSession`](5.8-session-api.md)
|
|
19
19
|
- [5.9 Recurring session loops](5.9-loops.md)
|
|
20
|
+
|
|
21
|
+
- [5.10 Native questions](5.10-questions.md)
|
|
@@ -39,6 +39,17 @@ If a future Claude version adds events, the MVP may reject them as invalid hook
|
|
|
39
39
|
input and fail open until first-class types are added. Elwood should add an
|
|
40
40
|
unknown-but-safe event path before promising forward-compatible hook handling.
|
|
41
41
|
|
|
42
|
+
`StopFailure` identifies a rejected Claude turn even when diagnostic fields drift.
|
|
43
|
+
After validating the common hook envelope, ingress MUST admit missing or arbitrarily
|
|
44
|
+
shaped `error`, `error_details`, and `last_assistant_message` fields. Their public
|
|
45
|
+
TypeScript types are optional `unknown`; consumers must narrow them before use.
|
|
46
|
+
Other event schemas retain their existing validation.
|
|
47
|
+
|
|
48
|
+
Human-readable rejection diagnostics prefer a nonblank string `error_details`, then
|
|
49
|
+
`Claude rejected the turn: <error>` for a nonblank string `error`, and otherwise
|
|
50
|
+
`Claude rejected the turn.`. Each diagnostic field is bounded to 2,000 characters
|
|
51
|
+
plus an ellipsis before interpolation. Assistant text is not a rejection reason.
|
|
52
|
+
|
|
42
53
|
### 6.2 Routing
|
|
43
54
|
|
|
44
55
|
Each launched Claude process receives an Elwood session identifier in its
|
|
@@ -71,6 +82,31 @@ If a handler times out, throws, rejects, disconnects, or returns an invalid
|
|
|
71
82
|
runtime value, Elwood returns no decision to Claude and emits `hookError` to the
|
|
72
83
|
parent app.
|
|
73
84
|
|
|
85
|
+
When a `Stop` result is finalized (normal completion, timeout, or other fail-open),
|
|
86
|
+
its registered handler and hook-scoped observers of `hook`, `activity`,
|
|
87
|
+
`hookError`/`hook_error`, and `hook_observer_failed` diagnostics lose authority
|
|
88
|
+
in continuations that preserve their asynchronous execution context to admit new
|
|
89
|
+
queue-backed input to that same live session. Promise continuations and async work
|
|
90
|
+
created within the callback carry this boundary. Registering a callback on a
|
|
91
|
+
pre-existing event source does not bind that source to the Stop context; input
|
|
92
|
+
from its later independently dispatched callbacks is treated as unrelated caller
|
|
93
|
+
input.
|
|
94
|
+
Later `sendPrompt`, `sendMessage`, or `sendGuidance` calls from that context reject with
|
|
95
|
+
`wait_timeout` before image capture, attachment, or queue admission, including the
|
|
96
|
+
lazy session facade. The boundary identifies the live runtime instance, so another
|
|
97
|
+
adapter or state directory may reuse the same Elwood ID without sharing authority.
|
|
98
|
+
Already admitted input remains valid; the bridge does not wait for unawaited observers
|
|
99
|
+
or timed-out user code. Unrelated caller contexts, other sessions, non-Stop hooks,
|
|
100
|
+
raw keys, and independent non-turn controls are unaffected. Internal queue
|
|
101
|
+
notifications, loop scheduling and settlement, and persistent transcript polling
|
|
102
|
+
do not inherit this authority. This includes queue admission, cancellation, wakeup,
|
|
103
|
+
dispatch, and settlement for non-turn controls such as compaction and model
|
|
104
|
+
selection. A caller registering a Promise continuation on one of these controls
|
|
105
|
+
inside Stop still carries the original Stop boundary; internal detachment does
|
|
106
|
+
not renew that caller’s authority. Recognized malformed Stop bridge diagnostics
|
|
107
|
+
use the same exact live-instance boundary and close when synchronous diagnostic
|
|
108
|
+
delivery returns; asynchronous diagnostic continuations cannot admit late input.
|
|
109
|
+
|
|
74
110
|
Fail-open does not mean silent. `hookError` must include:
|
|
75
111
|
|
|
76
112
|
- `elwoodSessionId`
|
|
@@ -108,6 +144,38 @@ a `hookError`, matching the token-mismatch fail-open.
|
|
|
108
144
|
|
|
109
145
|
### 6.4 Typed hook responses
|
|
110
146
|
|
|
147
|
+
Observational listener failures must not prevent Claude hook dispatch, replace a
|
|
148
|
+
validated wire response or blocking decision, or skip readiness and Stop bookkeeping.
|
|
149
|
+
Hook, activity, hook-error, transcript, and lifecycle notifications are isolated at
|
|
150
|
+
the hook boundary. Each invocation emits at most one content-free
|
|
151
|
+
`hook_observer_failed` warning (§5.7), identifying the first failed phase; warning
|
|
152
|
+
observer failures are contained without recursive diagnostics (C-HOOK-22).
|
|
153
|
+
Returned native observer Promises are observed through the captured intrinsic
|
|
154
|
+
`Promise.prototype.then`, without awaiting them or reading an instance's own `then`.
|
|
155
|
+
Their rejections are contained even after the hook reply completes when their
|
|
156
|
+
constructor and `Symbol.species` support normal ECMAScript reaction attachment.
|
|
157
|
+
Listeners run in the host process, not a sandbox: nonreturning synchronous listener
|
|
158
|
+
code or Promise metadata can block the host. A constructor/species that prevents
|
|
159
|
+
native attachment leaves its rejection handling with the caller. An attachment
|
|
160
|
+
throw is reported as a notification failure, without caching an unattached Promise;
|
|
161
|
+
a subsequent notification retries attachment. Elwood neither mutates caller Promise
|
|
162
|
+
metadata nor opens a debugger session to bypass it. The first observed failure
|
|
163
|
+
selects the diagnostic phase, and late failures do not emit additional warnings.
|
|
164
|
+
Diagnostic retention is limited to the newest 1,024 pending observer registrations
|
|
165
|
+
per session emitter. When this cap is exceeded, the oldest registration is detached
|
|
166
|
+
from its invocation boundary; its eventual rejection is still consumed but no
|
|
167
|
+
longer produces a diagnostic. Repeated returns of the same pending Promise share
|
|
168
|
+
one rejection handler. Settled registrations are released immediately. Diagnostic
|
|
169
|
+
warnings are frozen before delivery, and their activity projection is captured
|
|
170
|
+
before any warning listener runs.
|
|
171
|
+
Within a hook notification scope, synchronous listener failures are captured at
|
|
172
|
+
each emission, so later derived status activity and committed transcript records
|
|
173
|
+
are still delivered. Outside this scope, ordinary synchronous emission retains
|
|
174
|
+
its existing throw-after-fan-out behavior. A hook-scoped ready-status listener
|
|
175
|
+
failure reports `hook_observer_failed`; because the ready transition completes, it
|
|
176
|
+
does not also report `initial_ready_fallback`. C-API-42 still applies to a transition
|
|
177
|
+
that actually throws outside the notification boundary.
|
|
178
|
+
|
|
111
179
|
Elwood MUST model Claude hook inputs and outputs as discriminated TypeScript
|
|
112
180
|
unions.
|
|
113
181
|
|
|
@@ -118,6 +186,53 @@ unions.
|
|
|
118
186
|
- Unknown future tools and MCP tools may use `Record<string, unknown>` or
|
|
119
187
|
`unknown` with a safe raw tool name.
|
|
120
188
|
- Hook bridge JSON must be runtime-validated before it reaches handlers.
|
|
189
|
+
The normalized, bridge-owned JSON event is deeply frozen before any observation
|
|
190
|
+
or handler dispatch. Hook observers and activity raw payloads cannot mutate
|
|
191
|
+
routing, tool inputs, response validation, or readiness/Stop bookkeeping.
|
|
192
|
+
Freezing introduces no additional input depth or size limit beyond the bridge
|
|
193
|
+
request contract.
|
|
194
|
+
- A numeric field MUST be a finite number. `NaN` and `±Infinity` are rejected at
|
|
195
|
+
ingress and in `updatedInput` rewrites, because JSON has no encoding for them
|
|
196
|
+
and `JSON.stringify` would put a `null` on the wire where the CLI's schema
|
|
197
|
+
requires a number. This applies to EVERY tool: schema-less inputs (MCP, generic,
|
|
198
|
+
and future tools) have no field table, so the rule is enforced structurally over
|
|
199
|
+
the whole value, including nested records and arrays. Traversal allows at most
|
|
200
|
+
128 edges from the input root and 100,000 value visits, counting the root,
|
|
201
|
+
primitives, and every occurrence of a shared child. Ancestor cycles are invalid;
|
|
202
|
+
repeated children on separate paths are valid within these limits. Cyclic or
|
|
203
|
+
over-limit shapes fail validation without throwing. Invalid rewrites produce the
|
|
204
|
+
existing `invalid_response` hook error and a bridge response with no decision.
|
|
205
|
+
Structural values must consist of null, strings, booleans, finite numbers,
|
|
206
|
+
arrays, and plain records (including null-prototype records). Undefined values
|
|
207
|
+
retain JavaScript JSON omission/null semantics. Bigints, functions, symbols,
|
|
208
|
+
boxed primitives, proxies, custom prototypes, callable `toJSON` hooks, and
|
|
209
|
+
enumerable accessor properties are invalid. Other non-enumerable fields are
|
|
210
|
+
ignored; validation does not invoke getters or custom serializers. Each
|
|
211
|
+
child's budget is checked before reading its property descriptor. The complete
|
|
212
|
+
response envelope independently obeys the snapshot limits below.
|
|
213
|
+
- Before result validation, Claude handler responses are copied into detached data.
|
|
214
|
+
Validation and wire serialization use that same snapshot, so later handler mutation
|
|
215
|
+
cannot replace a validated rewrite. Wire output and blocking decisions are captured
|
|
216
|
+
before result activity observers run. Only genuine Promises are awaited; direct
|
|
217
|
+
response-shaped thenables are validated as data without invoking `then`. Snapshotting reads only own enumerable data
|
|
218
|
+
properties, never invokes accessors or serializers, and rejects proxies, boxed
|
|
219
|
+
primitives, non-finite numbers, bigints, functions, symbols, custom prototypes,
|
|
220
|
+
and cycles. Null-prototype records are valid. Non-callable `toJSON` data fields
|
|
221
|
+
are ordinary data; callable or accessor-backed serializers are invalid even when
|
|
222
|
+
non-enumerable. Other non-enumerable properties are ignored as they are by JSON.
|
|
223
|
+
Undefined values and array holes retain JSON omission/null semantics. Responses
|
|
224
|
+
are limited to 128 edges on each root-to-leaf path (the root is depth zero) and
|
|
225
|
+
100,000 value visits, counting the root, undefined values, array holes, and
|
|
226
|
+
repeated occurrences of shared children. Invalid snapshots yield `invalid_response`
|
|
227
|
+
and no bridge decision (C-HOOK-21). Claude response wrappers across async dispatch
|
|
228
|
+
and the socket reply envelope do not inherit `then` or `toJSON` behavior.
|
|
229
|
+
|
|
230
|
+
Task and plan inputs follow Claude's documented native field names: `TaskGet`
|
|
231
|
+
uses `taskId`; `TaskOutput` uses `task_id`, `block`, and `timeout`; `TaskStop`
|
|
232
|
+
accepts optional `task_id` and the deprecated `shell_id`. `CronDelete` uses `id`.
|
|
233
|
+
`ExitPlanMode.allowedPrompts` contains `{ tool: "Bash", prompt: string }` objects,
|
|
234
|
+
not strings. These shapes apply to both ingress and partial input rewrites.
|
|
235
|
+
See the [Claude tool reference](https://code.claude.com/docs/en/agent-sdk/typescript#tool-input-types).
|
|
121
236
|
|
|
122
237
|
Invalid states should be unrepresentable where TypeScript can enforce that. For
|
|
123
238
|
example, a `Notification` handler should not be able to return a blocking
|
package/prd/07-claude-policy.md
CHANGED
|
@@ -13,3 +13,5 @@ complementary:
|
|
|
13
13
|
`AskUserQuestion` is explicitly in scope. Elwood must type it and allow a
|
|
14
14
|
`PreToolUse` handler to answer it programmatically by returning an allowed
|
|
15
15
|
decision with updated input containing answers.
|
|
16
|
+
|
|
17
|
+
Native unanswered `AskUserQuestion` dialogs also support the live question controls in §5.10. Caller hook decisions retain precedence; Elwood does not extend the hook deadline to await a host answer.
|
|
@@ -46,6 +46,31 @@ unions.
|
|
|
46
46
|
- Observe-only or unsupported response states must be rejected by the type system
|
|
47
47
|
and runtime validation. Parent handlers must return `undefined` for no
|
|
48
48
|
decision; an empty object is invalid and must fail open with `hookError`.
|
|
49
|
+
- Tool-keyed lookup, for both the exact tool name and the `unknown` fallback, MUST
|
|
50
|
+
consider only OWN properties of the handler map. A tool name that merely matches an
|
|
51
|
+
inherited member resolves to no handler, so a CLI-supplied name cannot reach a
|
|
52
|
+
function the caller never registered for it.
|
|
53
|
+
|
|
54
|
+
The validated Codex hook event, including nested tool input, is frozen before
|
|
55
|
+
parent observation or handler routing. A handler response is detached before
|
|
56
|
+
validation, so later mutation of the handler-owned value cannot change it.
|
|
57
|
+
Elwood fixes the validated wire reply and Stop blocking decision before result
|
|
58
|
+
activity observers run. Observer mutation cannot change policy input, the native
|
|
59
|
+
reply, or Stop readiness. Invalid response data fails open with `hookError`
|
|
60
|
+
(C-HOOK-23).
|
|
61
|
+
|
|
62
|
+
Observational hook, activity, hook-error, transcript, and lifecycle listener
|
|
63
|
+
failures must not replace Codex hook decisions or skip turn bookkeeping. Each
|
|
64
|
+
hook invocation reports at most one bounded, content-free `hook_observer_failed`
|
|
65
|
+
warning for its first failed phase. Returned native observer Promise rejections
|
|
66
|
+
are consumed without delaying the hook reply; warning delivery failures do not
|
|
67
|
+
recurse (C-HOOK-22). The same boundary covers bridge error notifications.
|
|
68
|
+
The one-shot initial-ready transition retains its separate C-API-42 fallback
|
|
69
|
+
warning and queue-release guarantee for synchronous listener throws. Returned
|
|
70
|
+
status/activity observer Promise rejections share the enclosing hook boundary
|
|
71
|
+
when readiness fires within `SessionStart`; standalone resume-composer or deadline
|
|
72
|
+
readiness instead reports `initial_ready_observer_failed`. Neither delays
|
|
73
|
+
readiness or the hook reply.
|
|
49
74
|
|
|
50
75
|
Decision note: Codex `PreToolUse` and `PermissionRequest` both produce
|
|
51
76
|
event-specific JSON under `hookSpecificOutput`, but they do not use the same
|
|
@@ -74,3 +99,68 @@ Elwood must document this limitation and provide a live-only transcript
|
|
|
74
99
|
observation event. The event may summarize transcript item kind, label, and text,
|
|
75
100
|
and may include the raw item for immediate in-memory rendering. Elwood must not
|
|
76
101
|
persist raw transcript items or derived prompt/tool content in Elwood state.
|
|
102
|
+
|
|
103
|
+
Committed assistant commentary is normalized as `assistant_progress` under
|
|
104
|
+
§5.4, separately from final `assistant_message` activity. The transcript summary
|
|
105
|
+
uses `kind: "commentary"`, `label: "assistant"`, and readable `text` for the
|
|
106
|
+
canonical response item, including array-form `output_text` content. Progress
|
|
107
|
+
does not establish readiness or complete a caller's turn.
|
|
108
|
+
|
|
109
|
+
The finalized-Stop input boundary in §6.3 also applies to Codex: late registered
|
|
110
|
+
Stop-handler and hook-scoped observer continuations that preserve their async
|
|
111
|
+
execution context cannot admit new queue-backed input to the same live runtime
|
|
112
|
+
instance after the result is finalized.
|
|
113
|
+
Independent callbacks dispatched by pre-existing event sources, internal queue
|
|
114
|
+
and loop work, and persistent transcript polling remain outside that short-lived
|
|
115
|
+
authority.
|
|
116
|
+
|
|
117
|
+
### 7A.5 Native questions
|
|
118
|
+
|
|
119
|
+
The shared question controls in §5.10 support current Codex `request_user_input`
|
|
120
|
+
and `request_user_input_async` terminal editors. Committed function-call arguments
|
|
121
|
+
provide complete metadata; a matching native editor or queued-question badge is
|
|
122
|
+
required before publishing an actionable request. Rejected calls and historical
|
|
123
|
+
transcript content never create requests. Mirrors retain the original identities.
|
|
124
|
+
|
|
125
|
+
`request_user_input` publishes one grouped blocking request with ordered prompts,
|
|
126
|
+
headers, choices and descriptions. The captured native tool requires nonempty
|
|
127
|
+
choices, adds the real selectable `None of the above` option, and accepts optional
|
|
128
|
+
notes alongside a selected choice. Elwood exposes that native option with its own
|
|
129
|
+
opaque option ID; it may be chosen without notes. Text alone selects that native
|
|
130
|
+
alternative and adds the text as notes. Elwood supports these pages through the native
|
|
131
|
+
editor, preserving the group until the matching committed tool result confirms
|
|
132
|
+
acceptance. Unsupported secret or changed layouts receive no speculative input.
|
|
133
|
+
Every question must omit `isSecret` or set it to boolean `false`; `true` and
|
|
134
|
+
malformed supplied values reject the complete native request before publication.
|
|
135
|
+
|
|
136
|
+
Each asynchronous question is an independent queued request, with its own
|
|
137
|
+
acceptance unit. Suggested choices use the first 32 native choices, then omit labels exceeding
|
|
138
|
+
512 UTF-8 bytes without filling those gaps from later choices. Free text is
|
|
139
|
+
available instead of a suggestion. Native question-bearing
|
|
140
|
+
async messages remain question metadata even when their phase is `final_answer`;
|
|
141
|
+
they never become final assistant activity. Answering opens the confirmed native
|
|
142
|
+
editor and uses its question-answer route, preserving other pending questions.
|
|
143
|
+
Ordinary composer submission must remain held because it clears queued questions.
|
|
144
|
+
|
|
145
|
+
Committed native reply envelopes close matching queued requests as answered.
|
|
146
|
+
Conclusive local removal closes them as unavailable when no answer is confirmed;
|
|
147
|
+
live turn completion/interruption/failure also retires remaining requests. Badge
|
|
148
|
+
redraws and countdowns do not invent an expiry deadline. Availability is live-only
|
|
149
|
+
and independent of whether Codex continues working. A blocking modal contributes
|
|
150
|
+
the existing blocked state; the queued editor does not manufacture a turn boundary.
|
|
151
|
+
|
|
152
|
+
Question automation retains at most 256 pending native acceptance units and
|
|
153
|
+
1 MiB of aggregate UTF-8 candidate metadata, including native identities and
|
|
154
|
+
serialized question definitions. Each individual call is also limited to 256
|
|
155
|
+
question definitions and 1 MiB of UTF-8 input metadata before normalization.
|
|
156
|
+
Retired native identities are retained for replay suppression up to 4,096 keys
|
|
157
|
+
and 1 MiB of UTF-8 key data. Exceeding any limit closes exposed requests as
|
|
158
|
+
`unavailable`, clears retained candidate/identity state, and disables question
|
|
159
|
+
automation for the remainder of that session; it never evicts a tombstone and
|
|
160
|
+
then republishes an old request. Raw human input remains available. Ordinary
|
|
161
|
+
input remains held for unknown native identities until explicit native turn end;
|
|
162
|
+
raw human terminal input remains available. A matching supported editor can still
|
|
163
|
+
publish recognized requests. One content-free `question_automation_disabled`
|
|
164
|
+
warning and normalized warning activity diagnose budget disablement. Overflow does not
|
|
165
|
+
invent an answer, expiry deadline, or turn boundary. Unchanged native redraws
|
|
166
|
+
must not republish unchanged candidates or repeatedly copy the request registry.
|
package/prd/08-state.md
CHANGED
|
@@ -43,15 +43,53 @@ reused; the socket path is a per-launch runtime value, embedded only in the gene
|
|
|
43
43
|
private bridge script and never in the session record, so a
|
|
44
44
|
recorded socket path can never be trusted. `teardown` removes the whole socket
|
|
45
45
|
home (every launch's socket) along with the session directory, so no per-launch
|
|
46
|
-
socket can leak undiscoverably across restart/resume cycles.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
socket file, so an overlapping failed launch never disturbs a live one. `stateDir`
|
|
46
|
+
socket can leak undiscoverably across restart/resume cycles. Across separate Elwood
|
|
47
|
+
processes, running two live sessions with the same full identity (`stateDir`,
|
|
48
|
+
adapter, and session id) is unsupported: the processes share files and socket
|
|
49
|
+
homes without a cross-process ownership protocol. Within one process, overlapping
|
|
50
|
+
resume and cleanup follow the successor protocol below. A failed start removes
|
|
51
|
+
only its own socket file, preserving any overlapping launch. `stateDir`
|
|
53
52
|
length MUST NOT constrain whether a session can start.
|
|
54
53
|
|
|
54
|
+
Within one Elwood process, a validated resume attempt revokes the prior launch's
|
|
55
|
+
shared-state ownership before asynchronous preflight. A superseded launch may
|
|
56
|
+
finish its own runtime cleanup, but cannot overwrite loop definitions or remove
|
|
57
|
+
the shared session directory or socket home. Each loop persistence write and
|
|
58
|
+
destructive path removal checks the current launch generation at the mutation itself,
|
|
59
|
+
including after awaited shutdown work and on repeated shutdown calls. Until resume
|
|
60
|
+
succeeds, the prior launch may continue ordinary loop and record persistence, but its shutdown
|
|
61
|
+
cannot clear shared loops or files. Its `kill` or `teardown` still stops its own runtime,
|
|
62
|
+
but waits for the pending reservation to settle before deciding shared cleanup: a
|
|
63
|
+
committed successor keeps its state, while a failed successor permits the predecessor
|
|
64
|
+
to finish the requested cleanup before its shutdown promise resolves. A pending
|
|
65
|
+
successor does not activate loop timers. Successful activation rereads the latest
|
|
66
|
+
durable loop definitions and revokes prior scheduling in the same synchronous commit,
|
|
67
|
+
so a successful predecessor cancellation or creation is preserved. An activation
|
|
68
|
+
read failure stops the built launch before ownership rolls back. If resume fails,
|
|
69
|
+
ownership returns to the prior
|
|
70
|
+
viable launch only when no newer reservation or launch has replaced that attempt.
|
|
71
|
+
A failed overlapping launch therefore preserves the original live launch's cleanup
|
|
72
|
+
and persistence behavior. This is an
|
|
73
|
+
in-process successor guarantee, not cross-process launch serialization. Allowed root-owned filesystem
|
|
74
|
+
aliases use one canonical, validated state identity for launch ownership, runtime
|
|
75
|
+
paths, and socket homes; no-follow validation precedes canonicalization. Startup
|
|
76
|
+
publication of session records is generation-owned. Bridge scripts and generated
|
|
77
|
+
settings instead use fresh per-launch filenames permanently bound to that launch's
|
|
78
|
+
PTY. Pending or committed successors never redirect a predecessor's hook policy. A failed
|
|
79
|
+
attempt restores each prior file only while it still owns the reservation and the
|
|
80
|
+
file still contains that attempt's exact published bytes. A newer predecessor
|
|
81
|
+
record update or newer generation is preserved. If a predecessor updates a file
|
|
82
|
+
between two pending-launch writes, that external version becomes the rollback
|
|
83
|
+
baseline for the later write. Pending-launch hook record writes participate in the
|
|
84
|
+
same transaction. Superseded or failed generations cannot publish metadata.
|
|
85
|
+
A rollback failure is reported as
|
|
86
|
+
`state_corrupt`, not as a successful restoration. Rollback attempts every independent
|
|
87
|
+
file restoration, settles the failed reservation and restores the prior viable owner
|
|
88
|
+
even when one restoration fails. Failed entries remain eligible for an exact-byte
|
|
89
|
+
retry only while no newer generation has replaced that restored owner. Rollback
|
|
90
|
+
unlinks are fsync-backed like other state changes. Identity-only CLI cleanup removes
|
|
91
|
+
state only when no same-process live launch or pending reservation owns it.
|
|
92
|
+
|
|
55
93
|
### 8.2 Session record
|
|
56
94
|
|
|
57
95
|
The schema-version-1 core session record persists only the minimum needed to
|
|
@@ -74,9 +112,10 @@ bridge scripts contain the fresh IPC token and socket path in owner-only files.
|
|
|
74
112
|
Nothing else is persisted in the core record. In particular it MUST NOT persist session status,
|
|
75
113
|
timestamps, warnings, terminal size, the hook bridge
|
|
76
114
|
authentication token, the socket path, or any Elwood-owned runtime file paths.
|
|
77
|
-
Status and warnings are live-only (§5.7). Runtime
|
|
78
|
-
the
|
|
79
|
-
|
|
115
|
+
Status and warnings are live-only (§5.7). Runtime artifacts use fresh launch
|
|
116
|
+
identifiers beneath the validated session directory and are never read from a stored record. Their filenames remain fixed for
|
|
117
|
+
the owning PTY's lifetime, including while a later launch is pending. The socket
|
|
118
|
+
HOME is a deterministic function of that same identity (a
|
|
80
119
|
bounded fingerprint, §8.1), so every launch resolves the same one without storing
|
|
81
120
|
it. The bridge authentication token and the socket FILE inside that home are minted
|
|
82
121
|
FRESH on every start and resume and never trusted from disk — a recorded token or
|
|
@@ -125,3 +164,5 @@ ordinary session record; a later resume has no loops.
|
|
|
125
164
|
metadata, generated settings/config, bridge route records, sockets, and
|
|
126
165
|
temporary files. It must not remove agent-owned global transcripts/auth state or
|
|
127
166
|
project/user settings that Elwood did not create.
|
|
167
|
+
|
|
168
|
+
Native question requests, opaque IDs and answers are live-only (§5.10); none is added to Elwood persistence.
|
package/prd/09-lifecycle.md
CHANGED
|
@@ -27,6 +27,13 @@
|
|
|
27
27
|
session env.
|
|
28
28
|
9. Return a `CodexSessionApi` object once the process and bridge are ready.
|
|
29
29
|
|
|
30
|
+
Both adapters inspect received PTY output during the bounded startup health check,
|
|
31
|
+
independently of terminal rendering. The collector retains at most the first
|
|
32
|
+
64 KiB of UTF-8 output, ending on a complete code point. If a chunk exceeds the
|
|
33
|
+
remaining budget, its remainder and all subsequent chunks are discarded; later
|
|
34
|
+
output cannot fill a gap in that prefix. The collector releases its retained
|
|
35
|
+
output after the check succeeds or fails.
|
|
36
|
+
|
|
30
37
|
### 9.2 Compatibility checks
|
|
31
38
|
|
|
32
39
|
Elwood MUST check the installed Claude Code version during startup. The minimum
|
|
@@ -80,11 +87,48 @@ a second update. This mutual exclusion also applies across separate Elwood paren
|
|
|
80
87
|
processes for the same macOS user and adapter: an atomic lease names the adapter in
|
|
81
88
|
a stable per-account cache independent of `TMPDIR`; contenders wait without
|
|
82
89
|
blocking the event loop, then invalidate their local caches and continue without
|
|
83
|
-
running a duplicate update.
|
|
90
|
+
running a duplicate update. Contender waiting is bounded to 60 seconds; an owner
|
|
91
|
+
that has not finished by then causes the contender to skip its update and warn,
|
|
92
|
+
without deleting the owner's lease. This warning uses `errorCode: "update_active"`
|
|
93
|
+
and a canonical message explaining that the update was skipped because another
|
|
94
|
+
updater is still active; no local update command ran, so it carries no exit status
|
|
95
|
+
or stderr. The lease records the owner's process id and a unique
|
|
84
96
|
generation. Cleanup removes only the generation it owns, a live owner is never
|
|
85
97
|
evicted solely because the stale bound elapsed, and recovery of a dead owner's
|
|
86
98
|
lease is itself serialized before removal, so neither cleanup nor concurrent stale
|
|
87
|
-
recovery can evict a successor.
|
|
99
|
+
recovery can evict a successor. The lease is published atomically: a claimant writes
|
|
100
|
+
its owner record inside a private staging directory and renames that directory into
|
|
101
|
+
place, so a lease either does not exist or holds a complete owner record: no
|
|
102
|
+
ownerless or partially written lease is ever published. A claimant interrupted
|
|
103
|
+
before the rename leaves only its staging directory; one interrupted after it leaves
|
|
104
|
+
a complete lease naming a dead owner, which ordinary stale recovery removes. Release is
|
|
105
|
+
atomic in the same way: the owner renames its lease away and then deletes it, so a
|
|
106
|
+
contender polling during release sees a whole lease or none, never an ownerless one
|
|
107
|
+
it would recover as stale and follow with a duplicate update. A release that cannot rename
|
|
108
|
+
at all still removes the lease where it stands rather than leaving it: its owner is alive,
|
|
109
|
+
so a lease left behind would make every later updater on that host wait forever on a process
|
|
110
|
+
that has already finished updating. Each lease holder removes
|
|
111
|
+
a bounded number of that adapter's leftovers, of both kinds — staging left by an
|
|
112
|
+
interrupted claimant and retired directories left by a release that renamed but did not
|
|
113
|
+
delete — under one shared budget, so later holders finish whatever one holder leaves. An update whose aborted probe reports a process group it could not confirm gone
|
|
114
|
+
(the typed update error's `cleanupProcessGroupId` detail) does not simply release its
|
|
115
|
+
lease. Elwood observes that group for up to one additional second without signaling
|
|
116
|
+
it; a group that exits within the window is not retained. A group still live is
|
|
117
|
+
recorded on the lease as its only holder, so the lease outlives the parent process:
|
|
118
|
+
contenders skip their update immediately with the `update_active` warning and a
|
|
119
|
+
message saying another updater's process group has not exited, rather than waiting
|
|
120
|
+
or starting a competing installer. Recovery removes this guard only after confirming
|
|
121
|
+
every recorded group has exited; elapsed time or the parent's death alone is
|
|
122
|
+
insufficient, and once the groups are gone the lease is recoverable whatever its age.
|
|
123
|
+
If the group record cannot be written, the owner process keeps the obligation itself:
|
|
124
|
+
it retries the record on an unreferenced timer and releases the lease as soon as the
|
|
125
|
+
groups have exited, so a failed write never holds exclusion for the owner's lifetime.
|
|
126
|
+
A lease directory that already exists, even one without an
|
|
127
|
+
owner record, is a wait condition: it is recovered as stale rather than claimed
|
|
128
|
+
over. An unreadable owner record still fails safe: it may belong
|
|
129
|
+
to a live updater writing a record format this version cannot read, so it is never
|
|
130
|
+
treated as dead. That is why a claim must not be able to publish one.
|
|
131
|
+
Within one parent process, a FAILED shared update
|
|
88
132
|
is likewise shared once — every concurrent caller observes the same failure,
|
|
89
133
|
re-reads the installed version, and proceeds through the compatibility gate; the
|
|
90
134
|
failure is never cached in a way that rejects those callers or poisons a later
|
|
@@ -98,7 +142,25 @@ failure.
|
|
|
98
142
|
Each probe is bounded so a broken or hostile CLI on PATH cannot hang or flood
|
|
99
143
|
the host: a probe that does not exit within a default timeout (15 seconds) or
|
|
100
144
|
whose captured output exceeds a per-stream byte cap (1,000,000 bytes) is
|
|
101
|
-
killed, and its captured output is truncated to the cap.
|
|
145
|
+
killed, and its captured output is truncated to the cap. Abort cleanup has an
|
|
146
|
+
additional one-second bound: an aborted probe retries process-group termination,
|
|
147
|
+
falls back to terminating the direct child once group signals have kept failing,
|
|
148
|
+
and awaits exit within that window. A process-group id is signaled only while the
|
|
149
|
+
probe's direct child (the group leader) is still unreaped, because only then is
|
|
150
|
+
the number guaranteed not to have been reissued to an unrelated group; afterwards
|
|
151
|
+
Elwood only observes the group until it exits and never signals the bare number.
|
|
152
|
+
Cleanup that is confirmed within the window reports no cleanup error; the group is
|
|
153
|
+
observed once more when the window ends, and the window is measured on a monotonic
|
|
154
|
+
clock. Unconfirmed cleanup adds two details to the probe's typed error: the
|
|
155
|
+
allowlisted `cleanupErrorCode`, and `cleanupProcessGroupId`, which is diagnostic
|
|
156
|
+
only — the id may already have been reissued to an unrelated group, so a consumer
|
|
157
|
+
must never signal it. Every
|
|
158
|
+
unresolved aborted probe, including version
|
|
159
|
+
and capability probes, remains owned by an asynchronous reaper while the parent
|
|
160
|
+
is alive. Retries use an unreferenced timer, do not prolong host shutdown, and
|
|
161
|
+
stop signaling after a successful group kill; ownership ends when the group is
|
|
162
|
+
confirmed gone. A retained reaper holds process-liveness state only; the probe's
|
|
163
|
+
captured output is released once its result is delivered. Truncation happens on
|
|
102
164
|
a UTF-8 code-point boundary — an incomplete trailing sequence is dropped — so
|
|
103
165
|
the decoded output re-encodes to at most the cap rather than growing via a
|
|
104
166
|
replacement character. This applies to every
|
|
@@ -191,6 +253,20 @@ generated files, including loop definitions, unless kill or teardown is
|
|
|
191
253
|
requested. Any unsubmitted due state is discarded. (Session status is live-only and is
|
|
192
254
|
not written to the record, §8.2.)
|
|
193
255
|
|
|
256
|
+
A resume started by an exit listener supersedes the old launch's shared-state
|
|
257
|
+
ownership (§8.1). Deferred or repeated teardown of that old object still cleans its
|
|
258
|
+
own resources, but cannot clear the successor's loops or remove its files/socket.
|
|
259
|
+
|
|
260
|
+
Runtime cleanup first allows received terminal output to render, then disposes
|
|
261
|
+
the renderer (C-LIFE-12). The drain covers output that arrives while it is in
|
|
262
|
+
progress: it ends only when a whole settle pass completes with nothing new
|
|
263
|
+
received from the PTY, and the entire drain shares one one-second budget. It does
|
|
264
|
+
not delay the native process-exit notification, terminal status, or unconditional
|
|
265
|
+
process-group reap; the final `terminal:data` tail may therefore arrive after
|
|
266
|
+
`terminal:exit`. A stalled renderer, or a PTY that never goes quiet, is disposed
|
|
267
|
+
when the budget expires. Explicit direct `terminal.dispose()` does not wait for
|
|
268
|
+
pending output.
|
|
269
|
+
|
|
194
270
|
Reaping the leader's process group is unconditional on every exit path
|
|
195
271
|
(C-LIFE-10). On an unsolicited PTY exit the terminal status is submitted first,
|
|
196
272
|
then the group is reaped in a `finally`, so transcript-drain, warning-emission, or
|
package/prd/10-errors.md
CHANGED
|
@@ -28,6 +28,7 @@ Initial required error names:
|
|
|
28
28
|
| `resume_unavailable` | A resume request cannot be completed from available session metadata. |
|
|
29
29
|
| `pty_start_failed` | PTY or shell startup failed. |
|
|
30
30
|
| `hook_bridge_failed` | The hook bridge or IPC endpoint could not be initialized. |
|
|
31
|
+
| `input_queue_full` | A live session control queue would exceed 1,024 outstanding operations or 8 MiB aggregate UTF-8 input text; no input or attachment is performed for the rejected operation. |
|
|
31
32
|
| `session_not_running` | Operation requires a running process but the session is stopped. |
|
|
32
33
|
| `termination_failed` | A stop/kill request did not observe process exit after escalation, or the PTY exited but its process group could not be confirmed reaped. |
|
|
33
34
|
| `teardown_failed` | Elwood could not remove all owned session files. |
|
|
@@ -37,8 +38,8 @@ Initial required error names:
|
|
|
37
38
|
| `login_failed` | The interactive `/login` re-authentication flow reported an explicit failure or an invalid authorization code. |
|
|
38
39
|
| `login_timeout` | The interactive `/login` re-authentication flow did not report success before the timeout. |
|
|
39
40
|
| `invalid_image` | An `images` input is not attachable: an unsupported/absent byte format, empty bytes, a path that is not a readable file, or a total image count/size beyond the documented limits (C-API-44). Raised before any partial input reaches the composer. |
|
|
40
|
-
| `image_attach_failed` | An image could not be confirmed attached: the CLI's `[Image #N]` chip did not appear before the confirmation timeout,
|
|
41
|
-
| `wait_timeout` | A `waitForStatus`/`waitForActivity` call did not observe its condition before the timeout. |
|
|
41
|
+
| `image_attach_failed` | An image could not be confirmed attached: the CLI's `[Image #N]` chip did not appear before the confirmation timeout, the OS clipboard could not be read/written, or terminal rendering permanently failed. No text is submitted afterward. (A session that TERMINATES mid-attach rejects with `session_not_running`, like any queued op.) (C-API-44/45/46) |
|
|
42
|
+
| `wait_timeout` | A `waitForStatus`/`waitForActivity` call did not observe its condition before the timeout, the PTY rejected a staged-draft cleanup write before successor input, or raw input replaced an initial/replay ergonomic submission awaiting empty-input confirmation (§5.3). The same code rejects queue-backed input admitted from an expired Stop callback/observer context (§6.3), before terminal-state checks even after teardown. Cleanup failures retain the pending draft and use a bounded message without raw PTY diagnostics. |
|
|
42
43
|
| `invalid_loop` | A loop request or recognized `/loop` command violates the documented shape, interval, or UTF-8 message bounds. |
|
|
43
44
|
| `loop_limit_reached` | Creating a loop would exceed 50 unexpired definitions; existing loops are unchanged. |
|
|
44
45
|
| `loop_not_found` | Cancellation targeted an unknown or already-finished loop ID. |
|
|
@@ -53,3 +54,9 @@ Startup errors MUST NOT swallow their underlying cause: `pty_start_failed`,
|
|
|
53
54
|
message in `details.cause`, plus `errno`, `syscall`, and `path` fields when
|
|
54
55
|
the underlying error exposes them, so consumers can diagnose environment
|
|
55
56
|
failures without instrumenting Elwood internals.
|
|
57
|
+
|
|
58
|
+
Native question controls add `question_not_found` (no current request with this live ID), `invalid_question_answer` (invalid complete answer batch or timeout option), and `question_answer_failed` (busy, revoked, unsupported or unacknowledged native input). Messages and details do not echo answer text.
|
|
59
|
+
|
|
60
|
+
Native question answer failures may include only the fixed `details.category` values
|
|
61
|
+
`frame_wait`, `adapter`, `terminal_write`, `native_acceptance`, or `aborted`
|
|
62
|
+
(§5.10). Raw native exceptions and submitted answer values are never retained.
|