@deepseek-harness-tui/dsh-tui 0.8.8 → 0.9.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 +60 -238
- package/bin/dsh-tui.js +172 -5
- package/cordis.patch.yml +16 -4
- package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -13
- package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -59
- package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -15
- package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -32
- package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -59
- package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -166
- package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -42
- package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -143
- package/dsh-ecosystem-spec/registry/README.md +14 -14
- package/dsh-ecosystem-spec/registry/host-descriptor.tui.example.json +56 -56
- package/dsh-ecosystem-spec/registry/permissions-0.1.json +13 -13
- package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -149
- package/lib/types/cc/hyperlink.d.ts +7 -1
- package/lib/types/cc/hyperlink.d.ts.map +1 -1
- package/lib/types/cc/hyperlink.js +3 -2
- package/lib/types/cc/markdown.d.ts.map +1 -1
- package/lib/types/cc/markdown.js +33 -3
- package/lib/types/cc/sessionColors.d.ts +27 -0
- package/lib/types/cc/sessionColors.d.ts.map +1 -0
- package/lib/types/cc/sessionColors.js +39 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +10 -2
- package/lib/types/components/ActivityPicker.d.ts +4 -1
- package/lib/types/components/ActivityPicker.d.ts.map +1 -1
- package/lib/types/components/ActivityPicker.js +2 -2
- package/lib/types/components/AutoRecapRow.d.ts +23 -0
- package/lib/types/components/AutoRecapRow.d.ts.map +1 -0
- package/lib/types/components/AutoRecapRow.js +23 -0
- package/lib/types/components/BtwPanel.d.ts.map +1 -1
- package/lib/types/components/BtwPanel.js +1 -1
- package/lib/types/components/Chat/SubagentMessage.d.ts +2 -1
- package/lib/types/components/Chat/SubagentMessage.d.ts.map +1 -1
- package/lib/types/components/Chat/SubagentMessage.js +11 -3
- package/lib/types/components/ColorPicker.d.ts +17 -0
- package/lib/types/components/ColorPicker.d.ts.map +1 -0
- package/lib/types/components/ColorPicker.js +20 -0
- package/lib/types/components/CommandSuggestions.d.ts +23 -4
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
- package/lib/types/components/CommandSuggestions.js +41 -14
- package/lib/types/components/ContextBarView.d.ts +33 -0
- package/lib/types/components/ContextBarView.d.ts.map +1 -0
- package/lib/types/components/ContextBarView.js +46 -0
- package/lib/types/components/EffortInputBorder.d.ts +12 -1
- package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
- package/lib/types/components/EffortInputBorder.js +22 -5
- package/lib/types/components/EffortSlider.d.ts +4 -1
- package/lib/types/components/EffortSlider.d.ts.map +1 -1
- package/lib/types/components/EffortSlider.js +4 -2
- package/lib/types/components/ExtensionDialog.js +6 -2
- package/lib/types/components/FileActionsPanel.d.ts +22 -0
- package/lib/types/components/FileActionsPanel.d.ts.map +1 -0
- package/lib/types/components/FileActionsPanel.js +28 -0
- package/lib/types/components/FileSuggestions.d.ts +26 -7
- package/lib/types/components/FileSuggestions.d.ts.map +1 -1
- package/lib/types/components/FileSuggestions.js +39 -12
- package/lib/types/components/GoalTodoPanel.d.ts +26 -2
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/GoalTodoPanel.js +86 -17
- package/lib/types/components/HelpMenu.d.ts +7 -1
- package/lib/types/components/HelpMenu.d.ts.map +1 -1
- package/lib/types/components/HelpMenu.js +12 -4
- package/lib/types/components/HistorySearchDialog.d.ts +4 -1
- package/lib/types/components/HistorySearchDialog.d.ts.map +1 -1
- package/lib/types/components/HistorySearchDialog.js +2 -2
- package/lib/types/components/LangPicker.d.ts +14 -0
- package/lib/types/components/LangPicker.d.ts.map +1 -0
- package/lib/types/components/LangPicker.js +17 -0
- package/lib/types/components/LoadedContextPanel.d.ts.map +1 -1
- package/lib/types/components/LoadedContextPanel.js +3 -1
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +12 -3
- package/lib/types/components/MessageList.d.ts +45 -2
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +560 -41
- package/lib/types/components/ModelPicker.d.ts +27 -2
- package/lib/types/components/ModelPicker.d.ts.map +1 -1
- package/lib/types/components/ModelPicker.js +26 -6
- package/lib/types/components/PermissionsPicker.d.ts +21 -0
- package/lib/types/components/PermissionsPicker.d.ts.map +1 -0
- package/lib/types/components/PermissionsPicker.js +27 -0
- package/lib/types/components/PlanPicker.d.ts +15 -0
- package/lib/types/components/PlanPicker.d.ts.map +1 -0
- package/lib/types/components/PlanPicker.js +18 -0
- package/lib/types/components/PresetPicker.d.ts +4 -1
- package/lib/types/components/PresetPicker.d.ts.map +1 -1
- package/lib/types/components/PresetPicker.js +2 -2
- package/lib/types/components/PromptInput.d.ts +4 -3
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +602 -75
- package/lib/types/components/RecapPanel.d.ts +25 -0
- package/lib/types/components/RecapPanel.d.ts.map +1 -0
- package/lib/types/components/RecapPanel.js +55 -0
- package/lib/types/components/RewindPicker.d.ts +12 -1
- package/lib/types/components/RewindPicker.d.ts.map +1 -1
- package/lib/types/components/RewindPicker.js +6 -4
- package/lib/types/components/ScrollbarGutter.d.ts +28 -0
- package/lib/types/components/ScrollbarGutter.d.ts.map +1 -0
- package/lib/types/components/ScrollbarGutter.js +119 -0
- package/lib/types/components/Select.d.ts +8 -1
- package/lib/types/components/Select.d.ts.map +1 -1
- package/lib/types/components/Select.js +4 -2
- package/lib/types/components/SkillsPicker.d.ts +4 -1
- package/lib/types/components/SkillsPicker.d.ts.map +1 -1
- package/lib/types/components/SkillsPicker.js +2 -2
- package/lib/types/components/SubagentCard.d.ts +2 -1
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +9 -2
- package/lib/types/components/SubagentDashboard.d.ts +4 -0
- package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
- package/lib/types/components/SubagentDashboard.js +9 -1
- package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
- package/lib/types/components/SubagentDetailScene.js +5 -4
- package/lib/types/components/SuggestionCard.d.ts +65 -0
- package/lib/types/components/SuggestionCard.d.ts.map +1 -0
- package/lib/types/components/SuggestionCard.js +77 -0
- package/lib/types/components/ThemePicker.d.ts +4 -1
- package/lib/types/components/ThemePicker.d.ts.map +1 -1
- package/lib/types/components/ThemePicker.js +2 -2
- package/lib/types/components/ThinkingToggle.d.ts +4 -1
- package/lib/types/components/ThinkingToggle.d.ts.map +1 -1
- package/lib/types/components/ThinkingToggle.js +2 -2
- package/lib/types/components/TimelineRail.d.ts +53 -0
- package/lib/types/components/TimelineRail.d.ts.map +1 -0
- package/lib/types/components/TimelineRail.js +197 -0
- package/lib/types/components/WorkspaceFlowPicker.d.ts +6 -1
- package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
- package/lib/types/components/WorkspaceFlowPicker.js +4 -2
- package/lib/types/components/WorkspaceMenuPicker.d.ts +19 -0
- package/lib/types/components/WorkspaceMenuPicker.d.ts.map +1 -0
- package/lib/types/components/WorkspaceMenuPicker.js +19 -0
- package/lib/types/components/WorkspacePicker.d.ts +4 -1
- package/lib/types/components/WorkspacePicker.d.ts.map +1 -1
- package/lib/types/components/WorkspacePicker.js +2 -2
- package/lib/types/components/approvals/ApprovalPanel.d.ts.map +1 -1
- package/lib/types/components/approvals/ApprovalPanel.js +5 -1
- package/lib/types/components/design-system/ListItem.d.ts +8 -1
- package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
- package/lib/types/components/design-system/ListItem.js +8 -3
- package/lib/types/components/design-system/ThemeProvider.d.ts +7 -0
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +2 -1
- package/lib/types/components/messages/AssistantTextMessage.d.ts +5 -2
- package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantTextMessage.js +6 -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 +10 -4
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +15 -1
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +37 -7
- package/lib/types/components/messages/UserPromptMessage.d.ts +2 -1
- package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +7 -3
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +75 -11
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +13 -2
- package/lib/types/components/sessions/SessionListRow.d.ts +4 -1
- package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
- package/lib/types/components/sessions/SessionListRow.js +4 -2
- package/lib/types/components/trajectory/HotspotView.d.ts +7 -1
- package/lib/types/components/trajectory/HotspotView.d.ts.map +1 -1
- package/lib/types/components/trajectory/HotspotView.js +8 -2
- package/lib/types/components/trajectory/Ledger.d.ts +9 -1
- package/lib/types/components/trajectory/Ledger.d.ts.map +1 -1
- package/lib/types/components/trajectory/Ledger.js +23 -5
- package/lib/types/components/trajectory/WaveBand.d.ts +10 -1
- package/lib/types/components/trajectory/WaveBand.d.ts.map +1 -1
- package/lib/types/components/trajectory/WaveBand.js +7 -2
- package/lib/types/dsh-adapter/channel.d.ts +117 -7
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +1301 -122
- package/lib/types/dsh-adapter/compat/index.d.ts +8 -6
- package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/index.js +8 -6
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts +150 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/sessionLog.js +518 -41
- package/lib/types/dsh-adapter/contract.d.ts +1 -1
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +1 -0
- package/lib/types/dsh-adapter/extension-events.d.ts +1 -1
- package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.d.ts +20 -2
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +9 -1
- package/lib/types/dsh-adapter/plugin.d.ts +0 -9
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +453 -14
- package/lib/types/dsh-adapter/presets.d.ts +18 -0
- package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/presets.js +31 -0
- package/lib/types/dsh-adapter/providerWizard.d.ts +29 -1
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/providerWizard.js +89 -5
- package/lib/types/dsh-adapter/questions.d.ts +19 -2
- package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/questions.js +53 -10
- package/lib/types/dsh-adapter/recap.d.ts +49 -0
- package/lib/types/dsh-adapter/recap.d.ts.map +1 -0
- package/lib/types/dsh-adapter/recap.js +121 -0
- package/lib/types/dsh-adapter/sessionTree.d.ts +314 -0
- package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sessionTree.js +954 -0
- package/lib/types/dsh-adapter/shortcuts.d.ts +15 -44
- package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
- package/lib/types/dsh-adapter/shortcuts.js +28 -165
- package/lib/types/dsh-adapter/types.d.ts +1 -1
- package/lib/types/dsh-adapter/types.d.ts.map +1 -1
- package/lib/types/herdr.js +1 -1
- package/lib/types/i18n.d.ts +770 -181
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +257 -80
- package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -1
- package/lib/types/ink/components/AlternateScreen.js +13 -1
- package/lib/types/ink/components/App.d.ts +12 -1
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +101 -4
- package/lib/types/ink/components/ClockContext.d.ts.map +1 -1
- package/lib/types/ink/components/ClockContext.js +2 -0
- package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
- package/lib/types/ink/components/ScrollBox.js +170 -91
- package/lib/types/ink/constants.d.ts +9 -0
- package/lib/types/ink/constants.d.ts.map +1 -1
- package/lib/types/ink/constants.js +9 -0
- package/lib/types/ink/events/click-event.d.ts +7 -16
- package/lib/types/ink/events/click-event.d.ts.map +1 -1
- package/lib/types/ink/events/click-event.js +16 -19
- package/lib/types/ink/events/event-handlers.d.ts +11 -1
- package/lib/types/ink/events/event-handlers.d.ts.map +1 -1
- package/lib/types/ink/events/event-handlers.js +2 -0
- package/lib/types/ink/events/input-event.d.ts +9 -0
- package/lib/types/ink/events/input-event.d.ts.map +1 -1
- package/lib/types/ink/events/input-event.js +4 -0
- package/lib/types/ink/events/pointer-event.d.ts +61 -0
- package/lib/types/ink/events/pointer-event.d.ts.map +1 -0
- package/lib/types/ink/events/pointer-event.js +61 -0
- package/lib/types/ink/events/wheel-event.d.ts +17 -0
- package/lib/types/ink/events/wheel-event.d.ts.map +1 -0
- package/lib/types/ink/events/wheel-event.js +20 -0
- package/lib/types/ink/geometry-trace.d.ts +51 -0
- package/lib/types/ink/geometry-trace.d.ts.map +1 -0
- package/lib/types/ink/geometry-trace.js +83 -0
- package/lib/types/ink/hit-test.d.ts +56 -1
- package/lib/types/ink/hit-test.d.ts.map +1 -1
- package/lib/types/ink/hit-test.js +146 -8
- package/lib/types/ink/ink.d.ts +58 -1
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +230 -29
- package/lib/types/ink/log-update.d.ts.map +1 -1
- package/lib/types/ink/log-update.js +21 -0
- package/lib/types/ink/node-cache.d.ts +5 -0
- package/lib/types/ink/node-cache.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.d.ts +8 -0
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +101 -12
- package/lib/types/ink/render-node-to-output.d.ts +10 -0
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +111 -18
- package/lib/types/ink/timeline-rail.d.ts +138 -0
- package/lib/types/ink/timeline-rail.d.ts.map +1 -0
- package/lib/types/ink/timeline-rail.js +179 -0
- package/lib/types/ink/wrap-text.d.ts.map +1 -1
- package/lib/types/ink/wrap-text.js +47 -5
- package/lib/types/migrationPrefs.d.ts +60 -0
- package/lib/types/migrationPrefs.d.ts.map +1 -0
- package/lib/types/migrationPrefs.js +97 -0
- package/lib/types/modelGroups.d.ts +72 -0
- package/lib/types/modelGroups.d.ts.map +1 -0
- package/lib/types/modelGroups.js +97 -0
- package/lib/types/modelRecents.d.ts +39 -0
- package/lib/types/modelRecents.d.ts.map +1 -0
- package/lib/types/modelRecents.js +97 -0
- package/lib/types/native-ts/yoga-layout/index.d.ts +11 -0
- package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
- package/lib/types/native-ts/yoga-layout/index.js +31 -1
- package/lib/types/oauth.d.ts +15 -0
- package/lib/types/oauth.d.ts.map +1 -0
- package/lib/types/oauth.js +14 -0
- package/lib/types/reload.d.ts +109 -0
- package/lib/types/reload.d.ts.map +1 -0
- package/lib/types/reload.js +118 -0
- package/lib/types/screens/Chat.d.ts +3 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +1377 -371
- package/lib/types/screens/SessionBrowser.d.ts.map +1 -1
- package/lib/types/screens/SessionBrowser.js +56 -29
- package/lib/types/screens/SessionTree.d.ts +27 -0
- package/lib/types/screens/SessionTree.d.ts.map +1 -0
- package/lib/types/screens/SessionTree.js +555 -0
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +64 -22
- package/lib/types/screens/StatusLine.d.ts +0 -8
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +224 -45
- package/lib/types/screens/StatusMetrics.d.ts +35 -3
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +63 -8
- package/lib/types/screens/TrajectoryScene.d.ts.map +1 -1
- package/lib/types/screens/TrajectoryScene.js +81 -14
- package/lib/types/screens/chatOverlay.d.ts +237 -0
- package/lib/types/screens/chatOverlay.d.ts.map +1 -0
- package/lib/types/screens/chatOverlay.js +116 -0
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +64 -10
- package/lib/types/tuiDisplayPrefs.d.ts +15 -0
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +9 -0
- package/lib/types/update.d.ts +139 -0
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +382 -30
- package/lib/types/utils/debug.d.ts +10 -0
- package/lib/types/utils/debug.d.ts.map +1 -1
- package/lib/types/utils/debug.js +24 -0
- package/lib/types/utils/fileTarget.d.ts +46 -0
- package/lib/types/utils/fileTarget.d.ts.map +1 -0
- package/lib/types/utils/fileTarget.js +178 -0
- package/lib/types/utils/keymap.d.ts +134 -0
- package/lib/types/utils/keymap.d.ts.map +1 -0
- package/lib/types/utils/keymap.js +311 -0
- package/lib/types/utils/mentions.d.ts +25 -2
- package/lib/types/utils/mentions.d.ts.map +1 -1
- package/lib/types/utils/mentions.js +69 -10
- package/lib/types/utils/openExternal.d.ts +50 -0
- package/lib/types/utils/openExternal.d.ts.map +1 -0
- package/lib/types/utils/openExternal.js +170 -0
- package/lib/types/utils/paths.d.ts.map +1 -1
- package/lib/types/utils/paths.js +1 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +21 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +140 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +11 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +44 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.d.ts +14 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.js +67 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.d.ts +64 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.js +170 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.d.ts +79 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.js +196 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.d.ts +68 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +193 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.d.ts +32 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.js +101 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.d.ts +31 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.js +68 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.d.ts +69 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.js +129 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +70 -0
- package/node_modules/@dsh-std/command/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/command/LICENSE +21 -21
- package/node_modules/@dsh-std/command/README.md +26 -26
- package/node_modules/@dsh-std/command/README.zh.md +28 -28
- package/node_modules/@dsh-std/command/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/command/package.json +22 -22
- package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/connection/LICENSE +21 -21
- package/node_modules/@dsh-std/connection/README.md +42 -42
- package/node_modules/@dsh-std/connection/README.zh.md +42 -42
- package/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
- package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
- package/node_modules/@dsh-std/connection/package.json +20 -20
- package/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/core/LICENSE +21 -21
- package/node_modules/@dsh-std/core/README.md +13 -13
- package/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/core/package.json +21 -21
- package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
- package/node_modules/@dsh-std/manifest/LICENSE +21 -21
- package/node_modules/@dsh-std/manifest/README.md +5 -5
- package/node_modules/@dsh-std/manifest/README.zh.md +5 -5
- package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/manifest/package.json +20 -20
- package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
- package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/messages/LICENSE +21 -21
- package/node_modules/@dsh-std/messages/README.md +5 -5
- package/node_modules/@dsh-std/messages/README.zh.md +7 -7
- package/node_modules/@dsh-std/messages/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/messages/package.json +20 -20
- package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -54
- package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
- package/node_modules/@dsh-std/presentation/LICENSE +21 -21
- package/node_modules/@dsh-std/presentation/README.md +27 -27
- package/node_modules/@dsh-std/presentation/README.zh.md +29 -29
- package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
- package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/presentation/package.json +25 -25
- package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/storage/LICENSE +21 -21
- package/node_modules/@dsh-std/storage/README.md +5 -5
- package/node_modules/@dsh-std/storage/README.zh.md +7 -7
- package/node_modules/@dsh-std/storage/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/storage/package.json +20 -20
- package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -56
- package/package.json +19 -5
- package/presets/liangshen/.dsh-tui-managed.json +1 -1
- package/presets/liangshen/instruction-hint.mjs +8 -0
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -42
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -42
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -20
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -5
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -5
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -20
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +27 -27
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +29 -29
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +25 -25
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -21
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -42
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -42
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -20
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +21 -21
|
@@ -2,6 +2,48 @@ import sliceAnsi from '../utils/sliceAnsi.js';
|
|
|
2
2
|
import { stringWidth } from './stringWidth.js';
|
|
3
3
|
import { wrapAnsi } from './wrapAnsi.js';
|
|
4
4
|
const ELLIPSIS = '…';
|
|
5
|
+
// --- cross-mount wrap cache ------------------------------------------------
|
|
6
|
+
// wrapText is pure: (text, maxWidth, wrapType) deterministically maps to one
|
|
7
|
+
// output string. Yet before this cache every consumer re-wrapped from
|
|
8
|
+
// scratch:
|
|
9
|
+
//
|
|
10
|
+
// - dom.ts measureTextNode seeds its per-NODE incremental cache on first
|
|
11
|
+
// measure; virtualization unmounts scrolled-away rows, so scrolling back
|
|
12
|
+
// re-mounts the row's Text nodes and re-runs the FULL wrap (wrap-ansi
|
|
13
|
+
// tokenizes + string-width-measures every word — 100-300ms single-frame
|
|
14
|
+
// yoga spikes when a row of large settled text scrolls in, the dominant
|
|
15
|
+
// long-session scroll stall);
|
|
16
|
+
// - render-node-to-output.ts wraps every VISIBLE text node on every full
|
|
17
|
+
// paint pass (no per-node cache at all there).
|
|
18
|
+
//
|
|
19
|
+
// A content-addressed LRU here makes both paths O(1) for immutable settled
|
|
20
|
+
// text (Markdown memo keeps content identity stable for the whole session).
|
|
21
|
+
// The key embeds the raw text, so V8's content-hash Map lookup matches even
|
|
22
|
+
// a rebuilt string. Budget mirrors line-width-cache: whole-cache clear on
|
|
23
|
+
// overflow (repopulates within a frame or two).
|
|
24
|
+
const WRAP_CACHE_MAX_ENTRIES = 2048;
|
|
25
|
+
const WRAP_CACHE_MAX_CHARS = 2_000_000;
|
|
26
|
+
const wrapCache = new Map();
|
|
27
|
+
let wrapCacheChars = 0;
|
|
28
|
+
/** Values below this are not worth a cache entry (key building costs about
|
|
29
|
+
* as much as the wrap itself for trivial single-word strings). */
|
|
30
|
+
const WRAP_CACHE_MIN_LENGTH = 24;
|
|
31
|
+
function cachedWrap(text, maxWidth, wrapType, compute) {
|
|
32
|
+
if (text.length < WRAP_CACHE_MIN_LENGTH)
|
|
33
|
+
return compute();
|
|
34
|
+
const key = `${maxWidth}\u0000${wrapType}\u0000${text}`;
|
|
35
|
+
const hit = wrapCache.get(key);
|
|
36
|
+
if (hit !== undefined)
|
|
37
|
+
return hit;
|
|
38
|
+
const result = compute();
|
|
39
|
+
if (wrapCache.size >= WRAP_CACHE_MAX_ENTRIES || wrapCacheChars + text.length > WRAP_CACHE_MAX_CHARS) {
|
|
40
|
+
wrapCache.clear();
|
|
41
|
+
wrapCacheChars = 0;
|
|
42
|
+
}
|
|
43
|
+
wrapCache.set(key, result);
|
|
44
|
+
wrapCacheChars += text.length;
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
5
47
|
// sliceAnsi may include a boundary-spanning wide char (e.g. CJK at position
|
|
6
48
|
// end-1 with width 2 overshoots by 1). Retry with a tighter bound once.
|
|
7
49
|
function sliceFit(text, start, end) {
|
|
@@ -36,16 +78,16 @@ function truncate(text, columns, position) {
|
|
|
36
78
|
*/
|
|
37
79
|
export default function wrapText(text, maxWidth, wrapType) {
|
|
38
80
|
if (wrapType === 'wrap') {
|
|
39
|
-
return wrapAnsi(text, maxWidth, {
|
|
81
|
+
return cachedWrap(text, maxWidth, wrapType, () => wrapAnsi(text, maxWidth, {
|
|
40
82
|
trim: false,
|
|
41
83
|
hard: true,
|
|
42
|
-
});
|
|
84
|
+
}));
|
|
43
85
|
}
|
|
44
86
|
if (wrapType === 'wrap-trim') {
|
|
45
|
-
return wrapAnsi(text, maxWidth, {
|
|
87
|
+
return cachedWrap(text, maxWidth, wrapType, () => wrapAnsi(text, maxWidth, {
|
|
46
88
|
trim: true,
|
|
47
89
|
hard: true,
|
|
48
|
-
});
|
|
90
|
+
}));
|
|
49
91
|
}
|
|
50
92
|
if (wrapType.startsWith('truncate')) {
|
|
51
93
|
let position = 'end';
|
|
@@ -55,7 +97,7 @@ export default function wrapText(text, maxWidth, wrapType) {
|
|
|
55
97
|
if (wrapType === 'truncate-start') {
|
|
56
98
|
position = 'start';
|
|
57
99
|
}
|
|
58
|
-
return truncate(text, maxWidth, position);
|
|
100
|
+
return cachedWrap(text, maxWidth, wrapType, () => truncate(text, maxWidth, position));
|
|
59
101
|
}
|
|
60
102
|
return text;
|
|
61
103
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time local migrations (`~/.dsh-tui/migrations.json`), keyed by stable
|
|
3
|
+
* migration id → ISO timestamp. Named keys (not a bare flag) so later
|
|
4
|
+
* migrations can append entries without a format change. Best-effort like
|
|
5
|
+
* every prefs file: a missing/corrupt file reads as "nothing applied yet",
|
|
6
|
+
* and a failed write simply leaves the migration to retry on a later boot.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The fullscreen factory-default flip (schema + `cordis.patch.yml`, 0.9.x):
|
|
10
|
+
* a `fullscreen: false` pinned in the settings user layer BEFORE the flip
|
|
11
|
+
* keeps overriding the new default on every boot. The first boot past this
|
|
12
|
+
* migration clears that stale explicit choice once — see
|
|
13
|
+
* {@link planFullscreenFactoryMigration} for the decision table.
|
|
14
|
+
*/
|
|
15
|
+
export declare const FULLSCREEN_FACTORY_MIGRATION = "fullscreen-factory-default";
|
|
16
|
+
/**
|
|
17
|
+
* Read the applied-migration map.
|
|
18
|
+
* @param dir - Prefs directory (injectable for tests).
|
|
19
|
+
* @returns Parsed migration map; empty on any read/parse failure.
|
|
20
|
+
*/
|
|
21
|
+
export declare function readAppliedMigrations(dir?: string): Readonly<Record<string, unknown>>;
|
|
22
|
+
/**
|
|
23
|
+
* Record a migration as applied (merge write — other keys are never dropped).
|
|
24
|
+
* @param id - Migration id.
|
|
25
|
+
* @param dir - Prefs directory (injectable for tests).
|
|
26
|
+
* @returns True when the file was written, false on failure.
|
|
27
|
+
*/
|
|
28
|
+
export declare function markMigrationApplied(id: string, dir?: string): boolean;
|
|
29
|
+
/** What this boot should do about the fullscreen factory-default flip. */
|
|
30
|
+
export type FullscreenFactoryPlan = 'unset' | 'mark' | 'done';
|
|
31
|
+
/**
|
|
32
|
+
* Decide the migration step from the settings scope's RESOLVED fullscreen
|
|
33
|
+
* value. The dsh-tui namespace declares no schema default and no `base`
|
|
34
|
+
* layer for `fullscreen`, so a resolved `false` can only come from the user
|
|
35
|
+
* layer — the pre-flip explicit choice this migration exists to clear:
|
|
36
|
+
* - `done` — marker present: never touch the user layer again, so a
|
|
37
|
+
* `false` written AFTER the migration (a deliberate /settings choice)
|
|
38
|
+
* always stands;
|
|
39
|
+
* - `unset` — stale pre-flip explicit `false`: the caller clears it via a
|
|
40
|
+
* settings `unset` op and boots fullscreen regardless — the doc write
|
|
41
|
+
* is async and must not race the synchronous boot decision, so the
|
|
42
|
+
* caller shadows the stale value out of its first settings apply;
|
|
43
|
+
* - `mark` — nothing to clear (unset or already `true`): record the
|
|
44
|
+
* marker now so a `false` set later is never mistaken for a stale one.
|
|
45
|
+
*/
|
|
46
|
+
export declare function planFullscreenFactoryMigration(resolvedFullscreen: unknown, migrations: Readonly<Record<string, unknown>>): FullscreenFactoryPlan;
|
|
47
|
+
/**
|
|
48
|
+
* Persist the plan's side effects. For `unset` the marker lands only after
|
|
49
|
+
* the doc write succeeds — a failed write stays unmarked and the next boot
|
|
50
|
+
* retries (that boot already ran fullscreen off the shadowed value).
|
|
51
|
+
* Never rejects.
|
|
52
|
+
* @param plan - Decision from {@link planFullscreenFactoryMigration}.
|
|
53
|
+
* @param options - `unset` thunk issuing the settings write; `dir` injects
|
|
54
|
+
* the prefs directory for tests.
|
|
55
|
+
*/
|
|
56
|
+
export declare function commitFullscreenFactoryMigration(plan: FullscreenFactoryPlan, options: {
|
|
57
|
+
unset: () => Promise<void>;
|
|
58
|
+
dir?: string;
|
|
59
|
+
}): Promise<void>;
|
|
60
|
+
//# sourceMappingURL=migrationPrefs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrationPrefs.d.ts","sourceRoot":"","sources":["../../src/migrationPrefs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,+BAA+B,CAAA;AAExE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQhG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,GAAE,MAAkB,GAAG,OAAO,CASjF;AAED,0EAA0E;AAC1E,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAE7D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC5C,kBAAkB,EAAE,OAAO,EAC3B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC5C,qBAAqB,CAGvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time local migrations (`~/.dsh-tui/migrations.json`), keyed by stable
|
|
3
|
+
* migration id → ISO timestamp. Named keys (not a bare flag) so later
|
|
4
|
+
* migrations can append entries without a format change. Best-effort like
|
|
5
|
+
* every prefs file: a missing/corrupt file reads as "nothing applied yet",
|
|
6
|
+
* and a failed write simply leaves the migration to retry on a later boot.
|
|
7
|
+
*/
|
|
8
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { DATA_DIR } from './utils/paths.js';
|
|
11
|
+
const PREFS_DIR = DATA_DIR;
|
|
12
|
+
const MIGRATIONS_FILE = 'migrations.json';
|
|
13
|
+
/**
|
|
14
|
+
* The fullscreen factory-default flip (schema + `cordis.patch.yml`, 0.9.x):
|
|
15
|
+
* a `fullscreen: false` pinned in the settings user layer BEFORE the flip
|
|
16
|
+
* keeps overriding the new default on every boot. The first boot past this
|
|
17
|
+
* migration clears that stale explicit choice once — see
|
|
18
|
+
* {@link planFullscreenFactoryMigration} for the decision table.
|
|
19
|
+
*/
|
|
20
|
+
export const FULLSCREEN_FACTORY_MIGRATION = 'fullscreen-factory-default';
|
|
21
|
+
/**
|
|
22
|
+
* Read the applied-migration map.
|
|
23
|
+
* @param dir - Prefs directory (injectable for tests).
|
|
24
|
+
* @returns Parsed migration map; empty on any read/parse failure.
|
|
25
|
+
*/
|
|
26
|
+
export function readAppliedMigrations(dir = PREFS_DIR) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = JSON.parse(readFileSync(join(dir, MIGRATIONS_FILE), 'utf8'));
|
|
29
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
30
|
+
return {};
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Record a migration as applied (merge write — other keys are never dropped).
|
|
39
|
+
* @param id - Migration id.
|
|
40
|
+
* @param dir - Prefs directory (injectable for tests).
|
|
41
|
+
* @returns True when the file was written, false on failure.
|
|
42
|
+
*/
|
|
43
|
+
export function markMigrationApplied(id, dir = PREFS_DIR) {
|
|
44
|
+
try {
|
|
45
|
+
const current = readAppliedMigrations(dir);
|
|
46
|
+
mkdirSync(dir, { recursive: true });
|
|
47
|
+
writeFileSync(join(dir, MIGRATIONS_FILE), JSON.stringify({ ...current, [id]: new Date().toISOString() }, null, 2));
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Decide the migration step from the settings scope's RESOLVED fullscreen
|
|
56
|
+
* value. The dsh-tui namespace declares no schema default and no `base`
|
|
57
|
+
* layer for `fullscreen`, so a resolved `false` can only come from the user
|
|
58
|
+
* layer — the pre-flip explicit choice this migration exists to clear:
|
|
59
|
+
* - `done` — marker present: never touch the user layer again, so a
|
|
60
|
+
* `false` written AFTER the migration (a deliberate /settings choice)
|
|
61
|
+
* always stands;
|
|
62
|
+
* - `unset` — stale pre-flip explicit `false`: the caller clears it via a
|
|
63
|
+
* settings `unset` op and boots fullscreen regardless — the doc write
|
|
64
|
+
* is async and must not race the synchronous boot decision, so the
|
|
65
|
+
* caller shadows the stale value out of its first settings apply;
|
|
66
|
+
* - `mark` — nothing to clear (unset or already `true`): record the
|
|
67
|
+
* marker now so a `false` set later is never mistaken for a stale one.
|
|
68
|
+
*/
|
|
69
|
+
export function planFullscreenFactoryMigration(resolvedFullscreen, migrations) {
|
|
70
|
+
if (migrations[FULLSCREEN_FACTORY_MIGRATION] !== undefined)
|
|
71
|
+
return 'done';
|
|
72
|
+
return resolvedFullscreen === false ? 'unset' : 'mark';
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Persist the plan's side effects. For `unset` the marker lands only after
|
|
76
|
+
* the doc write succeeds — a failed write stays unmarked and the next boot
|
|
77
|
+
* retries (that boot already ran fullscreen off the shadowed value).
|
|
78
|
+
* Never rejects.
|
|
79
|
+
* @param plan - Decision from {@link planFullscreenFactoryMigration}.
|
|
80
|
+
* @param options - `unset` thunk issuing the settings write; `dir` injects
|
|
81
|
+
* the prefs directory for tests.
|
|
82
|
+
*/
|
|
83
|
+
export async function commitFullscreenFactoryMigration(plan, options) {
|
|
84
|
+
if (plan === 'done')
|
|
85
|
+
return;
|
|
86
|
+
if (plan === 'mark') {
|
|
87
|
+
markMigrationApplied(FULLSCREEN_FACTORY_MIGRATION, options.dir);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
await options.unset();
|
|
92
|
+
markMigrationApplied(FULLSCREEN_FACTORY_MIGRATION, options.dir);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Unmarked on purpose: retried next boot.
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure derivation for the two-level `/model` picker: providers as top-level
|
|
3
|
+
* groups, their models one level down, with a pinned "recently used"
|
|
4
|
+
* pseudo-group first. Kept free of React/channel/i18n state so
|
|
5
|
+
* `scripts/verify-model-picker-groups.mjs` can drive it headless; the
|
|
6
|
+
* recents row's localized label is resolved at render time (its `label`
|
|
7
|
+
* field is the {@link RECENTS_LABEL_PLACEHOLDER} sentinel).
|
|
8
|
+
*
|
|
9
|
+
* @module dsh-tui/modelGroups
|
|
10
|
+
*/
|
|
11
|
+
import type { LlmModelInfo, LlmProviderInfo } from './dsh-adapter/types.js';
|
|
12
|
+
/**
|
|
13
|
+
* The pseudo provider key of the pinned "recently used" group. Provider
|
|
14
|
+
* route ids cannot contain underscores (`PROVIDER_ROUTE_ID`), so this can
|
|
15
|
+
* never collide with a real route.
|
|
16
|
+
*/
|
|
17
|
+
export declare const RECENTS_GROUP_PROVIDER = "__recents__";
|
|
18
|
+
/** The recents row's raw label; renderers replace it with the localized one. */
|
|
19
|
+
export declare const RECENTS_LABEL_PLACEHOLDER = "__recent__";
|
|
20
|
+
/** One recent-model reference (same shape as modelRecents' persisted ref). */
|
|
21
|
+
export interface ModelRef {
|
|
22
|
+
readonly provider: string;
|
|
23
|
+
readonly id: string;
|
|
24
|
+
}
|
|
25
|
+
/** One top-level row: a provider route with its picker-facing identity. */
|
|
26
|
+
export interface ModelGroupRow {
|
|
27
|
+
/** Harness route key (also the grouping key over `LlmModelInfo.provider`). */
|
|
28
|
+
readonly provider: string;
|
|
29
|
+
/** Display label — the registry's provider name, falling back to the route key. */
|
|
30
|
+
readonly label: string;
|
|
31
|
+
/** How many of the listed models belong to this provider. */
|
|
32
|
+
readonly count: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The recent refs that the current catalog still lists, most-recent-first —
|
|
36
|
+
* the second level of the recents group. Refs whose model vanished from the
|
|
37
|
+
* catalog (provider removed, or an OAuth provider signed out and
|
|
38
|
+
* credential-gated away) drop out here, so the group never offers a row the
|
|
39
|
+
* picker could not switch to.
|
|
40
|
+
*/
|
|
41
|
+
export declare function recentCatalogModels(recents: readonly ModelRef[], models: readonly LlmModelInfo[]): readonly LlmModelInfo[];
|
|
42
|
+
/**
|
|
43
|
+
* Group a flat model catalog into provider rows, first-appearance order
|
|
44
|
+
* (the registry's own listing order), labels resolved through
|
|
45
|
+
* `providerInfos` with a route-key fallback. Recent refs (when supplied and
|
|
46
|
+
* still catalogued) pin one extra pseudo-group at the top.
|
|
47
|
+
*/
|
|
48
|
+
export declare function deriveModelGroups(models: readonly LlmModelInfo[], providerInfos: readonly LlmProviderInfo[], recents?: readonly ModelRef[]): readonly ModelGroupRow[];
|
|
49
|
+
/** Where `/model` should open (or re-land after the fresh catalog arrives). */
|
|
50
|
+
export interface ModelPickerLanding {
|
|
51
|
+
/**
|
|
52
|
+
* The group to open *inside* — set only by the single-provider fast path,
|
|
53
|
+
* where a one-row top level would be pure friction (and there are no
|
|
54
|
+
* recents to pin). Multi-provider catalogs — and any catalog with recents
|
|
55
|
+
* — land at the top level (`undefined`).
|
|
56
|
+
*/
|
|
57
|
+
readonly group: string | undefined;
|
|
58
|
+
/** Focus index within the landed level's rows. */
|
|
59
|
+
readonly index: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Compute the picker's landing: with a meaningful recents list pinned, focus
|
|
63
|
+
* the recents row itself (its first entry is the most recently used model —
|
|
64
|
+
* the likeliest destination); without recents, focus the current provider's
|
|
65
|
+
* group. The single-provider fast path applies while recents carry no
|
|
66
|
+
* navigation value — an empty list, or a lone entry that can only be the
|
|
67
|
+
* current model (the picker seeds it): drilling straight into the only
|
|
68
|
+
* provider's list beats a top level whose recents row duplicates it. Two or
|
|
69
|
+
* more recents (or any multi-provider catalog) land at the top level.
|
|
70
|
+
*/
|
|
71
|
+
export declare function modelPickerLanding(models: readonly LlmModelInfo[], currentProvider: string | undefined, currentModel: string | undefined, recents?: readonly ModelRef[]): ModelPickerLanding;
|
|
72
|
+
//# sourceMappingURL=modelGroups.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelGroups.d.ts","sourceRoot":"","sources":["../../src/modelGroups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE3E;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,gBAAgB,CAAA;AAEnD,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,eAAe,CAAA;AAErD,8EAA8E;AAC9E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,MAAM,EAAE,SAAS,YAAY,EAAE,GAC9B,SAAS,YAAY,EAAE,CAUzB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,aAAa,EAAE,SAAS,eAAe,EAAE,EACzC,OAAO,CAAC,EAAE,SAAS,QAAQ,EAAE,GAC5B,SAAS,aAAa,EAAE,CAsB1B;AAED,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE,SAAS,QAAQ,EAAE,GAC5B,kBAAkB,CAiBpB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure derivation for the two-level `/model` picker: providers as top-level
|
|
3
|
+
* groups, their models one level down, with a pinned "recently used"
|
|
4
|
+
* pseudo-group first. Kept free of React/channel/i18n state so
|
|
5
|
+
* `scripts/verify-model-picker-groups.mjs` can drive it headless; the
|
|
6
|
+
* recents row's localized label is resolved at render time (its `label`
|
|
7
|
+
* field is the {@link RECENTS_LABEL_PLACEHOLDER} sentinel).
|
|
8
|
+
*
|
|
9
|
+
* @module dsh-tui/modelGroups
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* The pseudo provider key of the pinned "recently used" group. Provider
|
|
13
|
+
* route ids cannot contain underscores (`PROVIDER_ROUTE_ID`), so this can
|
|
14
|
+
* never collide with a real route.
|
|
15
|
+
*/
|
|
16
|
+
export const RECENTS_GROUP_PROVIDER = '__recents__';
|
|
17
|
+
/** The recents row's raw label; renderers replace it with the localized one. */
|
|
18
|
+
export const RECENTS_LABEL_PLACEHOLDER = '__recent__';
|
|
19
|
+
/**
|
|
20
|
+
* The recent refs that the current catalog still lists, most-recent-first —
|
|
21
|
+
* the second level of the recents group. Refs whose model vanished from the
|
|
22
|
+
* catalog (provider removed, or an OAuth provider signed out and
|
|
23
|
+
* credential-gated away) drop out here, so the group never offers a row the
|
|
24
|
+
* picker could not switch to.
|
|
25
|
+
*/
|
|
26
|
+
export function recentCatalogModels(recents, models) {
|
|
27
|
+
const listed = [];
|
|
28
|
+
for (const ref of recents) {
|
|
29
|
+
const found = models.find(model => model.provider === ref.provider && model.id === ref.id);
|
|
30
|
+
if (found === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
if (listed.some(seen => seen.provider === found.provider && seen.id === found.id))
|
|
33
|
+
continue;
|
|
34
|
+
listed.push(found);
|
|
35
|
+
if (listed.length >= 10)
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
return listed;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Group a flat model catalog into provider rows, first-appearance order
|
|
42
|
+
* (the registry's own listing order), labels resolved through
|
|
43
|
+
* `providerInfos` with a route-key fallback. Recent refs (when supplied and
|
|
44
|
+
* still catalogued) pin one extra pseudo-group at the top.
|
|
45
|
+
*/
|
|
46
|
+
export function deriveModelGroups(models, providerInfos, recents) {
|
|
47
|
+
const order = [];
|
|
48
|
+
const counts = new Map();
|
|
49
|
+
for (const model of models) {
|
|
50
|
+
if (!counts.has(model.provider)) {
|
|
51
|
+
order.push(model.provider);
|
|
52
|
+
counts.set(model.provider, 0);
|
|
53
|
+
}
|
|
54
|
+
counts.set(model.provider, counts.get(model.provider) + 1);
|
|
55
|
+
}
|
|
56
|
+
const groups = order.map(provider => ({
|
|
57
|
+
provider,
|
|
58
|
+
label: providerInfos.find(info => info.id === provider)?.name ?? provider,
|
|
59
|
+
count: counts.get(provider),
|
|
60
|
+
}));
|
|
61
|
+
if (recents !== undefined) {
|
|
62
|
+
const recentCount = recentCatalogModels(recents, models).length;
|
|
63
|
+
if (recentCount > 0) {
|
|
64
|
+
groups.unshift({ provider: RECENTS_GROUP_PROVIDER, label: RECENTS_LABEL_PLACEHOLDER, count: recentCount });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return groups;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Compute the picker's landing: with a meaningful recents list pinned, focus
|
|
71
|
+
* the recents row itself (its first entry is the most recently used model —
|
|
72
|
+
* the likeliest destination); without recents, focus the current provider's
|
|
73
|
+
* group. The single-provider fast path applies while recents carry no
|
|
74
|
+
* navigation value — an empty list, or a lone entry that can only be the
|
|
75
|
+
* current model (the picker seeds it): drilling straight into the only
|
|
76
|
+
* provider's list beats a top level whose recents row duplicates it. Two or
|
|
77
|
+
* more recents (or any multi-provider catalog) land at the top level.
|
|
78
|
+
*/
|
|
79
|
+
export function modelPickerLanding(models, currentProvider, currentModel, recents) {
|
|
80
|
+
const providers = [];
|
|
81
|
+
for (const model of models) {
|
|
82
|
+
if (!providers.includes(model.provider))
|
|
83
|
+
providers.push(model.provider);
|
|
84
|
+
}
|
|
85
|
+
if (providers.length === 0)
|
|
86
|
+
return { group: undefined, index: 0 };
|
|
87
|
+
const recentCount = recents === undefined ? 0 : recentCatalogModels(recents, models).length;
|
|
88
|
+
if (providers.length === 1 && recentCount <= 1) {
|
|
89
|
+
const only = providers[0];
|
|
90
|
+
const index = models.findIndex(model => model.provider === currentProvider && model.id === currentModel);
|
|
91
|
+
return { group: only, index: index >= 0 ? index : 0 };
|
|
92
|
+
}
|
|
93
|
+
if (recentCount > 0)
|
|
94
|
+
return { group: undefined, index: 0 };
|
|
95
|
+
const groupIndex = providers.indexOf(currentProvider ?? '');
|
|
96
|
+
return { group: undefined, index: groupIndex >= 0 ? groupIndex : 0 };
|
|
97
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persisted recently-used models (`/model` picker's 最近使用 group), kept at
|
|
3
|
+
* `~/.dsh-tui/model-recents.json` so the list survives restarts — same
|
|
4
|
+
* best-effort pattern as agent-preset.json: a missing/corrupt file simply
|
|
5
|
+
* reads as empty, and a failed write never blocks the switch that caused it.
|
|
6
|
+
* Entries are `{ provider, id }` refs, most-recent-first, deduped, capped at
|
|
7
|
+
* {@link MODEL_RECENTS_LIMIT}.
|
|
8
|
+
*
|
|
9
|
+
* @module dsh-tui/modelRecents
|
|
10
|
+
*/
|
|
11
|
+
/** How many recent entries the file and the picker group keep. */
|
|
12
|
+
export declare const MODEL_RECENTS_LIMIT = 10;
|
|
13
|
+
/** One persisted recent-model reference. */
|
|
14
|
+
export interface ModelRecentsRef {
|
|
15
|
+
readonly provider: string;
|
|
16
|
+
readonly id: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse a persisted `{ models: [...] }` document; invalid shapes yield an
|
|
20
|
+
* empty list (the file is rewritten on the next record).
|
|
21
|
+
* @param text - Raw file contents.
|
|
22
|
+
* @returns Valid refs in file order, deduped, capped.
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseModelRecents(text: string): readonly ModelRecentsRef[];
|
|
25
|
+
/**
|
|
26
|
+
* The persisted recent-model refs, most-recent-first.
|
|
27
|
+
* @param dir - Prefs directory (injectable for tests).
|
|
28
|
+
*/
|
|
29
|
+
export declare function readModelRecents(dir?: string): readonly ModelRecentsRef[];
|
|
30
|
+
/**
|
|
31
|
+
* Record one use: move-to-front dedupe, cap at {@link MODEL_RECENTS_LIMIT},
|
|
32
|
+
* best-effort persist. Never throws — a failed write must not block the
|
|
33
|
+
* model switch that caused it.
|
|
34
|
+
* @param ref - The provider/model just switched to.
|
|
35
|
+
* @param dir - Prefs directory (injectable for tests).
|
|
36
|
+
* @returns The new list (also what a subsequent read returns on success).
|
|
37
|
+
*/
|
|
38
|
+
export declare function recordModelUse(ref: ModelRecentsRef, dir?: string): readonly ModelRecentsRef[];
|
|
39
|
+
//# sourceMappingURL=modelRecents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelRecents.d.ts","sourceRoot":"","sources":["../../src/modelRecents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAYD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CAmB1E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAkB,GAAG,SAAS,eAAe,EAAE,CAMpF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,GAAE,MAAkB,GAAG,SAAS,eAAe,EAAE,CAexG"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persisted recently-used models (`/model` picker's 最近使用 group), kept at
|
|
3
|
+
* `~/.dsh-tui/model-recents.json` so the list survives restarts — same
|
|
4
|
+
* best-effort pattern as agent-preset.json: a missing/corrupt file simply
|
|
5
|
+
* reads as empty, and a failed write never blocks the switch that caused it.
|
|
6
|
+
* Entries are `{ provider, id }` refs, most-recent-first, deduped, capped at
|
|
7
|
+
* {@link MODEL_RECENTS_LIMIT}.
|
|
8
|
+
*
|
|
9
|
+
* @module dsh-tui/modelRecents
|
|
10
|
+
*/
|
|
11
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { DATA_DIR } from './utils/paths.js';
|
|
14
|
+
const PREFS_DIR = DATA_DIR;
|
|
15
|
+
/** How many recent entries the file and the picker group keep. */
|
|
16
|
+
export const MODEL_RECENTS_LIMIT = 10;
|
|
17
|
+
/** Narrow one parsed array element, or reject the whole file entry. */
|
|
18
|
+
function asRef(value) {
|
|
19
|
+
if (typeof value !== 'object' || value === null)
|
|
20
|
+
return undefined;
|
|
21
|
+
const record = value;
|
|
22
|
+
return typeof record['provider'] === 'string' && record['provider'] !== ''
|
|
23
|
+
&& typeof record['id'] === 'string' && record['id'] !== ''
|
|
24
|
+
? { provider: record['provider'], id: record['id'] }
|
|
25
|
+
: undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse a persisted `{ models: [...] }` document; invalid shapes yield an
|
|
29
|
+
* empty list (the file is rewritten on the next record).
|
|
30
|
+
* @param text - Raw file contents.
|
|
31
|
+
* @returns Valid refs in file order, deduped, capped.
|
|
32
|
+
*/
|
|
33
|
+
export function parseModelRecents(text) {
|
|
34
|
+
let parsed;
|
|
35
|
+
try {
|
|
36
|
+
parsed = JSON.parse(text);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
42
|
+
return [];
|
|
43
|
+
const models = parsed.models;
|
|
44
|
+
if (!Array.isArray(models))
|
|
45
|
+
return [];
|
|
46
|
+
const refs = [];
|
|
47
|
+
for (const entry of models) {
|
|
48
|
+
const ref = asRef(entry);
|
|
49
|
+
if (ref === undefined)
|
|
50
|
+
continue;
|
|
51
|
+
if (refs.some(seen => seen.provider === ref.provider && seen.id === ref.id))
|
|
52
|
+
continue;
|
|
53
|
+
refs.push(ref);
|
|
54
|
+
if (refs.length >= MODEL_RECENTS_LIMIT)
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
return refs;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The persisted recent-model refs, most-recent-first.
|
|
61
|
+
* @param dir - Prefs directory (injectable for tests).
|
|
62
|
+
*/
|
|
63
|
+
export function readModelRecents(dir = PREFS_DIR) {
|
|
64
|
+
try {
|
|
65
|
+
return parseModelRecents(readFileSync(join(dir, 'model-recents.json'), 'utf8'));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Record one use: move-to-front dedupe, cap at {@link MODEL_RECENTS_LIMIT},
|
|
73
|
+
* best-effort persist. Never throws — a failed write must not block the
|
|
74
|
+
* model switch that caused it.
|
|
75
|
+
* @param ref - The provider/model just switched to.
|
|
76
|
+
* @param dir - Prefs directory (injectable for tests).
|
|
77
|
+
* @returns The new list (also what a subsequent read returns on success).
|
|
78
|
+
*/
|
|
79
|
+
export function recordModelUse(ref, dir = PREFS_DIR) {
|
|
80
|
+
const next = [ref];
|
|
81
|
+
for (const seen of readModelRecents(dir)) {
|
|
82
|
+
if (seen.provider === ref.provider && seen.id === ref.id)
|
|
83
|
+
continue;
|
|
84
|
+
next.push(seen);
|
|
85
|
+
if (next.length >= MODEL_RECENTS_LIMIT)
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
mkdirSync(dir, { recursive: true });
|
|
90
|
+
writeFileSync(join(dir, 'model-recents.json'), `${JSON.stringify({ models: next }, null, 2)}\n`);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Best-effort like every other pref: the in-memory list still serves
|
|
94
|
+
// this session; the next successful write re-persists.
|
|
95
|
+
}
|
|
96
|
+
return next;
|
|
97
|
+
}
|
|
@@ -270,6 +270,17 @@ export declare class Node {
|
|
|
270
270
|
_cGen: number;
|
|
271
271
|
/** Number of populated cache slots. */
|
|
272
272
|
_cN: number;
|
|
273
|
+
/**
|
|
274
|
+
* Generation of the last MEASURE-pass call that actually computed (cache
|
|
275
|
+
* miss with performLayout=false). Such a call recurses and overwrites the
|
|
276
|
+
* subtree's layout.* fields as scratch for whatever available size it was
|
|
277
|
+
* probing — which may differ from the node's final size. A subsequent
|
|
278
|
+
* layout-pass cache hit would restore only this node's own w/h and skip
|
|
279
|
+
* the child recursion, leaving descendants at the scratch geometry (the
|
|
280
|
+
* warm-resize 106-vs-105 wrap drift). Layout-pass early returns must
|
|
281
|
+
* therefore refuse to hit while _scratchGen === _generation.
|
|
282
|
+
*/
|
|
283
|
+
_scratchGen: number;
|
|
273
284
|
/** LRU write index into the cache arrays. */
|
|
274
285
|
_cWr: number;
|
|
275
286
|
constructor(config?: Config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/native-ts/yoga-layout/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/native-ts/yoga-layout/index.ts"],"names":[],"mappings":"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"}
|