@deepseek-harness-tui/dsh-tui 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/README.md +74 -21
  2. package/bin/dsh-tui.js +115 -25
  3. package/cordis.patch.yml +69 -17
  4. package/cordis.yml +50 -12
  5. package/lib/types/activityPrefs.d.ts +1 -1
  6. package/lib/types/activityPrefs.js +3 -3
  7. package/lib/types/cc/figures.d.ts +27 -20
  8. package/lib/types/cc/figures.d.ts.map +1 -1
  9. package/lib/types/cc/figures.js +43 -34
  10. package/lib/types/cc/format.d.ts +18 -9
  11. package/lib/types/cc/format.d.ts.map +1 -1
  12. package/lib/types/cc/format.js +26 -18
  13. package/lib/types/cc/markdown.d.ts +31 -16
  14. package/lib/types/cc/markdown.d.ts.map +1 -1
  15. package/lib/types/cc/markdown.js +283 -260
  16. package/lib/types/cc/terminal.d.ts +10 -7
  17. package/lib/types/cc/terminal.d.ts.map +1 -1
  18. package/lib/types/cc/terminal.js +62 -50
  19. package/lib/types/command-trees.d.ts +3 -0
  20. package/lib/types/command-trees.d.ts.map +1 -0
  21. package/lib/types/command-trees.js +4 -0
  22. package/lib/types/commands.d.ts +37 -1
  23. package/lib/types/commands.d.ts.map +1 -1
  24. package/lib/types/commands.js +68 -3
  25. package/lib/types/components/ActivityLine.d.ts +1 -1
  26. package/lib/types/components/ActivityLine.d.ts.map +1 -1
  27. package/lib/types/components/ActivityPicker.d.ts.map +1 -1
  28. package/lib/types/components/ActivityPicker.js +3 -4
  29. package/lib/types/components/BtwPanel.d.ts +16 -0
  30. package/lib/types/components/BtwPanel.d.ts.map +1 -0
  31. package/lib/types/components/BtwPanel.js +47 -0
  32. package/lib/types/components/CommandSuggestions.d.ts +4 -2
  33. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  34. package/lib/types/components/CommandSuggestions.js +2 -2
  35. package/lib/types/components/EffortSlider.d.ts +15 -0
  36. package/lib/types/components/EffortSlider.d.ts.map +1 -0
  37. package/lib/types/components/EffortSlider.js +17 -0
  38. package/lib/types/components/GoalTodoPanel.d.ts +1 -1
  39. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  40. package/lib/types/components/HelpMenu.d.ts +5 -2
  41. package/lib/types/components/HelpMenu.d.ts.map +1 -1
  42. package/lib/types/components/HelpMenu.js +8 -3
  43. package/lib/types/components/HistorySearchDialog.d.ts +1 -1
  44. package/lib/types/components/HistorySearchDialog.d.ts.map +1 -1
  45. package/lib/types/components/HistorySearchDialog.js +21 -10
  46. package/lib/types/components/InterruptedByUser.d.ts +2 -2
  47. package/lib/types/components/InterruptedByUser.d.ts.map +1 -1
  48. package/lib/types/components/InterruptedByUser.js +4 -3
  49. package/lib/types/components/LoadedContextPanel.d.ts +1 -1
  50. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -1
  51. package/lib/types/components/LogoV2.d.ts.map +1 -1
  52. package/lib/types/components/LogoV2.js +2 -1
  53. package/lib/types/components/Markdown.d.ts +11 -11
  54. package/lib/types/components/Markdown.d.ts.map +1 -1
  55. package/lib/types/components/Markdown.js +63 -57
  56. package/lib/types/components/MarkdownTable.d.ts +1 -1
  57. package/lib/types/components/MarkdownTable.js +2 -2
  58. package/lib/types/components/MessageList.d.ts +10 -2
  59. package/lib/types/components/MessageList.d.ts.map +1 -1
  60. package/lib/types/components/MessageList.js +17 -10
  61. package/lib/types/components/ModelPicker.d.ts +4 -1
  62. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  63. package/lib/types/components/ModelPicker.js +16 -4
  64. package/lib/types/components/OverlayAbove.d.ts +20 -0
  65. package/lib/types/components/OverlayAbove.d.ts.map +1 -0
  66. package/lib/types/components/OverlayAbove.js +18 -0
  67. package/lib/types/components/PresetPicker.d.ts +1 -1
  68. package/lib/types/components/PresetPicker.d.ts.map +1 -1
  69. package/lib/types/components/PresetPicker.js +2 -3
  70. package/lib/types/components/PromptInput.d.ts +5 -4
  71. package/lib/types/components/PromptInput.d.ts.map +1 -1
  72. package/lib/types/components/PromptInput.js +186 -39
  73. package/lib/types/components/ResumePicker.d.ts +15 -4
  74. package/lib/types/components/ResumePicker.d.ts.map +1 -1
  75. package/lib/types/components/ResumePicker.js +25 -9
  76. package/lib/types/components/RewindPicker.d.ts +1 -1
  77. package/lib/types/components/RewindPicker.d.ts.map +1 -1
  78. package/lib/types/components/RewindPicker.js +14 -5
  79. package/lib/types/components/SearchBox.d.ts +1 -1
  80. package/lib/types/components/SearchBox.js +1 -1
  81. package/lib/types/components/Spinner/GlimmerMessage.d.ts +1 -2
  82. package/lib/types/components/Spinner/GlimmerMessage.d.ts.map +1 -1
  83. package/lib/types/components/Spinner/GlimmerMessage.js +1 -2
  84. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts +1 -1
  85. package/lib/types/components/Spinner/SpinnerAnimationRow.js +2 -2
  86. package/lib/types/components/Spinner/SpinnerGlyph.d.ts +1 -1
  87. package/lib/types/components/Spinner/SpinnerGlyph.js +1 -1
  88. package/lib/types/components/Spinner/spinnerUtils.d.ts +13 -18
  89. package/lib/types/components/Spinner/spinnerUtils.d.ts.map +1 -1
  90. package/lib/types/components/Spinner/spinnerUtils.js +67 -71
  91. package/lib/types/components/Spinner/useStalledAnimation.d.ts +1 -2
  92. package/lib/types/components/Spinner/useStalledAnimation.d.ts.map +1 -1
  93. package/lib/types/components/Spinner/useStalledAnimation.js +1 -2
  94. package/lib/types/components/StreamingMarkdown.d.ts +1 -1
  95. package/lib/types/components/StreamingMarkdown.js +1 -1
  96. package/lib/types/components/ThemePicker.d.ts +13 -9
  97. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  98. package/lib/types/components/ThemePicker.js +21 -15
  99. package/lib/types/components/ThinkingToggle.d.ts +1 -1
  100. package/lib/types/components/ThinkingToggle.d.ts.map +1 -1
  101. package/lib/types/components/ThinkingToggle.js +8 -8
  102. package/lib/types/components/ToolUseLoader.d.ts +1 -1
  103. package/lib/types/components/ToolUseLoader.js +1 -1
  104. package/lib/types/components/WorkingSpinner.d.ts +2 -2
  105. package/lib/types/components/WorkingSpinner.js +2 -2
  106. package/lib/types/components/WorkspaceFlowPicker.d.ts +15 -0
  107. package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -0
  108. package/lib/types/components/WorkspaceFlowPicker.js +19 -0
  109. package/lib/types/components/WorkspacePicker.d.ts +9 -0
  110. package/lib/types/components/WorkspacePicker.d.ts.map +1 -0
  111. package/lib/types/components/WorkspacePicker.js +13 -0
  112. package/lib/types/components/approvals/ApprovalPanel.d.ts +1 -1
  113. package/lib/types/components/approvals/ApprovalPanel.d.ts.map +1 -1
  114. package/lib/types/components/approvals/ApprovalPanel.js +2 -1
  115. package/lib/types/components/design-system/Byline.d.ts +1 -1
  116. package/lib/types/components/design-system/Byline.js +1 -1
  117. package/lib/types/components/design-system/Divider.d.ts +1 -1
  118. package/lib/types/components/design-system/Divider.js +1 -1
  119. package/lib/types/components/design-system/HintLine.d.ts +12 -0
  120. package/lib/types/components/design-system/HintLine.d.ts.map +1 -0
  121. package/lib/types/components/design-system/HintLine.js +15 -0
  122. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +1 -1
  123. package/lib/types/components/design-system/KeyboardShortcutHint.js +1 -1
  124. package/lib/types/components/design-system/ListItem.d.ts +2 -2
  125. package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
  126. package/lib/types/components/design-system/ListItem.js +35 -3
  127. package/lib/types/components/design-system/LoadingState.d.ts +1 -2
  128. package/lib/types/components/design-system/LoadingState.d.ts.map +1 -1
  129. package/lib/types/components/design-system/LoadingState.js +1 -2
  130. package/lib/types/components/design-system/Pane.d.ts +2 -2
  131. package/lib/types/components/design-system/Pane.js +2 -2
  132. package/lib/types/components/design-system/ProgressBar.d.ts +1 -2
  133. package/lib/types/components/design-system/ProgressBar.d.ts.map +1 -1
  134. package/lib/types/components/design-system/ProgressBar.js +1 -2
  135. package/lib/types/components/design-system/StatusIcon.d.ts +2 -2
  136. package/lib/types/components/design-system/StatusIcon.js +2 -2
  137. package/lib/types/components/design-system/ThemeProvider.d.ts +1 -1
  138. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  139. package/lib/types/components/design-system/ThemeProvider.js +87 -26
  140. package/lib/types/components/design-system/ThemedBox.d.ts +1 -1
  141. package/lib/types/components/design-system/ThemedBox.js +1 -1
  142. package/lib/types/components/design-system/ThemedText.d.ts +2 -2
  143. package/lib/types/components/design-system/ThemedText.js +2 -2
  144. package/lib/types/components/listWindow.d.ts +26 -0
  145. package/lib/types/components/listWindow.d.ts.map +1 -0
  146. package/lib/types/components/listWindow.js +47 -0
  147. package/lib/types/components/messages/AssistantTextMessage.d.ts +1 -2
  148. package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -1
  149. package/lib/types/components/messages/AssistantTextMessage.js +1 -2
  150. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +2 -2
  151. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  152. package/lib/types/components/messages/AssistantThinkingMessage.js +6 -6
  153. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +12 -4
  154. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  155. package/lib/types/components/messages/AssistantToolUseMessage.js +9 -5
  156. package/lib/types/components/messages/MessageMetadata.d.ts +1 -1
  157. package/lib/types/components/messages/MessageMetadata.js +1 -1
  158. package/lib/types/components/messages/UserPromptMessage.d.ts +1 -1
  159. package/lib/types/components/messages/UserPromptMessage.js +1 -1
  160. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +5 -1
  161. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  162. package/lib/types/components/questions/AskUserQuestionPanel.js +11 -9
  163. package/lib/types/components/questions/PlanReviewPanel.d.ts +1 -1
  164. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  165. package/lib/types/components/questions/PlanReviewPanel.js +3 -2
  166. package/lib/types/components/trajectory/HotspotView.d.ts +14 -0
  167. package/lib/types/components/trajectory/HotspotView.d.ts.map +1 -0
  168. package/lib/types/components/trajectory/HotspotView.js +83 -0
  169. package/lib/types/components/trajectory/Inspector.d.ts +31 -0
  170. package/lib/types/components/trajectory/Inspector.d.ts.map +1 -0
  171. package/lib/types/components/trajectory/Inspector.js +67 -0
  172. package/lib/types/components/trajectory/Ledger.d.ts +20 -0
  173. package/lib/types/components/trajectory/Ledger.d.ts.map +1 -0
  174. package/lib/types/components/trajectory/Ledger.js +112 -0
  175. package/lib/types/components/trajectory/MiniWake.d.ts +24 -0
  176. package/lib/types/components/trajectory/MiniWake.d.ts.map +1 -0
  177. package/lib/types/components/trajectory/MiniWake.js +99 -0
  178. package/lib/types/components/trajectory/WaveBand.d.ts +33 -0
  179. package/lib/types/components/trajectory/WaveBand.d.ts.map +1 -0
  180. package/lib/types/components/trajectory/WaveBand.js +145 -0
  181. package/lib/types/customTheme.d.ts +6 -6
  182. package/lib/types/customTheme.d.ts.map +1 -1
  183. package/lib/types/customTheme.js +15 -12
  184. package/lib/types/dsh-adapter/approvals.d.ts.map +1 -0
  185. package/lib/types/{channel.d.ts → dsh-adapter/channel.d.ts} +184 -43
  186. package/lib/types/dsh-adapter/channel.d.ts.map +1 -0
  187. package/lib/types/{channel.js → dsh-adapter/channel.js} +972 -201
  188. package/lib/types/dsh-adapter/childStderr.d.ts.map +1 -0
  189. package/lib/types/{childStderr.js → dsh-adapter/childStderr.js} +1 -1
  190. package/lib/types/dsh-adapter/command-trees.d.ts +27 -0
  191. package/lib/types/dsh-adapter/command-trees.d.ts.map +1 -0
  192. package/lib/types/dsh-adapter/command-trees.js +42 -0
  193. package/lib/types/dsh-adapter/compat/index.d.ts +22 -0
  194. package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -0
  195. package/lib/types/{compat → dsh-adapter/compat}/index.js +7 -4
  196. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +86 -0
  197. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -0
  198. package/lib/types/dsh-adapter/compat/sessionLog.js +347 -0
  199. package/lib/types/dsh-adapter/contract.d.ts +20 -0
  200. package/lib/types/dsh-adapter/contract.d.ts.map +1 -0
  201. package/lib/types/dsh-adapter/contract.js +109 -0
  202. package/lib/types/dsh-adapter/index.d.ts +80 -0
  203. package/lib/types/dsh-adapter/index.d.ts.map +1 -0
  204. package/lib/types/dsh-adapter/index.js +45 -0
  205. package/lib/types/dsh-adapter/invariant.d.ts.map +1 -0
  206. package/lib/types/dsh-adapter/packaged-skills.d.ts.map +1 -0
  207. package/lib/types/{plugin.d.ts → dsh-adapter/plugin.d.ts} +17 -0
  208. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -0
  209. package/lib/types/{plugin.js → dsh-adapter/plugin.js} +280 -80
  210. package/lib/types/dsh-adapter/presets.d.ts.map +1 -0
  211. package/lib/types/dsh-adapter/providerWizard.d.ts +91 -0
  212. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -0
  213. package/lib/types/dsh-adapter/providerWizard.js +332 -0
  214. package/lib/types/{questions.d.ts → dsh-adapter/questions.d.ts} +7 -2
  215. package/lib/types/dsh-adapter/questions.d.ts.map +1 -0
  216. package/lib/types/{questions.js → dsh-adapter/questions.js} +15 -7
  217. package/lib/types/dsh-adapter/sideQuestion.d.ts +38 -0
  218. package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -0
  219. package/lib/types/dsh-adapter/sideQuestion.js +69 -0
  220. package/lib/types/dsh-adapter/trajectory/aggregate.d.ts +46 -0
  221. package/lib/types/dsh-adapter/trajectory/aggregate.d.ts.map +1 -0
  222. package/lib/types/dsh-adapter/trajectory/aggregate.js +207 -0
  223. package/lib/types/dsh-adapter/trajectory/guards.d.ts +177 -0
  224. package/lib/types/dsh-adapter/trajectory/guards.d.ts.map +1 -0
  225. package/lib/types/dsh-adapter/trajectory/guards.js +235 -0
  226. package/lib/types/dsh-adapter/trajectory/index.d.ts +16 -0
  227. package/lib/types/dsh-adapter/trajectory/index.d.ts.map +1 -0
  228. package/lib/types/dsh-adapter/trajectory/index.js +15 -0
  229. package/lib/types/dsh-adapter/trajectory/inspect.d.ts +40 -0
  230. package/lib/types/dsh-adapter/trajectory/inspect.d.ts.map +1 -0
  231. package/lib/types/dsh-adapter/trajectory/inspect.js +160 -0
  232. package/lib/types/dsh-adapter/trajectory/projection.d.ts +128 -0
  233. package/lib/types/dsh-adapter/trajectory/projection.d.ts.map +1 -0
  234. package/lib/types/dsh-adapter/trajectory/projection.js +653 -0
  235. package/lib/types/dsh-adapter/trajectory/types.d.ts +232 -0
  236. package/lib/types/dsh-adapter/trajectory/types.d.ts.map +1 -0
  237. package/lib/types/dsh-adapter/trajectory/types.js +70 -0
  238. package/lib/types/dsh-adapter/trajectory/wave.d.ts +45 -0
  239. package/lib/types/dsh-adapter/trajectory/wave.d.ts.map +1 -0
  240. package/lib/types/dsh-adapter/trajectory/wave.js +210 -0
  241. package/lib/types/dsh-adapter/types.d.ts +23 -0
  242. package/lib/types/dsh-adapter/types.d.ts.map +1 -0
  243. package/lib/types/dsh-adapter/types.js +1 -0
  244. package/lib/types/dsh-adapter/workspace.d.ts +22 -0
  245. package/lib/types/dsh-adapter/workspace.d.ts.map +1 -0
  246. package/lib/types/dsh-adapter/workspace.js +16 -0
  247. package/lib/types/dsh-adapter/workspaces.d.ts +118 -0
  248. package/lib/types/dsh-adapter/workspaces.d.ts.map +1 -0
  249. package/lib/types/dsh-adapter/workspaces.js +290 -0
  250. package/lib/types/effortPrefs.d.ts +1 -1
  251. package/lib/types/effortPrefs.js +3 -3
  252. package/lib/types/history.js +2 -2
  253. package/lib/types/hooks/useBlink.d.ts +1 -1
  254. package/lib/types/hooks/useBlink.js +1 -1
  255. package/lib/types/i18n.d.ts +977 -36
  256. package/lib/types/i18n.d.ts.map +1 -1
  257. package/lib/types/i18n.js +307 -30
  258. package/lib/types/index.d.ts +1 -69
  259. package/lib/types/index.d.ts.map +1 -1
  260. package/lib/types/index.js +3 -31
  261. package/lib/types/ink/components/App.d.ts.map +1 -1
  262. package/lib/types/ink/components/App.js +33 -19
  263. package/lib/types/ink/dom.d.ts +15 -0
  264. package/lib/types/ink/dom.d.ts.map +1 -1
  265. package/lib/types/ink/dom.js +32 -0
  266. package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
  267. package/lib/types/ink/hooks/use-input.js +8 -0
  268. package/lib/types/ink/hooks/use-terminal-size.d.ts +1 -1
  269. package/lib/types/ink/hooks/use-terminal-size.js +1 -1
  270. package/lib/types/ink/ink.d.ts.map +1 -1
  271. package/lib/types/ink/ink.js +109 -28
  272. package/lib/types/ink/input-suppression.d.ts +20 -0
  273. package/lib/types/ink/input-suppression.d.ts.map +1 -0
  274. package/lib/types/ink/input-suppression.js +26 -0
  275. package/lib/types/ink/log-update.js +21 -6
  276. package/lib/types/ink/parse-keypress.d.ts +31 -0
  277. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  278. package/lib/types/ink/parse-keypress.js +442 -8
  279. package/lib/types/ink/terminal-querier.d.ts +5 -1
  280. package/lib/types/ink/terminal-querier.d.ts.map +1 -1
  281. package/lib/types/ink/terminal-querier.js +27 -3
  282. package/lib/types/ink/terminal.d.ts +18 -0
  283. package/lib/types/ink/terminal.d.ts.map +1 -1
  284. package/lib/types/ink/terminal.js +32 -4
  285. package/lib/types/ink/termio/csi.d.ts +10 -0
  286. package/lib/types/ink/termio/csi.d.ts.map +1 -1
  287. package/lib/types/ink/termio/csi.js +20 -0
  288. package/lib/types/ink/termio/tokenize.js +10 -0
  289. package/lib/types/modelPrefs.d.ts +1 -1
  290. package/lib/types/modelPrefs.js +3 -3
  291. package/lib/types/presetPrefs.d.ts +1 -1
  292. package/lib/types/presetPrefs.js +3 -3
  293. package/lib/types/screens/Chat.d.ts +20 -4
  294. package/lib/types/screens/Chat.d.ts.map +1 -1
  295. package/lib/types/screens/Chat.js +655 -55
  296. package/lib/types/screens/StatusLine.d.ts +17 -2
  297. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  298. package/lib/types/screens/StatusLine.js +12 -4
  299. package/lib/types/screens/TrajectoryScene.d.ts +16 -0
  300. package/lib/types/screens/TrajectoryScene.d.ts.map +1 -0
  301. package/lib/types/screens/TrajectoryScene.js +305 -0
  302. package/lib/types/sessionHistory.d.ts +9 -1
  303. package/lib/types/sessionHistory.d.ts.map +1 -1
  304. package/lib/types/sessionHistory.js +56 -16
  305. package/lib/types/sessionModes.d.ts +29 -0
  306. package/lib/types/sessionModes.d.ts.map +1 -0
  307. package/lib/types/sessionModes.js +45 -0
  308. package/lib/types/theme.d.ts +27 -3
  309. package/lib/types/theme.d.ts.map +1 -1
  310. package/lib/types/theme.js +48 -4
  311. package/lib/types/themePrefs.d.ts +3 -3
  312. package/lib/types/themePrefs.js +5 -5
  313. package/lib/types/trajectory/format.d.ts +100 -0
  314. package/lib/types/trajectory/format.d.ts.map +1 -0
  315. package/lib/types/trajectory/format.js +213 -0
  316. package/lib/types/trajectory/motion.d.ts +99 -0
  317. package/lib/types/trajectory/motion.d.ts.map +1 -0
  318. package/lib/types/trajectory/motion.js +143 -0
  319. package/lib/types/trajectory/query.d.ts +83 -0
  320. package/lib/types/trajectory/query.d.ts.map +1 -0
  321. package/lib/types/trajectory/query.js +187 -0
  322. package/lib/types/trajectoryPrefs.d.ts +36 -0
  323. package/lib/types/trajectoryPrefs.d.ts.map +1 -0
  324. package/lib/types/trajectoryPrefs.js +65 -0
  325. package/lib/types/update.d.ts +3 -3
  326. package/lib/types/update.d.ts.map +1 -1
  327. package/lib/types/update.js +18 -7
  328. package/lib/types/utils/clipboard.d.ts +101 -29
  329. package/lib/types/utils/clipboard.d.ts.map +1 -1
  330. package/lib/types/utils/clipboard.js +533 -55
  331. package/lib/types/utils/debug.d.ts +1 -1
  332. package/lib/types/utils/debug.js +2 -2
  333. package/lib/types/utils/execFileNoThrow.d.ts.map +1 -1
  334. package/lib/types/utils/execFileNoThrow.js +16 -6
  335. package/lib/types/utils/externalEditor.d.ts +115 -0
  336. package/lib/types/utils/externalEditor.d.ts.map +1 -0
  337. package/lib/types/utils/externalEditor.js +270 -0
  338. package/lib/types/utils/fullscreen.d.ts +2 -2
  339. package/lib/types/utils/fullscreen.js +3 -3
  340. package/lib/types/utils/loaded-context.d.ts +1 -1
  341. package/lib/types/utils/loaded-context.d.ts.map +1 -1
  342. package/lib/types/utils/modifiers.d.ts +24 -0
  343. package/lib/types/utils/modifiers.d.ts.map +1 -1
  344. package/lib/types/utils/modifiers.js +27 -0
  345. package/lib/types/utils/paths.d.ts +45 -0
  346. package/lib/types/utils/paths.d.ts.map +1 -0
  347. package/lib/types/utils/paths.js +69 -0
  348. package/lib/types/utils/shellQuote.d.ts +14 -0
  349. package/lib/types/utils/shellQuote.d.ts.map +1 -0
  350. package/lib/types/utils/shellQuote.js +39 -0
  351. package/lib/types/utils/workspaceRoot.d.ts +21 -0
  352. package/lib/types/utils/workspaceRoot.d.ts.map +1 -0
  353. package/lib/types/utils/workspaceRoot.js +47 -0
  354. package/lib/types/workspaces.d.ts +3 -0
  355. package/lib/types/workspaces.d.ts.map +1 -0
  356. package/lib/types/workspaces.js +4 -0
  357. package/package.json +26 -8
  358. package/lib/types/approvals.d.ts.map +0 -1
  359. package/lib/types/channel.d.ts.map +0 -1
  360. package/lib/types/childStderr.d.ts.map +0 -1
  361. package/lib/types/compat/index.d.ts +0 -20
  362. package/lib/types/compat/index.d.ts.map +0 -1
  363. package/lib/types/compat/sessionLog.d.ts +0 -40
  364. package/lib/types/compat/sessionLog.d.ts.map +0 -1
  365. package/lib/types/compat/sessionLog.js +0 -226
  366. package/lib/types/invariant.d.ts.map +0 -1
  367. package/lib/types/packaged-skills.d.ts.map +0 -1
  368. package/lib/types/plugin.d.ts.map +0 -1
  369. package/lib/types/presets.d.ts.map +0 -1
  370. package/lib/types/questions.d.ts.map +0 -1
  371. /package/lib/types/{approvals.d.ts → dsh-adapter/approvals.d.ts} +0 -0
  372. /package/lib/types/{approvals.js → dsh-adapter/approvals.js} +0 -0
  373. /package/lib/types/{childStderr.d.ts → dsh-adapter/childStderr.d.ts} +0 -0
  374. /package/lib/types/{invariant.d.ts → dsh-adapter/invariant.d.ts} +0 -0
  375. /package/lib/types/{invariant.js → dsh-adapter/invariant.js} +0 -0
  376. /package/lib/types/{packaged-skills.d.ts → dsh-adapter/packaged-skills.d.ts} +0 -0
  377. /package/lib/types/{packaged-skills.js → dsh-adapter/packaged-skills.js} +0 -0
  378. /package/lib/types/{presets.d.ts → dsh-adapter/presets.d.ts} +0 -0
  379. /package/lib/types/{presets.js → dsh-adapter/presets.js} +0 -0
@@ -1,84 +1,96 @@
1
1
  import chalk from 'chalk';
2
2
  import wrapAnsi from 'wrap-ansi';
3
3
  /**
4
- * Terminal-width line truncation, ported from the leaked Claude Code source
5
- * (`src/utils/terminal.ts`). Renders long tool output as the first 3 wrapped
6
- * rows plus a `… +N lines (ctrl+o to expand)` hint.
4
+ * Terminal-width line truncation for long tool output: the first few
5
+ * wrapped rows are shown as-is, and any overflow is summarized with a dim
6
+ * `… +N lines (ctrl+o to expand)` hint.
7
+ *
8
+ * Wrapping reserves a few columns of slack so folded rows never touch the
9
+ * terminal edge, and huge inputs (e.g. multi-MB dumps) are pre-truncated
10
+ * to a character budget before wrapping so the cost stays proportional to
11
+ * what is actually rendered.
7
12
  */
8
- const PADDING_TO_PREVENT_OVERFLOW = 4;
9
- const MAX_LINES_TO_SHOW = 3;
10
- function wrapText(text, width) {
11
- const wrappedLines = wrapAnsi(text, width, {
13
+ /** Columns of slack reserved inside `terminalWidth` for the fold. */
14
+ const WRAP_WIDTH_PADDING = 4;
15
+ /** Rows shown above the fold before truncation kicks in. */
16
+ const MAX_VISIBLE_LINES = 3;
17
+ /** Character budget per visible row (× this) used to pre-truncate input. */
18
+ const PRETRUNCATE_MULTIPLIER = 4;
19
+ /**
20
+ * Wrap `text` to `width` and split it into a visible prefix and the number
21
+ * of lines hidden below the fold.
22
+ *
23
+ * Special case: when exactly one line falls below the fold, that line is
24
+ * shown directly and counted as visible, so short overflows never get a
25
+ * hint row of their own.
26
+ */
27
+ function foldAtWidth(text, width) {
28
+ const lines = wrapAnsi(text, width, {
12
29
  trim: false,
13
30
  hard: false,
14
31
  wordWrap: true,
15
32
  }).split('\n');
16
- const totalLines = wrappedLines.length;
17
- if (totalLines <= MAX_LINES_TO_SHOW) {
33
+ const totalLines = lines.length;
34
+ if (totalLines <= MAX_VISIBLE_LINES) {
18
35
  return {
19
- aboveTheFold: wrappedLines.join('\n').trimEnd(),
20
- remainingLines: 0,
36
+ visible: lines.join('\n').trimEnd(),
37
+ hidden: 0,
21
38
  };
22
39
  }
23
- const remainingLines = totalLines - MAX_LINES_TO_SHOW;
24
- // If there's only 1 line after the fold, show it directly
25
- // instead of showing "... +1 line (ctrl+o to expand)"
26
- if (remainingLines === 1) {
40
+ const belowFold = totalLines - MAX_VISIBLE_LINES;
41
+ // One extra line is cheaper to show than to describe.
42
+ if (belowFold === 1) {
27
43
  return {
28
- aboveTheFold: wrappedLines
29
- .slice(0, MAX_LINES_TO_SHOW + 1)
30
- .join('\n')
31
- .trimEnd(),
32
- remainingLines: 0, // All lines are shown, nothing remaining
44
+ visible: lines.slice(0, MAX_VISIBLE_LINES + 1).join('\n').trimEnd(),
45
+ hidden: 0,
33
46
  };
34
47
  }
35
- // Otherwise show the standard MAX_LINES_TO_SHOW
36
48
  return {
37
- aboveTheFold: wrappedLines
38
- .slice(0, MAX_LINES_TO_SHOW)
39
- .join('\n')
40
- .trimEnd(),
41
- remainingLines: Math.max(0, remainingLines),
49
+ visible: lines.slice(0, MAX_VISIBLE_LINES).join('\n').trimEnd(),
50
+ hidden: belowFold,
42
51
  };
43
52
  }
44
- /** `(ctrl+o to expand)` hint in dim chalk, like the leak's ctrlOToExpand().
53
+ /**
54
+ * The `(ctrl+o to expand)` hint, dimmed.
45
55
  * @returns The dim hint text.
46
56
  */
47
57
  export function ctrlOToExpand() {
48
58
  return chalk.dim('(ctrl+o to expand)');
49
59
  }
50
60
  /**
51
- * Renders the content with line-based truncation for terminal display.
52
- * If the content exceeds the maximum number of lines, it truncates the content
53
- * and adds a message indicating the number of additional lines.
61
+ * Render `content` with line-based truncation for terminal display.
62
+ * Content that fits in the visible budget is returned unchanged (modulo
63
+ * trailing whitespace); longer content is folded with an overflow hint.
54
64
  * @param content - Text to render; trailing whitespace is trimmed.
55
- * @param terminalWidth - Terminal width in columns; the wrap width reserves 4 columns of padding.
56
- * @param suppressExpandHint - When true, omit the `(ctrl+o to expand)` suffix from the overflow hint.
57
- * @returns The truncated text, or '' when `content` is blank after trimming.
65
+ * @param terminalWidth - Terminal width in columns; the wrap width reserves
66
+ * 4 columns of padding.
67
+ * @param suppressExpandHint - When true, omit the `(ctrl+o to expand)`
68
+ * suffix from the overflow hint.
69
+ * @returns The truncated text, or `''` when `content` is blank after trimming.
58
70
  */
59
71
  export function renderTruncatedContent(content, terminalWidth, suppressExpandHint = false) {
60
72
  const trimmedContent = content.trimEnd();
61
73
  if (!trimmedContent) {
62
74
  return '';
63
75
  }
64
- const wrapWidth = Math.max(terminalWidth - PADDING_TO_PREVENT_OVERFLOW, 10);
65
- // Only process enough content for the visible lines. Avoids O(n) wrapping
66
- // on huge outputs (e.g. 64MB binary dumps that cause 382K-row screens).
67
- const maxChars = MAX_LINES_TO_SHOW * wrapWidth * 4;
68
- const preTruncated = trimmedContent.length > maxChars;
76
+ // Keep the wrap width within a sane range regardless of the caller.
77
+ const wrapWidth = Math.max(terminalWidth - WRAP_WIDTH_PADDING, 10);
78
+ // Pre-truncate oversized inputs before wrapping: only the characters
79
+ // that could possibly land on the visible rows are ever wrapped, which
80
+ // avoids O(n) wrapping on huge outputs (e.g. 64MB binary dumps).
81
+ const charBudget = MAX_VISIBLE_LINES * wrapWidth * PRETRUNCATE_MULTIPLIER;
82
+ const preTruncated = trimmedContent.length > charBudget;
69
83
  const contentForWrapping = preTruncated
70
- ? trimmedContent.slice(0, maxChars)
84
+ ? trimmedContent.slice(0, charBudget)
71
85
  : trimmedContent;
72
- const { aboveTheFold, remainingLines } = wrapText(contentForWrapping, wrapWidth);
86
+ const { visible, hidden } = foldAtWidth(contentForWrapping, wrapWidth);
87
+ // When the input was pre-truncated, the fold can undercount the real
88
+ // overflow, so fall back to a length-based estimate in that case.
73
89
  const estimatedRemaining = preTruncated
74
- ? Math.max(remainingLines, Math.ceil(trimmedContent.length / wrapWidth) - MAX_LINES_TO_SHOW)
75
- : remainingLines;
76
- return [
77
- aboveTheFold,
78
- estimatedRemaining > 0
79
- ? chalk.dim(`… +${estimatedRemaining} lines${suppressExpandHint ? '' : ` ${ctrlOToExpand()}`}`)
80
- : '',
81
- ]
82
- .filter(Boolean)
83
- .join('\n');
90
+ ? Math.max(hidden, Math.ceil(trimmedContent.length / wrapWidth) - MAX_VISIBLE_LINES)
91
+ : hidden;
92
+ const overflowHint = estimatedRemaining > 0
93
+ ? chalk.dim(`… +${estimatedRemaining} lines${suppressExpandHint ? '' : ` ${ctrlOToExpand()}`}`)
94
+ : '';
95
+ return [visible, overflowHint].filter(Boolean).join('\n');
84
96
  }
@@ -0,0 +1,3 @@
1
+ export * from './dsh-adapter/command-trees.js';
2
+ export { default } from './dsh-adapter/command-trees.js';
3
+ //# sourceMappingURL=command-trees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-trees.d.ts","sourceRoot":"","sources":["../../src/command-trees.ts"],"names":[],"mappings":"AAEA,cAAc,gCAAgC,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA"}
@@ -0,0 +1,4 @@
1
+ // Re-export shim: the Cordis-backed implementation lives behind the adapter
2
+ // boundary so UI consumers never import official @deepseek-ai/* packages.
3
+ export * from './dsh-adapter/command-trees.js';
4
+ export { default } from './dsh-adapter/command-trees.js';
@@ -6,6 +6,7 @@
6
6
  * `runCommand` in the Chat screen dispatches either kind, with the registry
7
7
  * handler winning for names both sides declare.
8
8
  */
9
+ export type LocalizedDescriptions = Readonly<Partial<Record<'zh' | 'en', string>>>;
9
10
  export interface LocalCommand {
10
11
  /** The command name without the slash, e.g. `clear`. */
11
12
  name: string;
@@ -15,11 +16,38 @@ export interface LocalCommand {
15
16
  * (see {@link localizedDescription}).
16
17
  */
17
18
  description: string;
19
+ /** Provider-owned translations selected with the active TUI language. */
20
+ descriptions?: LocalizedDescriptions;
18
21
  /** Optional bracket tag shown between name and description. */
19
22
  tag?: string;
20
23
  /** True when a DSH plugin registered this command (not built in). */
21
24
  external?: boolean;
25
+ /**
26
+ * True when the entry is a user-invocable skill discovered by the DSH
27
+ * skill registry (issue #86). Skill entries are completion-only: dispatch
28
+ * falls through to the model as plain text, where dsh-tool-skill's
29
+ * pre-step hook injects the skill body — the same path a hand-typed
30
+ * `/skill-name` takes. The help menu hides them (chrome commands only).
31
+ */
32
+ skill?: boolean;
22
33
  }
34
+ /** One child in a slash-command tree contributed by a local feature/plugin. */
35
+ export interface CommandCompletionNode {
36
+ name: string;
37
+ aliases?: readonly string[];
38
+ description: string;
39
+ descriptions?: LocalizedDescriptions;
40
+ tag?: string;
41
+ /** Optional i18n key; plugin nodes normally rely on fallback text. */
42
+ descriptionKey?: string;
43
+ }
44
+ /** A concrete completion row, including the text inserted by Tab/Enter. */
45
+ export interface CommandCompletion extends LocalCommand {
46
+ replacement: string;
47
+ commandLine: string;
48
+ descriptionKey?: string;
49
+ }
50
+ export type CommandChildren = (canonicalPath: readonly string[]) => readonly CommandCompletionNode[];
23
51
  /**
24
52
  * The built-in slash commands (name + description pairs). Plugin-registered
25
53
  * commands merge in at runtime; locals win on name collisions.
@@ -33,7 +61,9 @@ export declare const LOCAL_COMMANDS: LocalCommand[];
33
61
  * render, so a `/lang` switch repaints descriptions immediately.
34
62
  * @param command - The command whose description to localize.
35
63
  */
36
- export declare function localizedDescription(command: LocalCommand): string;
64
+ export declare function localizedDescription(command: LocalCommand & {
65
+ descriptionKey?: string;
66
+ }): string;
37
67
  /**
38
68
  * Parse a slash-command line into its name and the verbatim input following
39
69
  * the name (separator whitespace included) — the same split the DSH command
@@ -65,4 +95,10 @@ export declare function isLocalCommandName(input: string, list?: readonly LocalC
65
95
  * @returns Commands whose name starts with the prefix, in list order.
66
96
  */
67
97
  export declare function filterCommands(input: string, list?: readonly LocalCommand[]): LocalCommand[];
98
+ /**
99
+ * Complete an arbitrary slash-command path. Root commands come from the
100
+ * ordinary DSH/TUI catalog; each resolved token asks the caller for its
101
+ * children, so PromptInput never needs feature- or plugin-specific cases.
102
+ */
103
+ export declare function completeCommands(input: string, roots?: readonly LocalCommand[], children?: CommandChildren): CommandCompletion[];
68
104
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAY,EAgDxC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAElE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIhD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,YAAY,EAAE,CAKhB"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;AAElF,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,qBAAqB,EAAE,CAAA;AAEpG;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAY,EAuDxC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAIhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIhD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,YAAY,EAAE,CAKhB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,SAAS,YAAY,EAAmB,EAC/C,QAAQ,GAAE,eAA0B,GACnC,iBAAiB,EAAE,CAoCrB"}
@@ -6,7 +6,7 @@
6
6
  * `runCommand` in the Chat screen dispatches either kind, with the registry
7
7
  * handler winning for names both sides declare.
8
8
  */
9
- import { tOr } from './i18n.js';
9
+ import { getLang, tOr } from './i18n.js';
10
10
  /**
11
11
  * The built-in slash commands (name + description pairs). Plugin-registered
12
12
  * commands merge in at runtime; locals win on name collisions.
@@ -20,6 +20,8 @@ export const LOCAL_COMMANDS = [
20
20
  { name: 'rename', description: 'Rename the current session' },
21
21
  { name: 'rewind', description: 'Rewind the conversation to a previous message' },
22
22
  { name: 'export', description: 'Export the conversation to a markdown file' },
23
+ { name: 'btw', description: 'Ask a quick side question without interrupting the conversation' },
24
+ { name: 'trace', description: 'Show the session event trace timeline' },
23
25
  // Session / environment
24
26
  { name: 'status', description: 'Show session status' },
25
27
  { name: 'cost', description: 'Show session token usage' },
@@ -30,12 +32,14 @@ export const LOCAL_COMMANDS = [
30
32
  // Model / display
31
33
  { name: 'activity', description: 'Switch the working-activity indicator preset' },
32
34
  { name: 'preset', description: 'Switch the agent preset (standard/code/minimal/cordis)' },
33
- { name: 'theme', description: 'Switch the color theme (built-in or custom)' },
35
+ { name: 'theme', description: 'Switch the color theme (auto, built-in or custom)' },
34
36
  { name: 'lang', description: 'Switch the UI language (en / zh)' },
35
37
  { name: 'model', description: 'Show the active model' },
38
+ { name: 'effort', description: 'Adjust the reasoning effort (slider)' },
36
39
  { name: 'thinking', description: 'Toggle extended thinking display' },
37
40
  { name: 'tokens', description: 'Show session token usage' },
38
41
  // Account / policy
42
+ { name: 'provider', description: 'Add an LLM provider (catalog or custom API endpoint)' },
39
43
  { name: 'login', description: 'Show API credential status' },
40
44
  { name: 'logout', description: 'Clear the API credential' },
41
45
  { name: 'permissions', description: 'Show permission policy status' },
@@ -56,9 +60,12 @@ export const LOCAL_COMMANDS = [
56
60
  { name: 'vim', description: 'Toggle vim mode' },
57
61
  { name: 'terminal-setup', description: 'Show terminal setup instructions' },
58
62
  { name: 'connect', description: 'Connect to a remote machine' },
63
+ { name: 'workspace', description: 'Resume, rename, or open a workspace' },
59
64
  // Help / exit
60
65
  { name: 'help', description: 'Show shortcuts and commands' },
61
66
  { name: 'exit', description: 'Exit dsh-tui' },
67
+ { name: 'quit', description: 'Exit dsh-tui', tag: 'alias of /exit' },
68
+ { name: 'q', description: 'Exit dsh-tui', tag: 'alias of /exit' },
62
69
  ];
63
70
  /**
64
71
  * Resolve a command's description in the active UI language. The en text in
@@ -69,7 +76,10 @@ export const LOCAL_COMMANDS = [
69
76
  * @param command - The command whose description to localize.
70
77
  */
71
78
  export function localizedDescription(command) {
72
- return tOr(`cmd-desc-${command.name}`, command.description);
79
+ const translated = command.descriptions?.[getLang()];
80
+ if (translated !== undefined)
81
+ return translated;
82
+ return tOr(command.descriptionKey ?? `cmd-desc-${command.name}`, command.description);
73
83
  }
74
84
  /**
75
85
  * Parse a slash-command line into its name and the verbatim input following
@@ -112,3 +122,58 @@ export function filterCommands(input, list = LOCAL_COMMANDS) {
112
122
  const prefix = input.replace(/^\//, '').trim().toLowerCase();
113
123
  return list.filter(command => command.name.toLowerCase().startsWith(prefix));
114
124
  }
125
+ /**
126
+ * Complete an arbitrary slash-command path. Root commands come from the
127
+ * ordinary DSH/TUI catalog; each resolved token asks the caller for its
128
+ * children, so PromptInput never needs feature- or plugin-specific cases.
129
+ */
130
+ export function completeCommands(input, roots = LOCAL_COMMANDS, children = () => []) {
131
+ if (!input.startsWith('/') || /[\r\n]/u.test(input))
132
+ return [];
133
+ const body = input.slice(1);
134
+ if (!/^[a-z0-9_-]*(?:[\t ]+[a-z0-9_-]*)*$/iu.test(body))
135
+ return [];
136
+ const trailingSeparator = /[\t ]$/u.test(body);
137
+ const tokens = body.split(/[\t ]+/u);
138
+ const prefix = trailingSeparator ? '' : (tokens.pop() ?? '');
139
+ if (trailingSeparator && tokens.at(-1) === '')
140
+ tokens.pop();
141
+ const canonicalPath = [];
142
+ let candidates = roots;
143
+ for (const token of tokens) {
144
+ const resolved = resolveCompletionNode(candidates, token);
145
+ if (resolved === undefined)
146
+ return [];
147
+ canonicalPath.push(resolved.name);
148
+ candidates = children(canonicalPath);
149
+ }
150
+ const normalizedPrefix = prefix.toLowerCase();
151
+ return candidates.flatMap(candidate => {
152
+ const completionToken = matchingCompletionToken(candidate, normalizedPrefix);
153
+ if (completionToken === undefined)
154
+ return [];
155
+ const path = [...tokens, completionToken];
156
+ const commandLine = `/${path.join(' ')}`;
157
+ return [{
158
+ name: path.join(' '),
159
+ description: candidate.description,
160
+ ...(candidate.descriptions === undefined ? {} : { descriptions: candidate.descriptions }),
161
+ ...(candidate.descriptionKey === undefined ? {} : { descriptionKey: candidate.descriptionKey }),
162
+ ...(candidate.tag === undefined && candidate.aliases?.length
163
+ ? { tag: `aliases: ${candidate.aliases.join(', ')}` }
164
+ : candidate.tag === undefined ? {} : { tag: candidate.tag }),
165
+ replacement: `${commandLine} `,
166
+ commandLine,
167
+ }];
168
+ });
169
+ }
170
+ function resolveCompletionNode(candidates, token) {
171
+ const normalized = token.toLowerCase();
172
+ return candidates.find(candidate => candidate.name.toLowerCase() === normalized
173
+ || candidate.aliases?.some(alias => alias.toLowerCase() === normalized));
174
+ }
175
+ function matchingCompletionToken(candidate, prefix) {
176
+ if (candidate.name.toLowerCase().startsWith(prefix))
177
+ return candidate.name;
178
+ return candidate.aliases?.find(alias => alias.toLowerCase().startsWith(prefix));
179
+ }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { ActivityStatus } from '../channel.js';
2
+ import type { ActivityStatus } from '../dsh-adapter/channel.js';
3
3
  /**
4
4
  * Context-pressure percentage (0–100) from the last usage snapshot, or
5
5
  * undefined when unknown — shared by the spinner-line and status-line
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityLine.d.ts","sourceRoot":"","sources":["../../../src/components/ActivityLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAC3E,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,cAAc,EACd,OAAO,EACP,UAAU,EACV,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,cAAc,CAAA;IACxB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,KAAK,CAAC,SAAS,CAuClB"}
1
+ {"version":3,"file":"ActivityLine.d.ts","sourceRoot":"","sources":["../../../src/components/ActivityLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE/D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAC3E,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,cAAc,EACd,OAAO,EACP,UAAU,EACV,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,cAAc,CAAA;IACxB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,KAAK,CAAC,SAAS,CAuClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityPicker.d.ts","sourceRoot":"","sources":["../../../src/components/ActivityPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,aAAa,GACd,EAAE;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC,GAAG,KAAK,CAAC,SAAS,CA6BlB"}
1
+ {"version":3,"file":"ActivityPicker.d.ts","sourceRoot":"","sources":["../../../src/components/ActivityPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,aAAa,GACd,EAAE;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC,GAAG,KAAK,CAAC,SAAS,CA0BlB"}
@@ -3,8 +3,7 @@ import { t } from '../i18n.js';
3
3
  import { Box, Text } from '../ui.js';
4
4
  import { Pane } from './design-system/Pane.js';
5
5
  import { Select } from './Select.js';
6
- import { Byline } from './design-system/Byline.js';
7
- import { KeyboardShortcutHint } from './design-system/KeyboardShortcutHint.js';
6
+ import { HintLine } from './design-system/HintLine.js';
8
7
  import { FRAME_PRESETS, PRESET_NAMES } from './activityFrames.js';
9
8
  /**
10
9
  * Working-activity indicator picker in the CC ModelPicker style (ported
@@ -14,11 +13,11 @@ import { FRAME_PRESETS, PRESET_NAMES } from './activityFrames.js';
14
13
  * applies through `channel.setActivityFrames`, Esc cancels.
15
14
  */
16
15
  export function ActivityPicker({ focusIndex, currentPreset, }) {
17
- return (_jsx(Pane, { color: "permission", children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "remember", bold: true, children: "Indicator preset" }) }), _jsx(Select, { options: PRESET_NAMES.map(name => ({
16
+ return (_jsx(Pane, { color: "permission", children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "remember", bold: true, children: t('picker-title-activity') }) }), _jsx(Select, { options: PRESET_NAMES.map(name => ({
18
17
  value: name,
19
18
  label: name,
20
19
  description: name === 'random'
21
20
  ? t('activity-random-each-preset')
22
21
  : FRAME_PRESETS[name].frames.slice(0, 5).join(' '),
23
- })), focusIndex: focusIndex, selectedValue: currentPreset }), _jsx(Text, { dimColor: true, italic: true, children: _jsxs(Byline, { children: [_jsx(KeyboardShortcutHint, { shortcut: "Enter", action: "confirm", bold: true }), _jsx(KeyboardShortcutHint, { shortcut: "Esc", action: "exit" })] }) })] }) }));
22
+ })), focusIndex: focusIndex, selectedValue: currentPreset }), _jsx(Text, { dimColor: true, italic: true, children: _jsx(HintLine, { text: t('hint-confirm-exit') }) })] }) }));
24
23
  }
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ /**
3
+ * /btw side-question panel (CC's btw.tsx, inline-pane form like the local
4
+ * pickers): title line with the question, a scrollable answer body (error /
5
+ * markdown answer / answering spinner), and a hint line. Owns the keyboard
6
+ * while open — every key it sees is consumed here.
7
+ */
8
+ export declare function BtwPanel({ question, answer, error, streaming, onClose, onCopy, }: {
9
+ question: string;
10
+ answer: string;
11
+ error?: string;
12
+ streaming: boolean;
13
+ onClose: () => void;
14
+ onCopy: () => void;
15
+ }): React.ReactNode;
16
+ //# sourceMappingURL=BtwPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BtwPanel.d.ts","sourceRoot":"","sources":["../../../src/components/BtwPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,OAAO,EACP,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,GAAG,KAAK,CAAC,SAAS,CA4DlB"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Box, Text, useInput, ScrollBox, useTerminalSize } from '../ui.js';
4
+ import { Markdown } from './Markdown.js';
5
+ import { SpinnerGlyph } from './Spinner/SpinnerGlyph.js';
6
+ import { t } from '../i18n.js';
7
+ import { isPlainReturnInput } from '../utils/modifiers.js';
8
+ /**
9
+ * /btw side-question panel (CC's btw.tsx, inline-pane form like the local
10
+ * pickers): title line with the question, a scrollable answer body (error /
11
+ * markdown answer / answering spinner), and a hint line. Owns the keyboard
12
+ * while open — every key it sees is consumed here.
13
+ */
14
+ export function BtwPanel({ question, answer, error, streaming, onClose, onCopy, }) {
15
+ const scrollRef = React.useRef(null);
16
+ const { rows } = useTerminalSize();
17
+ // Spinner frame (80ms cadence, only while waiting for the first text).
18
+ const [frame, setFrame] = React.useState(0);
19
+ React.useEffect(() => {
20
+ if (!streaming || answer !== '')
21
+ return;
22
+ const interval = setInterval(() => setFrame(f => f + 1), 80);
23
+ return () => clearInterval(interval);
24
+ }, [streaming, answer]);
25
+ useInput((input, key, event) => {
26
+ if (key.escape || isPlainReturnInput(input, key) || input === ' ') {
27
+ event.stopImmediatePropagation();
28
+ onClose();
29
+ return;
30
+ }
31
+ if (key.upArrow || key.downArrow) {
32
+ scrollRef.current?.scrollBy(key.upArrow ? -3 : 3);
33
+ event.stopImmediatePropagation();
34
+ return;
35
+ }
36
+ if (input === 'c' && !key.ctrl) {
37
+ event.stopImmediatePropagation();
38
+ onCopy();
39
+ return;
40
+ }
41
+ // The overlay owns the keyboard while open: swallow everything else so
42
+ // nothing leaks into the prompt input behind it.
43
+ event.stopImmediatePropagation();
44
+ });
45
+ const settled = answer !== '' || error !== undefined;
46
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: "warning", bold: true, children: "/btw " }), _jsx(Text, { dimColor: true, children: question })] }), _jsx(Box, { flexDirection: "column", maxHeight: Math.max(5, rows - 8), children: _jsx(Box, { marginLeft: 2, flexDirection: "column", flexGrow: 1, children: _jsx(ScrollBox, { ref: scrollRef, flexDirection: "column", flexGrow: 1, children: error !== undefined ? (_jsx(Text, { color: "error", children: error })) : answer !== '' ? (_jsx(Markdown, { cacheTokens: false, children: answer })) : (_jsxs(Box, { children: [_jsx(SpinnerGlyph, { frame: frame, messageColor: "warning" }), _jsxs(Text, { color: "warning", children: [" ", t('btw-answering')] })] })) }) }) }), _jsx(Text, { dimColor: true, children: settled ? t('btw-hint-done') : streaming ? t('btw-hint-loading') : t('btw-hint-done') })] }));
47
+ }
@@ -1,13 +1,15 @@
1
1
  import React from 'react';
2
2
  import type { LocalCommand } from '../commands.js';
3
3
  /**
4
- * The slash-command suggestion overlay, ported from the leak's
4
+ * The slash-command suggestion overlay, mirroring Claude Code's
5
5
  * `PromptInputFooterSuggestions.tsx` (command layout only): a name column
6
6
  * padded to a fixed width, optional `[tag]`, then a truncated description.
7
7
  * The selected row renders in the theme's `suggestion` color, others dim.
8
8
  */
9
9
  export declare function CommandSuggestions({ commands, selectedIndex, columns, }: {
10
- commands: readonly LocalCommand[];
10
+ commands: readonly (LocalCommand & {
11
+ descriptionKey?: string;
12
+ })[];
11
13
  selectedIndex: number;
12
14
  columns: number;
13
15
  }): React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"CommandSuggestions.d.ts","sourceRoot":"","sources":["../../../src/components/CommandSuggestions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,aAAa,EACb,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAA;IACjC,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,KAAK,CAAC,SAAS,CAqDlB"}
1
+ {"version":3,"file":"CommandSuggestions.d.ts","sourceRoot":"","sources":["../../../src/components/CommandSuggestions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,aAAa,EACb,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC,YAAY,GAAG;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAA;IACjE,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,KAAK,CAAC,SAAS,CAqDlB"}
@@ -4,7 +4,7 @@ import { stringWidth } from '../ink/stringWidth.js';
4
4
  import { truncateToWidth } from '../ink/truncateToWidth.js';
5
5
  import { localizedDescription } from '../commands.js';
6
6
  /**
7
- * The slash-command suggestion overlay, ported from the leak's
7
+ * The slash-command suggestion overlay, mirroring Claude Code's
8
8
  * `PromptInputFooterSuggestions.tsx` (command layout only): a name column
9
9
  * padded to a fixed width, optional `[tag]`, then a truncated description.
10
10
  * The selected row renders in the theme's `suggestion` color, others dim.
@@ -13,7 +13,7 @@ export function CommandSuggestions({ commands, selectedIndex, columns, }) {
13
13
  if (commands.length === 0)
14
14
  return null;
15
15
  // Cap the command name column at 40% of terminal width to ensure the
16
- // description has space (same as the leak).
16
+ // description has space (same as Claude Code).
17
17
  const maxNameWidth = Math.floor(columns * 0.4);
18
18
  const nameWidth = Math.min(Math.max(...commands.map(c => stringWidth(c.name))) + 5, maxNameWidth);
19
19
  const maxVisible = 5;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { EffortOption } from '../dsh-adapter/channel.js';
3
+ /**
4
+ * Reasoning-effort slider (`/effort`): a rheostat row of the live route's
5
+ * adapter-owned levels in adapter order, ←/→ moving focus (each move applies
6
+ * immediately through `channel.setEffort` — the slider IS the control; Enter
7
+ * or Esc just closes it). The current level carries `✓`; the focused level's
8
+ * description renders below the row.
9
+ */
10
+ export declare function EffortSlider({ options, focusIndex, currentId, }: {
11
+ options: readonly EffortOption[];
12
+ focusIndex: number;
13
+ currentId: string | undefined;
14
+ }): React.ReactNode;
15
+ //# sourceMappingURL=EffortSlider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EffortSlider.d.ts","sourceRoot":"","sources":["../../../src/components/EffortSlider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,UAAU,EACV,SAAS,GACV,EAAE;IACD,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B,GAAG,KAAK,CAAC,SAAS,CAmClB"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { t } from '../i18n.js';
4
+ import { Box, Text } from '../ui.js';
5
+ import { Pane } from './design-system/Pane.js';
6
+ import { HintLine } from './design-system/HintLine.js';
7
+ /**
8
+ * Reasoning-effort slider (`/effort`): a rheostat row of the live route's
9
+ * adapter-owned levels in adapter order, ←/→ moving focus (each move applies
10
+ * immediately through `channel.setEffort` — the slider IS the control; Enter
11
+ * or Esc just closes it). The current level carries `✓`; the focused level's
12
+ * description renders below the row.
13
+ */
14
+ export function EffortSlider({ options, focusIndex, currentId, }) {
15
+ const focused = options[focusIndex];
16
+ return (_jsx(Pane, { color: "permission", children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "remember", bold: true, children: t('picker-title-effort') }) }), _jsx(Box, { flexDirection: "row", children: options.map((option, index) => (_jsxs(React.Fragment, { children: [index > 0 ? (_jsx(Text, { dimColor: true, children: " \u2500\u2500 " })) : null, _jsx(Text, { inverse: index === focusIndex, bold: index === focusIndex, children: option.name }), option.id === currentId ? _jsx(Text, { color: "remember", children: "\u2713" }) : null] }, option.id))) }), focused?.description !== undefined ? (_jsx(Text, { dimColor: true, children: focused.description })) : null, _jsx(Text, { dimColor: true, italic: true, children: _jsx(HintLine, { text: t('hint-adjust-done') }) })] }) }));
17
+ }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { Channel } from '../channel.js';
2
+ import type { Channel } from '../dsh-adapter/channel.js';
3
3
  /**
4
4
  * Live goal + todo panel above the prompt input. Data rides on the channel:
5
5
  * `channel.goal` is folded from `goal/change` context events and
@@ -1 +1 @@
1
- {"version":3,"file":"GoalTodoPanel.d.ts","sourceRoot":"","sources":["../../../src/components/GoalTodoPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,eAAe,CAAA;AAwDxE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CA2DhF"}
1
+ {"version":3,"file":"GoalTodoPanel.d.ts","sourceRoot":"","sources":["../../../src/components/GoalTodoPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,2BAA2B,CAAA;AAwDpF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CA2DhF"}
@@ -1,11 +1,14 @@
1
1
  import React from 'react';
2
2
  import type { LocalCommand } from '../commands.js';
3
3
  /**
4
- * The `?` help menu, ported from the leak's `PromptInputHelpMenu.tsx`
4
+ * The `?` help menu, mirroring Claude Code's `PromptInputHelpMenu.tsx`
5
5
  * (three-column shortcut layout, trimmed to the keys dsh-tui actually binds).
6
6
  * The command column lists the merged slash-command surface: built-in
7
7
  * commands plus plugin-registered ones from the DSH registry (plan/goal/…).
8
- * Modifier labels follow the platform convention: ⌘ on macOS, ctrl elsewhere.
8
+ * Skill entries (user-invocable skills merged for `/` completion, issue
9
+ * #86) are hidden — a skills directory can hold dozens of entries and the
10
+ * menu is for chrome commands. Modifier labels follow the platform
11
+ * convention: ⌘ on macOS, ctrl elsewhere.
9
12
  */
10
13
  export declare function HelpMenu({ commands, }: {
11
14
  commands: readonly LocalCommand[];
@@ -1 +1 @@
1
- {"version":3,"file":"HelpMenu.d.ts","sourceRoot":"","sources":["../../../src/components/HelpMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAIlD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAA;CAClC,GAAG,KAAK,CAAC,SAAS,CA6DlB"}
1
+ {"version":3,"file":"HelpMenu.d.ts","sourceRoot":"","sources":["../../../src/components/HelpMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAKlD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAA;CAClC,GAAG,KAAK,CAAC,SAAS,CAiElB"}