@deepseek-harness-tui/dsh-tui 0.11.0 → 0.11.2
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/README.md +55 -20
- package/assets/whale-girl/whale-girl-dark.png +0 -0
- package/assets/whale-girl/whale-girl-happy.png +0 -0
- package/assets/whale-girl/whale-girl.png +0 -0
- package/bin/dsh-tui.js +63 -3
- package/cordis.patch.yml +43 -20
- package/cordis.yml +6 -4
- package/lib/settings.json +1272 -0
- package/lib/types/activityPrefs.d.ts +24 -0
- package/lib/types/activityPrefs.d.ts.map +1 -1
- package/lib/types/activityPrefs.js +50 -1
- package/lib/types/adapter/channel/state.d.ts.map +1 -1
- package/lib/types/adapter/channel/state.js +3 -1
- package/lib/types/adapter/channel/ui-policy.d.ts +9 -2
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +14 -1
- package/lib/types/adapter/kernel/replay.d.ts.map +1 -1
- package/lib/types/adapter/kernel/replay.js +2 -0
- package/lib/types/adapter/ports/channel-display.d.ts +12 -0
- package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-session.d.ts +38 -0
- package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +12 -0
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +53 -7
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +43 -12
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel.d.ts +4 -1
- package/lib/types/adapter/ports/channel.d.ts.map +1 -1
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +2 -0
- package/lib/types/components/ActivityLine.d.ts +7 -2
- package/lib/types/components/ActivityLine.d.ts.map +1 -1
- package/lib/types/components/ActivityLine.js +0 -8
- package/lib/types/components/BalanceReportRow.d.ts +10 -2
- package/lib/types/components/BalanceReportRow.d.ts.map +1 -1
- package/lib/types/components/BalanceReportRow.js +18 -4
- package/lib/types/components/CompactionStatusRow.d.ts +24 -0
- package/lib/types/components/CompactionStatusRow.d.ts.map +1 -0
- package/lib/types/components/CompactionStatusRow.js +72 -0
- package/lib/types/components/GoalTodoPanel.js +2 -2
- package/lib/types/components/HelpMenu.d.ts +2 -2
- package/lib/types/components/HelpMenu.d.ts.map +1 -1
- package/lib/types/components/HelpMenu.js +5 -4
- package/lib/types/components/InlineMathParagraph.d.ts +22 -0
- package/lib/types/components/InlineMathParagraph.d.ts.map +1 -0
- package/lib/types/components/InlineMathParagraph.js +178 -0
- package/lib/types/components/LogoV2.d.ts +41 -3
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +148 -24
- package/lib/types/components/Markdown.d.ts +10 -3
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +47 -14
- package/lib/types/components/MathBlock.d.ts +13 -0
- package/lib/types/components/MathBlock.d.ts.map +1 -0
- package/lib/types/components/MathBlock.js +136 -0
- package/lib/types/components/MessageList.d.ts +10 -1
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +15 -5
- package/lib/types/components/MigratePicker.d.ts +30 -0
- package/lib/types/components/MigratePicker.d.ts.map +1 -0
- package/lib/types/components/MigratePicker.js +38 -0
- package/lib/types/components/PromptInput.d.ts +17 -0
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +96 -9
- package/lib/types/components/SplitDiffView.d.ts.map +1 -1
- package/lib/types/components/SplitDiffView.js +3 -1
- package/lib/types/components/StarPrompt.d.ts +53 -0
- package/lib/types/components/StarPrompt.d.ts.map +1 -0
- package/lib/types/components/StarPrompt.js +281 -0
- package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
- package/lib/types/components/StreamingMarkdown.js +20 -3
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +12 -6
- package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
- package/lib/types/components/SubagentDetailScene.js +8 -3
- package/lib/types/components/TimelineRail.d.ts.map +1 -1
- package/lib/types/components/TimelineRail.js +9 -1
- package/lib/types/components/Whale.d.ts +17 -8
- package/lib/types/components/Whale.d.ts.map +1 -1
- package/lib/types/components/Whale.js +25 -15
- package/lib/types/components/WhaleGirl.d.ts +29 -0
- package/lib/types/components/WhaleGirl.d.ts.map +1 -0
- package/lib/types/components/WhaleGirl.js +32 -0
- package/lib/types/components/WorkingSpinner.d.ts +4 -1
- package/lib/types/components/WorkingSpinner.d.ts.map +1 -1
- package/lib/types/components/WorkingSpinner.js +2 -2
- package/lib/types/components/bigfont.d.ts +47 -18
- package/lib/types/components/bigfont.d.ts.map +1 -1
- package/lib/types/components/bigfont.js +55 -40
- package/lib/types/components/design-system/HintLine.d.ts +1 -2
- package/lib/types/components/design-system/HintLine.d.ts.map +1 -1
- package/lib/types/components/design-system/HintLine.js +1 -2
- package/lib/types/components/design-system/ThemeProvider.d.ts +6 -0
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +40 -1
- package/lib/types/components/maidPortrait.d.ts +44 -0
- package/lib/types/components/maidPortrait.d.ts.map +1 -0
- package/lib/types/components/maidPortrait.js +178 -0
- package/lib/types/components/mathPreview.d.ts +25 -0
- package/lib/types/components/mathPreview.d.ts.map +1 -0
- package/lib/types/components/mathPreview.js +48 -0
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts +2 -1
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +4 -2
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +2 -2
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +31 -26
- package/lib/types/components/messages/TranscriptImages.d.ts.map +1 -1
- package/lib/types/components/messages/TranscriptImages.js +11 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +14 -2
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +80 -38
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +3 -3
- package/lib/types/components/sessions/ForeignSessionRow.d.ts +34 -0
- package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -0
- package/lib/types/components/sessions/ForeignSessionRow.js +43 -0
- package/lib/types/components/sessions/SourceTabs.d.ts +52 -0
- package/lib/types/components/sessions/SourceTabs.d.ts.map +1 -0
- package/lib/types/components/sessions/SourceTabs.js +70 -0
- package/lib/types/components/splashEggs.d.ts +56 -0
- package/lib/types/components/splashEggs.d.ts.map +1 -0
- package/lib/types/components/splashEggs.js +67 -0
- package/lib/types/components/splashFonts.d.ts +119 -0
- package/lib/types/components/splashFonts.d.ts.map +1 -0
- package/lib/types/components/splashFonts.js +267 -0
- package/lib/types/components/splashLayout.d.ts +41 -0
- package/lib/types/components/splashLayout.d.ts.map +1 -0
- package/lib/types/components/splashLayout.js +40 -0
- package/lib/types/components/whaleGirlSprite.d.ts +17 -0
- package/lib/types/components/whaleGirlSprite.d.ts.map +1 -0
- package/lib/types/components/whaleGirlSprite.js +47 -0
- package/lib/types/deepseekPricing.d.ts +74 -0
- package/lib/types/deepseekPricing.d.ts.map +1 -1
- package/lib/types/deepseekPricing.js +110 -11
- package/lib/types/dsh-adapter/activity-store.d.ts +221 -0
- package/lib/types/dsh-adapter/activity-store.d.ts.map +1 -0
- package/lib/types/dsh-adapter/activity-store.js +359 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.js +6 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +2 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +15 -14
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +70 -21
- package/lib/types/dsh-adapter/channel/compaction.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +35 -4
- package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/local-actions.js +6 -1
- package/lib/types/dsh-adapter/channel/model-switch.d.ts +1 -2
- package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-switch.js +6 -2
- package/lib/types/dsh-adapter/channel/paths.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/paths.js +7 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/preferences.js +16 -0
- package/lib/types/dsh-adapter/channel/projection.d.ts +1 -2
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +127 -17
- package/lib/types/dsh-adapter/channel/question-record.d.ts +76 -0
- package/lib/types/dsh-adapter/channel/question-record.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/question-record.js +107 -0
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-adoption.js +1 -0
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts +42 -0
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-lineage.js +51 -0
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +3 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.js +10 -3
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +43 -9
- package/lib/types/dsh-adapter/channel/session-reset.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.js +7 -1
- package/lib/types/dsh-adapter/channel/session-resume.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +5 -2
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +8 -0
- package/lib/types/dsh-adapter/channel/state.d.ts +19 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +8 -3
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +32 -17
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +309 -8
- package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.d.ts +1 -1
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +34 -18
- package/lib/types/dsh-adapter/compat/index.d.ts +1 -1
- package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/index.js +1 -1
- package/lib/types/dsh-adapter/compat/messages.d.ts +6 -0
- package/lib/types/dsh-adapter/compat/messages.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/messages.js +9 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts +18 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/sessionLog.js +18 -3
- package/lib/types/dsh-adapter/compat/settings.d.ts +2 -0
- package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/settings.js +14 -0
- package/lib/types/dsh-adapter/contract.d.ts +5 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +9 -5
- package/lib/types/dsh-adapter/index.d.ts +36 -1
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +22 -6
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.js +131 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts +17 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.js +329 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.js +102 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts +16 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.js +289 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.js +117 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts +13 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.js +178 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.js +133 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts +60 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.js +178 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts +8 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.js +40 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.js +93 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts +9 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.js +89 -0
- package/lib/types/dsh-adapter/migrate/bin-path.d.ts +6 -0
- package/lib/types/dsh-adapter/migrate/bin-path.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/bin-path.js +30 -0
- package/lib/types/dsh-adapter/migrate/browse.d.ts +42 -0
- package/lib/types/dsh-adapter/migrate/browse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/browse.js +90 -0
- package/lib/types/dsh-adapter/migrate/cli.d.ts +9 -0
- package/lib/types/dsh-adapter/migrate/cli.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/cli.js +106 -0
- package/lib/types/dsh-adapter/migrate/import-one.d.ts +89 -0
- package/lib/types/dsh-adapter/migrate/import-one.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/import-one.js +133 -0
- package/lib/types/dsh-adapter/migrate/index.d.ts +35 -0
- package/lib/types/dsh-adapter/migrate/index.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/index.js +107 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.d.ts +40 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.js +127 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +28 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.js +40 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts +28 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.js +50 -0
- package/lib/types/dsh-adapter/migrate/parse/title.d.ts +18 -0
- package/lib/types/dsh-adapter/migrate/parse/title.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/title.js +29 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.d.ts +62 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.js +110 -0
- package/lib/types/dsh-adapter/migrate/picker.d.ts +64 -0
- package/lib/types/dsh-adapter/migrate/picker.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/picker.js +86 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.d.ts +40 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.js +100 -0
- package/lib/types/dsh-adapter/migrate/sessionize.d.ts +39 -0
- package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/sessionize.js +271 -0
- package/lib/types/dsh-adapter/migrate/types.d.ts +176 -0
- package/lib/types/dsh-adapter/migrate/types.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/types.js +11 -0
- package/lib/types/dsh-adapter/migrate/uuid.d.ts +7 -0
- package/lib/types/dsh-adapter/migrate/uuid.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/uuid.js +25 -0
- package/lib/types/dsh-adapter/plugin.d.ts +5 -3
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +168 -372
- package/lib/types/dsh-adapter/providerWizard.d.ts +17 -0
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/providerWizard.js +254 -66
- package/lib/types/dsh-adapter/questions.d.ts +22 -15
- package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/questions.js +47 -45
- package/lib/types/dsh-adapter/sessions/digest.d.ts +11 -6
- package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/digest.js +20 -13
- package/lib/types/dsh-adapter/sessions/frames.d.ts +3 -1
- package/lib/types/dsh-adapter/sessions/frames.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/frames.js +5 -4
- package/lib/types/dsh-adapter/sessions/list.d.ts +6 -1
- package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/list.js +188 -164
- package/lib/types/dsh-adapter/sessions/recovery.d.ts +16 -0
- package/lib/types/dsh-adapter/sessions/recovery.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sessions/recovery.js +108 -0
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts +7 -0
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sessions/snapshot.js +90 -0
- package/lib/types/dsh-adapter/sessions/store.d.ts +10 -4
- package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/store.js +62 -25
- package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
- package/lib/types/dsh-adapter/settings-sections.js +7 -4
- package/lib/types/dsh-adapter/sideQuestion.d.ts +41 -2
- package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sideQuestion.js +98 -2
- package/lib/types/dsh-adapter/subagents.d.ts +44 -6
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +163 -26
- package/lib/types/herdr.d.ts +2 -0
- package/lib/types/herdr.d.ts.map +1 -1
- package/lib/types/herdr.js +9 -3
- package/lib/types/history.d.ts +13 -1
- package/lib/types/history.d.ts.map +1 -1
- package/lib/types/history.js +15 -2
- package/lib/types/i18n.d.ts +512 -41
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +199 -20
- package/lib/types/ink/components/App.d.ts +2 -2
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +5 -1
- package/lib/types/ink/components/Image.d.ts +14 -1
- package/lib/types/ink/components/Image.d.ts.map +1 -1
- package/lib/types/ink/components/Image.js +2 -2
- package/lib/types/ink/events/input-event.js +3 -3
- package/lib/types/ink/hooks/use-terminal-images.d.ts +12 -0
- package/lib/types/ink/hooks/use-terminal-images.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-terminal-images.js +13 -0
- package/lib/types/ink/ink.d.ts +6 -0
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +16 -1
- package/lib/types/ink/kitty-graphics.d.ts +44 -3
- package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
- package/lib/types/ink/kitty-graphics.js +184 -23
- package/lib/types/ink/log-update.d.ts.map +1 -1
- package/lib/types/ink/log-update.js +19 -1
- package/lib/types/ink/output.d.ts +24 -2
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +83 -5
- package/lib/types/ink/parse-keypress.d.ts +26 -1
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +156 -13
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +8 -1
- package/lib/types/ink/screen.d.ts +24 -0
- package/lib/types/ink/screen.d.ts.map +1 -1
- package/lib/types/ink/screen.js +89 -0
- package/lib/types/ink/selection.d.ts +68 -18
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +178 -31
- package/lib/types/ink/sixel-codec.d.ts +12 -1
- package/lib/types/ink/sixel-codec.d.ts.map +1 -1
- package/lib/types/ink/sixel-codec.js +29 -5
- package/lib/types/ink/sixel-graphics.d.ts.map +1 -1
- package/lib/types/ink/sixel-graphics.js +5 -3
- package/lib/types/ink/styles.d.ts +9 -0
- package/lib/types/ink/styles.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.d.ts +8 -0
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.d.ts +7 -1
- package/lib/types/ink/terminal-querier.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.js +12 -2
- package/lib/types/ink/timeline-rail.d.ts +5 -0
- package/lib/types/ink/timeline-rail.d.ts.map +1 -1
- package/lib/types/math/inline-layout.d.ts +29 -0
- package/lib/types/math/inline-layout.d.ts.map +1 -0
- package/lib/types/math/inline-layout.js +106 -0
- package/lib/types/math/layout.d.ts +58 -0
- package/lib/types/math/layout.d.ts.map +1 -0
- package/lib/types/math/layout.js +59 -0
- package/lib/types/math/renderer.d.ts +64 -0
- package/lib/types/math/renderer.d.ts.map +1 -0
- package/lib/types/math/renderer.js +256 -0
- package/lib/types/screens/Chat.d.ts +17 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +618 -57
- package/lib/types/screens/SessionSupervisor.d.ts +2 -1
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +156 -19
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +49 -11
- package/lib/types/screens/StatusLine.d.ts +5 -1
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +47 -17
- package/lib/types/screens/chatOverlay.d.ts +5 -0
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +1 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +47 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +65 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts +12 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/model.js +26 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts +107 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.js +312 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +4 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +97 -14
- package/lib/types/sessionHistory.d.ts +2 -2
- package/lib/types/sessionHistory.d.ts.map +1 -1
- package/lib/types/sessionHistory.js +31 -5
- package/lib/types/settings/definitions.d.ts +681 -0
- package/lib/types/settings/definitions.d.ts.map +1 -0
- package/lib/types/settings/definitions.js +511 -0
- package/lib/types/starAction.d.ts +44 -0
- package/lib/types/starAction.d.ts.map +1 -0
- package/lib/types/starAction.js +52 -0
- package/lib/types/terminal-utils/latex.d.ts +10 -0
- package/lib/types/terminal-utils/latex.d.ts.map +1 -0
- package/lib/types/terminal-utils/latex.js +1417 -0
- package/lib/types/terminal-utils/markdown.d.ts +3 -1
- package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
- package/lib/types/terminal-utils/markdown.js +26 -1
- package/lib/types/terminal-utils/math.d.ts +66 -0
- package/lib/types/terminal-utils/math.d.ts.map +1 -0
- package/lib/types/terminal-utils/math.js +337 -0
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +6 -0
- package/lib/types/tuiDisplayPrefs.d.ts +67 -0
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +59 -0
- package/lib/types/ui.d.ts +1 -1
- package/lib/types/ui.d.ts.map +1 -1
- package/lib/types/ui.js +1 -1
- package/lib/types/usageStats.d.ts +98 -0
- package/lib/types/usageStats.d.ts.map +1 -0
- package/lib/types/usageStats.js +169 -0
- package/lib/types/utils/bmp.d.ts +17 -0
- package/lib/types/utils/bmp.d.ts.map +1 -0
- package/lib/types/utils/bmp.js +154 -0
- package/lib/types/utils/clipboard.d.ts +14 -2
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +143 -8
- package/lib/types/utils/fold-long-lines.d.ts +1 -1
- package/lib/types/utils/fold-long-lines.d.ts.map +1 -1
- package/lib/types/utils/fold-long-lines.js +3 -2
- package/lib/types/utils/keymap.d.ts +4 -1
- package/lib/types/utils/keymap.d.ts.map +1 -1
- package/lib/types/utils/keymap.js +8 -0
- package/lib/types/utils/modifiers.d.ts +4 -3
- package/lib/types/utils/modifiers.d.ts.map +1 -1
- package/lib/types/utils/modifiers.js +4 -3
- package/lib/types/working-activity.d.ts +10 -9
- package/lib/types/working-activity.d.ts.map +1 -1
- package/lib/types/working-activity.js +17 -10
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/LICENSE +202 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/NOTICE +20 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/index.d.ts +16 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/bundled-packages.json +4 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs +20 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs.LEGAL.txt +35 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/package.json +29 -0
- package/package.json +117 -99
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +0 -19
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts.map +0 -1
- package/lib/types/components/design-system/KeyboardShortcutHint.js +0 -14
- package/lib/types/dsh-adapter/channel/activity.d.ts +0 -20
- package/lib/types/dsh-adapter/channel/activity.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/activity.js +0 -113
- package/lib/types/terminal-utils/terminal.d.ts +0 -18
- package/lib/types/terminal-utils/terminal.d.ts.map +0 -1
- package/lib/types/terminal-utils/terminal.js +0 -96
package/lib/types/ink/output.js
CHANGED
|
@@ -4,7 +4,7 @@ import { getGraphemeSegmenter } from '../utils/intl.js';
|
|
|
4
4
|
import sliceAnsi from '../utils/sliceAnsi.js';
|
|
5
5
|
import { reorderBidi } from './bidi.js';
|
|
6
6
|
import { unionRect } from './layout/geometry.js';
|
|
7
|
-
import { blitRegion, cellRunSpan, createCellRun, extractHyperlinkFromStyles, filterOutHyperlinkStyles, markNoSelectRegion, OSC8_PREFIX, shadeRegion, recordCellRunEntry, recordSpacerRunEntry, replayCellRun, resetScreen, setCellAt, shiftRows, } from './screen.js';
|
|
7
|
+
import { blitRegion, cellRunSpan, createCellRun, extractHyperlinkFromStyles, filterOutHyperlinkStyles, allocateCopyRegionId, clearCopyRegionSpan, markCopyRegion, pruneCopyTexts, markNoSelectRegion, OSC8_PREFIX, shadeRegion, recordCellRunEntry, recordSpacerRunEntry, replayCellRun, resetScreen, setCellAt, shiftRows, } from './screen.js';
|
|
8
8
|
import { stringWidth } from './stringWidth.js';
|
|
9
9
|
import { expandTabs } from './tabstops.js';
|
|
10
10
|
import { TERMINAL_IMAGE_MAX_CELLS, TERMINAL_IMAGE_MAX_FRAME_BYTES, TERMINAL_IMAGE_MAX_PLACEMENTS, } from './terminal-image.js';
|
|
@@ -152,6 +152,22 @@ function isNodeInSubtree(node, root) {
|
|
|
152
152
|
}
|
|
153
153
|
return false;
|
|
154
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* One copy region id per image node for its lifetime, so rows captured
|
|
157
|
+
* during drag-to-scroll and rows still on screen name the same formula.
|
|
158
|
+
*/
|
|
159
|
+
const copyRegionIds = new WeakMap();
|
|
160
|
+
/**
|
|
161
|
+
* Copy text reaches the clipboard without passing through cells, so it never
|
|
162
|
+
* met the render path's control-character rules. Drop C0/C1 (newlines
|
|
163
|
+
* excepted: a block formula's source is multi-line) and the
|
|
164
|
+
* interlinear-annotation code points, which the copy pipeline reserves for
|
|
165
|
+
* its own row metadata.
|
|
166
|
+
*/
|
|
167
|
+
const COPY_TEXT_STRIP = /[\u0000-\u0009\u000b-\u001f\u007f-\u009f\uFFF9-\uFFFB]/g;
|
|
168
|
+
function cleanCopyText(value) {
|
|
169
|
+
return value.replace(COPY_TEXT_STRIP, '');
|
|
170
|
+
}
|
|
155
171
|
/**
|
|
156
172
|
* Slot-reuse ceiling: the clustered array is a second full memory image of
|
|
157
173
|
* the line, and pathological single-line output (base64 blobs, minified
|
|
@@ -502,6 +518,10 @@ export default class Output {
|
|
|
502
518
|
* the mark wins regardless of what's blitted into the region.
|
|
503
519
|
* @param region - the region to mark.
|
|
504
520
|
*/
|
|
521
|
+
/** Mark row `y` as a wrap continuation (see Styles.softWrapContinuation). */
|
|
522
|
+
softWrapRow(y, contentEnd) {
|
|
523
|
+
this.operations.push({ type: 'softWrapRow', y, contentEnd });
|
|
524
|
+
}
|
|
505
525
|
noSelect(region) {
|
|
506
526
|
this.operations.push({ type: 'noSelect', region });
|
|
507
527
|
}
|
|
@@ -525,7 +545,11 @@ export default class Output {
|
|
|
525
545
|
return false;
|
|
526
546
|
}
|
|
527
547
|
const presentation = node.attributes.imagePresentation;
|
|
528
|
-
const
|
|
548
|
+
const transparent = node.attributes.imageTransparent === 'transparent';
|
|
549
|
+
// Both protocols crop a partially visible content image to its visible
|
|
550
|
+
// cells (Sixel re-encodes the slice, Kitty places a source rectangle), so
|
|
551
|
+
// scrolling past a viewport edge never flips it to its text fallback.
|
|
552
|
+
const canCrop = this.terminalImagesEnabled && (presentation === 'preview' || presentation === 'transcript');
|
|
529
553
|
if (!canCrop && (left < 0 ||
|
|
530
554
|
top < 0 ||
|
|
531
555
|
left + width > this.width ||
|
|
@@ -559,6 +583,7 @@ export default class Output {
|
|
|
559
583
|
rows: height,
|
|
560
584
|
source,
|
|
561
585
|
...(presentation === 'preview' || presentation === 'transcript' ? { presentation } : {}),
|
|
586
|
+
...(transparent ? { transparent: true } : {}),
|
|
562
587
|
...(canCrop ? { clip: { x: visibleLeft, y: visibleTop, columns: visibleRight - visibleLeft, rows: visibleBottom - visibleTop } } : {}),
|
|
563
588
|
...(background !== undefined ? { background } : {}),
|
|
564
589
|
};
|
|
@@ -576,8 +601,9 @@ export default class Output {
|
|
|
576
601
|
*/
|
|
577
602
|
reuseImages(node) {
|
|
578
603
|
// A scrollable image's current clip is only known inside its ScrollBox.
|
|
579
|
-
// Descend first rather than admitting stale placements from an ancestor
|
|
580
|
-
|
|
604
|
+
// Descend first rather than admitting stale placements from an ancestor
|
|
605
|
+
// blit: a crop computed without that clip would spill past the viewport.
|
|
606
|
+
if (this.terminalImagesEnabled && this.previousImages.some(p => isNodeInSubtree(p.node, node)))
|
|
581
607
|
return false;
|
|
582
608
|
let reusedAll = true;
|
|
583
609
|
for (const placement of this.previousImages) {
|
|
@@ -650,11 +676,31 @@ export default class Output {
|
|
|
650
676
|
const placement = this.imagePlacements.find(image => image.node === node);
|
|
651
677
|
if (placement) {
|
|
652
678
|
const visible = placement.clip ?? placement;
|
|
653
|
-
|
|
679
|
+
const region = { x: visible.x, y: visible.y, width: visible.columns, height: visible.rows };
|
|
680
|
+
// An image's backing cells are blank; one with copy text (a formula's
|
|
681
|
+
// source) copies as that text, any other image is left out of copies.
|
|
682
|
+
const copyText = node.attributes['imageCopyText'];
|
|
683
|
+
const copied = typeof copyText === 'string' ? cleanCopyText(copyText) : '';
|
|
684
|
+
if (copied !== '') {
|
|
685
|
+
let id = copyRegionIds.get(node);
|
|
686
|
+
if (id === undefined)
|
|
687
|
+
copyRegionIds.set(node, id = allocateCopyRegionId());
|
|
688
|
+
this.operations.push({ type: 'copyRegion', region, text: copied, id });
|
|
689
|
+
}
|
|
690
|
+
else
|
|
691
|
+
this.noSelect(region);
|
|
654
692
|
}
|
|
655
693
|
if (this.imageReady)
|
|
656
694
|
this.imageBackingEnds.set(node, this.operations.length);
|
|
657
695
|
}
|
|
696
|
+
/**
|
|
697
|
+
* The admitted placement's backing colour, or undefined when the raster
|
|
698
|
+
* composites transparently: its cells are then blanks, not a painted
|
|
699
|
+
* surface, so whatever the terminal shows behind the UI stays visible.
|
|
700
|
+
*/
|
|
701
|
+
imagePlacementBackground(node) {
|
|
702
|
+
return this.imagePlacements.find(image => image.node === node)?.background;
|
|
703
|
+
}
|
|
658
704
|
/**
|
|
659
705
|
* Queue a text write at a position, split across lines on newlines.
|
|
660
706
|
* @param x - the left column.
|
|
@@ -810,6 +856,24 @@ export default class Output {
|
|
|
810
856
|
shiftRows(screen, operation.top, operation.bottom, operation.n);
|
|
811
857
|
continue;
|
|
812
858
|
}
|
|
859
|
+
case 'softWrapRow': {
|
|
860
|
+
// Paint order: the marker lands where the producer asked for it, and
|
|
861
|
+
// the write case above resets it when a later operation repaints that
|
|
862
|
+
// row. (This used to run in a pass after every write, which let a
|
|
863
|
+
// marker outlive an overlay that overwrote the row.)
|
|
864
|
+
if (operation.y > 0 && operation.y < screen.height) {
|
|
865
|
+
screen.softWrap[operation.y] = Math.max(1, operation.contentEnd);
|
|
866
|
+
}
|
|
867
|
+
continue;
|
|
868
|
+
}
|
|
869
|
+
case 'copyRegion': {
|
|
870
|
+
// In paint order: anything written over the image later (a menu,
|
|
871
|
+
// an overlay) clears the cells it covers, so a copy reads what is
|
|
872
|
+
// visible there rather than the formula beneath.
|
|
873
|
+
const { x, y, width, height } = operation.region;
|
|
874
|
+
markCopyRegion(screen, x, y, width, height, operation.text, operation.id);
|
|
875
|
+
continue;
|
|
876
|
+
}
|
|
813
877
|
case 'shade': {
|
|
814
878
|
// Honour the active clip like a write: a backdrop inside an
|
|
815
879
|
// overflow-hidden ancestor must not shade cells outside it.
|
|
@@ -882,6 +946,9 @@ export default class Output {
|
|
|
882
946
|
}
|
|
883
947
|
const contentEnd = writeLineToScreen(screen, line, x, lineY, screenWidth, this.stylePool, this.charCache, this.streamingSlot, this.packedOwner);
|
|
884
948
|
writeCells += contentEnd - x;
|
|
949
|
+
if (screen.copyTexts !== undefined && screen.copyTexts.size > 0) {
|
|
950
|
+
clearCopyRegionSpan(screen, lineY, x, contentEnd);
|
|
951
|
+
}
|
|
885
952
|
// See Screen.softWrap docstring for the encoding. contentEnd
|
|
886
953
|
// from writeLineToScreen is tab-expansion-aware, unlike
|
|
887
954
|
// x+stringWidth(line) which treats tabs as width 0.
|
|
@@ -890,6 +957,14 @@ export default class Output {
|
|
|
890
957
|
swBits[lineY] = isSW ? prevContentEnd : 0;
|
|
891
958
|
prevContentEnd = contentEnd;
|
|
892
959
|
}
|
|
960
|
+
else {
|
|
961
|
+
// Paint order: a producer that doesn't track wrapping (fills,
|
|
962
|
+
// raw-ansi, overlays) still replaces the row it paints, so a
|
|
963
|
+
// continuation marker an earlier softWrapRow set for this row
|
|
964
|
+
// is stale — keep it and a copy would glue the overlay's text
|
|
965
|
+
// onto the previous line.
|
|
966
|
+
swBits[lineY] = 0;
|
|
967
|
+
}
|
|
893
968
|
offsetY++;
|
|
894
969
|
}
|
|
895
970
|
continue;
|
|
@@ -907,6 +982,9 @@ export default class Output {
|
|
|
907
982
|
markNoSelectRegion(screen, x, y, width, height);
|
|
908
983
|
}
|
|
909
984
|
}
|
|
985
|
+
// Blits carry the previous frame's region texts; keep only the ones a
|
|
986
|
+
// cell still references, or the map grows by every redrawn formula.
|
|
987
|
+
pruneCopyTexts(screen);
|
|
910
988
|
// Log blit/write ratio for debugging - high write count suggests blitting isn't working
|
|
911
989
|
const totalCells = blitCells + writeCells;
|
|
912
990
|
if (totalCells > 1000 && writeCells > blitCells) {
|
|
@@ -81,6 +81,13 @@ export type Win32PasteState = {
|
|
|
81
81
|
held: ParsedKey[];
|
|
82
82
|
/** collected paste content while active */
|
|
83
83
|
buffer: string;
|
|
84
|
+
/**
|
|
85
|
+
* True when the last character appended to `buffer` came from a CR record
|
|
86
|
+
* (Uc=13). Classic conhost spells a pasted CRLF break as a CR record
|
|
87
|
+
* followed by an LF record (Uc=10); the LF half must fold into the CR's
|
|
88
|
+
* newline instead of appending a second one (issue #1090).
|
|
89
|
+
*/
|
|
90
|
+
lastWasCarriageReturn: boolean;
|
|
84
91
|
};
|
|
85
92
|
export type Win32ProtocolState = {
|
|
86
93
|
held: ParsedKey[];
|
|
@@ -94,6 +101,23 @@ export type KeyParseState = {
|
|
|
94
101
|
mode: 'NORMAL' | 'IN_PASTE';
|
|
95
102
|
incomplete: string;
|
|
96
103
|
pasteBuffer: string;
|
|
104
|
+
/**
|
|
105
|
+
* Host-injected platform gate: this machine MIGHT run the private win32
|
|
106
|
+
* input mode (`supportsWin32InputMode()`). Read-only — capability alone is
|
|
107
|
+
* not evidence and never lights anything by itself; only an explicit
|
|
108
|
+
* `false` closes the gate, and leaving the field absent keeps the parser's
|
|
109
|
+
* pre-gate behavior for direct callers.
|
|
110
|
+
*/
|
|
111
|
+
win32Capable?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Lit by successfully decoding a win32 record. Only behind that evidence
|
|
114
|
+
* may a plain `ESC[` fragment extend the hold (see isRecordPrefix).
|
|
115
|
+
*/
|
|
116
|
+
win32InputMode?: boolean;
|
|
117
|
+
/** First capture of a buffered win32 record; never renewed by flushes. */
|
|
118
|
+
win32InputStartedAt?: number;
|
|
119
|
+
/** A flushed lone ESC may be followed by an ESC-less record fragment. */
|
|
120
|
+
win32EscFlushedAt?: number;
|
|
97
121
|
/**
|
|
98
122
|
* Pending high surrogate from a win32-input-mode record. Uc is a UTF-16
|
|
99
123
|
* code unit, so supplementary-plane characters (emoji, CJK ext-B) arrive
|
|
@@ -149,7 +173,8 @@ export declare const INITIAL_STATE: KeyParseState;
|
|
|
149
173
|
* Tokenize and parse a chunk of terminal input into parsed keys, mouse
|
|
150
174
|
* events, and terminal responses, maintaining paste-mode state.
|
|
151
175
|
* @param prevState - the state returned by the previous call, or INITIAL_STATE.
|
|
152
|
-
* @param input - the input chunk; null
|
|
176
|
+
* @param input - the input chunk; null applies the escape timeout (in-flight
|
|
177
|
+
* win32 records keep their bounded recovery grace).
|
|
153
178
|
* @returns the parsed inputs plus the state to pass to the next call.
|
|
154
179
|
*/
|
|
155
180
|
export declare function parseMultipleKeypresses(prevState: KeyParseState, input?: Buffer | string | null): [ParsedInput[], KeyParseState];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-keypress.d.ts","sourceRoot":"","sources":["../../../src/ink/parse-keypress.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"parse-keypress.d.ts","sourceRoot":"","sources":["../../../src/ink/parse-keypress.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* then interprets sequences as keypresses.
|
|
6
6
|
*/
|
|
7
7
|
import { Buffer } from 'buffer';
|
|
8
|
-
import { PASTE_END, PASTE_START } from './termio/csi.js';
|
|
8
|
+
import { isCSIFinal, isCSIIntermediate, isCSIParam, PASTE_END, PASTE_START } from './termio/csi.js';
|
|
9
9
|
import { createTokenizer } from './termio/tokenize.js';
|
|
10
10
|
// eslint-disable-next-line no-control-regex
|
|
11
11
|
const META_KEY_CODE_RE = /^(?:\x1b)([a-zA-Z0-9])$/;
|
|
@@ -13,6 +13,11 @@ const META_KEY_CODE_RE = /^(?:\x1b)([a-zA-Z0-9])$/;
|
|
|
13
13
|
const FN_KEY_RE =
|
|
14
14
|
// eslint-disable-next-line no-control-regex
|
|
15
15
|
/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/;
|
|
16
|
+
// Complete CSI framing, including sequences outside our keyboard vocabulary.
|
|
17
|
+
// Keep their identity so InputEvent's unknown-code guard suppresses protocol
|
|
18
|
+
// bytes rather than stripping ESC and inserting the parameters as text.
|
|
19
|
+
// eslint-disable-next-line no-control-regex
|
|
20
|
+
const COMPLETE_CSI_RE = /^\x1b\[[\x30-\x3f]*[\x20-\x2f]*[\x40-\x7e]$/;
|
|
16
21
|
// CSI u (kitty keyboard protocol): ESC [ codepoint [; modifier] u
|
|
17
22
|
// Example: ESC[13;2u = Shift+Enter, ESC[27u = Escape (no modifiers)
|
|
18
23
|
// Modifier is optional - when absent, defaults to 1 (no modifiers)
|
|
@@ -44,6 +49,12 @@ const MODIFY_OTHER_KEYS_RE = /^\x1b\[27;(\d+);(\d+)~/;
|
|
|
44
49
|
const WIN32_INPUT_RE = /^\x1b\[([\d;]*)_$/;
|
|
45
50
|
const WIN32_INPUT_TAIL_RE = /\[\d*;\d*;\d*;[01](?:;\d*){0,2}_/g;
|
|
46
51
|
const WIN32_INPUT_TAILS_RE = /^(?:\[\d*;\d*;\d*;[01](?:;\d*){0,2}_)+$/;
|
|
52
|
+
const WIN32_INPUT_PREFIX_RE = /^\x1b\[[\d;]*$/;
|
|
53
|
+
const WIN32_INPUT_BODY_PREFIX_RE = /^\x1b\[\d*;\d*;\d*;[01]?(?:;\d*){0,2}$/;
|
|
54
|
+
// A record fits well within 64 bytes (six INPUT_RECORD integer fields).
|
|
55
|
+
// Bound both memory and the time ambiguous digits can be held after ESC.
|
|
56
|
+
const WIN32_INPUT_MAX_LENGTH = 64;
|
|
57
|
+
const WIN32_INPUT_GRACE_MS = 1000;
|
|
47
58
|
// Prefix of a fragmenting SGR mouse report (`[<btn;col;rowM/m`). ConPTY can
|
|
48
59
|
// split one report across multiple stdin reads; when App's 50ms escape timer
|
|
49
60
|
// fires between the fragments, the pieces stop being part of one buffered
|
|
@@ -517,6 +528,42 @@ function win32RecordChar(key) {
|
|
|
517
528
|
return key.sequence === key.name ? key.name : undefined;
|
|
518
529
|
}
|
|
519
530
|
}
|
|
531
|
+
/**
|
|
532
|
+
* Uc field of the raw win32 record behind `key`, or undefined when the key
|
|
533
|
+
* did not come from one (the decomposed stream also carries plain keys).
|
|
534
|
+
*/
|
|
535
|
+
function win32RecordUc(key) {
|
|
536
|
+
const match = WIN32_INPUT_RE.exec(key.raw ?? '');
|
|
537
|
+
if (!match)
|
|
538
|
+
return undefined;
|
|
539
|
+
const field = match[1].split(';')[2];
|
|
540
|
+
return field === undefined || field === '' ? 0 : parseInt(field, 10);
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Append one paste-body key to the decomposed-paste buffer. Classic conhost
|
|
544
|
+
* spells a pasted CRLF break as two records — CR (Uc=13) then LF (Uc=10) —
|
|
545
|
+
* and the LF must fold into the CR's newline instead of appending a second
|
|
546
|
+
* one (issue #1090). Only a CR record arms the fold, so LF-only text, a lone
|
|
547
|
+
* CR, and ordinary characters (including a real `_`) keep their bytes.
|
|
548
|
+
*/
|
|
549
|
+
function appendWin32PasteChar(state, key) {
|
|
550
|
+
const ch = win32RecordChar(key);
|
|
551
|
+
if (ch === undefined)
|
|
552
|
+
return;
|
|
553
|
+
if (ch !== '\n') {
|
|
554
|
+
state.lastWasCarriageReturn = false;
|
|
555
|
+
state.buffer += ch;
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
const uc = win32RecordUc(key);
|
|
559
|
+
if (uc === 10 && state.lastWasCarriageReturn) {
|
|
560
|
+
// LF record closing the CRLF pair: the CR already emitted the newline.
|
|
561
|
+
state.lastWasCarriageReturn = false;
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
state.lastWasCarriageReturn = uc === 13;
|
|
565
|
+
state.buffer += '\n';
|
|
566
|
+
}
|
|
520
567
|
/**
|
|
521
568
|
* Feed one translated win32 key through the decomposed-paste matcher.
|
|
522
569
|
* Returns the keys to emit (empty while holding a candidate prefix or
|
|
@@ -537,12 +584,14 @@ function feedWin32Paste(state, key) {
|
|
|
537
584
|
if (!state.active) {
|
|
538
585
|
state.active = true;
|
|
539
586
|
state.buffer = '';
|
|
587
|
+
state.lastWasCarriageReturn = false;
|
|
540
588
|
return [];
|
|
541
589
|
}
|
|
542
590
|
// End marker complete: the whole paste as a single event.
|
|
543
591
|
const paste = createPasteKey(state.buffer);
|
|
544
592
|
state.active = false;
|
|
545
593
|
state.buffer = '';
|
|
594
|
+
state.lastWasCarriageReturn = false;
|
|
546
595
|
return [paste];
|
|
547
596
|
}
|
|
548
597
|
return [];
|
|
@@ -556,13 +605,13 @@ function feedWin32Paste(state, key) {
|
|
|
556
605
|
state.matched = 0;
|
|
557
606
|
if (state.active) {
|
|
558
607
|
for (const k of held)
|
|
559
|
-
state
|
|
608
|
+
appendWin32PasteChar(state, k);
|
|
560
609
|
return feedWin32Paste(state, key);
|
|
561
610
|
}
|
|
562
611
|
return [...held, ...feedWin32Paste(state, key)];
|
|
563
612
|
}
|
|
564
613
|
if (state.active) {
|
|
565
|
-
state
|
|
614
|
+
appendWin32PasteChar(state, key);
|
|
566
615
|
return [];
|
|
567
616
|
}
|
|
568
617
|
return [key];
|
|
@@ -683,25 +732,86 @@ function inputToString(input) {
|
|
|
683
732
|
* Tokenize and parse a chunk of terminal input into parsed keys, mouse
|
|
684
733
|
* events, and terminal responses, maintaining paste-mode state.
|
|
685
734
|
* @param prevState - the state returned by the previous call, or INITIAL_STATE.
|
|
686
|
-
* @param input - the input chunk; null
|
|
735
|
+
* @param input - the input chunk; null applies the escape timeout (in-flight
|
|
736
|
+
* win32 records keep their bounded recovery grace).
|
|
687
737
|
* @returns the parsed inputs plus the state to pass to the next call.
|
|
688
738
|
*/
|
|
689
739
|
export function parseMultipleKeypresses(prevState, input = '') {
|
|
690
740
|
const isFlush = input === null;
|
|
691
|
-
|
|
741
|
+
let inputString = isFlush ? '' : inputToString(input);
|
|
692
742
|
// Get or create tokenizer
|
|
693
743
|
const tokenizer = prevState._tokenizer ?? createTokenizer({
|
|
694
744
|
x10Mouse: true,
|
|
695
745
|
splitInputControls: true,
|
|
696
746
|
});
|
|
697
|
-
//
|
|
698
|
-
|
|
747
|
+
// Keep record framing in the tokenizer, rather than converting a timed-out
|
|
748
|
+
// prefix into a key and trying to scrub its text later (#827). The host
|
|
749
|
+
// capability flag only says the platform MIGHT run the private mode; only a
|
|
750
|
+
// decoded record proves it does, so the two stay separate: a frame whose
|
|
751
|
+
// own shape is already record-specific holds on its own (that is how even
|
|
752
|
+
// the first record survives a split), and anything else needs an open gate
|
|
753
|
+
// plus a lit parser. A lone ESC therefore keeps its 50ms behavior on hosts
|
|
754
|
+
// that ignore DECSET 9001, and bracketed-paste payloads remain literal.
|
|
755
|
+
let win32InputMode = prevState.win32InputMode ?? false;
|
|
756
|
+
let win32InputStartedAt = prevState.win32InputStartedAt;
|
|
757
|
+
let win32EscFlushedAt = prevState.win32EscFlushedAt;
|
|
758
|
+
let inPaste = prevState.mode === 'IN_PASTE';
|
|
759
|
+
const now = Date.now();
|
|
760
|
+
// Gate × evidence. The nullish default keeps direct callers that never
|
|
761
|
+
// inject the flag on the pre-gate behavior.
|
|
762
|
+
const win32HoldAllowed = (prevState.win32Capable ?? true) && win32InputMode;
|
|
763
|
+
const isRecordPrefix = (value) => !inPaste && WIN32_INPUT_PREFIX_RE.test(value) &&
|
|
764
|
+
(WIN32_INPUT_BODY_PREFIX_RE.test(value) || win32HoldAllowed);
|
|
765
|
+
if (win32InputStartedAt !== undefined && now - win32InputStartedAt >= WIN32_INPUT_GRACE_MS) {
|
|
766
|
+
tokenizer.reset();
|
|
767
|
+
win32InputStartedAt = undefined;
|
|
768
|
+
}
|
|
769
|
+
if (win32EscFlushedAt !== undefined && now - win32EscFlushedAt >= WIN32_INPUT_GRACE_MS) {
|
|
770
|
+
win32EscFlushedAt = undefined;
|
|
771
|
+
}
|
|
772
|
+
if (inputString && win32EscFlushedAt !== undefined) {
|
|
773
|
+
// Only the immediate continuation of an actual ESC flush may acquire
|
|
774
|
+
// a missing introducer. Never capture arbitrary '['-led user text.
|
|
775
|
+
if (prevState.mode !== 'IN_PASTE' && tokenizer.buffer() === '' &&
|
|
776
|
+
/^\[(?:[\d;]|$)/.test(inputString) &&
|
|
777
|
+
(WIN32_INPUT_BODY_PREFIX_RE.test('\x1b' + inputString) || win32HoldAllowed))
|
|
778
|
+
inputString = '\x1b' + inputString;
|
|
779
|
+
win32EscFlushedAt = undefined;
|
|
780
|
+
}
|
|
781
|
+
const pending = tokenizer.buffer();
|
|
782
|
+
if (isRecordPrefix(pending) && inputString) {
|
|
783
|
+
const continuation = /^[\d;]*/.exec(inputString)[0];
|
|
784
|
+
const final = inputString[continuation.length];
|
|
785
|
+
const code = final?.charCodeAt(0);
|
|
786
|
+
// A numeric prefix is not proof of Win32 framing: even four or more
|
|
787
|
+
// parameters can belong to another CSI. Let the tokenizer consume valid
|
|
788
|
+
// parameter/intermediate/final bytes; only an invalid continuation can
|
|
789
|
+
// abandon the old frame. A bare ASCII letter may therefore end the CSI,
|
|
790
|
+
// not start user text. Native Win32 typing supplies a fresh ESC record.
|
|
791
|
+
if (code !== undefined &&
|
|
792
|
+
!isCSIParam(code) && !isCSIIntermediate(code) && !isCSIFinal(code)) {
|
|
793
|
+
tokenizer.reset();
|
|
794
|
+
win32InputStartedAt = undefined;
|
|
795
|
+
if (final === '\x1b')
|
|
796
|
+
inputString = inputString.slice(continuation.length);
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
let deferFlush = isFlush && isRecordPrefix(tokenizer.buffer());
|
|
800
|
+
if (deferFlush && tokenizer.buffer().length > WIN32_INPUT_MAX_LENGTH) {
|
|
801
|
+
tokenizer.reset();
|
|
802
|
+
deferFlush = false;
|
|
803
|
+
}
|
|
804
|
+
const tokens = isFlush
|
|
805
|
+
? deferFlush ? [] : tokenizer.flush()
|
|
806
|
+
: tokenizer.feed(inputString);
|
|
807
|
+
if (isFlush && !inPaste && tokens.some(token => token.value === '\x1b')) {
|
|
808
|
+
win32EscFlushedAt = now;
|
|
809
|
+
}
|
|
699
810
|
// Convert tokens to parsed keys, handling paste mode
|
|
700
811
|
const keys = [];
|
|
701
|
-
let inPaste = prevState.mode === 'IN_PASTE';
|
|
702
812
|
let pasteBuffer = prevState.pasteBuffer;
|
|
703
813
|
// Surrogate-pair scratch for win32-input-mode records. Threaded through a
|
|
704
|
-
// local object so prevState is never mutated —
|
|
814
|
+
// local object so prevState is never mutated — callers can seed the parser
|
|
705
815
|
// with the shared INITIAL_STATE singleton, and a pending high surrogate
|
|
706
816
|
// leaking into it would survive into fresh parser instances.
|
|
707
817
|
const win32Ctx = {
|
|
@@ -716,6 +826,7 @@ export function parseMultipleKeypresses(prevState, input = '') {
|
|
|
716
826
|
matched: 0,
|
|
717
827
|
held: [],
|
|
718
828
|
buffer: '',
|
|
829
|
+
lastWasCarriageReturn: false,
|
|
719
830
|
};
|
|
720
831
|
const win32Protocol = prevState.win32Protocol ?? {
|
|
721
832
|
held: [],
|
|
@@ -779,6 +890,7 @@ export function parseMultipleKeypresses(prevState, input = '') {
|
|
|
779
890
|
else {
|
|
780
891
|
const win32 = parseWin32KeyEvent(token.value, win32Ctx);
|
|
781
892
|
if (win32 !== undefined) {
|
|
893
|
+
win32InputMode = true;
|
|
782
894
|
// A fresh protocol record proves a held SGR prefix's report died:
|
|
783
895
|
// report bytes are contiguous on the wire, so nothing may
|
|
784
896
|
// interleave between a report's fragments.
|
|
@@ -857,6 +969,8 @@ export function parseMultipleKeypresses(prevState, input = '') {
|
|
|
857
969
|
// record tails so their protocol bytes do not leak into the prompt.
|
|
858
970
|
for (const tail of token.value.match(WIN32_INPUT_TAIL_RE) ?? []) {
|
|
859
971
|
const win32 = parseWin32KeyEvent('\x1b' + tail, win32Ctx);
|
|
972
|
+
if (win32 !== undefined)
|
|
973
|
+
win32InputMode = true;
|
|
860
974
|
if (win32 !== undefined && win32 !== null) {
|
|
861
975
|
for (let i = 0; i < win32.repeat; i++) {
|
|
862
976
|
keys.push(...feedWin32Input(win32Paste, win32Protocol, win32.key));
|
|
@@ -942,6 +1056,23 @@ export function parseMultipleKeypresses(prevState, input = '') {
|
|
|
942
1056
|
}
|
|
943
1057
|
}
|
|
944
1058
|
}
|
|
1059
|
+
// Inspect the trailing buffer AFTER processing tokens: this read may have
|
|
1060
|
+
// entered a literal paste, or decoded the first win32 record. Emitting a
|
|
1061
|
+
// token ended the old sequence, so a new prefix gets its own deadline.
|
|
1062
|
+
if (tokens.length > 0)
|
|
1063
|
+
win32InputStartedAt = undefined;
|
|
1064
|
+
if (isRecordPrefix(tokenizer.buffer())) {
|
|
1065
|
+
if (tokenizer.buffer().length > WIN32_INPUT_MAX_LENGTH) {
|
|
1066
|
+
tokenizer.reset();
|
|
1067
|
+
win32InputStartedAt = undefined;
|
|
1068
|
+
}
|
|
1069
|
+
else {
|
|
1070
|
+
win32InputStartedAt ??= now;
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
else {
|
|
1074
|
+
win32InputStartedAt = undefined;
|
|
1075
|
+
}
|
|
945
1076
|
// If flushing and still in paste mode, emit what we have
|
|
946
1077
|
if (isFlush && inPaste && pasteBuffer) {
|
|
947
1078
|
keys.push(createPasteKey(pasteBuffer));
|
|
@@ -949,11 +1080,12 @@ export function parseMultipleKeypresses(prevState, input = '') {
|
|
|
949
1080
|
pasteBuffer = '';
|
|
950
1081
|
}
|
|
951
1082
|
// Flush handling for the decomposed win32 paste: mid-paste (active) the
|
|
952
|
-
//
|
|
1083
|
+
// quiet timeout means the paste stream ended — finalize with whatever
|
|
953
1084
|
// was collected (mirrors the VT IN_PASTE flush above; a truncated end
|
|
954
1085
|
// marker must not strand the matcher and eat all future typing). Outside
|
|
955
1086
|
// a paste, release any held marker-prefix keys (e.g. a lone Escape).
|
|
956
|
-
|
|
1087
|
+
// A deferred record flush must not split these higher-level matchers.
|
|
1088
|
+
if (isFlush && !deferFlush && win32Paste.active) {
|
|
957
1089
|
let content = win32Paste.buffer;
|
|
958
1090
|
for (const k of win32Paste.held)
|
|
959
1091
|
content += win32RecordChar(k) ?? '';
|
|
@@ -962,16 +1094,18 @@ export function parseMultipleKeypresses(prevState, input = '') {
|
|
|
962
1094
|
win32Paste.buffer = '';
|
|
963
1095
|
win32Paste.held = [];
|
|
964
1096
|
win32Paste.matched = 0;
|
|
1097
|
+
win32Paste.lastWasCarriageReturn = false;
|
|
965
1098
|
}
|
|
966
|
-
else if (isFlush && win32Paste.held.length > 0) {
|
|
1099
|
+
else if (isFlush && !deferFlush && win32Paste.held.length > 0) {
|
|
967
1100
|
keys.push(...win32Paste.held);
|
|
968
1101
|
win32Paste.held = [];
|
|
969
1102
|
win32Paste.matched = 0;
|
|
1103
|
+
win32Paste.lastWasCarriageReturn = false;
|
|
970
1104
|
}
|
|
971
1105
|
// A quiet timeout ends a synthesized protocol candidate. Incomplete mouse
|
|
972
1106
|
// reports are terminal input and must not become prompt text; other held
|
|
973
1107
|
// input (a lone Escape or an unknown CSI sequence) remains ordinary keys.
|
|
974
|
-
if (isFlush && win32Protocol.held.length > 0) {
|
|
1108
|
+
if (isFlush && !deferFlush && win32Protocol.held.length > 0) {
|
|
975
1109
|
const isMouseCandidate = win32Protocol.sequence.startsWith('\x1b[<') ||
|
|
976
1110
|
win32Protocol.sequence.startsWith('\x1b[M');
|
|
977
1111
|
if (!isMouseCandidate)
|
|
@@ -1003,6 +1137,12 @@ export function parseMultipleKeypresses(prevState, input = '') {
|
|
|
1003
1137
|
? '\x1b'
|
|
1004
1138
|
: ''),
|
|
1005
1139
|
pasteBuffer,
|
|
1140
|
+
// The host gate rides along: App replaces its state with this object on
|
|
1141
|
+
// every read, and the hold must stay closed for the whole session.
|
|
1142
|
+
win32Capable: prevState.win32Capable,
|
|
1143
|
+
win32InputMode,
|
|
1144
|
+
win32InputStartedAt,
|
|
1145
|
+
win32EscFlushedAt,
|
|
1006
1146
|
win32HighSurrogate: win32Ctx.high,
|
|
1007
1147
|
win32AltHighSurrogate: win32Ctx.altHigh,
|
|
1008
1148
|
win32Paste,
|
|
@@ -1508,6 +1648,9 @@ function parseKeypress(s = '') {
|
|
|
1508
1648
|
case '\u001b[1;5C':
|
|
1509
1649
|
return createNavKey(s, 'right', true);
|
|
1510
1650
|
}
|
|
1651
|
+
if (!key.name && !key.code && COMPLETE_CSI_RE.test(s)) {
|
|
1652
|
+
key.code = s.slice(1);
|
|
1653
|
+
}
|
|
1511
1654
|
return key;
|
|
1512
1655
|
}
|
|
1513
1656
|
function createNavKey(s, name, ctrl) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-node-to-output.d.ts","sourceRoot":"","sources":["../../../src/ink/render-node-to-output.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"render-node-to-output.d.ts","sourceRoot":"","sources":["../../../src/ink/render-node-to-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -796,8 +796,12 @@ function renderNodeToOutput(node, output, options) {
|
|
|
796
796
|
// repaints.
|
|
797
797
|
const imageWidth = Math.floor(width);
|
|
798
798
|
const imageHeight = Math.floor(height);
|
|
799
|
+
// Sixel paints the raster OVER the cells only when the placement has a
|
|
800
|
+
// backing colour to composite onto. A transparent placement (no
|
|
801
|
+
// background) keeps the Kitty rule instead: blank cells, so a wallpaper
|
|
802
|
+
// or translucent terminal shows through around the ink.
|
|
799
803
|
const backingColor = output.opaqueImageBacking
|
|
800
|
-
? node
|
|
804
|
+
? output.imagePlacementBackground(node)
|
|
801
805
|
: undefined;
|
|
802
806
|
const imageLine = ' '.repeat(imageWidth);
|
|
803
807
|
const fillLine = backingColor === undefined
|
|
@@ -832,6 +836,9 @@ function renderNodeToOutput(node, output, options) {
|
|
|
832
836
|
height: Math.floor(height),
|
|
833
837
|
});
|
|
834
838
|
}
|
|
839
|
+
if (node.style.softWrapContinuation !== undefined) {
|
|
840
|
+
output.softWrapRow(Math.floor(y), Math.floor(x) + node.style.softWrapContinuation);
|
|
841
|
+
}
|
|
835
842
|
const overflowX = node.style.overflowX ?? node.style.overflow;
|
|
836
843
|
const overflowY = node.style.overflowY ?? node.style.overflow;
|
|
837
844
|
const clipHorizontally = overflowX === 'hidden' || overflowX === 'scroll';
|
|
@@ -247,6 +247,16 @@ export type Screen = Size & {
|
|
|
247
247
|
* copies it alongside cells so the blit optimization preserves marks.
|
|
248
248
|
*/
|
|
249
249
|
noSelect: Uint8Array;
|
|
250
|
+
/**
|
|
251
|
+
* Per-cell copy region id (0 = none) and the text each id copies as.
|
|
252
|
+
* A region stands for content that is not text in its cells — a formula
|
|
253
|
+
* drawn as a terminal image — so a selection touching it copies the
|
|
254
|
+
* region's text once instead of its (blank) cells. Reset, blitted and
|
|
255
|
+
* shifted exactly like noSelect. Optional: hand-built test screens omit
|
|
256
|
+
* it.
|
|
257
|
+
*/
|
|
258
|
+
copyRegion?: Int32Array;
|
|
259
|
+
copyTexts?: Map<number, string>;
|
|
250
260
|
/**
|
|
251
261
|
* Per-ROW soft-wrap continuation marker. softWrap[r]=N>0 means row r
|
|
252
262
|
* is a word-wrap continuation of row r-1 (the `\n` before it was
|
|
@@ -513,6 +523,20 @@ type DiffCallback = (x: number, y: number, removed: Cell | undefined, added: Cel
|
|
|
513
523
|
* @returns true when the callback requested an early exit.
|
|
514
524
|
*/
|
|
515
525
|
export declare function diffEach(prev: Screen, next: Screen, cb: DiffCallback): boolean;
|
|
526
|
+
/**
|
|
527
|
+
* A fresh copy region id. Ids are unique for the process, so regions blitted
|
|
528
|
+
* from an earlier frame never collide with new ones.
|
|
529
|
+
*/
|
|
530
|
+
export declare function allocateCopyRegionId(): number;
|
|
531
|
+
/**
|
|
532
|
+
* Mark a rectangular region that copies as `text` (see Screen.copyRegion).
|
|
533
|
+
* Clamps to screen bounds; like noSelect it affects selection only.
|
|
534
|
+
*/
|
|
535
|
+
export declare function markCopyRegion(screen: Screen, x: number, y: number, width: number, height: number, text: string, id: number): void;
|
|
536
|
+
/** Cells [from, to) of `row` no longer belong to any copy region. */
|
|
537
|
+
export declare function clearCopyRegionSpan(screen: Screen, row: number, from: number, to: number): void;
|
|
538
|
+
/** Drop region texts no cell references any more. */
|
|
539
|
+
export declare function pruneCopyTexts(screen: Screen): void;
|
|
516
540
|
/**
|
|
517
541
|
* Mark a rectangular region as noSelect (exclude from text selection).
|
|
518
542
|
* Clamps to screen bounds. Called from output.ts when a <NoSelect> box
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../../src/ink/screen.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../../src/ink/screen.ts"],"names":[],"mappings":"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"}
|