@sagmans/dsh-tui 0.12.1 → 0.14.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/.agents/skills/dsh-tui-dogfood/SKILL.md +18 -2
- package/.agents/skills/dsh-tui-dogfood/references/home-state.md +4 -4
- package/.agents/skills/dsh-tui-dogfood/scripts/clone-links.mjs +19 -11
- package/.agents/skills/dsh-tui-dogfood/scripts/run-plugin-from-worktree.sh +31 -9
- package/.agents/skills/dsh-tui-update-models/SKILL.md +1 -1
- package/.agents/skills/dsh-tui-update-models/references/model-wiring.md +6 -6
- package/.agents/skills/dsh-tui-update-models/scripts/dump-model-catalog.mjs +21 -13
- package/README.md +61 -23
- package/cordis.patch.yml +2 -0
- package/lib/agent/fork.d.ts +3 -1
- package/lib/agent/fork.d.ts.map +1 -1
- package/lib/agent/fork.js +2 -0
- package/lib/agent/fork.js.map +1 -1
- package/lib/agent/history.d.ts +14 -22
- package/lib/agent/history.d.ts.map +1 -1
- package/lib/agent/history.js +20 -14
- package/lib/agent/history.js.map +1 -1
- package/lib/agent/host.d.ts.map +1 -1
- package/lib/agent/host.js +6 -0
- package/lib/agent/host.js.map +1 -1
- package/lib/agent/model.d.ts +10 -8
- package/lib/agent/model.d.ts.map +1 -1
- package/lib/agent/model.js +9 -7
- package/lib/agent/model.js.map +1 -1
- package/lib/agent/present.d.ts +1 -1
- package/lib/agent/present.d.ts.map +1 -1
- package/lib/agent/present.js +1 -1
- package/lib/agent/present.js.map +1 -1
- package/lib/agent/presets.d.ts +4 -1
- package/lib/agent/presets.d.ts.map +1 -1
- package/lib/agent/presets.js +9 -2
- package/lib/agent/presets.js.map +1 -1
- package/lib/agent/projections.d.ts +8 -2
- package/lib/agent/projections.d.ts.map +1 -1
- package/lib/agent/projections.js +8 -2
- package/lib/agent/projections.js.map +1 -1
- package/lib/agent/prompt-history.d.ts +8 -48
- package/lib/agent/prompt-history.d.ts.map +1 -1
- package/lib/agent/prompt-history.js +34 -15
- package/lib/agent/prompt-history.js.map +1 -1
- package/lib/agent/status.d.ts +9 -24
- package/lib/agent/status.d.ts.map +1 -1
- package/lib/agent/status.js +7 -2
- package/lib/agent/status.js.map +1 -1
- package/lib/agent/undo.d.ts +2 -4
- package/lib/agent/undo.d.ts.map +1 -1
- package/lib/agent/undo.js +10 -5
- package/lib/agent/undo.js.map +1 -1
- package/lib/cards/composition.d.ts +7 -7
- package/lib/cards/composition.d.ts.map +1 -1
- package/lib/cards/composition.js +13 -12
- package/lib/cards/composition.js.map +1 -1
- package/lib/cards/presenter.d.ts +11 -14
- package/lib/cards/presenter.d.ts.map +1 -1
- package/lib/cards/presenter.js +40 -19
- package/lib/cards/presenter.js.map +1 -1
- package/lib/cards/preview.d.ts.map +1 -1
- package/lib/cards/preview.js +5 -1
- package/lib/cards/preview.js.map +1 -1
- package/lib/cards.d.ts +17 -23
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +27 -12
- package/lib/cards.js.map +1 -1
- package/lib/compat/probe.d.ts +2 -5
- package/lib/compat/probe.d.ts.map +1 -1
- package/lib/compat/probe.js +2 -2
- package/lib/compat/probe.js.map +1 -1
- package/lib/compat/section.d.ts +5 -4
- package/lib/compat/section.d.ts.map +1 -1
- package/lib/compat/section.js +4 -0
- package/lib/compat/section.js.map +1 -1
- package/lib/config.d.ts +0 -3
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +7 -1
- package/lib/config.js.map +1 -1
- package/lib/export.d.ts +5 -7
- package/lib/export.d.ts.map +1 -1
- package/lib/export.js +48 -10
- package/lib/export.js.map +1 -1
- package/lib/fold-cursor.d.ts +3 -3
- package/lib/fold-cursor.d.ts.map +1 -1
- package/lib/fold-cursor.js +5 -3
- package/lib/fold-cursor.js.map +1 -1
- package/lib/gates/question-card.d.ts +3 -38
- package/lib/gates/question-card.d.ts.map +1 -1
- package/lib/gates/question-card.js +13 -10
- package/lib/gates/question-card.js.map +1 -1
- package/lib/gates/questions.d.ts +14 -8
- package/lib/gates/questions.d.ts.map +1 -1
- package/lib/gates/questions.js +25 -18
- package/lib/gates/questions.js.map +1 -1
- package/lib/gates.d.ts +17 -25
- package/lib/gates.d.ts.map +1 -1
- package/lib/gates.js +2 -4
- package/lib/gates.js.map +1 -1
- package/lib/herdr/client.d.ts +10 -12
- package/lib/herdr/client.d.ts.map +1 -1
- package/lib/herdr/client.js +9 -8
- package/lib/herdr/client.js.map +1 -1
- package/lib/herdr/constants.d.ts +3 -2
- package/lib/herdr/constants.d.ts.map +1 -1
- package/lib/herdr/constants.js +3 -2
- package/lib/herdr/constants.js.map +1 -1
- package/lib/herdr/reporter.d.ts +4 -39
- package/lib/herdr/reporter.d.ts.map +1 -1
- package/lib/herdr/reporter.js +13 -19
- package/lib/herdr/reporter.js.map +1 -1
- package/lib/herdr/state.d.ts +4 -3
- package/lib/herdr/state.d.ts.map +1 -1
- package/lib/herdr/state.js +6 -5
- package/lib/herdr/state.js.map +1 -1
- package/lib/host/preset-files.d.ts +0 -17
- package/lib/host/preset-files.d.ts.map +1 -1
- package/lib/host/preset-files.js +7 -2
- package/lib/host/preset-files.js.map +1 -1
- package/lib/host/roster.d.ts +1 -1
- package/lib/host/roster.d.ts.map +1 -1
- package/lib/host/roster.js +3 -3
- package/lib/host/roster.js.map +1 -1
- package/lib/host/runner.d.ts +2 -5
- package/lib/host/runner.d.ts.map +1 -1
- package/lib/host/runner.js +2 -5
- package/lib/host/runner.js.map +1 -1
- package/lib/identity.d.ts +6 -3
- package/lib/identity.d.ts.map +1 -1
- package/lib/identity.js +18 -3
- package/lib/identity.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +42 -14
- package/lib/index.js.map +1 -1
- package/lib/injection.d.ts.map +1 -1
- package/lib/injection.js +1 -0
- package/lib/injection.js.map +1 -1
- package/lib/input/action-catalog.d.ts.map +1 -1
- package/lib/input/action-catalog.js +4 -0
- package/lib/input/action-catalog.js.map +1 -1
- package/lib/input/actions.d.ts +4 -3
- package/lib/input/actions.d.ts.map +1 -1
- package/lib/input/actions.js +8 -3
- package/lib/input/actions.js.map +1 -1
- package/lib/input/completion.d.ts +3 -11
- package/lib/input/completion.d.ts.map +1 -1
- package/lib/input/completion.js +8 -6
- package/lib/input/completion.js.map +1 -1
- package/lib/input/file-index.d.ts +1 -12
- package/lib/input/file-index.d.ts.map +1 -1
- package/lib/input/file-index.js +21 -17
- package/lib/input/file-index.js.map +1 -1
- package/lib/input/file-search.d.ts +6 -3
- package/lib/input/file-search.d.ts.map +1 -1
- package/lib/input/file-search.js +29 -10
- package/lib/input/file-search.js.map +1 -1
- package/lib/input/fuzzy.d.ts +6 -12
- package/lib/input/fuzzy.d.ts.map +1 -1
- package/lib/input/fuzzy.js +18 -27
- package/lib/input/fuzzy.js.map +1 -1
- package/lib/input/ghost.d.ts +5 -5
- package/lib/input/ghost.d.ts.map +1 -1
- package/lib/input/ghost.js +4 -3
- package/lib/input/ghost.js.map +1 -1
- package/lib/input/key-press.d.ts +8 -7
- package/lib/input/key-press.d.ts.map +1 -1
- package/lib/input/key-press.js +8 -6
- package/lib/input/key-press.js.map +1 -1
- package/lib/input/keymap-conflicts.d.ts +6 -6
- package/lib/input/keymap-conflicts.d.ts.map +1 -1
- package/lib/input/keymap-conflicts.js +6 -6
- package/lib/input/keymap-conflicts.js.map +1 -1
- package/lib/input/keymap.d.ts +6 -18
- package/lib/input/keymap.d.ts.map +1 -1
- package/lib/input/keymap.js +7 -10
- package/lib/input/keymap.js.map +1 -1
- package/lib/input/match.js +4 -4
- package/lib/input/match.js.map +1 -1
- package/lib/input/submission.d.ts +7 -3
- package/lib/input/submission.d.ts.map +1 -1
- package/lib/input/submission.js +2 -2
- package/lib/input/submission.js.map +1 -1
- package/lib/input/workspace-files.d.ts +1 -2
- package/lib/input/workspace-files.d.ts.map +1 -1
- package/lib/input/workspace-files.js +20 -11
- package/lib/input/workspace-files.js.map +1 -1
- package/lib/input.d.ts +6 -0
- package/lib/input.d.ts.map +1 -1
- package/lib/input.js +34 -1
- package/lib/input.js.map +1 -1
- package/lib/install-skills.d.ts +5 -22
- package/lib/install-skills.d.ts.map +1 -1
- package/lib/install-skills.js +18 -18
- package/lib/install-skills.js.map +1 -1
- package/lib/jobs.d.ts +10 -5
- package/lib/jobs.d.ts.map +1 -1
- package/lib/jobs.js +39 -13
- package/lib/jobs.js.map +1 -1
- package/lib/keymaps.d.ts.map +1 -1
- package/lib/keymaps.js +2 -0
- package/lib/keymaps.js.map +1 -1
- package/lib/keys-command.d.ts +1 -1
- package/lib/keys-command.d.ts.map +1 -1
- package/lib/model-list.d.ts +0 -27
- package/lib/model-list.d.ts.map +1 -1
- package/lib/model-list.js +1 -1
- package/lib/model-list.js.map +1 -1
- package/lib/moshi.d.ts +13 -0
- package/lib/moshi.d.ts.map +1 -0
- package/lib/moshi.js +130 -0
- package/lib/moshi.js.map +1 -0
- package/lib/spacing.d.ts +0 -7
- package/lib/spacing.d.ts.map +1 -1
- package/lib/spacing.js +1 -1
- package/lib/spacing.js.map +1 -1
- package/lib/startup.d.ts +1 -1
- package/lib/startup.d.ts.map +1 -1
- package/lib/startup.js +9 -1
- package/lib/startup.js.map +1 -1
- package/lib/stash/lock.d.ts +1 -37
- package/lib/stash/lock.d.ts.map +1 -1
- package/lib/stash/lock.js +41 -35
- package/lib/stash/lock.js.map +1 -1
- package/lib/stash/paths.d.ts +8 -7
- package/lib/stash/paths.d.ts.map +1 -1
- package/lib/stash/paths.js +21 -17
- package/lib/stash/paths.js.map +1 -1
- package/lib/stash/private-fs.d.ts +14 -5
- package/lib/stash/private-fs.d.ts.map +1 -1
- package/lib/stash/private-fs.js +30 -8
- package/lib/stash/private-fs.js.map +1 -1
- package/lib/stash/schema.d.ts +3 -6
- package/lib/stash/schema.d.ts.map +1 -1
- package/lib/stash/schema.js +11 -9
- package/lib/stash/schema.js.map +1 -1
- package/lib/stash/store.d.ts +9 -40
- package/lib/stash/store.d.ts.map +1 -1
- package/lib/stash/store.js +26 -24
- package/lib/stash/store.js.map +1 -1
- package/lib/stash.d.ts +7 -11
- package/lib/stash.d.ts.map +1 -1
- package/lib/stash.js +18 -11
- package/lib/stash.js.map +1 -1
- package/lib/subagents.d.ts +9 -9
- package/lib/subagents.d.ts.map +1 -1
- package/lib/subagents.js +19 -18
- package/lib/subagents.js.map +1 -1
- package/lib/surface/appearance-preferences.d.ts.map +1 -1
- package/lib/surface/appearance-preferences.js +7 -0
- package/lib/surface/appearance-preferences.js.map +1 -1
- package/lib/surface/appearance.d.ts.map +1 -1
- package/lib/surface/appearance.js +7 -2
- package/lib/surface/appearance.js.map +1 -1
- package/lib/surface/background-work.d.ts +2 -0
- package/lib/surface/background-work.d.ts.map +1 -1
- package/lib/surface/background-work.js +45 -36
- package/lib/surface/background-work.js.map +1 -1
- package/lib/surface/commands.d.ts.map +1 -1
- package/lib/surface/commands.js +17 -9
- package/lib/surface/commands.js.map +1 -1
- package/lib/surface/modal-input.d.ts +4 -0
- package/lib/surface/modal-input.d.ts.map +1 -1
- package/lib/surface/modal-input.js +81 -46
- package/lib/surface/modal-input.js.map +1 -1
- package/lib/surface/model-choice.d.ts.map +1 -1
- package/lib/surface/model-choice.js +10 -8
- package/lib/surface/model-choice.js.map +1 -1
- package/lib/surface/plugin-actions.d.ts.map +1 -1
- package/lib/surface/plugin-actions.js +4 -0
- package/lib/surface/plugin-actions.js.map +1 -1
- package/lib/surface/preset-choice.d.ts.map +1 -1
- package/lib/surface/preset-choice.js +15 -17
- package/lib/surface/preset-choice.js.map +1 -1
- package/lib/surface/prompt-input.js +1 -1
- package/lib/surface/prompt-input.js.map +1 -1
- package/lib/surface/prompt-memory.d.ts +7 -6
- package/lib/surface/prompt-memory.d.ts.map +1 -1
- package/lib/surface/prompt-memory.js +3 -3
- package/lib/surface/session-lifecycle.d.ts +7 -1
- package/lib/surface/session-lifecycle.d.ts.map +1 -1
- package/lib/surface/session-lifecycle.js +17 -12
- package/lib/surface/session-lifecycle.js.map +1 -1
- package/lib/surface/session-picker.js +1 -1
- package/lib/surface/session-picker.js.map +1 -1
- package/lib/surface/session-view.d.ts +1 -1
- package/lib/surface/session-view.d.ts.map +1 -1
- package/lib/surface/session-view.js +4 -5
- package/lib/surface/session-view.js.map +1 -1
- package/lib/surface/staged-turns.d.ts.map +1 -1
- package/lib/surface/staged-turns.js +8 -4
- package/lib/surface/staged-turns.js.map +1 -1
- package/lib/surface/terminal-lifecycle.d.ts +1 -1
- package/lib/surface/terminal-lifecycle.d.ts.map +1 -1
- package/lib/surface/terminal-lifecycle.js +8 -5
- package/lib/surface/terminal-lifecycle.js.map +1 -1
- package/lib/terminal/bell.d.ts +0 -2
- package/lib/terminal/bell.d.ts.map +1 -1
- package/lib/terminal/bell.js +2 -1
- package/lib/terminal/bell.js.map +1 -1
- package/lib/terminal/clipboard.d.ts +4 -4
- package/lib/terminal/clipboard.js +4 -4
- package/lib/terminal/external-editor.d.ts +4 -60
- package/lib/terminal/external-editor.d.ts.map +1 -1
- package/lib/terminal/external-editor.js +28 -40
- package/lib/terminal/external-editor.js.map +1 -1
- package/lib/terminal/host-writes.d.ts +7 -18
- package/lib/terminal/host-writes.d.ts.map +1 -1
- package/lib/terminal/host-writes.js +19 -18
- package/lib/terminal/host-writes.js.map +1 -1
- package/lib/terminal/input.d.ts +6 -0
- package/lib/terminal/input.d.ts.map +1 -0
- package/lib/terminal/input.js +15 -0
- package/lib/terminal/input.js.map +1 -0
- package/lib/terminal/restore.d.ts +2 -1
- package/lib/terminal/restore.d.ts.map +1 -1
- package/lib/terminal/signals.d.ts +2 -1
- package/lib/terminal/signals.d.ts.map +1 -1
- package/lib/terminal/signals.js +1 -1
- package/lib/terminal/signals.js.map +1 -1
- package/lib/terminal/title.d.ts +1 -11
- package/lib/terminal/title.d.ts.map +1 -1
- package/lib/terminal/title.js +5 -4
- package/lib/terminal/title.js.map +1 -1
- package/lib/terminal/warning-screen.d.ts +11 -2
- package/lib/terminal/warning-screen.d.ts.map +1 -1
- package/lib/terminal/warning-screen.js +166 -22
- package/lib/terminal/warning-screen.js.map +1 -1
- package/lib/terminal-text/scan.d.ts +4 -5
- package/lib/terminal-text/scan.d.ts.map +1 -1
- package/lib/terminal-text/scan.js +16 -9
- package/lib/terminal-text/scan.js.map +1 -1
- package/lib/terminal-text/sgr.d.ts +4 -3
- package/lib/terminal-text/sgr.d.ts.map +1 -1
- package/lib/terminal-text/sgr.js +9 -14
- package/lib/terminal-text/sgr.js.map +1 -1
- package/lib/terminal-text.d.ts +7 -12
- package/lib/terminal-text.d.ts.map +1 -1
- package/lib/terminal-text.js +32 -23
- package/lib/terminal-text.js.map +1 -1
- package/lib/text.d.ts +8 -14
- package/lib/text.d.ts.map +1 -1
- package/lib/text.js +14 -15
- package/lib/text.js.map +1 -1
- package/lib/theme-capability.d.ts +3 -15
- package/lib/theme-capability.d.ts.map +1 -1
- package/lib/theme-capability.js +18 -15
- package/lib/theme-capability.js.map +1 -1
- package/lib/theme-defaults.d.ts +3 -57
- package/lib/theme-defaults.d.ts.map +1 -1
- package/lib/theme-defaults.js +25 -14
- package/lib/theme-defaults.js.map +1 -1
- package/lib/theme-files.d.ts +16 -32
- package/lib/theme-files.d.ts.map +1 -1
- package/lib/theme-files.js +43 -27
- package/lib/theme-files.js.map +1 -1
- package/lib/theme-resolver.d.ts +3 -3
- package/lib/theme-resolver.d.ts.map +1 -1
- package/lib/theme-resolver.js +9 -6
- package/lib/theme-resolver.js.map +1 -1
- package/lib/theme-schema.d.ts +7 -42
- package/lib/theme-schema.d.ts.map +1 -1
- package/lib/theme-schema.js +9 -11
- package/lib/theme-schema.js.map +1 -1
- package/lib/theme-settings.d.ts +19 -10
- package/lib/theme-settings.d.ts.map +1 -1
- package/lib/theme-settings.js +23 -17
- package/lib/theme-settings.js.map +1 -1
- package/lib/theme-tokens.d.ts +6 -12
- package/lib/theme-tokens.d.ts.map +1 -1
- package/lib/theme-tokens.js +2 -2
- package/lib/theme-tokens.js.map +1 -1
- package/lib/theme.d.ts +5 -10
- package/lib/theme.d.ts.map +1 -1
- package/lib/theme.js +11 -18
- package/lib/theme.js.map +1 -1
- package/lib/todo-guard.d.ts +8 -4
- package/lib/todo-guard.d.ts.map +1 -1
- package/lib/todo-guard.js +17 -6
- package/lib/todo-guard.js.map +1 -1
- package/lib/tokens.d.ts +0 -2
- package/lib/tokens.d.ts.map +1 -1
- package/lib/tokens.js +1 -1
- package/lib/tokens.js.map +1 -1
- package/lib/tool-display.d.ts +1 -13
- package/lib/tool-display.d.ts.map +1 -1
- package/lib/tool-display.js +4 -4
- package/lib/tool-display.js.map +1 -1
- package/lib/transcript/message-content.d.ts.map +1 -1
- package/lib/transcript/message-content.js +31 -9
- package/lib/transcript/message-content.js.map +1 -1
- package/lib/transcript/tool-calls.d.ts +9 -7
- package/lib/transcript/tool-calls.d.ts.map +1 -1
- package/lib/transcript/tool-calls.js +27 -20
- package/lib/transcript/tool-calls.js.map +1 -1
- package/lib/transcript.d.ts +15 -18
- package/lib/transcript.d.ts.map +1 -1
- package/lib/transcript.js +70 -41
- package/lib/transcript.js.map +1 -1
- package/lib/ui/copy.d.ts +5 -4
- package/lib/ui/copy.d.ts.map +1 -1
- package/lib/ui/copy.js +9 -6
- package/lib/ui/copy.js.map +1 -1
- package/lib/ui/diff.d.ts +0 -30
- package/lib/ui/diff.d.ts.map +1 -1
- package/lib/ui/diff.js +16 -9
- package/lib/ui/diff.js.map +1 -1
- package/lib/ui/dock.d.ts +12 -10
- package/lib/ui/dock.d.ts.map +1 -1
- package/lib/ui/dock.js +27 -14
- package/lib/ui/dock.js.map +1 -1
- package/lib/ui/editor.d.ts +5 -4
- package/lib/ui/editor.d.ts.map +1 -1
- package/lib/ui/editor.js +17 -9
- package/lib/ui/editor.js.map +1 -1
- package/lib/ui/frame.d.ts +4 -12
- package/lib/ui/frame.d.ts.map +1 -1
- package/lib/ui/frame.js +6 -6
- package/lib/ui/frame.js.map +1 -1
- package/lib/ui/gap.d.ts +0 -4
- package/lib/ui/gap.d.ts.map +1 -1
- package/lib/ui/gap.js +4 -3
- package/lib/ui/gap.js.map +1 -1
- package/lib/ui/gate-input.d.ts +3 -3
- package/lib/ui/gate-input.d.ts.map +1 -1
- package/lib/ui/gate-input.js +9 -9
- package/lib/ui/gate-input.js.map +1 -1
- package/lib/ui/layout.d.ts +1 -8
- package/lib/ui/layout.d.ts.map +1 -1
- package/lib/ui/layout.js +10 -11
- package/lib/ui/layout.js.map +1 -1
- package/lib/ui/markdown.d.ts +3 -5
- package/lib/ui/markdown.d.ts.map +1 -1
- package/lib/ui/markdown.js +18 -7
- package/lib/ui/markdown.js.map +1 -1
- package/lib/ui/mermaid.d.ts +0 -11
- package/lib/ui/mermaid.d.ts.map +1 -1
- package/lib/ui/mermaid.js +32 -17
- package/lib/ui/mermaid.js.map +1 -1
- package/lib/ui/picker-card.d.ts +4 -8
- package/lib/ui/picker-card.d.ts.map +1 -1
- package/lib/ui/picker-card.js +17 -15
- package/lib/ui/picker-card.js.map +1 -1
- package/lib/ui/picker.d.ts +11 -17
- package/lib/ui/picker.d.ts.map +1 -1
- package/lib/ui/picker.js +36 -17
- package/lib/ui/picker.js.map +1 -1
- package/lib/ui/queue.d.ts.map +1 -1
- package/lib/ui/queue.js +11 -1
- package/lib/ui/queue.js.map +1 -1
- package/lib/ui/stash-picker.d.ts +1 -10
- package/lib/ui/stash-picker.d.ts.map +1 -1
- package/lib/ui/stash-picker.js +4 -4
- package/lib/ui/stash-picker.js.map +1 -1
- package/lib/ui/status.d.ts +2 -19
- package/lib/ui/status.d.ts.map +1 -1
- package/lib/ui/status.js +15 -17
- package/lib/ui/status.js.map +1 -1
- package/lib/ui/view/document.d.ts +33 -0
- package/lib/ui/view/document.d.ts.map +1 -0
- package/lib/ui/view/document.js +96 -0
- package/lib/ui/view/document.js.map +1 -0
- package/lib/ui/view/gate-card.d.ts +2 -0
- package/lib/ui/view/gate-card.d.ts.map +1 -1
- package/lib/ui/view/gate-card.js +12 -10
- package/lib/ui/view/gate-card.js.map +1 -1
- package/lib/ui/view/tool-card.d.ts +7 -4
- package/lib/ui/view/tool-card.d.ts.map +1 -1
- package/lib/ui/view/tool-card.js +12 -17
- package/lib/ui/view/tool-card.js.map +1 -1
- package/lib/ui/view/transcript-message.d.ts +7 -7
- package/lib/ui/view/transcript-message.d.ts.map +1 -1
- package/lib/ui/view/transcript-message.js +19 -10
- package/lib/ui/view/transcript-message.js.map +1 -1
- package/lib/ui/view.d.ts +53 -84
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +79 -158
- package/lib/ui/view.js.map +1 -1
- package/lib/work.d.ts +13 -10
- package/lib/work.d.ts.map +1 -1
- package/lib/work.js +30 -8
- package/lib/work.js.map +1 -1
- package/package.json +12 -7
- package/presets/cordis.patch.yml +1 -0
- package/presets/minimal.patch.yml +1 -0
- package/presets/ptc.patch.yml +1 -0
- package/presets/standard.patch.yml +1 -0
- package/themes/deepseek-blue.yaml +38 -51
- package/themes/marine-static.yaml +27 -35
- package/themes/pine-slope.yaml +13 -11
- package/themes/polar-drift.yaml +6 -0
- package/themes/violet-orbit.yaml +14 -18
- package/themes/wine-thicket.yaml +13 -13
package/lib/compat/probe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/compat/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,mDAAmD;AACnD,MAAM,
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/compat/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,mDAAmD;AACnD,MAAM,qBAAqB,GAA0B;IACnD;QACE,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,sDAAsD;QAC3D,GAAG,EAAE,gEAAgE;KACtE;IACD;QACE,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,yEAAyE;QAC9E,GAAG,EAAE,6HAA6H;KACnI;IACD;QACE,OAAO,EAAE,SAAS;QAClB,GAAG,EAAE,8CAA8C;QACnD,GAAG,EAAE,2CAA2C;KACjD;CACF,CAAA;AAED,mEAAmE;AACnE,MAAM,qBAAqB,GAA0B;IACnD;QACE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,yDAAyD;QAC9D,GAAG,EAAE,8BAA8B;KACpC;IACD;QACE,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,0CAA0C;QAC/C,GAAG,EAAE,iCAAiC;KACvC;IACD;QACE,OAAO,EAAE,oBAAoB;QAC7B,GAAG,EAAE,uCAAuC;QAC5C,GAAG,EAAE,kDAAkD;KACxD;IACD;QACE,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,wCAAwC;QAC7C,GAAG,EAAE,uCAAuC;KAC7C;IACD;QACE,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,qCAAqC;QAC1C,GAAG,EAAE,sCAAsC;KAC5C;CACF,CAAA;AAQD,qDAAqD;AACrD,MAAM,UAAU,gBAAgB,CAAC,GAAiC;IAChE,OAAO;QACL,eAAe,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrF,eAAe,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACtF,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CACpD,KAAK,UAAU,CAAC,OAAO,gBAAgB,UAAU,CAAC,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9E,OAAO,qEAAqE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAChG,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAC1E,OAAO,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD,CAAA;AACpG,CAAC"}
|
package/lib/compat/section.d.ts
CHANGED
|
@@ -16,10 +16,11 @@ export interface SectionScope {
|
|
|
16
16
|
/**
|
|
17
17
|
* Raw opt-outs can precede a valid commit and therefore never reach get() or notifications.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
19
|
+
* Raw-layer observation supplements committed preferences; it cannot promise
|
|
20
|
+
* opt-out detection without describe() or a matching descriptor. Those cases
|
|
21
|
+
* leave the caller's existing privacy policy in force. Descriptor errors and
|
|
22
|
+
* invalid revisions refuse observation, so the caller can disable history
|
|
23
|
+
* rather than trust an unreadable layer.
|
|
23
24
|
*/
|
|
24
25
|
readUser(): {
|
|
25
26
|
readonly value: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../src/compat/section.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAA;IACvE;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,GAAG,IAAI,OAAO,CAAA;IACd,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC
|
|
1
|
+
{"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../src/compat/section.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAA;IACvE;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,GAAG,IAAI,OAAO,CAAA;IACd,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC;;;;;;;;OAQG;IACH,QAAQ,IAAI;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAC/E;AA2BD,iFAAiF;AACjF,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;CAC3G;AAQD,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CA6EzF"}
|
package/lib/compat/section.js
CHANGED
|
@@ -20,6 +20,8 @@ export function openSection(service, request) {
|
|
|
20
20
|
throw new Error(READ_UNSUPPORTED);
|
|
21
21
|
return { value: descriptor.user, revision: descriptor.revision };
|
|
22
22
|
};
|
|
23
|
+
// Prefer owner-aware attachment for provider source replacement and appearance-change hooks.
|
|
24
|
+
// Section APIs retain section persistence and defaults; row Config is a fallback, not a migration.
|
|
23
25
|
if (typeof settings.installSection === 'function') {
|
|
24
26
|
let source = () => request.entry;
|
|
25
27
|
// An attach notification precedes the caller receiving its scope.
|
|
@@ -71,9 +73,11 @@ export function openSection(service, request) {
|
|
|
71
73
|
return current === undefined ? config.get() : current.value;
|
|
72
74
|
},
|
|
73
75
|
update: async (patch) => {
|
|
76
|
+
// Metadata alone can suppress remounts; native references must carry edits to the active surface.
|
|
74
77
|
if (!config.live)
|
|
75
78
|
throw new Error(CONFIG_NOT_LIVE);
|
|
76
79
|
const current = descriptor();
|
|
80
|
+
// Require a usable revision so the host can reject changes made after this descriptor was read.
|
|
77
81
|
if (current === undefined || settings.writable === false || typeof settings.update !== 'function'
|
|
78
82
|
|| !Number.isSafeInteger(current.revision) || current.revision < 0)
|
|
79
83
|
return refuseWrite();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section.js","sourceRoot":"","sources":["../../src/compat/section.ts"],"names":[],"mappings":"AAGA,MAAM,gBAAgB,GAAG,wEAAwE,CAAA;AACjG,MAAM,iBAAiB,GAAG,0EAA0E,CAAA;AACpG,MAAM,eAAe,GAAG,mGAAmG,CAAA;
|
|
1
|
+
{"version":3,"file":"section.js","sourceRoot":"","sources":["../../src/compat/section.ts"],"names":[],"mappings":"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"}
|
package/lib/config.d.ts
CHANGED
|
@@ -34,9 +34,6 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
|
34
34
|
export declare function hasLiveRowSettings(raw: unknown): boolean;
|
|
35
35
|
/** Preserve raw malformed fields for the appearance owner to diagnose without losing opt-outs. */
|
|
36
36
|
export declare function readRowSettings(raw: unknown): unknown;
|
|
37
|
-
/** A composed row whose configuration cannot describe a runnable terminal surface. */
|
|
38
|
-
export declare class TuiConfigError extends Error {
|
|
39
|
-
}
|
|
40
37
|
/**
|
|
41
38
|
* Validate the row's configuration into the runtime shape.
|
|
42
39
|
*
|
package/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAalD,8FAA8F;AAC9F,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAgBjB,CAAA;AAUF,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQxD;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOrD;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAalD,8FAA8F;AAC9F,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAgBjB,CAAA;AAUF,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQxD;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOrD;AA0CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAiBxD"}
|
package/lib/config.js
CHANGED
|
@@ -61,14 +61,16 @@ export function readRowSettings(raw) {
|
|
|
61
61
|
}));
|
|
62
62
|
}
|
|
63
63
|
/** A composed row whose configuration cannot describe a runnable terminal surface. */
|
|
64
|
-
|
|
64
|
+
class TuiConfigError extends Error {
|
|
65
65
|
}
|
|
66
|
+
/** Avoid changing a session lookup key during row validation; whitespace-only keys still cannot name a session. */
|
|
66
67
|
function requireString(value, field) {
|
|
67
68
|
if (typeof value !== 'string' || value.trim() === '') {
|
|
68
69
|
throw new TuiConfigError(`${field} must be a non-empty string`);
|
|
69
70
|
}
|
|
70
71
|
return value;
|
|
71
72
|
}
|
|
73
|
+
/** Treat selector padding as input whitespace, and a blank selector as leaving the choice to its default. */
|
|
72
74
|
function optionalString(value, field) {
|
|
73
75
|
if (value === undefined || value === null)
|
|
74
76
|
return undefined;
|
|
@@ -77,6 +79,10 @@ function optionalString(value, field) {
|
|
|
77
79
|
const trimmed = value.trim();
|
|
78
80
|
return trimmed === '' ? undefined : trimmed;
|
|
79
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Unlike the row's shared appearance fields, stash has only a scope selector.
|
|
84
|
+
* Reject misspelled keys rather than silently choosing the default shared-directory draft bank.
|
|
85
|
+
*/
|
|
80
86
|
function stashScope(value) {
|
|
81
87
|
if (value === undefined)
|
|
82
88
|
return DEFAULT_STASH_SCOPE;
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/lib/export.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import type { TranscriptEntry } from './transcript.ts';
|
|
2
|
-
/** The directory under the harness home a dump with no destination lands in. */
|
|
3
|
-
export declare const EXPORTS_DIR_NAME = "exports";
|
|
4
2
|
/**
|
|
5
3
|
* Where a dump with no destination is written.
|
|
6
4
|
*
|
|
@@ -8,12 +6,12 @@ export declare const EXPORTS_DIR_NAME = "exports";
|
|
|
8
6
|
* belongs to `/theme export` and the surface watches it for edits, so a
|
|
9
7
|
* dump written there would sit among the reader's themes and be re-read as one.
|
|
10
8
|
*/
|
|
11
|
-
export declare function exportsHomeDir(
|
|
12
|
-
/**
|
|
9
|
+
export declare function exportsHomeDir(): string;
|
|
10
|
+
/** Owner-only storage keeps dumps private even when the harness home can be traversed. */
|
|
13
11
|
export declare function ensureExportsHome(dir: string): readonly string[];
|
|
14
|
-
/**
|
|
15
|
-
export declare
|
|
16
|
-
/**
|
|
12
|
+
/** Existing readers and hard links must never inherit newly exported private text. */
|
|
13
|
+
export declare function writeTranscriptExport(filePath: string, text: string): void;
|
|
14
|
+
/** Associate the default dump with its session; the caller chooses the destination directory. */
|
|
17
15
|
export declare function defaultExportFile(sessionId: string): string;
|
|
18
16
|
/**
|
|
19
17
|
* Render the visible transcript as markdown.
|
package/lib/export.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAwBtD;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAahE;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAmB1E;AAuBD,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAuD5E"}
|
package/lib/export.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import { mkdirSync } from 'node:fs';
|
|
2
|
-
import { homedir } from 'node:os';
|
|
1
|
+
import { closeSync, constants, fchmodSync, lstatSync, mkdirSync, mkdtempSync, openSync, renameSync, rmdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
2
|
import path from 'node:path';
|
|
4
3
|
import { rowText } from "./cards.js";
|
|
5
4
|
import { dshHomeDir } from "./stash/paths.js";
|
|
5
|
+
import { PRIVATE_DIR_MODE, PRIVATE_FILE_MODE } from "./stash/private-fs.js";
|
|
6
6
|
import { renderTerminalText } from "./terminal-text.js";
|
|
7
|
+
/** Permission repair must target the owned directory, never a link into unrelated storage. */
|
|
8
|
+
const EXPORT_DIRECTORY_FLAGS = constants.O_RDONLY | (constants.O_DIRECTORY ?? 0) | (constants.O_NOFOLLOW ?? 0);
|
|
9
|
+
const EXPORT_WRITE_FLAGS = constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | (constants.O_NOFOLLOW ?? 0);
|
|
10
|
+
const EXPORT_STAGING_PREFIX = '.dsh-export-';
|
|
11
|
+
const EXPORT_STAGED_FILE = 'transcript.tmp';
|
|
12
|
+
const EXPORT_ENCODING = 'utf8';
|
|
13
|
+
const EXPORT_DESTINATION_ERROR = 'export destination must be a regular file';
|
|
7
14
|
/**
|
|
8
15
|
* A fragment as a document holds it.
|
|
9
16
|
*
|
|
@@ -15,7 +22,7 @@ function documentText(raw) {
|
|
|
15
22
|
return renderTerminalText(raw, { color: 'none' });
|
|
16
23
|
}
|
|
17
24
|
/** The directory under the harness home a dump with no destination lands in. */
|
|
18
|
-
|
|
25
|
+
const EXPORTS_DIR_NAME = 'exports';
|
|
19
26
|
/**
|
|
20
27
|
* Where a dump with no destination is written.
|
|
21
28
|
*
|
|
@@ -23,25 +30,56 @@ export const EXPORTS_DIR_NAME = 'exports';
|
|
|
23
30
|
* belongs to `/theme export` and the surface watches it for edits, so a
|
|
24
31
|
* dump written there would sit among the reader's themes and be re-read as one.
|
|
25
32
|
*/
|
|
26
|
-
export function exportsHomeDir(
|
|
27
|
-
return path.join(dshHomeDir(
|
|
33
|
+
export function exportsHomeDir() {
|
|
34
|
+
return path.join(dshHomeDir(), EXPORTS_DIR_NAME);
|
|
28
35
|
}
|
|
29
|
-
/**
|
|
36
|
+
/** Owner-only storage keeps dumps private even when the harness home can be traversed. */
|
|
30
37
|
export function ensureExportsHome(dir) {
|
|
31
38
|
try {
|
|
32
|
-
mkdirSync(dir, { recursive: true });
|
|
39
|
+
mkdirSync(dir, { recursive: true, mode: PRIVATE_DIR_MODE });
|
|
40
|
+
const directory = openSync(dir, EXPORT_DIRECTORY_FLAGS);
|
|
41
|
+
try {
|
|
42
|
+
fchmodSync(directory, PRIVATE_DIR_MODE);
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
closeSync(directory);
|
|
46
|
+
}
|
|
33
47
|
return [];
|
|
34
48
|
}
|
|
35
49
|
catch (error) {
|
|
36
50
|
return [`exports: cannot create ${dir}: ${message(error)}`];
|
|
37
51
|
}
|
|
38
52
|
}
|
|
53
|
+
/** Existing readers and hard links must never inherit newly exported private text. */
|
|
54
|
+
export function writeTranscriptExport(filePath, text) {
|
|
55
|
+
const destination = lstatSync(filePath, { throwIfNoEntry: false });
|
|
56
|
+
if (destination !== undefined && !destination.isFile())
|
|
57
|
+
throw new Error(EXPORT_DESTINATION_ERROR);
|
|
58
|
+
const staging = mkdtempSync(path.join(path.dirname(filePath), EXPORT_STAGING_PREFIX));
|
|
59
|
+
const stagedFile = path.join(staging, EXPORT_STAGED_FILE);
|
|
60
|
+
try {
|
|
61
|
+
const file = openSync(stagedFile, EXPORT_WRITE_FLAGS, PRIVATE_FILE_MODE);
|
|
62
|
+
try {
|
|
63
|
+
fchmodSync(file, PRIVATE_FILE_MODE);
|
|
64
|
+
writeFileSync(file, text, EXPORT_ENCODING);
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
closeSync(file);
|
|
68
|
+
}
|
|
69
|
+
// Replacement publishes an owner-only inode rather than reusing earlier readers' file descriptions.
|
|
70
|
+
renameSync(stagedFile, filePath);
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
rmSync(stagedFile, { force: true });
|
|
74
|
+
rmdirSync(staging);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
39
77
|
/** One sentence out of an error, for a notice that has one line. */
|
|
40
78
|
function message(error) {
|
|
41
79
|
return error instanceof Error ? error.message.split('\n')[0] ?? String(error) : String(error);
|
|
42
80
|
}
|
|
43
|
-
/**
|
|
44
|
-
|
|
81
|
+
/** Make default dumps recognizable as harness sessions when browsing the exports directory. */
|
|
82
|
+
const DEFAULT_EXPORT_PREFIX = 'dsh-session';
|
|
45
83
|
/** How the dump marks a nested call that returned an error, which the screen carried as colour. */
|
|
46
84
|
const SUBCALL_FAILED_SUFFIX = ' (failed)';
|
|
47
85
|
/** Id characters kept in a file name, so a session id cannot escape the directory. */
|
|
@@ -52,7 +90,7 @@ const BACKTICK_RUN = /`+/gu;
|
|
|
52
90
|
/** A comment body must not close the comment that carries it. */
|
|
53
91
|
const COMMENT_CLOSE = '-->';
|
|
54
92
|
const COMMENT_CLOSE_DEFUSED = '-->';
|
|
55
|
-
/**
|
|
93
|
+
/** Associate the default dump with its session; the caller chooses the destination directory. */
|
|
56
94
|
export function defaultExportFile(sessionId) {
|
|
57
95
|
return `${DEFAULT_EXPORT_PREFIX}-${sessionId.replace(UNSAFE_NAME, '_')}.md`;
|
|
58
96
|
}
|
package/lib/export.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
|
package/lib/fold-cursor.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ import type { ForkEvent } from './agent/fork.ts';
|
|
|
5
5
|
*
|
|
6
6
|
* A resumed session is folded while its agent's loop is already live, so the
|
|
7
7
|
* same event reaches the surface twice: once on the stream, once from the log
|
|
8
|
-
* the fold is reading.
|
|
9
|
-
*
|
|
8
|
+
* the fold is reading. When an event carries a sequence number, the cursor uses
|
|
9
|
+
* that number to suppress deliveries at or below the session's high-water mark.
|
|
10
10
|
*
|
|
11
11
|
* The session is part of the question rather than the caller's memory: numbers
|
|
12
12
|
* restart with every session, and a transcript that starts on a session other
|
|
@@ -21,7 +21,7 @@ export declare class ViewGeneration {
|
|
|
21
21
|
/** An old view cannot regain ownership if its read finishes out of order. */
|
|
22
22
|
begin(): () => boolean;
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
24
|
+
/** Suppress sequenced replay/live overlap per session; older arrivals are dropped, not reordered, and unsequenced deliveries always pass. */
|
|
25
25
|
export declare class FoldCursor {
|
|
26
26
|
private session;
|
|
27
27
|
private through;
|
package/lib/fold-cursor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fold-cursor.d.ts","sourceRoot":"","sources":["../src/fold-cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;;;;;;;;;;;GAYG;AAEH,+EAA+E;AAC/E,wBAAsB,eAAe,CAAC,KAAK,EACzC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,EACrC,OAAO,EAAE,MAAM,OAAO,EACtB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC5B,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,2EAA2E;AAC3E,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAI;IAEtB,6EAA6E;IAC7E,KAAK,IAAI,MAAM,OAAO;CAIvB;AAED,
|
|
1
|
+
{"version":3,"file":"fold-cursor.d.ts","sourceRoot":"","sources":["../src/fold-cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;;;;;;;;;;;GAYG;AAEH,+EAA+E;AAC/E,wBAAsB,eAAe,CAAC,KAAK,EACzC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,EACrC,OAAO,EAAE,MAAM,OAAO,EACtB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC5B,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,2EAA2E;AAC3E,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAI;IAEtB,6EAA6E;IAC7E,KAAK,IAAI,MAAM,OAAO;CAIvB;AAED,6IAA6I;AAC7I,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAoB;IAEnC;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAKb,2EAA2E;IAC3E,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO;CAatD"}
|
package/lib/fold-cursor.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A resumed session is folded while its agent's loop is already live, so the
|
|
5
5
|
* same event reaches the surface twice: once on the stream, once from the log
|
|
6
|
-
* the fold is reading.
|
|
7
|
-
*
|
|
6
|
+
* the fold is reading. When an event carries a sequence number, the cursor uses
|
|
7
|
+
* that number to suppress deliveries at or below the session's high-water mark.
|
|
8
8
|
*
|
|
9
9
|
* The session is part of the question rather than the caller's memory: numbers
|
|
10
10
|
* restart with every session, and a transcript that starts on a session other
|
|
@@ -29,7 +29,7 @@ export class ViewGeneration {
|
|
|
29
29
|
return () => generation === this.generation;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
/**
|
|
32
|
+
/** Suppress sequenced replay/live overlap per session; older arrivals are dropped, not reordered, and unsequenced deliveries always pass. */
|
|
33
33
|
export class FoldCursor {
|
|
34
34
|
session;
|
|
35
35
|
through;
|
|
@@ -49,6 +49,8 @@ export class FoldCursor {
|
|
|
49
49
|
this.session = session;
|
|
50
50
|
this.through = undefined;
|
|
51
51
|
}
|
|
52
|
+
// Without a sequence, this cursor cannot identify replay/live overlap; dropping
|
|
53
|
+
// the delivery could lose content. Unsequenced events can therefore repeat.
|
|
52
54
|
if (typeof event.seq === 'number') {
|
|
53
55
|
if (this.through !== undefined && event.seq <= this.through)
|
|
54
56
|
return false;
|
package/lib/fold-cursor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fold-cursor.js","sourceRoot":"","sources":["../src/fold-cursor.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAqC,EACrC,OAAsB,EACtB,KAA6B;IAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,CAAA;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC;AAED,2EAA2E;AAC3E,MAAM,OAAO,cAAc;IACjB,UAAU,GAAG,CAAC,CAAA;IAEtB,6EAA6E;IAC7E,KAAK;QACH,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,UAAU,CAAA;QACpC,OAAO,GAAG,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAA;IAC7C,CAAC;CACF;AAED,
|
|
1
|
+
{"version":3,"file":"fold-cursor.js","sourceRoot":"","sources":["../src/fold-cursor.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAqC,EACrC,OAAsB,EACtB,KAA6B;IAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,CAAA;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC;AAED,2EAA2E;AAC3E,MAAM,OAAO,cAAc;IACjB,UAAU,GAAG,CAAC,CAAA;IAEtB,6EAA6E;IAC7E,KAAK;QACH,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,UAAU,CAAA;QACpC,OAAO,GAAG,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAA;IAC7C,CAAC;CACF;AAED,6IAA6I;AAC7I,MAAM,OAAO,UAAU;IACb,OAAO,CAAuB;IAC9B,OAAO,CAAoB;IAEnC;;;;;OAKG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;IAC1B,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,OAAkB,EAAE,KAAgB;QACzC,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QAC1B,CAAC;QACD,gFAAgF;QAChF,4EAA4E;QAC5E,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAA;YACzE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAA;QAC1B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
@@ -1,41 +1,6 @@
|
|
|
1
1
|
import { type GateCard, type GateInput, type GateQuestion } from '../gates.ts';
|
|
2
2
|
import { type Keymap } from '../input/actions.ts';
|
|
3
3
|
import type { PositionedOption } from './questions.ts';
|
|
4
|
-
/** The label a question earns for an answer the model did not list. */
|
|
5
|
-
export declare const CUSTOM_ROW_LABEL = "other";
|
|
6
|
-
/** What the free-text row does, said where the reader decides. */
|
|
7
|
-
export declare const CUSTOM_ROW_DESCRIPTION = "type your own answer";
|
|
8
|
-
/** How the list hint names that row, which the row itself already labels. */
|
|
9
|
-
export declare const CUSTOM_ROW_SHORTHAND = "0 answer freely";
|
|
10
|
-
/**
|
|
11
|
-
* How a hint names the keys of one action.
|
|
12
|
-
*
|
|
13
|
-
* A hint is prose about what a key does here, so the word comes from the card
|
|
14
|
-
* rather than from the catalog row, which has to read well out of context too.
|
|
15
|
-
*/
|
|
16
|
-
export declare function namedKeys(map: Keymap, id: string, verb: string): string;
|
|
17
|
-
/**
|
|
18
|
-
* How the free-text row spells the keys that leave it.
|
|
19
|
-
*
|
|
20
|
-
* A text field keeps its own exits: the arrows and escape are the field's, not
|
|
21
|
-
* the question's, so a reader who moved question.up or question.skip somewhere
|
|
22
|
-
* else still leaves with these. The question's own movement keys leave it as
|
|
23
|
-
* well, which is how the navigation aliases reach a reader who is typing rather
|
|
24
|
-
* than filtering. The arrows stay one token because they are pinned together
|
|
25
|
-
* rather than listed one direction at a time.
|
|
26
|
-
*/
|
|
27
|
-
export declare function customRowExits(map: Keymap): string;
|
|
28
|
-
/** The keys that answer the free-text row, where typing is the answer rather than a filter. */
|
|
29
|
-
export declare function customHint(map: Keymap): string;
|
|
30
|
-
/**
|
|
31
|
-
* The question-id suffix that declares a typed answer a credential. The seam
|
|
32
|
-
* has no field for it, so a caller marks its own id and the gate reads that
|
|
33
|
-
* declaration rather than the wording: ids are caller-owned, and a question
|
|
34
|
-
* that merely mentions a key must still show the answer its author meant read.
|
|
35
|
-
*/
|
|
36
|
-
export declare const SECRET_ID_SUFFIX = ":secret";
|
|
37
|
-
/** The free-text row's label when the answer is a credential, so the reader sees what they hand over. */
|
|
38
|
-
export declare const SECRET_ROW_LABEL = "API KEY";
|
|
39
4
|
/** Whether a question declares its typed answer a credential through its id. */
|
|
40
5
|
export declare function declaresSecret(id: string): boolean;
|
|
41
6
|
/**
|
|
@@ -51,7 +16,7 @@ export interface QuestionCardView {
|
|
|
51
16
|
readonly question: GateQuestion | undefined;
|
|
52
17
|
/** One-based position of that question among the gate's own. */
|
|
53
18
|
readonly position: number;
|
|
54
|
-
/**
|
|
19
|
+
/** Batch size gives the heading progress context; a lone question needs no batch counter. */
|
|
55
20
|
readonly total: number;
|
|
56
21
|
/** Labels already chosen on this question. */
|
|
57
22
|
readonly chosen: readonly string[];
|
|
@@ -65,13 +30,13 @@ export interface QuestionCardView {
|
|
|
65
30
|
readonly matched: readonly PositionedOption[];
|
|
66
31
|
/** The slice of those rows the window shows. */
|
|
67
32
|
readonly rows: readonly PositionedOption[];
|
|
68
|
-
/**
|
|
33
|
+
/** Zero-based indices into matched, so windowing preserves cursor identity; only displayed numbers add one. */
|
|
69
34
|
readonly start: number;
|
|
70
35
|
readonly cursor: number;
|
|
71
36
|
/** The keys and the editor in force, read per draw so a settings edit lands on the next frame. */
|
|
72
37
|
readonly keys: Keymap;
|
|
73
38
|
readonly input: GateInput;
|
|
74
39
|
}
|
|
75
|
-
/**
|
|
40
|
+
/** Project a question without owning its lifetime; the modal owner settles answers and removes the gate. */
|
|
76
41
|
export declare function questionCard(view: QuestionCardView): GateCard;
|
|
77
42
|
//# sourceMappingURL=question-card.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"question-card.d.ts","sourceRoot":"","sources":["../../src/gates/question-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACxG,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"question-card.d.ts","sourceRoot":"","sources":["../../src/gates/question-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACxG,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AA4DtD,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;IAC3C,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC7C,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC1C,+GAA+G;IAC/G,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAC1B;AAED,4GAA4G;AAC5G,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,QAAQ,CAsD7D"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { CUSTOM_ROW_NUMBER, lines } from "../gates.js";
|
|
2
2
|
import { keyName, keysFor } from "../input/actions.js";
|
|
3
|
-
/**
|
|
4
|
-
|
|
3
|
+
/** Keep an alternative to the listed choices so the reader can answer in their own words. */
|
|
4
|
+
const CUSTOM_ROW_LABEL = 'other';
|
|
5
5
|
/** What the free-text row does, said where the reader decides. */
|
|
6
|
-
|
|
6
|
+
const CUSTOM_ROW_DESCRIPTION = 'type your own answer';
|
|
7
7
|
/** How the list hint names that row, which the row itself already labels. */
|
|
8
|
-
|
|
8
|
+
const CUSTOM_ROW_SHORTHAND = `${CUSTOM_ROW_NUMBER} answer freely`;
|
|
9
9
|
/**
|
|
10
10
|
* How a hint names the keys of one action.
|
|
11
11
|
*
|
|
12
12
|
* A hint is prose about what a key does here, so the word comes from the card
|
|
13
13
|
* rather than from the catalog row, which has to read well out of context too.
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
function namedKeys(map, id, verb) {
|
|
16
16
|
// One verb for the action, however many keys reach it: a hint that repeated
|
|
17
17
|
// the word would read as two actions rather than two ways to do one.
|
|
18
18
|
return `${keysFor(map, id).map(keyName).join('/')} ${verb}`;
|
|
@@ -27,7 +27,7 @@ export function namedKeys(map, id, verb) {
|
|
|
27
27
|
* than filtering. The arrows stay one token because they are pinned together
|
|
28
28
|
* rather than listed one direction at a time.
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
function customRowExits(map) {
|
|
31
31
|
const names = ['↑↓'];
|
|
32
32
|
for (const id of ['question.up', 'question.down']) {
|
|
33
33
|
for (const key of keysFor(map, id)) {
|
|
@@ -39,7 +39,7 @@ export function customRowExits(map) {
|
|
|
39
39
|
return names.join('/');
|
|
40
40
|
}
|
|
41
41
|
/** The keys that answer the free-text row, where typing is the answer rather than a filter. */
|
|
42
|
-
|
|
42
|
+
function customHint(map) {
|
|
43
43
|
return `type or paste an answer · ${namedKeys(map, 'question.confirm', 'confirm')} · ${namedKeys(map, 'question.cancel', 'abandon')} · ${customRowExits(map)} or esc to options`;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
@@ -48,17 +48,18 @@ export function customHint(map) {
|
|
|
48
48
|
* declaration rather than the wording: ids are caller-owned, and a question
|
|
49
49
|
* that merely mentions a key must still show the answer its author meant read.
|
|
50
50
|
*/
|
|
51
|
-
|
|
51
|
+
const SECRET_ID_SUFFIX = ':secret';
|
|
52
52
|
/** The free-text row's label when the answer is a credential, so the reader sees what they hand over. */
|
|
53
|
-
|
|
53
|
+
const SECRET_ROW_LABEL = 'API KEY';
|
|
54
54
|
/** Whether a question declares its typed answer a credential through its id. */
|
|
55
55
|
export function declaresSecret(id) {
|
|
56
56
|
return id.endsWith(SECRET_ID_SUFFIX);
|
|
57
57
|
}
|
|
58
|
-
/**
|
|
58
|
+
/** Project a question without owning its lifetime; the modal owner settles answers and removes the gate. */
|
|
59
59
|
export function questionCard(view) {
|
|
60
60
|
const question = view.question;
|
|
61
61
|
if (question === undefined) {
|
|
62
|
+
// A post-decision snapshot must not offer stale choices; this fallback does not keep the modal open.
|
|
62
63
|
return { kind: 'question', title: 'question', detail: [], optionOffset: 0, options: [], custom: undefined, answerInput: undefined, hint: 'finishing' };
|
|
63
64
|
}
|
|
64
65
|
const detail = question.detail === undefined ? [] : lines(question.detail);
|
|
@@ -78,6 +79,7 @@ export function questionCard(view) {
|
|
|
78
79
|
hint: `type or paste an answer · ${namedKeys(view.keys, 'question.confirm', 'confirm')} · ${namedKeys(view.keys, 'question.skip', 'skip')} · ${namedKeys(view.keys, 'question.cancel', 'abandon')}`,
|
|
79
80
|
};
|
|
80
81
|
}
|
|
82
|
+
// Filter and range context keep a partial list from appearing to exhaust the available choices.
|
|
81
83
|
if (view.typed !== '')
|
|
82
84
|
detail.push(`filter: ${view.typed}`);
|
|
83
85
|
const secret = declaresSecret(question.id);
|
|
@@ -100,6 +102,7 @@ export function questionCard(view) {
|
|
|
100
102
|
label: secret ? SECRET_ROW_LABEL : CUSTOM_ROW_LABEL,
|
|
101
103
|
description: CUSTOM_ROW_DESCRIPTION,
|
|
102
104
|
current: view.atCustom,
|
|
105
|
+
// Mark free-text answering in progress, not a submitted answer; retained text stays marked after leaving.
|
|
103
106
|
selected: view.atCustom || view.written,
|
|
104
107
|
},
|
|
105
108
|
// A written answer stays in view whether or not the cursor is on the row,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"question-card.js","sourceRoot":"","sources":["../../src/gates/question-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAoD,MAAM,aAAa,CAAA;AACxG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAA;AAGnE,
|
|
1
|
+
{"version":3,"file":"question-card.js","sourceRoot":"","sources":["../../src/gates/question-card.ts"],"names":[],"mappings":"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"}
|