@deepseek-harness-tui/dsh-tui 0.10.2 → 0.11.1
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 +175 -123
- package/bin/dsh-tui.js +748 -22
- package/cordis.patch.yml +42 -13
- package/cordis.yml +5 -2
- 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/session-projection.d.ts.map +1 -1
- package/lib/types/adapter/channel/session-projection.js +2 -0
- 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 +4 -1
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +6 -2
- package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -1
- package/lib/types/adapter/kernel/host-facade.js +1 -0
- package/lib/types/adapter/kernel/replay.d.ts.map +1 -1
- package/lib/types/adapter/kernel/replay.js +3 -0
- package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
- package/lib/types/adapter/kernel/runtime.js +2 -0
- package/lib/types/adapter/kernel/slices/workspace.d.ts.map +1 -1
- package/lib/types/adapter/kernel/slices/workspace.js +1 -0
- package/lib/types/adapter/ports/channel-ui.d.ts +29 -5
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +66 -12
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-workspace.d.ts +23 -0
- package/lib/types/adapter/ports/channel-workspace.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/adapter/ports/workspace.d.ts +2 -0
- package/lib/types/adapter/ports/workspace.d.ts.map +1 -1
- package/lib/types/adapter/upstream/workspace-driver.d.ts.map +1 -1
- package/lib/types/adapter/upstream/workspace-driver.js +10 -2
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +1 -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/ContextBarView.d.ts +15 -7
- package/lib/types/components/ContextBarView.d.ts.map +1 -1
- package/lib/types/components/ContextBarView.js +26 -22
- package/lib/types/components/ImagePreviewOverlay.d.ts.map +1 -1
- package/lib/types/components/ImagePreviewOverlay.js +11 -5
- package/lib/types/components/Markdown.d.ts +11 -1
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +20 -2
- package/lib/types/components/MermaidDiagram.d.ts +13 -0
- package/lib/types/components/MermaidDiagram.d.ts.map +1 -0
- package/lib/types/components/MermaidDiagram.js +61 -0
- package/lib/types/components/MessageList.d.ts +26 -1
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +74 -8
- package/lib/types/components/PageMargin.d.ts +1 -1
- package/lib/types/components/PromptInput.d.ts +37 -1
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +291 -30
- package/lib/types/components/ScrollbarGutter.d.ts +20 -5
- package/lib/types/components/ScrollbarGutter.d.ts.map +1 -1
- package/lib/types/components/ScrollbarGutter.js +88 -10
- package/lib/types/components/SplitDiffView.d.ts.map +1 -1
- package/lib/types/components/SplitDiffView.js +2 -1
- package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
- package/lib/types/components/StreamingMarkdown.js +30 -28
- 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/Tooltip.d.ts.map +1 -1
- package/lib/types/components/Tooltip.js +45 -7
- 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/messages/AssistantThinkingMessage.d.ts +2 -1
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +2 -1
- 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 +30 -26
- package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
- package/lib/types/components/messages/UserPromptMessage.js +5 -7
- package/lib/types/components/messages/useImageInspection.d.ts.map +1 -1
- package/lib/types/components/messages/useImageInspection.js +19 -9
- package/lib/types/components/promptDraftCache.d.ts +102 -0
- package/lib/types/components/promptDraftCache.d.ts.map +1 -0
- package/lib/types/components/promptDraftCache.js +76 -0
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +17 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +40 -7
- package/lib/types/components/questions/QuestionMinimizedBar.d.ts +12 -0
- package/lib/types/components/questions/QuestionMinimizedBar.d.ts.map +1 -0
- package/lib/types/components/questions/QuestionMinimizedBar.js +43 -0
- package/lib/types/components/sessions/SessionListRow.d.ts +23 -1
- package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
- package/lib/types/components/sessions/SessionListRow.js +52 -5
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +49 -0
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -0
- package/lib/types/components/workspaces/HomeWorkspaceRow.js +50 -0
- 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/bundled-presets.d.ts +10 -0
- package/lib/types/dsh-adapter/bundled-presets.d.ts.map +1 -0
- package/lib/types/dsh-adapter/bundled-presets.js +80 -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 +3 -0
- package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/agent-view-projection.js +19 -2
- package/lib/types/dsh-adapter/channel/background-action.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +53 -29
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +8 -6
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +5 -4
- package/lib/types/dsh-adapter/channel/binding.d.ts +19 -2
- package/lib/types/dsh-adapter/channel/binding.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding.js +78 -18
- package/lib/types/dsh-adapter/channel/compaction.d.ts +0 -1
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +0 -2
- package/lib/types/dsh-adapter/channel/composer-images.d.ts +5 -0
- package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/composer-images.js +105 -6
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +8 -0
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/context-bookkeeping.js +3 -2
- package/lib/types/dsh-adapter/channel/ide-selection.d.ts +58 -0
- package/lib/types/dsh-adapter/channel/ide-selection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/ide-selection.js +226 -0
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +6 -1
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +9 -1
- package/lib/types/dsh-adapter/channel/local-actions.d.ts +3 -19
- package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/local-actions.js +2 -1
- package/lib/types/dsh-adapter/channel/model-actions.d.ts +4 -1
- package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-actions.js +82 -6
- 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 +49 -31
- package/lib/types/dsh-adapter/channel/projection.d.ts +4 -0
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +29 -19
- package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/reports.js +4 -12
- 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-fork.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-fork.js +26 -2
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +4 -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 +2 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +10 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +6 -4
- 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 +0 -1
- package/lib/types/dsh-adapter/channel/session-resume.d.ts +12 -3
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +292 -94
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-rewind.js +34 -16
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-tree-actions.js +19 -3
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +4 -3
- package/lib/types/dsh-adapter/channel/state.d.ts +6 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +3 -3
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +21 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +173 -6
- package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/transcript.js +6 -12
- package/lib/types/dsh-adapter/channel/types.d.ts +6 -1
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts +4 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.js +41 -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 +82 -20
- 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 +15 -0
- package/lib/types/dsh-adapter/compat/messages.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/messages.js +15 -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 +35 -0
- package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/settings.js +57 -0
- package/lib/types/dsh-adapter/compat/shell.d.ts +25 -0
- package/lib/types/dsh-adapter/compat/shell.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/shell.js +11 -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 +17 -6
- package/lib/types/dsh-adapter/ide-channel.d.ts +224 -0
- package/lib/types/dsh-adapter/ide-channel.d.ts.map +1 -0
- package/lib/types/dsh-adapter/ide-channel.js +556 -0
- package/lib/types/dsh-adapter/index.d.ts +18 -3
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +32 -5
- package/lib/types/dsh-adapter/plugin.d.ts +4 -1
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +197 -49
- package/lib/types/dsh-adapter/preset-resolution.d.ts +8 -0
- package/lib/types/dsh-adapter/preset-resolution.d.ts.map +1 -1
- package/lib/types/dsh-adapter/preset-resolution.js +10 -0
- package/lib/types/dsh-adapter/session-mount-heartbeat.d.ts +53 -0
- package/lib/types/dsh-adapter/session-mount-heartbeat.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-mount-heartbeat.js +100 -0
- package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessionTree.js +3 -2
- 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/subagents.d.ts +16 -3
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +92 -29
- package/lib/types/dsh-adapter/workspaces.d.ts +46 -3
- package/lib/types/dsh-adapter/workspaces.d.ts.map +1 -1
- package/lib/types/dsh-adapter/workspaces.js +116 -0
- package/lib/types/effortPrefs.d.ts +15 -3
- package/lib/types/effortPrefs.d.ts.map +1 -1
- package/lib/types/effortPrefs.js +37 -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/homePrefs.d.ts +15 -0
- package/lib/types/homePrefs.d.ts.map +1 -0
- package/lib/types/homePrefs.js +53 -0
- package/lib/types/i18n.d.ts +347 -297
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +133 -85
- package/lib/types/ink/colorize.d.ts +10 -0
- package/lib/types/ink/colorize.d.ts.map +1 -1
- package/lib/types/ink/colorize.js +21 -0
- package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
- package/lib/types/ink/components/ScrollBox.js +12 -1
- package/lib/types/ink/dom.d.ts +1 -0
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.d.ts +5 -1
- package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.js +15 -1
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +36 -1
- 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 +10 -1
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +109 -17
- package/lib/types/ink/render-border.d.ts +6 -1
- package/lib/types/ink/render-border.d.ts.map +1 -1
- package/lib/types/ink/render-border.js +25 -9
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +48 -6
- package/lib/types/ink/renderer.d.ts +6 -0
- package/lib/types/ink/renderer.d.ts.map +1 -1
- package/lib/types/ink/renderer.js +2 -1
- package/lib/types/ink/selection.d.ts +88 -0
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +164 -0
- package/lib/types/ink/sixel-graphics.d.ts +19 -1
- package/lib/types/ink/sixel-graphics.d.ts.map +1 -1
- package/lib/types/ink/sixel-graphics.js +124 -12
- package/lib/types/ink/terminal-image.d.ts +18 -1
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal.d.ts +17 -0
- package/lib/types/ink/terminal.d.ts.map +1 -1
- package/lib/types/ink/terminal.js +20 -1
- package/lib/types/screens/Chat.d.ts +20 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +296 -76
- package/lib/types/screens/SessionSupervisor.d.ts +84 -0
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -0
- package/lib/types/screens/SessionSupervisor.js +350 -0
- package/lib/types/screens/SessionTree.js +2 -2
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +32 -9
- package/lib/types/screens/StatusLine.d.ts +18 -1
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +38 -19
- package/lib/types/screens/StatusMetrics.d.ts +79 -22
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +153 -88
- package/lib/types/screens/sessionSupervisor/model.d.ts +83 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/model.js +69 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +120 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +593 -0
- package/lib/types/sessionMounts.d.ts +272 -0
- package/lib/types/sessionMounts.d.ts.map +1 -0
- package/lib/types/sessionMounts.js +706 -0
- package/lib/types/sessions/format.d.ts.map +1 -1
- package/lib/types/sessions/format.js +4 -1
- package/lib/types/sessions/resumeFailure.d.ts +38 -0
- package/lib/types/sessions/resumeFailure.d.ts.map +1 -0
- package/lib/types/sessions/resumeFailure.js +58 -0
- package/lib/types/terminal-utils/mermaid.d.ts +44 -0
- package/lib/types/terminal-utils/mermaid.d.ts.map +1 -0
- package/lib/types/terminal-utils/mermaid.js +83 -0
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +175 -19
- package/lib/types/tuiDisplayPrefs.d.ts +7 -9
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +31 -28
- package/lib/types/update.d.ts +61 -0
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +194 -0
- package/lib/types/utils/fold-long-lines.d.ts +1 -1
- package/lib/types/utils/fold-long-lines.js +1 -1
- package/lib/types/utils/imageResize.d.ts +90 -0
- package/lib/types/utils/imageResize.d.ts.map +1 -0
- package/lib/types/utils/imageResize.js +272 -0
- package/lib/types/utils/keymap.d.ts +5 -1
- package/lib/types/utils/keymap.d.ts.map +1 -1
- package/lib/types/utils/keymap.js +23 -0
- 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/lib/types/workspaces.d.ts +2 -1
- package/lib/types/workspaces.d.ts.map +1 -1
- package/lib/types/workspaces.js +1 -1
- package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +10 -10
- package/package.json +126 -105
- package/presets/liangshen/.dsh-tui-managed.json +1 -1
- package/presets/liangshen/agent.cordis.yml +15 -0
- 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/screens/AgentView.d.ts +0 -23
- package/lib/types/screens/AgentView.d.ts.map +0 -1
- package/lib/types/screens/AgentView.js +0 -546
- package/lib/types/screens/SessionBrowser.d.ts +0 -42
- package/lib/types/screens/SessionBrowser.d.ts.map +0 -1
- package/lib/types/screens/SessionBrowser.js +0 -911
- 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/i18n.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAMH,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAI9B,+DAA+D;AAC/D,eAAO,MAAM,KAAK,uBAAwB,CAAA;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
package/lib/types/i18n.js
CHANGED
|
@@ -22,7 +22,36 @@
|
|
|
22
22
|
* every entry carries zh, and en is optional only for the `cmd-desc-*`
|
|
23
23
|
* family whose en truth lives in the command registry (see {@link tOr}).
|
|
24
24
|
* scripts/verify-i18n.ts adds the checks types cannot express: placeholder
|
|
25
|
-
* parity between languages, single-brace typos,
|
|
25
|
+
* parity between languages, single-brace typos, dead keys, and English
|
|
26
|
+
* UI-copy literals outside the dictionary (issue #980's leak shape).
|
|
27
|
+
*
|
|
28
|
+
* ## Adding a language (e.g. `ja`) — the full checklist
|
|
29
|
+
*
|
|
30
|
+
* The architecture is the standard flat-dict shape; a new language is
|
|
31
|
+
* translation work plus this mechanical touchpoint list (the compiler and
|
|
32
|
+
* verify-i18n fail until every step is done — partial translations cannot
|
|
33
|
+
* ship silently):
|
|
34
|
+
*
|
|
35
|
+
* 1. `Lang` union + `LANGS` display order (this file).
|
|
36
|
+
* 2. `isLang()` — add the literal.
|
|
37
|
+
* 3. `pluralRules` — add `new Intl.PluralRules('<tag>')`; if the language
|
|
38
|
+
* uses CLDR categories beyond one/other (ru/pl/ar…), widen `I18nText`
|
|
39
|
+
* to carry them and extend `pickText` accordingly.
|
|
40
|
+
* 4. Dictionary type below: add `ja?: I18nText` to the `satisfies` shape.
|
|
41
|
+
* Decide optionality deliberately: required = compile error per missing
|
|
42
|
+
* key (recommended — a half-translated UI is worse than none); optional
|
|
43
|
+
* = `t()` renders the raw key for gaps, so also give `t()`/`tOr()` an
|
|
44
|
+
* explicit fallback order (e.g. ja → en → key) if you go optional.
|
|
45
|
+
* 5. scripts/verify-i18n.ts: the completeness loop (§1) hardcodes the
|
|
46
|
+
* ['zh','en'] pair — extend it, and re-review FORBIDDEN_LITERALS
|
|
47
|
+
* (English sentences stay banned outside the dict; add the new
|
|
48
|
+
* language's equivalents only if the leak shape repeats).
|
|
49
|
+
* 6. Translate the dictionary (~1k keys today); zh comments above each
|
|
50
|
+
* key family describe tone/register — keep them.
|
|
51
|
+
* 7. `detectLocaleLang()` — map the new tag in the OS-locale guess.
|
|
52
|
+
* 8. Rendered-output regression: extend scripts/verify-toolcard-i18n.tsx
|
|
53
|
+
* style fixtures' language passes so the localized strings are proven
|
|
54
|
+
* on screen, not just present in the dict.
|
|
26
55
|
*/
|
|
27
56
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
28
57
|
import { join } from 'node:path';
|
|
@@ -98,6 +127,12 @@ const dict = {
|
|
|
98
127
|
'export-dir': { zh: '- 目录: {{cwd}}', en: '- Directory: {{cwd}}' },
|
|
99
128
|
'mentions-attached': { zh: '已附加 {{count}} 个文件引用', en: { one: 'Attached {{count}} file reference', other: 'Attached {{count}} file references' } },
|
|
100
129
|
'mentions-missing': { zh: '未找到引用: {{paths}}', en: 'References not found: {{paths}}' },
|
|
130
|
+
// T06 (PR-B · AC-5): transcript indicator above a user bubble whose send
|
|
131
|
+
// consumed the live IDE selection. The ⧉ glyph lives in MessageList, not here.
|
|
132
|
+
'selection-attached': {
|
|
133
|
+
zh: '已选中 {{lines}} 行 · {{path}}',
|
|
134
|
+
en: { one: 'Selected {{lines}} line from {{path}}', other: 'Selected {{lines}} lines from {{path}}' },
|
|
135
|
+
},
|
|
101
136
|
'transcript-image': { zh: '图片', en: 'Image' },
|
|
102
137
|
'image-preview-previous': { zh: '上一张', en: 'Previous image' },
|
|
103
138
|
'image-preview-next': { zh: '下一张', en: 'Next image' },
|
|
@@ -119,6 +154,7 @@ const dict = {
|
|
|
119
154
|
'transcript-image-message': { zh: '{{count}} 张图片', en: { one: '{{count}} image', other: '{{count}} images' } },
|
|
120
155
|
'input-image-token-stale': { zh: '{{token}} 已失效,发送时不会附带图片', en: '{{token}} is no longer staged; no image will attach' },
|
|
121
156
|
'input-images-staged': { zh: '已附加 {{count}} 张图片', en: { one: 'Attached {{count}} image', other: 'Attached {{count}} images' } },
|
|
157
|
+
'input-images-staged-adapted': { zh: '已附加 {{count}} 张图片 · {{adapted}} 张已适配', en: { one: 'Attached {{count}} image · {{adapted}} adapted', other: 'Attached {{count}} images · {{adapted}} adapted' } },
|
|
122
158
|
'send-failed': { zh: '发送失败 · {{err}}', en: 'Send failed · {{err}}' },
|
|
123
159
|
'export-user-section': { zh: '## 用户', en: '## User' },
|
|
124
160
|
'export-thinking-section': { zh: '## 思考', en: '## Thinking' },
|
|
@@ -228,6 +264,10 @@ const dict = {
|
|
|
228
264
|
'tree-branch-live': { zh: '当前会话', en: 'live session' },
|
|
229
265
|
'resume-while-working': { zh: '回合运行中,无法恢复会话', en: 'Cannot resume while a turn is running' },
|
|
230
266
|
'resume-unavailable': { zh: '恢复不可用——agents 服务未加载', en: 'Resume unavailable — agents service not loaded' },
|
|
267
|
+
'resume-session-occupied': { zh: '该会话正被其他 TUI 终端占用(进程 {{pid}}),无法进入', en: 'Another TUI terminal holds this session (pid {{pid}}); cannot enter' },
|
|
268
|
+
'resume-mount-busy': { zh: '无法确认该会话是否被其他终端占用(占用检查正忙),请稍后重试', en: 'Could not confirm whether another terminal holds this session (the occupancy check is busy); retry in a moment' },
|
|
269
|
+
'resume-mount-unavailable': { zh: '无法验证该会话的占用状态 · {{detail}}', en: 'Could not verify this session\'s occupancy · {{detail}}' },
|
|
270
|
+
'session-mount-occupied-short': { zh: '占用 pid {{pid}}', en: 'held by pid {{pid}}' },
|
|
231
271
|
'resume-failed': { zh: '恢复失败 · {{err}}', en: 'Resume failed · {{err}}' },
|
|
232
272
|
'resume-attach-failed': { zh: '已恢复会话,但工作区挂载失败 · {{err}}', en: 'Session resumed, but workspace attachment failed · {{err}}' },
|
|
233
273
|
'resume-session-changed': { zh: '会话已切换,恢复已放弃', en: 'The session changed; the resume was dropped' },
|
|
@@ -281,6 +321,7 @@ const dict = {
|
|
|
281
321
|
'context-panel-expand': { zh: ' 展开', en: ' to expand' },
|
|
282
322
|
'context-panel-collapse': { zh: ' 折叠', en: ' to collapse' },
|
|
283
323
|
'copied-chars': { zh: '已复制 {{n}} 个字符', en: 'Copied {{n}} characters' },
|
|
324
|
+
'copy-refused-stale': { zh: '选区内容已变化,已取消复制', en: 'Content under the selection changed; copy cancelled' },
|
|
284
325
|
'activity-current-preset': { zh: '当前预设 {{name}}', en: 'Current preset {{name}}' },
|
|
285
326
|
'activity-switch-hint': { zh: '切换 /activity(选择器)或 /activity frames <名>', en: 'Switch /activity (picker) or /activity frames <name>' },
|
|
286
327
|
'activity-persist-hint': { zh: '持久化 ~/.dsh-tui/working-activity.json(重启后仍生效)', en: 'Persisted ~/.dsh-tui/working-activity.json (survives restart)' },
|
|
@@ -332,6 +373,51 @@ const dict = {
|
|
|
332
373
|
'workspace-command-failed': { zh: 'workspace 操作失败 · {{err}}', en: 'Workspace action failed · {{err}}' },
|
|
333
374
|
'workspace-renamed': { zh: '工作区已重命名:{{title}}', en: 'Workspace renamed: {{title}}' },
|
|
334
375
|
'workspace-rename-failed': { zh: '工作区重命名失败 · {{err}}', en: 'Failed to rename workspace · {{err}}' },
|
|
376
|
+
'workspace-removed': { zh: '已从工作区列表移除:{{target}}(会话与目录保留)', en: 'Removed from the workspace list: {{target}} (sessions and directory kept)' },
|
|
377
|
+
'workspace-remove-unknown': { zh: '工作区列表中没有:{{target}}', en: 'Not in the workspace list: {{target}}' },
|
|
378
|
+
'workspace-remove-failed': { zh: '移除工作区失败 · {{err}}', en: 'Failed to remove the workspace · {{err}}' },
|
|
379
|
+
// ── 工作区栏与菜单(screens/SessionSupervisor.tsx + HomeWorkspaceRow)──
|
|
380
|
+
'home-section-workspaces': { zh: '工作区({{n}})', en: 'Workspaces ({{n}})' },
|
|
381
|
+
'home-add-workspace': { zh: '添加工作区', en: 'Add workspace' },
|
|
382
|
+
'home-add-hint': { zh: '选择目录并加入列表', en: 'Pick a directory and add it to the list' },
|
|
383
|
+
'home-workspace-missing': { zh: '目录不存在', en: 'directory missing' },
|
|
384
|
+
'home-no-workspaces': { zh: '还没有工作区 · 在任意目录启动 dsh-tui 即可自动加入', en: 'No workspaces yet · start dsh-tui in a directory to add it' },
|
|
385
|
+
'home-sessions-title': { zh: '{{name}} 的会话', en: 'Sessions in {{name}}' },
|
|
386
|
+
'home-sessions-count': { zh: '{{n}} 个会话', en: { one: '{{n}} session', other: '{{n}} sessions' } },
|
|
387
|
+
'home-no-sessions': { zh: '这个工作区还没有会话 · Enter 新建一个', en: 'No sessions in this workspace yet · Enter starts one' },
|
|
388
|
+
'home-sessions-loading': { zh: '正在读取会话…', en: 'Loading sessions…' },
|
|
389
|
+
'home-sessions-failed': { zh: '读取会话失败 · {{err}}', en: 'Failed to load sessions · {{err}}' },
|
|
390
|
+
'home-hint-list': { zh: '**←/→** 切换栏位 · **↑/↓** 选择 · **Enter** 编辑 · Ctrl+N 新建 · Esc 进入会话', en: '**←/→** switch pane · **↑/↓** move · **Enter** edit · Ctrl+N new · Esc enter the session' },
|
|
391
|
+
'home-hint-menu': { zh: '**↑/↓** 选择 · **Enter** 确认 · Esc 关闭', en: '**↑/↓** move · **Enter** confirm · Esc close' },
|
|
392
|
+
'home-hint-rename': { zh: '输入新名称 · **Enter** 保存 · Esc 取消', en: 'Type a new name · **Enter** save · Esc cancel' },
|
|
393
|
+
'home-hint-confirm-remove': { zh: '**Enter** 确认移除 · Esc 取消', en: '**Enter** confirm removal · Esc cancel' },
|
|
394
|
+
'home-menu-edit': { zh: '编辑', en: 'Edit' },
|
|
395
|
+
'home-menu-new': { zh: '在此新建会话', en: 'New session here' },
|
|
396
|
+
'home-menu-rename': { zh: '重命名工作区', en: 'Rename workspace' },
|
|
397
|
+
'home-menu-remove': { zh: '从列表移除', en: 'Remove from list' },
|
|
398
|
+
'home-rename-placeholder': { zh: '新名称', en: 'New name' },
|
|
399
|
+
'home-rename-empty': { zh: '名称不能为空', en: 'The name cannot be empty' },
|
|
400
|
+
'home-rename-failed': { zh: '重命名失败 · {{err}}', en: 'Rename failed · {{err}}' },
|
|
401
|
+
'home-remove-title': { zh: '移除工作区「{{name}}」?', en: 'Remove workspace "{{name}}"?' },
|
|
402
|
+
'home-remove-detail': { zh: '只从列表移除,会话记录与磁盘目录都会保留', en: 'Only the list entry goes away; sessions and the directory stay' },
|
|
403
|
+
// ── screens/SessionSupervisor.tsx(三合一会话管理:/resume /agentview /home)─
|
|
404
|
+
'supervisor-title': { zh: '会话管理', en: 'Sessions' },
|
|
405
|
+
'supervisor-unregistered': { zh: '未登记的工作区', en: 'Unregistered' },
|
|
406
|
+
'supervisor-no-matches': { zh: '没有匹配的会话 · Esc 清空筛选', en: 'No sessions match · Esc clears the filter' },
|
|
407
|
+
'supervisor-subtitle': { zh: '本终端托管多个会话 · 切换不中断', en: 'This terminal hosts several sessions · switching does not stop them' },
|
|
408
|
+
'supervisor-filter-placeholder': { zh: '输入以搜索会话…', en: 'Type to search sessions…' },
|
|
409
|
+
'supervisor-hint-list': { zh: '**←/→** 切换栏位 · **Enter** 进入会话 · Ctrl+N 新建 · Ctrl+X 停止 · Esc 返回', en: '**←/→** switch pane · **Enter** enter · Ctrl+N new · Ctrl+X stop · Esc back' },
|
|
410
|
+
'supervisor-hint-filter': { zh: '输入过滤会话 · **Enter** 进入 · Esc 清空', en: 'Type to filter · **Enter** enter · Esc clears' },
|
|
411
|
+
'supervisor-occupied': { zh: '被其他 TUI 终端占用(pid {{pid}}),无法进入', en: 'Held by another TUI terminal (pid {{pid}}) — cannot enter' },
|
|
412
|
+
'supervisor-occupied-badge': { zh: '占用 pid {{pid}}', en: 'held by pid {{pid}}' },
|
|
413
|
+
'supervisor-current': { zh: '当前', en: 'current' },
|
|
414
|
+
'supervisor-counts': { zh: '{{working}} 运行中 · {{live}} 个活跃 · 共 {{total}}', en: '{{working}} working · {{live}} live · {{total}} total' },
|
|
415
|
+
'supervisor-new-session': { zh: '+ 新建会话', en: '+ New session' },
|
|
416
|
+
'supervisor-new-session-hint': { zh: '在「{{name}}」新建一个会话', en: 'Start a session in "{{name}}"' },
|
|
417
|
+
'supervisor-stopped': { zh: '已停止会话「{{name}}」', en: 'Stopped session {{name}}' },
|
|
418
|
+
'supervisor-stop-failed': { zh: '无法停止该会话', en: 'Could not stop that session' },
|
|
419
|
+
'supervisor-stop-current': { zh: '不能停止当前正在使用的会话', en: 'The session you are attached to cannot be stopped' },
|
|
420
|
+
'supervisor-open-failed': { zh: '无法进入会话「{{name}}」· 原因见下方通知', en: 'Could not enter {{name}} · the reason is in the notification below' },
|
|
335
421
|
'cost-cache-rate': { zh: '缓存率 {{rate}}% · {{read}} 读 / {{write}} 写', en: 'Cache rate {{rate}}% · {{read}} read / {{write}} write' },
|
|
336
422
|
'cost-context': { zh: '上下文 {{pct}}%', en: 'Context {{pct}}%' },
|
|
337
423
|
'status-title': { zh: '标题 {{title}}', en: 'Title {{title}}' },
|
|
@@ -442,6 +528,7 @@ const dict = {
|
|
|
442
528
|
'restart-starting': { zh: '正在重启 dsh-tui,完成后自动恢复当前会话……', en: 'Restarting dsh-tui. The session resumes when it comes back…' },
|
|
443
529
|
'restart-unavailable': { zh: '当前运行方式不支持进程内重启(未挂载重启通道)。', en: 'Restart is unavailable in this launch mode (no restart channel mounted).' },
|
|
444
530
|
'streaming-folded': { zh: '…(前 {{count}} 字符流式期间已折叠,落定后完整显示)', en: '…(first {{count}} chars folded while streaming; full text renders once the turn settles)' },
|
|
531
|
+
'mermaid-too-wide': { zh: '(图需要 {{width}} 列,当前宽度不足,显示源码)', en: '(diagram needs {{width}} columns; showing the source)' },
|
|
445
532
|
'vim-on': { zh: 'vim 模式已开启(Esc 切 normal,i/a/o 回 insert)', en: 'vim mode on (Esc = normal, i/a/o = insert)' },
|
|
446
533
|
'vim-off': { zh: 'vim 模式已关闭', en: 'vim mode off' },
|
|
447
534
|
'terminal-setup-hint': { zh: '推荐 Windows Terminal(≥110 列、等宽字体、TrueColor)。', en: 'Recommended: Windows Terminal (≥110 columns, monospace, TrueColor).' },
|
|
@@ -535,6 +622,8 @@ const dict = {
|
|
|
535
622
|
'effort-read-failed': { zh: '推理等级读取失败 · {{error}}', en: 'Failed to read reasoning efforts · {{error}}' },
|
|
536
623
|
'effort-single-tier': { zh: '当前模型只有一档推理等级({{name}})', en: 'Current model has a single reasoning effort ({{name}})' },
|
|
537
624
|
'effort-unsupported': { zh: '当前模型不支持推理等级切换', en: 'Current model does not support reasoning effort switching' },
|
|
625
|
+
'effort-preference-downgraded': { zh: '偏好推理强度 {{preferred}} 不被当前模型支持,已就近降档至 {{applied}}', en: 'Preferred reasoning effort {{preferred}} is unavailable on this model; fell back to the nearest lower tier {{applied}}' },
|
|
626
|
+
'effort-preference-unsupported': { zh: '偏好推理强度 {{preferred}} 不被当前模型支持,且无更低可用档,保持模型默认', en: 'Preferred reasoning effort {{preferred}} is unavailable on this model with no lower tier; keeping the model default' },
|
|
538
627
|
'effort-switched': { zh: '推理强度 → {{name}}', en: 'Reasoning effort → {{name}}' },
|
|
539
628
|
'effort-invalid': { zh: '未知推理等级 {{id}}(当前模型可选:{{ids}})', en: 'Unknown reasoning effort {{id}} (this model offers: {{ids}})' },
|
|
540
629
|
'effort-current': { zh: '当前推理强度 {{name}}', en: 'Current reasoning effort {{name}}' },
|
|
@@ -587,15 +676,22 @@ const dict = {
|
|
|
587
676
|
'input-clipboard-read-failed': { zh: '读取剪贴板失败', en: 'Failed to read the clipboard' },
|
|
588
677
|
'input-clipboard-unavailable': { zh: '无法读取剪贴板:没有可用的 wl-paste / xclip / xsel(未安装或会话不可连接)', en: 'Cannot read clipboard: no usable wl-paste / xclip / xsel (not installed or session unreachable)' },
|
|
589
678
|
'input-image-pasted': { zh: '已粘贴图片 {{token}}', en: 'Pasted image {{token}}' },
|
|
679
|
+
'input-image-pasted-adjusted': { zh: '已粘贴图片 {{token}}({{detail}})', en: 'Pasted image {{token}} ({{detail}})' },
|
|
680
|
+
'input-image-detail-resized': { zh: '已缩放至 {{width}}×{{height}}', en: 'resized to {{width}}×{{height}}' },
|
|
681
|
+
'input-image-detail-converted': { zh: '{{from}} 已转 {{to}}', en: '{{from}} converted to {{to}}' },
|
|
682
|
+
'input-image-detail-converted-flattened': { zh: '{{from}} 已转 {{to}},透明区域已填白', en: '{{from}} converted to {{to}}, transparency filled white' },
|
|
590
683
|
'input-image-paste-failed': { zh: '粘贴图片失败:{{err}}', en: 'Could not paste image: {{err}}' },
|
|
591
684
|
'input-image-paste-limit': { zh: '图片数量超过当前配置的单条消息上限', en: 'Image count exceeds the per-message limit for this profile' },
|
|
592
685
|
'input-image-format-unsupported': { zh: '剪贴板图片格式不受支持;请使用 PNG、JPEG、WebP 或 GIF', en: 'Clipboard image format is unsupported; use PNG, JPEG, WebP, or GIF' },
|
|
593
686
|
'input-pending-steer-label': { zh: '插话 · 下一步送达', en: 'Steer · delivered next' },
|
|
594
687
|
'input-pending-queue-label': { zh: '排队 · 回合结束后送达', en: 'Queued · delivered after the turn' },
|
|
595
688
|
'input-pending-actions-hint': { zh: '撤回 · Esc 打断并立即发送', en: 'Retract · Esc interrupts and sends immediately' },
|
|
596
|
-
|
|
689
|
+
// U+30FB (not U+00B7): the separator participates in the folded-chip
|
|
690
|
+
// width arithmetic; U+00B7 is EA-ambiguous and paints 2 cells on CJK
|
|
691
|
+
// terminal fonts while the model measures 1 (see PromptInput foldBadge).
|
|
692
|
+
'input-fold-stats': { zh: '{{lines}} 行・{{chars}} 字', en: '{{lines}} lines・{{chars}} chars' },
|
|
597
693
|
'input-fold-hover': { zh: '悬停查看', en: 'hover to peek' },
|
|
598
|
-
'input-fold-peek-footer': { zh: '… 共 {{lines}}
|
|
694
|
+
'input-fold-peek-footer': { zh: '… 共 {{lines}} 行・点击展开编辑', en: '… {{lines}} lines total・click to edit' },
|
|
599
695
|
// ── 全屏草稿编辑(PromptInput 展开态 + PromptEditor Layer)─────────
|
|
600
696
|
'input-expand-editor-title': { zh: '草稿编辑', en: 'Draft editor' },
|
|
601
697
|
'input-expand-editor-position': { zh: '行 {{line}} · 列 {{col}}', en: 'Ln {{line}}, Col {{col}}' },
|
|
@@ -613,6 +709,31 @@ const dict = {
|
|
|
613
709
|
'tool-tip-failed': { zh: '失败 {{time}}', en: 'failed {{time}}' },
|
|
614
710
|
'tool-tip-exit': { zh: '退出码 {{code}}', en: 'exit {{code}}' },
|
|
615
711
|
'tool-tip-signal': { zh: '信号 {{name}}', en: 'signal {{name}}' },
|
|
712
|
+
// ── 工具卡本体(AssistantToolUseMessage.tsx / SplitDiffView.tsx)─────
|
|
713
|
+
// 工具名走 `tool-name-*` 家族:displayName() 用字面键映射表查字典(键在
|
|
714
|
+
// 代码里以字面量出现,无需登记 DYNAMIC_PREFIXES)。bash / powershell 是
|
|
715
|
+
// 产品名,zh 不译;未登记的 id(插件、上游新增)回退首字母大写——那是
|
|
716
|
+
// 名字不是文案,没有可翻译的内容。
|
|
717
|
+
'tool-name-bash': { zh: 'Bash', en: 'Bash' },
|
|
718
|
+
'tool-name-powershell': { zh: 'PowerShell', en: 'PowerShell' },
|
|
719
|
+
'tool-name-read': { zh: '读取', en: 'Read' },
|
|
720
|
+
'tool-name-glob': { zh: '文件搜索', en: 'Glob' },
|
|
721
|
+
'tool-name-grep': { zh: '内容搜索', en: 'Grep' },
|
|
722
|
+
'tool-name-write': { zh: '写入', en: 'Write' },
|
|
723
|
+
'tool-name-edit': { zh: '编辑', en: 'Edit' },
|
|
724
|
+
'tool-name-todo_write': { zh: '待办清单', en: 'TodoWrite' },
|
|
725
|
+
'tool-name-subagent': { zh: '子代理', en: 'Task' },
|
|
726
|
+
'tool-name-web_search': { zh: '联网搜索', en: 'WebSearch' },
|
|
727
|
+
// 正文错误行与运行中占位(区别于上面 tooltip 的短促小写风格):
|
|
728
|
+
'tool-exit-code': { zh: '退出码 {{code}}', en: 'Exit code {{code}}' },
|
|
729
|
+
'tool-killed-signal': { zh: '被信号 {{name}} 终止', en: 'Killed by signal {{name}}' },
|
|
730
|
+
'tool-running-elapsed': { zh: '运行中…({{duration}})', en: 'Running… ({{duration}})' },
|
|
731
|
+
// 搜索结果截断行(search 卡 paths 形态):
|
|
732
|
+
'search-results-total': { zh: '…(共 {{n}} 条)', en: '… ({{n}} total)' },
|
|
733
|
+
// 按行折叠的溢出提示:卡片正文行预算(capLines)、终端卡多行命令折叠
|
|
734
|
+
// (foldTerminalCommand)、分屏 diff 隐藏行(SplitDiffView)。按字符折叠
|
|
735
|
+
// 的行内标记见 long-line-folded。
|
|
736
|
+
'lines-folded-expand': { zh: '… +{{n}} 行(ctrl+o 展开)', en: '… +{{n}} lines (ctrl+o to expand)' },
|
|
616
737
|
// ── components/SuggestionCard.tsx(/ 命令菜单 · @ 文件菜单)─────────
|
|
617
738
|
'sugg-commands-title': { zh: '命令', en: 'commands' },
|
|
618
739
|
'sugg-files-title': { zh: '文件', en: 'files' },
|
|
@@ -667,61 +788,14 @@ const dict = {
|
|
|
667
788
|
// ── components/MessageList.tsx ──────────────────────────────────────
|
|
668
789
|
'load-earlier': { zh: ' ↑ 加载更早消息(会话日志完整,/export 导出全文) ', en: ' ↑ load earlier messages (full session log; /export for full text) ' },
|
|
669
790
|
'show-previous-messages': { zh: ' ctrl+e 显示前 {{n}} 条消息 ', en: ' ctrl+e to show {{n}} previous messages ' },
|
|
670
|
-
|
|
671
|
-
// ── screens/SessionBrowser.tsx + screens/Chat.tsx (/resume) ─────────
|
|
791
|
+
// ── screens/Chat.tsx (/resume) ──────────────────────────────────────
|
|
672
792
|
'resume-resumed': { zh: '已恢复会话', en: 'Session resumed' },
|
|
673
|
-
|
|
674
|
-
'resume-deleted': { zh: '已删除会话「{{name}}」', en: 'Deleted session {{name}}' },
|
|
675
|
-
'resume-delete-failed': { zh: '无法删除会话「{{name}}」', en: 'Could not delete session {{name}}' },
|
|
676
|
-
'resume-rename-placeholder': { zh: '新的会话名称…', en: 'New session name…' },
|
|
677
|
-
'resume-rename-failed': { zh: '无法重命名会话「{{name}}」', en: 'Could not rename session {{name}}' },
|
|
678
|
-
'resume-hint-delete': { zh: '**Enter** 删除 · Esc 取消', en: '**Enter** to delete · Esc to cancel' },
|
|
679
|
-
'resume-hint-rename': { zh: '**Enter** 保存 · Esc 取消', en: '**Enter** to save · Esc to cancel' },
|
|
680
|
-
'resume-title': { zh: '恢复会话', en: 'Resume session' },
|
|
681
|
-
// ── screens/AgentView.tsx + channel.ts (session overview) ─
|
|
682
|
-
'agentview-title': { zh: '会话总览', en: 'Session overview' },
|
|
683
|
-
'agentview-count-awaited': { zh: '{{n}} 个等待输入', en: '{{n}} awaiting input' },
|
|
684
|
-
'agentview-count-working': { zh: '{{n}} 个运行中', en: '{{n}} working' },
|
|
685
|
-
'agentview-count-completed': { zh: '{{n}} 个已完成', en: '{{n}} completed' },
|
|
686
|
-
'agentview-count-failed': { zh: '{{n}} 个失败', en: '{{n}} failed' },
|
|
687
|
-
'agentview-bg-notice': { zh: '当前会话已转入后台 —— **Enter** 打开它 · **Esc** 返回它 · **Ctrl+C** 两次退出', en: 'Your conversation moved to the background — **Enter** opens it · **Esc** returns to it · **Ctrl+C** twice quits' },
|
|
688
|
-
'agentview-current-session': { zh: '当前会话', en: 'current session' },
|
|
689
|
-
'agentview-untitled': { zh: '未命名', en: 'untitled' },
|
|
690
|
-
'agentview-summary-empty': { zh: '输入提示词开始', en: 'send a prompt to start' },
|
|
691
|
-
'agentview-none': { zh: '没有会话。在下方输入任务描述并回车,派发第一个后台会话。', en: 'No sessions. Type a task below and press Enter to dispatch your first background session.' },
|
|
793
|
+
// ── channel/agent-view-projection.ts + background-action.ts (session overview) ─
|
|
692
794
|
'agentview-empty-prompt': { zh: '派发内容不能为空', en: 'Dispatch prompt cannot be empty' },
|
|
693
795
|
'agentview-dispatch-unavailable': { zh: '无法派发后台会话——agent 服务不可用', en: 'Cannot dispatch a background session — the agent service is unavailable' },
|
|
694
796
|
'agentview-dispatch-failed': { zh: '后台会话创建失败 · {{err}}', en: 'Background session creation failed · {{err}}' },
|
|
695
|
-
'agentview-dispatch-done': { zh: '已派发新会话', en: 'Dispatched a new session' },
|
|
696
|
-
'agentview-stopped': { zh: '已停止会话', en: 'Session stopped' },
|
|
697
|
-
'agentview-stop-failed': { zh: '无法停止——该会话不是本 TUI 派发的后台会话', en: 'Cannot stop — this is not a background session dispatched by this TUI' },
|
|
698
|
-
'agentview-stop-confirm': { zh: '**Ctrl+X** 再次按下删除会话「{{name}}」,其他键取消', en: '**Ctrl+X** again to delete "{{name}}", any other key cancels' },
|
|
699
|
-
'agentview-deleted': { zh: '已删除会话「{{name}}」', en: 'Deleted session "{{name}}"' },
|
|
700
|
-
'agentview-delete-failed': { zh: '无法删除会话「{{name}}」', en: 'Could not delete session "{{name}}"' },
|
|
701
|
-
'agentview-attached': { zh: '已切换到会话', en: 'Attached to session' },
|
|
702
|
-
'agentview-attach-failed': { zh: '切换失败 · {{err}}', en: 'Attach failed · {{err}}' },
|
|
703
|
-
'agentview-current-marker': { zh: '当前', en: 'attached' },
|
|
704
|
-
'agentview-input-placeholder': { zh: '输入任务并回车派发后台会话 · Shift+Enter 派发并立即切换', en: 'Type a task and press Enter to dispatch · Shift+Enter dispatch and attach' },
|
|
705
|
-
'agentview-hint-list': { zh: '**Enter**/→ 切换 · **Space** 预览 · **Ctrl+X** 停止(两次删除) · **Ctrl+R** 重命名 · **Esc** 退出 · **?** 帮助', en: '**Enter**/→ attach · **Space** peek · **Ctrl+X** stop (twice: delete) · **Ctrl+R** rename · **Esc** exit · **?** help' },
|
|
706
|
-
'agentview-hint-rename': { zh: '**Enter** 保存 · Esc 取消', en: '**Enter** to save · Esc to cancel' },
|
|
707
|
-
'agentview-hint-peek': { zh: '输入回复并按 **Enter** 发送 · **Esc** 关闭预览', en: 'Type a reply and press **Enter** to send · **Esc** close' },
|
|
708
|
-
'agentview-reply-sent': { zh: '已发送回复', en: 'Reply sent' },
|
|
709
|
-
'agentview-reply-failed': { zh: '回复发送失败 · {{err}}', en: 'Reply failed · {{err}}' },
|
|
710
797
|
'agentview-reply-empty': { zh: '回复内容为空', en: 'Reply is empty' },
|
|
711
798
|
'agentview-reply-stopped': { zh: '该会话未运行——回车切换进去后回复', en: 'This session is not running — press Enter to attach and reply' },
|
|
712
|
-
'agentview-help-title': { zh: '会话总览快捷键', en: 'Session overview shortcuts' },
|
|
713
|
-
'agentview-help': { zh: '↑/↓ 移动 · PgUp/PgDn 翻页\nEnter/→ 切换到选中会话(输入框有文字时:派发);后台化打开时 **Enter** 打开当前会话\nShift+Enter 派发并立即切换\nSpace 打开/关闭预览 · 预览内可输入回复并 Enter 发送\nCtrl+X 停止会话 · 两秒内再次按下删除\nCtrl+R 重命名选中会话\nEsc 关闭预览 → 清空输入 → 退出;后台化打开时返回被转入后台的会话\nCtrl+C 清空输入 · 两次退出\n? 本帮助\n\n后台会话运行在本进程内:TUI 退出后停止,日志保留可 /resume 恢复。', en: '↑/↓ move · PgUp/PgDn page\nEnter/→ attach to the selected session (with input text: dispatch); after backgrounding, **Enter** opens the current session\nShift+Enter dispatch and attach\nSpace toggle the peek panel · type a reply inside and Enter to send\nCtrl+X stop the session · press again within 2s to delete\nCtrl+R rename the selected session\nEsc close peek → clear input → exit; after backgrounding, returns to the backgrounded session\nCtrl+C clear input · twice to exit\n? this help\n\nBackground sessions run inside this process: they stop when the TUI exits; their logs survive for /resume.' },
|
|
714
|
-
'agentview-rename-placeholder': { zh: '新的会话名称…', en: 'New session name…' },
|
|
715
|
-
'agentview-renamed': { zh: '已重命名「{{title}}」', en: 'Renamed "{{title}}"' },
|
|
716
|
-
'agentview-rename-failed': { zh: '重命名失败', en: 'Rename failed' },
|
|
717
|
-
'agentview-hint-help': { zh: '**Esc** 关闭帮助', en: '**Esc** to close help' },
|
|
718
|
-
// State group headers.
|
|
719
|
-
'agentview-state-needs-input': { zh: '等待输入', en: 'Needs input' },
|
|
720
|
-
'agentview-state-working': { zh: '运行中', en: 'Working' },
|
|
721
|
-
'agentview-state-completed': { zh: '已完成', en: 'Completed' },
|
|
722
|
-
'agentview-state-failed': { zh: '失败', en: 'Failed' },
|
|
723
|
-
'agentview-state-idle': { zh: '空闲', en: 'Idle' },
|
|
724
|
-
'agentview-state-stopped': { zh: '已停止', en: 'Stopped' },
|
|
725
799
|
// Approval panel annotation for a background session's ask.
|
|
726
800
|
'approval-background-agent': { zh: '来自后台会话 {{id}} 的审批请求', en: 'Approval request from background session {{id}}' },
|
|
727
801
|
// Prompt footer session navigation: the ← affordance's hint.
|
|
@@ -749,9 +823,7 @@ const dict = {
|
|
|
749
823
|
'settings-hint-list': { zh: '**Enter** 进入/编辑/切换(改动即保存) · Esc 退出', en: '**Enter** open/edit/toggle (auto-saves) · Esc exit' },
|
|
750
824
|
'settings-hint-group': { zh: '**Enter** 编辑/切换(改动即保存) · Esc 返回', en: '**Enter** edit/toggle (auto-saves) · Esc back' },
|
|
751
825
|
'settings-hint-edit': { zh: '**Enter** 确认并保存 · Esc 取消', en: '**Enter** to confirm & save · Esc to cancel' },
|
|
752
|
-
// ──
|
|
753
|
-
'session-loading': { zh: '正在读取会话…', en: 'Reading sessions…' },
|
|
754
|
-
'session-list-failed': { zh: '无法读取会话列表 · {{err}}', en: 'Could not read the session list · {{err}}' },
|
|
826
|
+
// ── 会话与工作区列表行:行、计数、筛选、预览 ─────────────────────────
|
|
755
827
|
'session-resume-failed': { zh: '恢复会话失败 · {{err}}', en: 'Resuming the session failed · {{err}}' },
|
|
756
828
|
'session-when-now': { zh: '刚刚', en: 'just now' },
|
|
757
829
|
'session-when-minutes': { zh: '{{n}} 分钟前', en: '{{n}}m ago' },
|
|
@@ -763,47 +835,20 @@ const dict = {
|
|
|
763
835
|
'session-kind-fork': { zh: '回溯分支', en: 'Rewound branch' },
|
|
764
836
|
'session-kind-subagent': { zh: '子 agent 运行', en: 'Sub-agent run' },
|
|
765
837
|
'session-project-unknown': { zh: '(未记录目录)', en: '(no directory recorded)' },
|
|
766
|
-
'session-scope-all': { zh: '全部工作目录', en: 'all working directories' },
|
|
767
|
-
'session-search-placeholder': { zh: '输入以搜索 · {{scope}}', en: 'Type to search · {{scope}}' },
|
|
768
|
-
'session-workspace-scope': { zh: '工作目录', en: 'Working directory' },
|
|
769
|
-
'session-workspace-switch': { zh: '← 选择目录', en: '← choose directory' },
|
|
770
|
-
'session-workspace-select-title': { zh: '选择工作目录', en: 'Choose working directory' },
|
|
771
|
-
'session-workspace-search-placeholder': { zh: '输入以搜索工作目录', en: 'Type to search working directories' },
|
|
772
838
|
'session-workspace-all': { zh: '全部工作目录', en: 'All working directories' },
|
|
773
839
|
'session-workspace-current': { zh: '当前', en: 'current' },
|
|
774
840
|
'session-workspace-project-count': { zh: '{{n}} 个目录', en: '{{n}} directories' },
|
|
775
841
|
'session-workspace-all-detail': { zh: '跨目录浏览 · {{n}} 个会话', en: 'browse across directories · {{n}} sessions' },
|
|
776
842
|
'session-workspace-empty': { zh: '暂无历史会话', en: 'no history yet' },
|
|
777
|
-
|
|
778
|
-
// Right-click session menu items (SessionBrowser popup).
|
|
779
|
-
'resume-menu-open': { zh: '打开', en: 'Open' },
|
|
843
|
+
// Right-click session menu items (components/sessions/SessionListRow.tsx).
|
|
780
844
|
'resume-menu-pin': { zh: '固定到顶部', en: 'Pin to top' },
|
|
781
845
|
'resume-menu-unpin': { zh: '取消固定', en: 'Unpin' },
|
|
782
|
-
|
|
783
|
-
'resume-menu-delete': { zh: '删除', en: 'Delete' },
|
|
784
|
-
// Session pinning (SessionBrowser pinned group + toasts).
|
|
785
|
-
'session-pinned-group': { zh: '已固定', en: 'Pinned' },
|
|
786
|
-
'resume-pinned': { zh: '已固定 {{name}}', en: 'Pinned {{name}}' },
|
|
787
|
-
'resume-unpinned': { zh: '已取消固定 {{name}}', en: 'Unpinned {{name}}' },
|
|
846
|
+
// Session pinning (supervisor toasts + persisted pin state).
|
|
788
847
|
'resume-pin-save-failed': { zh: '固定状态保存失败,未应用更改', en: 'Could not save pin; no change was applied' },
|
|
789
848
|
'session-count-shown': { zh: '{{n}} 个会话', en: '{{n}} sessions' },
|
|
790
|
-
'session-count-subagents': { zh: '{{n}} 个子运行已折叠', en: '{{n}} runs folded' },
|
|
791
|
-
'session-count-empty': { zh: '{{n}} 个空会话', en: '{{n}} empty' },
|
|
792
|
-
'session-clean-confirm': { zh: '清理 {{n}} 个没有对话内容的会话?日志将被永久移除。', en: 'Remove {{n}} sessions that hold no conversation? Their logs are deleted permanently.' },
|
|
793
|
-
'session-cleaned': { zh: '已清理 {{n}} 个空会话', en: 'Removed {{n}} empty sessions' },
|
|
794
849
|
'session-preview-times': { zh: '创建于 {{created}} · 最后活动 {{updated}}', en: 'created {{created}} · last active {{updated}}' },
|
|
795
850
|
'session-preview-loading': { zh: '正在读取会话结尾…', en: 'Reading the end of this session…' },
|
|
796
851
|
'session-preview-empty': { zh: '这个会话没有可预览的往来消息', en: 'No exchanges to preview in this session' },
|
|
797
|
-
'session-toggle-on': { zh: '开', en: 'on' },
|
|
798
|
-
'session-toggle-off': { zh: '关', en: 'off' },
|
|
799
|
-
// Three widths of the same hint. The browser picks the widest that fits the
|
|
800
|
-
// terminal, because a hint that wraps costs the rows the list needs and can
|
|
801
|
-
// push its own tail off the bottom of the screen.
|
|
802
|
-
'session-hint-list': { zh: '**Enter** 恢复 · ← 工作目录 · Tab 预览 · 右键菜单 · {{mod}}a 全部目录({{projects}}) · {{mod}}s 子运行({{runs}}) · {{mod}}b 本分支 · {{mod}}r 重命名 · {{mod}}p 固定 · {{mod}}d 删除 · {{mod}}x 清空壳 · Esc 退出', en: '**Enter** resume · ← directories · Tab preview · right-click menu · {{mod}}a all directories ({{projects}}) · {{mod}}s runs ({{runs}}) · {{mod}}b this branch · {{mod}}r rename · {{mod}}p pin · {{mod}}d delete · {{mod}}x clean · Esc exit' },
|
|
803
|
-
'session-hint-list-mid': { zh: '**Enter** 恢复 · ← 工作目录 · Tab 预览 · 右键菜单 · {{mod}}a 全部目录 · {{mod}}s 子运行 · {{mod}}r 重命名 · {{mod}}p 固定 · {{mod}}d 删除 · Esc 退出', en: '**Enter** resume · ← directories · Tab preview · right-click menu · {{mod}}a all directories · {{mod}}s runs · {{mod}}r rename · {{mod}}p pin · {{mod}}d delete · Esc exit' },
|
|
804
|
-
'session-hint-list-short': { zh: '**Enter** 恢复 · {{mod}}p ★ · ← 目录 · Esc', en: '**Enter** resume · {{mod}}p ★ · ← dirs · Esc' },
|
|
805
|
-
'session-hint-workspaces': { zh: '**Enter/→** 查看会话 · ↑/↓ 选择 · {{mod}}a 全部目录 · Esc 返回', en: '**Enter/→** view sessions · ↑/↓ choose · {{mod}}a all directories · Esc back' },
|
|
806
|
-
'session-hint-workspaces-short': { zh: '**Enter/→** 查看 · Esc', en: '**Enter/→** view · Esc' },
|
|
807
852
|
// ── picker 通用快捷键提示(整句本地化,zh 不用 "to" 结构;**段** 渲染为粗体主快捷键)─
|
|
808
853
|
'hint-confirm-exit': { zh: '**Enter** 确认 · Esc 退出', en: '**Enter** to confirm · Esc to exit' },
|
|
809
854
|
'hint-select-exit': { zh: '**Enter** 选择 · Esc 退出', en: '**Enter** to select · Esc to exit' },
|
|
@@ -813,7 +858,6 @@ const dict = {
|
|
|
813
858
|
'statusline-hint-working': { zh: 'esc 中断', en: 'esc to interrupt' },
|
|
814
859
|
'statusline-hint-shortcuts': { zh: '? 查看快捷键', en: '? for shortcuts' },
|
|
815
860
|
// ── 底栏字段 hover 明细(补充行读出;技术标签 ctx/free/read 等保持不译)──
|
|
816
|
-
'status-detail-of-window': { zh: '的窗口', en: 'of window' },
|
|
817
861
|
'status-detail-session-id': { zh: '会话日志目录与此 id 同名', en: 'the session log directory is named after this id' },
|
|
818
862
|
'hint-ext-dialog-input': { zh: '**Enter** 确认 · Esc 取消', en: '**Enter** to confirm · Esc to cancel' },
|
|
819
863
|
'hint-adjust-done': { zh: '**←/→** 调整 · Enter/Esc 完成', en: '**←/→** to adjust · Enter/Esc to done' },
|
|
@@ -971,6 +1015,10 @@ const dict = {
|
|
|
971
1015
|
'question-hint-select': { zh: '↑/↓ 选择', en: '↑/↓ select' },
|
|
972
1016
|
'question-hint-multi': { zh: 'Space 多选', en: 'Space multi-select' },
|
|
973
1017
|
'question-hint-attach': { zh: '输入文字附带回答', en: 'Type text to attach an answer' },
|
|
1018
|
+
'question-fold-waiting': { zh: '正在等你回答', en: 'Waiting for your answer' },
|
|
1019
|
+
'question-fold-expand': { zh: '{{combo}} 展开', en: '{{combo}} to expand' },
|
|
1020
|
+
'question-fold-hint': { zh: '{{combo}} 折叠 / 点标题行收起', en: '{{combo}} to fold / click the header' },
|
|
1021
|
+
'question-submit-selection': { zh: '提交选择(Enter)', en: 'Submit selection (Enter)' },
|
|
974
1022
|
'question-custom-tab': { zh: '自定义回答', en: 'Custom answer' },
|
|
975
1023
|
'question-attached-label': { zh: '(附加:{{label}})', en: '(attached: {{label}})' },
|
|
976
1024
|
'question-direct-input': { zh: '直接输入…', en: 'Type directly…' },
|
|
@@ -30,4 +30,14 @@ export declare function applyTextStyles(text: string, styles: TextStyles): strin
|
|
|
30
30
|
* @returns `text` wrapped in the foreground color sequence.
|
|
31
31
|
*/
|
|
32
32
|
export declare function applyColor(text: string, color: Color | undefined): string;
|
|
33
|
+
/**
|
|
34
|
+
* The opening SGR sequence for a raw background color — no text, no reset.
|
|
35
|
+
*
|
|
36
|
+
* SixelGraphicsManager needs it to give Erase-Character the placement's surface
|
|
37
|
+
* color as its fill: the erased cells keep a "background-only" style in the cell
|
|
38
|
+
* model, so filling them with the terminal default would leave a black patch.
|
|
39
|
+
* @param color - the raw background color value; undefined or empty yields ''.
|
|
40
|
+
* @returns the opening SGR sequence, or '' when no color applies.
|
|
41
|
+
*/
|
|
42
|
+
export declare function backgroundOpenCode(color: Color | undefined): string;
|
|
33
43
|
//# sourceMappingURL=colorize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colorize.d.ts","sourceRoot":"","sources":["../../../src/ink/colorize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA0DpD,2EAA2E;AAC3E,eAAO,MAAM,yBAAyB,SAA8B,CAAA;AACpE,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,SAA2B,CAAA;AAE9D,mEAAmE;AACnE,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,CAAA;AAKnD;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GACnB,KAAK,MAAM,EACX,OAAO,MAAM,GAAG,SAAS,EACzB,MAAM,SAAS,KACd,MAgGF,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CA4CxE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAKzE"}
|
|
1
|
+
{"version":3,"file":"colorize.d.ts","sourceRoot":"","sources":["../../../src/ink/colorize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA0DpD,2EAA2E;AAC3E,eAAO,MAAM,yBAAyB,SAA8B,CAAA;AACpE,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,SAA2B,CAAA;AAE9D,mEAAmE;AACnE,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,CAAA;AAKnD;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GACnB,KAAK,MAAM,EACX,OAAO,MAAM,GAAG,SAAS,EACzB,MAAM,SAAS,KACd,MAgGF,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CA4CxE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAKzE;AAQD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAKnE"}
|
|
@@ -210,3 +210,24 @@ export function applyColor(text, color) {
|
|
|
210
210
|
}
|
|
211
211
|
return colorize(text, color, 'foreground');
|
|
212
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Marker used to split chalk's open/close pair. No SGR sequence contains a NUL,
|
|
215
|
+
* so everything before it is the opening code.
|
|
216
|
+
*/
|
|
217
|
+
const SGR_OPEN_MARKER = '\u0000';
|
|
218
|
+
/**
|
|
219
|
+
* The opening SGR sequence for a raw background color — no text, no reset.
|
|
220
|
+
*
|
|
221
|
+
* SixelGraphicsManager needs it to give Erase-Character the placement's surface
|
|
222
|
+
* color as its fill: the erased cells keep a "background-only" style in the cell
|
|
223
|
+
* model, so filling them with the terminal default would leave a black patch.
|
|
224
|
+
* @param color - the raw background color value; undefined or empty yields ''.
|
|
225
|
+
* @returns the opening SGR sequence, or '' when no color applies.
|
|
226
|
+
*/
|
|
227
|
+
export function backgroundOpenCode(color) {
|
|
228
|
+
if (!color)
|
|
229
|
+
return '';
|
|
230
|
+
const styled = colorize(SGR_OPEN_MARKER, color, 'background');
|
|
231
|
+
const end = styled.indexOf(SGR_OPEN_MARKER);
|
|
232
|
+
return end <= 0 ? '' : styled.slice(0, end);
|
|
233
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollBox.d.ts","sourceRoot":"","sources":["../../../../src/ink/components/ScrollBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,KAAK,GAAG,EAAsD,MAAM,OAAO,CAAC;AACpH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,eAAe,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,MAAM,CAAC;IACnC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC;;;OAGG;IACH,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB;;;;;OAKG;IACH,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD;;;;;;;OAOG;IACH,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC5E,CAAC;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG;IACjG,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;;;;;;GASG;AACH,iBAAS,SAAS,CAAC,EACjB,QAAQ,EACR,GAAG,EACH,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"ScrollBox.d.ts","sourceRoot":"","sources":["../../../../src/ink/components/ScrollBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,KAAK,GAAG,EAAsD,MAAM,OAAO,CAAC;AACpH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,eAAe,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,MAAM,CAAC;IACnC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC;;;OAGG;IACH,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB;;;;;OAKG;IACH,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD;;;;;;;OAOG;IACH,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC5E,CAAC;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG;IACjG,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;;;;;;GASG;AACH,iBAAS,SAAS,CAAC,EACjB,QAAQ,EACR,GAAG,EACH,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,iBAAiB,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,SAAS,CA6RrD;AACD,eAAe,SAAS,CAAC"}
|
|
@@ -268,8 +268,19 @@ function ScrollBox({ children, ref, stickyScroll, ...style }) {
|
|
|
268
268
|
if (el) {
|
|
269
269
|
el.scrollTop ??= 0;
|
|
270
270
|
el.onStickyRestore = notify;
|
|
271
|
+
// A viewport-height change since the last layout pass means every
|
|
272
|
+
// geometry-reading subscriber painted the previous bounds (the
|
|
273
|
+
// renderer owns the write and this pass was otherwise silent). Wire
|
|
274
|
+
// it to the same subscriber notify as scroll mutations, coalesced to
|
|
275
|
+
// the frame budget: a terminal resize storm or a landing's chained
|
|
276
|
+
// chrome unmounts each produce a pass, and merging them bounds the
|
|
277
|
+
// React commits without dropping the final state — notifyCoalesced
|
|
278
|
+
// always runs the queued notify, and subscribers re-read the handle
|
|
279
|
+
// (level-triggered), so a coalesced pass still sees the latest bounds.
|
|
280
|
+
el.onViewportHeightChange = notifyCoalesced;
|
|
271
281
|
}
|
|
272
|
-
// notify only
|
|
282
|
+
// notify/notifyCoalesced only close over refs, like the imperative handle
|
|
283
|
+
// above.
|
|
273
284
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
274
285
|
}, []);
|
|
275
286
|
// Structure: outer viewport (overflow:scroll, constrained height) >
|
package/lib/types/ink/dom.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/ink/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAKlD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIrD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,UAAU,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,EAAE,UAAU,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAA;AAC9B;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,SAAS,GACT,UAAU,GACV,kBAAkB,GAClB,UAAU,GACV,cAAc,GACd,WAAW,GACX,cAAc,CAAA;AAElB;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAA;AAE/C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,YAAY,CAAA;IACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC5C,UAAU,EAAE,OAAO,EAAE,CAAA;IACrB,UAAU,CAAC,EAAE,UAAU,CAAA;IAGvB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAE9B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAG5B,KAAK,EAAE,OAAO,CAAA;IAEd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAIlB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAMxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAKlB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAQ3B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAO1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IAOtB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/ink/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAKlD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIrD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,UAAU,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,EAAE,UAAU,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAA;AAC9B;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,SAAS,GACT,UAAU,GACV,kBAAkB,GAClB,UAAU,GACV,cAAc,GACd,WAAW,GACX,cAAc,CAAA;AAElB;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAA;AAE/C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,YAAY,CAAA;IACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC5C,UAAU,EAAE,OAAO,EAAE,CAAA;IACrB,UAAU,CAAC,EAAE,UAAU,CAAA;IAGvB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAE9B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAG5B,KAAK,EAAE,OAAO,CAAA;IAEd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAIlB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAMxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAKlB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAQ3B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAO1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IAOtB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAgB5B,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAA;IAOnC,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAGjD,YAAY,CAAC,EAAE,YAAY,CAAA;IAK3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B,GAAG,OAAO,CAAA;AAEX;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,OAAO,CAAA;AAEX;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,IAAI,CAAC,SAAS;IAC3D,QAAQ,EAAE,MAAM,CAAC,CAAA;CAClB,GACG,CAAC,SAAS,OAAO,GACf,QAAQ,GACR,UAAU,GACZ,KAAK,CAAA;AAET;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;AAEjF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,UAAU,YAAY,KAAG,UAsBnD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,UAAU,EAChB,WAAW,UAAU,KACpB,IAgBF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,UAAU,EAChB,cAAc,OAAO,EACrB,iBAAiB,OAAO,KACvB,IA2CF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,UAAU,EAChB,YAAY,OAAO,KAClB,IAgBF,CAAA;AAwBD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,UAAU,EAChB,KAAK,MAAM,EACX,OAAO,gBAAgB,KACtB,IAaF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,OAAO,EAAE,OAAO,MAAM,KAAG,IAQvD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,UAAU,EAChB,YAAY,UAAU,KACrB,IAUF,CAAA;AA6BD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,QAY7C,CAAA;AA8FD;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,IAuB1C,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,IAkB9C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,IAInD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,QAAQ,EAAE,MAAM,MAAM,KAAG,IAY/D,CAAA;AAMD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM,UAAU,GAAG,QAAQ,KAAG,IAOrE,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBzE"}
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
* @param onCopied - called with the copied text after each successful copy
|
|
18
18
|
* (e.g. to show a toast). Stored in a ref, so an inline closure is fine
|
|
19
19
|
* and never re-subscribes.
|
|
20
|
+
* @param onRefused - called when the selection was marked stale (its rows
|
|
21
|
+
* were replaced in place while highlighted): the highlight is cleared
|
|
22
|
+
* and NOTHING is copied — the caller should tell the user why (e.g.
|
|
23
|
+
* "content changed, copy cancelled") instead of staying silent.
|
|
20
24
|
*/
|
|
21
|
-
export declare function useCopyOnSelect(onCopied?: (text: string) => void): void;
|
|
25
|
+
export declare function useCopyOnSelect(onCopied?: (text: string) => void, onRefused?: () => void): void;
|
|
22
26
|
//# sourceMappingURL=use-copy-on-select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-copy-on-select.d.ts","sourceRoot":"","sources":["../../../../src/ink/hooks/use-copy-on-select.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"use-copy-on-select.d.ts","sourceRoot":"","sources":["../../../../src/ink/hooks/use-copy-on-select.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACjC,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,IAAI,CAyBN"}
|
|
@@ -20,17 +20,31 @@ import { useSelection } from './use-selection.js';
|
|
|
20
20
|
* @param onCopied - called with the copied text after each successful copy
|
|
21
21
|
* (e.g. to show a toast). Stored in a ref, so an inline closure is fine
|
|
22
22
|
* and never re-subscribes.
|
|
23
|
+
* @param onRefused - called when the selection was marked stale (its rows
|
|
24
|
+
* were replaced in place while highlighted): the highlight is cleared
|
|
25
|
+
* and NOTHING is copied — the caller should tell the user why (e.g.
|
|
26
|
+
* "content changed, copy cancelled") instead of staying silent.
|
|
23
27
|
*/
|
|
24
|
-
export function useCopyOnSelect(onCopied) {
|
|
28
|
+
export function useCopyOnSelect(onCopied, onRefused) {
|
|
25
29
|
const { subscribe, getState, copySelection } = useSelection();
|
|
26
30
|
const onCopiedRef = useRef(onCopied);
|
|
27
31
|
onCopiedRef.current = onCopied;
|
|
32
|
+
const onRefusedRef = useRef(onRefused);
|
|
33
|
+
onRefusedRef.current = onRefused;
|
|
28
34
|
useEffect(() => {
|
|
29
35
|
return subscribe(() => {
|
|
30
36
|
const state = getState();
|
|
31
37
|
// Mid-drag notifications (every motion event) skip the copy; the
|
|
32
38
|
// release notification arrives with isDragging already cleared.
|
|
33
39
|
if (state && !state.isDragging && hasSelection(state)) {
|
|
40
|
+
if (state.stale) {
|
|
41
|
+
// copySelection clears the stale highlight; its internal copy
|
|
42
|
+
// is refused (empty), so the only user-visible effect without
|
|
43
|
+
// this branch would be a highlight vanishing for no reason.
|
|
44
|
+
copySelection();
|
|
45
|
+
onRefusedRef.current?.();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
34
48
|
const text = copySelection();
|
|
35
49
|
if (text)
|
|
36
50
|
onCopiedRef.current?.(text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ink.d.ts","sourceRoot":"","sources":["../../../src/ink/ink.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAc9C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAIhC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAarE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAA4B,KAAK,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AAIpG,OAAO,EAAqG,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"ink.d.ts","sourceRoot":"","sources":["../../../src/ink/ink.tsx"],"names":[],"mappings":"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"}
|