@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/input/file-index.js
CHANGED
|
@@ -2,20 +2,14 @@ import {} from "./file-search.js";
|
|
|
2
2
|
import { listWorkspaceFiles, canonicalOrUndefined } from "./workspace-files.js";
|
|
3
3
|
import { realpath } from 'node:fs/promises';
|
|
4
4
|
import { isAbsolute, join, relative } from 'node:path';
|
|
5
|
-
/**
|
|
5
|
+
/** Reuse scans across keystrokes without keeping agent-written files out of the menu indefinitely. */
|
|
6
6
|
const INDEX_TTL_MS = 1_000;
|
|
7
|
-
/**
|
|
7
|
+
/** Release stalled scan waiters and allow a later request to start fresh listing work. */
|
|
8
8
|
const SCAN_TIMEOUT_MS = 5_000;
|
|
9
|
-
/**
|
|
9
|
+
/** Omit a slow-to-prove row rather than let optional completion wait indefinitely on the filesystem. */
|
|
10
10
|
const ROW_PROOF_TIMEOUT_MS = 500;
|
|
11
11
|
/** A listing cache with a window, so a keystroke does not become a scan. */
|
|
12
|
-
export function createFileIndex(cwd
|
|
13
|
-
const list = options.list ?? listWorkspaceFiles;
|
|
14
|
-
const now = options.now ?? Date.now;
|
|
15
|
-
const ttlMs = options.ttlMs ?? INDEX_TTL_MS;
|
|
16
|
-
const scanTimeoutMs = options.scanTimeoutMs ?? SCAN_TIMEOUT_MS;
|
|
17
|
-
const resolvePath = options.resolve ?? realpath;
|
|
18
|
-
const proofTimeoutMs = options.proofTimeoutMs ?? ROW_PROOF_TIMEOUT_MS;
|
|
12
|
+
export function createFileIndex(cwd) {
|
|
19
13
|
let cached;
|
|
20
14
|
let cachedAt = 0;
|
|
21
15
|
let pending;
|
|
@@ -26,17 +20,19 @@ export function createFileIndex(cwd, options = {}) {
|
|
|
26
20
|
// is still waiting on. It runs under its own bound and leaves its answer for
|
|
27
21
|
// the readers that follow.
|
|
28
22
|
const scan = new AbortController();
|
|
29
|
-
const run =
|
|
23
|
+
const run = listWorkspaceFiles(cwd, scan.signal)
|
|
30
24
|
.then(found => {
|
|
31
25
|
// An answer that arrives after the deadline is the one the waiting
|
|
32
26
|
// readers were told to stop waiting for; keeping it would serve a
|
|
33
27
|
// listing the scan had already given up on.
|
|
34
28
|
if (!scan.signal.aborted) {
|
|
35
29
|
cached = found;
|
|
36
|
-
cachedAt = now();
|
|
30
|
+
cachedAt = Date.now();
|
|
37
31
|
}
|
|
38
32
|
return found;
|
|
39
33
|
})
|
|
34
|
+
// Completion is optional: a failed listing leaves the bar usable without
|
|
35
|
+
// offering unproven rows. No cache refresh occurs, so the next stale read retries.
|
|
40
36
|
.catch(() => []);
|
|
41
37
|
const entry = { run, signal: scan.signal };
|
|
42
38
|
pending = entry;
|
|
@@ -46,7 +42,7 @@ export function createFileIndex(cwd, options = {}) {
|
|
|
46
42
|
// joining a scan that outlived its bound.
|
|
47
43
|
if (pending === entry)
|
|
48
44
|
pending = undefined;
|
|
49
|
-
},
|
|
45
|
+
}, SCAN_TIMEOUT_MS);
|
|
50
46
|
void run.finally(() => {
|
|
51
47
|
clearTimeout(timer);
|
|
52
48
|
// A settled scan is no longer pending even when its listing was refused
|
|
@@ -62,7 +58,7 @@ export function createFileIndex(cwd, options = {}) {
|
|
|
62
58
|
// holds, without starting work it would not wait for.
|
|
63
59
|
if (signal.aborted)
|
|
64
60
|
return cached ?? [];
|
|
65
|
-
if (cached !== undefined && now() - cachedAt <
|
|
61
|
+
if (cached !== undefined && Date.now() - cachedAt < INDEX_TTL_MS)
|
|
66
62
|
return cached;
|
|
67
63
|
const entry = pending ?? startScan();
|
|
68
64
|
// The deadline releases a waiter even when the work beneath it cannot be
|
|
@@ -74,18 +70,26 @@ export function createFileIndex(cwd, options = {}) {
|
|
|
74
70
|
async reachable(path, signal) {
|
|
75
71
|
if (signal.aborted)
|
|
76
72
|
return false;
|
|
77
|
-
|
|
73
|
+
// Share a proven anchor, but let transient filesystem failures recover on later attempts.
|
|
74
|
+
root ??= canonicalOrUndefined(cwd).then(canonical => {
|
|
75
|
+
if (canonical === undefined)
|
|
76
|
+
root = undefined;
|
|
77
|
+
return canonical;
|
|
78
|
+
});
|
|
78
79
|
// Both the root and the row are bound the same way: a filesystem that
|
|
79
80
|
// stopped answering must not hold a menu open, and a proof that did not
|
|
80
81
|
// arrive in time is a proof that never happened.
|
|
81
|
-
const canonical = await withinBound(root, signal,
|
|
82
|
+
const canonical = await withinBound(root, signal, ROW_PROOF_TIMEOUT_MS);
|
|
82
83
|
// The caller may have looked away while the root was being proven, and row
|
|
83
84
|
// work started behind its back would have nothing left to answer for it.
|
|
84
85
|
if (canonical === undefined || signal.aborted)
|
|
85
86
|
return false;
|
|
86
|
-
const target = await withinBound(
|
|
87
|
+
const target = await withinBound(realpath(join(cwd, path)), signal, ROW_PROOF_TIMEOUT_MS);
|
|
87
88
|
if (target === undefined)
|
|
88
89
|
return false;
|
|
90
|
+
// Only descendants qualify for file references; the workspace root is not a row.
|
|
91
|
+
// This conservative parent-prefix check also omits contained names such as
|
|
92
|
+
// ..notes, so reachability is stricter than offerablePath spelling validation.
|
|
89
93
|
const inside = relative(canonical, target);
|
|
90
94
|
return inside !== '' && !inside.startsWith('..') && !isAbsolute(inside);
|
|
91
95
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-index.js","sourceRoot":"","sources":["../../src/input/file-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"file-index.js","sourceRoot":"","sources":["../../src/input/file-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export interface AtToken {
|
|
|
15
15
|
readonly query: string;
|
|
16
16
|
readonly quoted: boolean;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
18
|
+
/** Bound menu rows and the concurrent reachability proofs completion performs for them. */
|
|
19
19
|
export declare const SUGGESTION_LIMIT = 20;
|
|
20
20
|
/**
|
|
21
21
|
* Read the at-token the cursor sits in, or undefined when it sits in none.
|
|
@@ -57,12 +57,15 @@ export declare function offerableCandidate(candidate: Candidate): boolean;
|
|
|
57
57
|
/**
|
|
58
58
|
* The rows that best answer the fragment, best first.
|
|
59
59
|
*
|
|
60
|
-
* Only the paths are searched,
|
|
60
|
+
* Only the paths are searched, so a fragment
|
|
61
61
|
* may match a segment anywhere in the tree. Ties fall to a directory over a
|
|
62
62
|
* file — a directory is a place to keep typing, a file ends the search — then
|
|
63
63
|
* to the shallower, shorter path, which is the one the reader is likelier to
|
|
64
64
|
* mean.
|
|
65
|
+
*
|
|
66
|
+
* Scoring yields so newer input can cancel it; the final full sort is synchronous
|
|
67
|
+
* and is not bounded by the suggestion limit.
|
|
65
68
|
*/
|
|
66
|
-
export declare function
|
|
69
|
+
export declare function rankFilesAsync(query: string, candidates: readonly Candidate[], limit: number, signal: AbortSignal): Promise<readonly Candidate[]>;
|
|
67
70
|
export declare function depthOf(path: string): number;
|
|
68
71
|
//# sourceMappingURL=file-search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-search.d.ts","sourceRoot":"","sources":["../../src/input/file-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-search.d.ts","sourceRoot":"","sources":["../../src/input/file-search.ts"],"names":[],"mappings":"AAQA,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,KAAK,CAAA;AASlC;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAmBzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAI5E;AAyDD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAKD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAGhE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAoBvJ;AAiBD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C"}
|
package/lib/input/file-search.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { setImmediate } from 'node:timers/promises';
|
|
2
|
+
import { performance } from 'node:perf_hooks';
|
|
1
3
|
import { fuzzyScore } from "./fuzzy.js";
|
|
2
|
-
/**
|
|
4
|
+
/** Ranking must give a newer keyboard event time to cancel obsolete work. */
|
|
5
|
+
const RANK_BATCH_SIZE = 256;
|
|
6
|
+
const RANK_SLICE_MS = 4;
|
|
7
|
+
/** Bound menu rows and the concurrent reachability proofs completion performs for them. */
|
|
3
8
|
export const SUGGESTION_LIMIT = 20;
|
|
4
|
-
/**
|
|
9
|
+
/** Share token boundaries with quoting so an inserted path survives the same parser that offers it. */
|
|
5
10
|
const TOKEN_DELIMITERS = new Set([' ', '\t', '"', "'", '=']);
|
|
6
11
|
const QUOTE = '"';
|
|
7
12
|
const ESCAPE = '\\';
|
|
@@ -129,25 +134,39 @@ export function offerableCandidate(candidate) {
|
|
|
129
134
|
/**
|
|
130
135
|
* The rows that best answer the fragment, best first.
|
|
131
136
|
*
|
|
132
|
-
* Only the paths are searched,
|
|
137
|
+
* Only the paths are searched, so a fragment
|
|
133
138
|
* may match a segment anywhere in the tree. Ties fall to a directory over a
|
|
134
139
|
* file — a directory is a place to keep typing, a file ends the search — then
|
|
135
140
|
* to the shallower, shorter path, which is the one the reader is likelier to
|
|
136
141
|
* mean.
|
|
142
|
+
*
|
|
143
|
+
* Scoring yields so newer input can cancel it; the final full sort is synchronous
|
|
144
|
+
* and is not bounded by the suggestion limit.
|
|
137
145
|
*/
|
|
138
|
-
export function
|
|
146
|
+
export async function rankFilesAsync(query, candidates, limit, signal) {
|
|
147
|
+
if (signal.aborted)
|
|
148
|
+
return [];
|
|
139
149
|
const needle = query.trim();
|
|
140
150
|
if (needle === '')
|
|
141
151
|
return topLevel(candidates, limit);
|
|
142
152
|
const scored = [];
|
|
153
|
+
let batch = 0;
|
|
154
|
+
let deadline = performance.now() + RANK_SLICE_MS;
|
|
143
155
|
for (const candidate of candidates) {
|
|
144
156
|
const score = fuzzyScore(needle, candidate.path);
|
|
145
|
-
if (score
|
|
146
|
-
|
|
147
|
-
|
|
157
|
+
if (score !== undefined)
|
|
158
|
+
scored.push({ candidate, score });
|
|
159
|
+
if (++batch >= RANK_BATCH_SIZE || performance.now() >= deadline) {
|
|
160
|
+
await setImmediate();
|
|
161
|
+
if (signal.aborted)
|
|
162
|
+
return [];
|
|
163
|
+
batch = 0;
|
|
164
|
+
deadline = performance.now() + RANK_SLICE_MS;
|
|
165
|
+
}
|
|
148
166
|
}
|
|
149
|
-
|
|
150
|
-
|
|
167
|
+
// Select from the global ranking, not the listing order, so a late-listed
|
|
168
|
+
// candidate can still displace an earlier one from the limited menu.
|
|
169
|
+
return scored.sort(compareScored).slice(0, limit).map(entry => entry.candidate);
|
|
151
170
|
}
|
|
152
171
|
function compareScored(left, right) {
|
|
153
172
|
if (left.score !== right.score)
|
|
@@ -165,7 +184,7 @@ function compareScored(left, right) {
|
|
|
165
184
|
export function depthOf(path) {
|
|
166
185
|
return path.split('/').length;
|
|
167
186
|
}
|
|
168
|
-
/**
|
|
187
|
+
/** With no fragment to rank, offer root entries as starting points; directories let the reader narrow the path. */
|
|
169
188
|
function topLevel(candidates, limit) {
|
|
170
189
|
return candidates
|
|
171
190
|
.filter(candidate => !candidate.path.includes('/'))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-search.js","sourceRoot":"","sources":["../../src/input/file-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"file-search.js","sourceRoot":"","sources":["../../src/input/file-search.ts"],"names":[],"mappings":"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"}
|
package/lib/input/fuzzy.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Rank ordered fragment matches by their boundaries, runs, and gaps.
|
|
3
3
|
*
|
|
4
|
-
* A greedy scan can
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* character is worth a fixed amount, starting a word is worth more, continuing
|
|
8
|
-
* a run is worth more than the gap it avoids, and every skipped character
|
|
9
|
-
* costs — a little inside a run, more when it opens a new gap. A reader typing
|
|
10
|
-
* edtr or srccomp gets a ranking their fingers recognize.
|
|
4
|
+
* A greedy scan can establish that all characters appear without distinguishing
|
|
5
|
+
* useful alignments. Boundary and consecutive credit favour segment starts and
|
|
6
|
+
* compact runs; gap penalties distinguish scattered matches.
|
|
11
7
|
*
|
|
12
8
|
* Classes are read from the original text, so a camel hump keeps its bonus
|
|
13
9
|
* while the comparison itself stays case-insensitive. Matching works in code
|
|
@@ -18,10 +14,8 @@
|
|
|
18
14
|
* different kinds of rows needs that concern in its own bands, and the bands
|
|
19
15
|
* in {@link matchScore} keep an early hit above a late one.
|
|
20
16
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* while this reads every position and keeps the best. A short fragment still
|
|
24
|
-
* deserves the row that matches it best, and a test pins the difference.
|
|
17
|
+
* A one-character fragment considers every position so a later, stronger
|
|
18
|
+
* boundary can outrank the first occurrence.
|
|
25
19
|
*/
|
|
26
20
|
/**
|
|
27
21
|
* The case-folded text the scorer compares against.
|
package/lib/input/fuzzy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy.d.ts","sourceRoot":"","sources":["../../src/input/fuzzy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fuzzy.d.ts","sourceRoot":"","sources":["../../src/input/fuzzy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAoIH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuG/E"}
|
package/lib/input/fuzzy.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Rank ordered fragment matches by their boundaries, runs, and gaps.
|
|
3
3
|
*
|
|
4
|
-
* A greedy scan can
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* character is worth a fixed amount, starting a word is worth more, continuing
|
|
8
|
-
* a run is worth more than the gap it avoids, and every skipped character
|
|
9
|
-
* costs — a little inside a run, more when it opens a new gap. A reader typing
|
|
10
|
-
* edtr or srccomp gets a ranking their fingers recognize.
|
|
4
|
+
* A greedy scan can establish that all characters appear without distinguishing
|
|
5
|
+
* useful alignments. Boundary and consecutive credit favour segment starts and
|
|
6
|
+
* compact runs; gap penalties distinguish scattered matches.
|
|
11
7
|
*
|
|
12
8
|
* Classes are read from the original text, so a camel hump keeps its bonus
|
|
13
9
|
* while the comparison itself stays case-insensitive. Matching works in code
|
|
@@ -18,17 +14,14 @@
|
|
|
18
14
|
* different kinds of rows needs that concern in its own bands, and the bands
|
|
19
15
|
* in {@link matchScore} keep an early hit above a late one.
|
|
20
16
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* while this reads every position and keeps the best. A short fragment still
|
|
24
|
-
* deserves the row that matches it best, and a test pins the difference.
|
|
17
|
+
* A one-character fragment considers every position so a later, stronger
|
|
18
|
+
* boundary can outrank the first occurrence.
|
|
25
19
|
*/
|
|
26
20
|
/**
|
|
27
21
|
* Character classes the bonus matrix distinguishes.
|
|
28
22
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* aims at even though no whitespace precedes it.
|
|
23
|
+
* Path and field separators receive a distinct class because a segment start
|
|
24
|
+
* is a boundary a reader aims at even though no whitespace precedes it.
|
|
32
25
|
*/
|
|
33
26
|
const WHITE = 0;
|
|
34
27
|
const NON_WORD = 1;
|
|
@@ -58,15 +51,12 @@ const BONUS_BOUNDARY_DELIMITER = BONUS_BOUNDARY + 1;
|
|
|
58
51
|
const INITIAL_CLASS = WHITE;
|
|
59
52
|
const DELIMITER_CHARACTERS = '/,:;|';
|
|
60
53
|
const WHITE_CHARACTERS = ' \t\n\v\f\r\u0085\u00a0';
|
|
61
|
-
const LOWER_PATTERN = /[a-z]/;
|
|
62
|
-
const UPPER_PATTERN = /[A-Z]/;
|
|
63
54
|
const NUMBER_PATTERN = /[0-9]/;
|
|
64
55
|
/**
|
|
65
|
-
*
|
|
56
|
+
* Preserve word boundaries for characters outside ASCII.
|
|
66
57
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* text fzf ranks higher.
|
|
58
|
+
* Treating a letter such as é as punctuation would grant an artificial boundary
|
|
59
|
+
* bonus to the following letter and distort ranking across scripts.
|
|
70
60
|
*/
|
|
71
61
|
const UNICODE_SPACE_PATTERN = /\p{White_Space}/u;
|
|
72
62
|
const UNICODE_LOWER_PATTERN = /\p{Ll}/u;
|
|
@@ -99,10 +89,9 @@ function classOf(character) {
|
|
|
99
89
|
/**
|
|
100
90
|
* What a character earns given the class before it.
|
|
101
91
|
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* because a reader who typed it meant it.
|
|
92
|
+
* Boundary credit takes precedence over camel and digit transitions so an
|
|
93
|
+
* opening segment is not scored as an internal hump. Separator matches retain
|
|
94
|
+
* credit because the fragment may name the separator itself.
|
|
106
95
|
*/
|
|
107
96
|
function bonusFor(previous, current) {
|
|
108
97
|
if (current >= NON_WORD) {
|
|
@@ -263,6 +252,8 @@ export function fuzzyScore(needle, haystack) {
|
|
|
263
252
|
credit = Math.max(bonus, BONUS_CONSECUTIVE, chunkStart);
|
|
264
253
|
}
|
|
265
254
|
}
|
|
255
|
+
// A losing match cannot pass consecutive credit into the next row:
|
|
256
|
+
// that would reward a run the retained alignment did not choose.
|
|
266
257
|
if (matched + credit < skipped) {
|
|
267
258
|
matched += bonus;
|
|
268
259
|
consecutive = 0;
|
|
@@ -279,8 +270,8 @@ export function fuzzyScore(needle, haystack) {
|
|
|
279
270
|
if (index === queryLength - 1 && score > best)
|
|
280
271
|
best = score;
|
|
281
272
|
}
|
|
282
|
-
//
|
|
283
|
-
//
|
|
273
|
+
// Retain only the previous score and run rows: the next recurrence needs
|
|
274
|
+
// those rows, not the full alignment table.
|
|
284
275
|
previousRow.set(row);
|
|
285
276
|
previousRuns.set(runs);
|
|
286
277
|
}
|
package/lib/input/fuzzy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../../src/input/fuzzy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../../src/input/fuzzy.ts"],"names":[],"mappings":"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"}
|
package/lib/input/ghost.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* test can drive without a screen.
|
|
8
8
|
*/
|
|
9
9
|
/** One recorded prompt, as this rule needs it. */
|
|
10
|
-
|
|
10
|
+
interface GhostCandidate {
|
|
11
11
|
readonly text: string;
|
|
12
12
|
}
|
|
13
13
|
/** Where the editor's cursor sits, in the coordinates the base editor reports. */
|
|
@@ -17,14 +17,13 @@ export interface EditorCursor {
|
|
|
17
17
|
}
|
|
18
18
|
/** What one paint knows when it asks for a suggestion. */
|
|
19
19
|
export interface GhostInput {
|
|
20
|
+
/** Newest first, matching the history store; order breaks ties between matching prefixes. */
|
|
20
21
|
readonly entries: readonly GhostCandidate[];
|
|
21
22
|
readonly text: string;
|
|
22
23
|
readonly lines: readonly string[];
|
|
23
24
|
readonly cursor: EditorCursor;
|
|
24
25
|
}
|
|
25
|
-
/**
|
|
26
|
-
export declare const NEWLINE_MARKER = "\u21B5";
|
|
27
|
-
/** Whether the cursor sits past the last character of the whole text. */
|
|
26
|
+
/** Ghost drawing and acceptance append after the cursor, so neither may run inside existing text. */
|
|
28
27
|
export declare function isCursorAtTextEnd(input: {
|
|
29
28
|
lines: readonly string[];
|
|
30
29
|
cursor: EditorCursor;
|
|
@@ -39,8 +38,9 @@ export declare function isCursorAtTextEnd(input: {
|
|
|
39
38
|
export declare function ghostSuffix(input: GhostInput): string | undefined;
|
|
40
39
|
/** The next word of a suffix, whitespace included, or undefined when there is none. */
|
|
41
40
|
export declare function nextGhostWord(text: string): string | undefined;
|
|
42
|
-
/**
|
|
41
|
+
/** Keep the ghost within the editor cursor row; mark a fold so acceptance can still include unseen following lines. */
|
|
43
42
|
export declare function ghostDisplayLine(text: string): string;
|
|
44
43
|
/** One grapheme per entry, so styling never lands inside a character. */
|
|
45
44
|
export declare function ghostGraphemes(text: string): string[];
|
|
45
|
+
export {};
|
|
46
46
|
//# sourceMappingURL=ghost.d.ts.map
|
package/lib/input/ghost.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ghost.d.ts","sourceRoot":"","sources":["../../src/input/ghost.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kDAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"ghost.d.ts","sourceRoot":"","sources":["../../src/input/ghost.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,kDAAkD;AAClD,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC9B;AAkBD,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,OAAO,CAIpG;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAMjE;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D;AAED,uHAAuH;AACvH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAErD"}
|
package/lib/input/ghost.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* test can drive without a screen.
|
|
8
8
|
*/
|
|
9
9
|
/** Marks a folded ghost so the reader knows the suggestion continues. */
|
|
10
|
-
|
|
10
|
+
const NEWLINE_MARKER = '\u21b5';
|
|
11
11
|
/**
|
|
12
12
|
* Leading whitespace travels with the word so a partial accept keeps spacing.
|
|
13
13
|
*
|
|
@@ -19,7 +19,7 @@ const NEXT_WORD = /^\s*\S+/u;
|
|
|
19
19
|
// and slicing by code unit would orphan the high surrogate of an emoji or split
|
|
20
20
|
// a ZWJ cluster across the cursor cell.
|
|
21
21
|
const GRAPHEMES = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
22
|
-
/**
|
|
22
|
+
/** Ghost drawing and acceptance append after the cursor, so neither may run inside existing text. */
|
|
23
23
|
export function isCursorAtTextEnd(input) {
|
|
24
24
|
const lastLineIndex = Math.max(0, input.lines.length - 1);
|
|
25
25
|
const lastLine = input.lines[lastLineIndex] ?? '';
|
|
@@ -33,6 +33,7 @@ export function isCursorAtTextEnd(input) {
|
|
|
33
33
|
* an empty ghost and hide the useful one behind it.
|
|
34
34
|
*/
|
|
35
35
|
export function ghostSuffix(input) {
|
|
36
|
+
// An empty prefix narrows nothing; require typed text before offering a history continuation.
|
|
36
37
|
if (input.text.length === 0)
|
|
37
38
|
return undefined;
|
|
38
39
|
if (!isCursorAtTextEnd(input))
|
|
@@ -44,7 +45,7 @@ export function ghostSuffix(input) {
|
|
|
44
45
|
export function nextGhostWord(text) {
|
|
45
46
|
return text.match(NEXT_WORD)?.[0];
|
|
46
47
|
}
|
|
47
|
-
/**
|
|
48
|
+
/** Keep the ghost within the editor cursor row; mark a fold so acceptance can still include unseen following lines. */
|
|
48
49
|
export function ghostDisplayLine(text) {
|
|
49
50
|
const newlineIndex = text.indexOf('\n');
|
|
50
51
|
if (newlineIndex < 0)
|
package/lib/input/ghost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ghost.js","sourceRoot":"","sources":["../../src/input/ghost.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"ghost.js","sourceRoot":"","sources":["../../src/input/ghost.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH,yEAAyE;AACzE,MAAM,cAAc,GAAG,QAAQ,CAAA;AAE/B;;;;;GAKG;AACH,MAAM,SAAS,GAAG,UAAU,CAAA;AAE5B,+EAA+E;AAC/E,gFAAgF;AAChF,wCAAwC;AACxC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAA;AAE5E,qGAAqG;AACrG,MAAM,UAAU,iBAAiB,CAAC,KAAyD;IACzF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;IACjD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,MAAM,CAAA;AACpF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,8FAA8F;IAC9F,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC7C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACzG,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC9E,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,cAAc,CAAA;AACrD,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACrE,CAAC"}
|
package/lib/input/key-press.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { type KeyId } from '@earendil-works/pi-tui';
|
|
|
6
6
|
* layer owns the equivalences that make one press equal to another, separately
|
|
7
7
|
* from the table of actions those presses resolve to.
|
|
8
8
|
*/
|
|
9
|
-
/**
|
|
9
|
+
/** Reserve the flow-control resume key so bindings do not depend on whether the tty consumes it. */
|
|
10
10
|
export declare const TERMINAL_OWNED_KEYS: readonly KeyId[];
|
|
11
11
|
/** The key a plain press of Return arrives as. */
|
|
12
12
|
export declare const ENTER_KEY: KeyId;
|
|
@@ -24,9 +24,9 @@ export declare function normalizeKey(raw: string): KeyId | undefined;
|
|
|
24
24
|
/**
|
|
25
25
|
* Whether the library can match a key at all.
|
|
26
26
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* Reject combinations the installed matcher cannot recognize, rather than
|
|
28
|
+
* accepting bindings that never dispatch. This restricts modified Escape and
|
|
29
|
+
* function keys, and modifiers on Clear beyond plain, shift, and control.
|
|
30
30
|
*/
|
|
31
31
|
export declare function isPressable(key: KeyId): boolean;
|
|
32
32
|
/** Whether a key is one modifier chord on one letter or digit, the only shape a chord starter may take. */
|
|
@@ -43,15 +43,16 @@ export interface PressRow {
|
|
|
43
43
|
readonly id: string;
|
|
44
44
|
readonly key: KeyId;
|
|
45
45
|
}
|
|
46
|
-
/**
|
|
46
|
+
/** Keep connected collision rows and their shared sequences together for conflict reporting. */
|
|
47
47
|
export interface PressOverlap {
|
|
48
48
|
readonly ids: readonly string[];
|
|
49
49
|
readonly key: KeyId;
|
|
50
50
|
readonly spellings: readonly string[];
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
53
|
+
* Report connected conflicts together so a row shared by multiple collisions
|
|
54
|
+
* appears in one group. Connections can use different sequences; not every row
|
|
55
|
+
* in a group necessarily matches the same sequence.
|
|
55
56
|
*/
|
|
56
57
|
export declare function pressOverlaps(rows: readonly PressRow[]): PressOverlap[];
|
|
57
58
|
//# sourceMappingURL=key-press.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-press.d.ts","sourceRoot":"","sources":["../../src/input/key-press.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnH;;;;;;GAMG;AAEH,
|
|
1
|
+
{"version":3,"file":"key-press.d.ts","sourceRoot":"","sources":["../../src/input/key-press.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnH;;;;;;GAMG;AAEH,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,EAAE,SAAS,KAAK,EAAe,CAAA;AAE/D,kDAAkD;AAClD,eAAO,MAAM,SAAS,EAAE,KAAe,CAAA;AAkBvC,8FAA8F;AAC9F,wBAAgB,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAE1C;AA8BD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAgB3D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAQ/C;AAED,2GAA2G;AAC3G,wBAAgB,aAAa,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAGjD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAInD;AAmDD,8FAA8F;AAC9F,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAA;CACpB;AAED,gGAAgG;AAChG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CACtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,EAAE,CA+CvE"}
|