@deepseek-harness-tui/dsh-tui 0.5.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 (638) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +235 -0
  3. package/bin/dsh-tui.js +95 -0
  4. package/cordis.patch.yml +218 -0
  5. package/cordis.yml +185 -0
  6. package/lib/invariant.js +28 -0
  7. package/lib/types/activityPrefs.d.ts +29 -0
  8. package/lib/types/activityPrefs.d.ts.map +1 -0
  9. package/lib/types/activityPrefs.js +60 -0
  10. package/lib/types/bootstrap/state.d.ts +13 -0
  11. package/lib/types/bootstrap/state.d.ts.map +1 -0
  12. package/lib/types/bootstrap/state.js +12 -0
  13. package/lib/types/cc/cliHighlight.d.ts +20 -0
  14. package/lib/types/cc/cliHighlight.d.ts.map +1 -0
  15. package/lib/types/cc/cliHighlight.js +53 -0
  16. package/lib/types/cc/figures.d.ts +59 -0
  17. package/lib/types/cc/figures.d.ts.map +1 -0
  18. package/lib/types/cc/figures.js +69 -0
  19. package/lib/types/cc/format.d.ts +26 -0
  20. package/lib/types/cc/format.d.ts.map +1 -0
  21. package/lib/types/cc/format.js +55 -0
  22. package/lib/types/cc/hash.d.ts +25 -0
  23. package/lib/types/cc/hash.d.ts.map +1 -0
  24. package/lib/types/cc/hash.js +41 -0
  25. package/lib/types/cc/hyperlink.d.ts +21 -0
  26. package/lib/types/cc/hyperlink.d.ts.map +1 -0
  27. package/lib/types/cc/hyperlink.js +31 -0
  28. package/lib/types/cc/markdown.d.ts +43 -0
  29. package/lib/types/cc/markdown.d.ts.map +1 -0
  30. package/lib/types/cc/markdown.js +345 -0
  31. package/lib/types/cc/spinnerVerbs.d.ts +3 -0
  32. package/lib/types/cc/spinnerVerbs.d.ts.map +1 -0
  33. package/lib/types/cc/spinnerVerbs.js +190 -0
  34. package/lib/types/cc/terminal.d.ts +15 -0
  35. package/lib/types/cc/terminal.d.ts.map +1 -0
  36. package/lib/types/cc/terminal.js +84 -0
  37. package/lib/types/channel.d.ts +672 -0
  38. package/lib/types/channel.d.ts.map +1 -0
  39. package/lib/types/channel.js +2427 -0
  40. package/lib/types/childStderr.d.ts +63 -0
  41. package/lib/types/childStderr.d.ts.map +1 -0
  42. package/lib/types/childStderr.js +161 -0
  43. package/lib/types/commands.d.ts +55 -0
  44. package/lib/types/commands.d.ts.map +1 -0
  45. package/lib/types/commands.js +101 -0
  46. package/lib/types/components/ActivityLine.d.ts +29 -0
  47. package/lib/types/components/ActivityLine.d.ts.map +1 -0
  48. package/lib/types/components/ActivityLine.js +47 -0
  49. package/lib/types/components/ActivityPicker.d.ts +13 -0
  50. package/lib/types/components/ActivityPicker.d.ts.map +1 -0
  51. package/lib/types/components/ActivityPicker.js +24 -0
  52. package/lib/types/components/CommandSuggestions.d.ts +14 -0
  53. package/lib/types/components/CommandSuggestions.d.ts.map +1 -0
  54. package/lib/types/components/CommandSuggestions.js +33 -0
  55. package/lib/types/components/FileSuggestions.d.ts +12 -0
  56. package/lib/types/components/FileSuggestions.d.ts.map +1 -0
  57. package/lib/types/components/FileSuggestions.js +26 -0
  58. package/lib/types/components/GoalTodoPanel.d.ts +13 -0
  59. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -0
  60. package/lib/types/components/GoalTodoPanel.js +57 -0
  61. package/lib/types/components/HelpMenu.d.ts +12 -0
  62. package/lib/types/components/HelpMenu.d.ts.map +1 -0
  63. package/lib/types/components/HelpMenu.js +12 -0
  64. package/lib/types/components/HistorySearchDialog.d.ts +16 -0
  65. package/lib/types/components/HistorySearchDialog.d.ts.map +1 -0
  66. package/lib/types/components/HistorySearchDialog.js +31 -0
  67. package/lib/types/components/InterruptedByUser.d.ts +7 -0
  68. package/lib/types/components/InterruptedByUser.d.ts.map +1 -0
  69. package/lib/types/components/InterruptedByUser.js +9 -0
  70. package/lib/types/components/LoadedContextPanel.d.ts +20 -0
  71. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -0
  72. package/lib/types/components/LoadedContextPanel.js +30 -0
  73. package/lib/types/components/LogoV2.d.ts +23 -0
  74. package/lib/types/components/LogoV2.d.ts.map +1 -0
  75. package/lib/types/components/LogoV2.js +95 -0
  76. package/lib/types/components/Markdown.d.ts +24 -0
  77. package/lib/types/components/Markdown.d.ts.map +1 -0
  78. package/lib/types/components/Markdown.js +106 -0
  79. package/lib/types/components/MarkdownTable.d.ts +17 -0
  80. package/lib/types/components/MarkdownTable.d.ts.map +1 -0
  81. package/lib/types/components/MarkdownTable.js +272 -0
  82. package/lib/types/components/MessageList.d.ts +41 -0
  83. package/lib/types/components/MessageList.d.ts.map +1 -0
  84. package/lib/types/components/MessageList.js +303 -0
  85. package/lib/types/components/ModelPicker.d.ts +14 -0
  86. package/lib/types/components/ModelPicker.d.ts.map +1 -0
  87. package/lib/types/components/ModelPicker.js +15 -0
  88. package/lib/types/components/PresetPicker.d.ts +17 -0
  89. package/lib/types/components/PresetPicker.d.ts.map +1 -0
  90. package/lib/types/components/PresetPicker.js +25 -0
  91. package/lib/types/components/PromptInput.d.ts +67 -0
  92. package/lib/types/components/PromptInput.d.ts.map +1 -0
  93. package/lib/types/components/PromptInput.js +778 -0
  94. package/lib/types/components/ResumePicker.d.ts +15 -0
  95. package/lib/types/components/ResumePicker.d.ts.map +1 -0
  96. package/lib/types/components/ResumePicker.js +34 -0
  97. package/lib/types/components/RewindPicker.d.ts +14 -0
  98. package/lib/types/components/RewindPicker.d.ts.map +1 -0
  99. package/lib/types/components/RewindPicker.js +23 -0
  100. package/lib/types/components/SearchBox.d.ts +20 -0
  101. package/lib/types/components/SearchBox.d.ts.map +1 -0
  102. package/lib/types/components/SearchBox.js +33 -0
  103. package/lib/types/components/Select.d.ts +22 -0
  104. package/lib/types/components/Select.d.ts.map +1 -0
  105. package/lib/types/components/Select.js +19 -0
  106. package/lib/types/components/Spinner/GlimmerMessage.d.ts +19 -0
  107. package/lib/types/components/Spinner/GlimmerMessage.d.ts.map +1 -0
  108. package/lib/types/components/Spinner/GlimmerMessage.js +78 -0
  109. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts +31 -0
  110. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts.map +1 -0
  111. package/lib/types/components/Spinner/SpinnerAnimationRow.js +162 -0
  112. package/lib/types/components/Spinner/SpinnerGlyph.d.ts +16 -0
  113. package/lib/types/components/Spinner/SpinnerGlyph.d.ts.map +1 -0
  114. package/lib/types/components/Spinner/SpinnerGlyph.js +36 -0
  115. package/lib/types/components/Spinner/spinnerMode.d.ts +6 -0
  116. package/lib/types/components/Spinner/spinnerMode.d.ts.map +1 -0
  117. package/lib/types/components/Spinner/spinnerMode.js +1 -0
  118. package/lib/types/components/Spinner/spinnerUtils.d.ts +41 -0
  119. package/lib/types/components/Spinner/spinnerUtils.d.ts.map +1 -0
  120. package/lib/types/components/Spinner/spinnerUtils.js +104 -0
  121. package/lib/types/components/Spinner/useStalledAnimation.d.ts +16 -0
  122. package/lib/types/components/Spinner/useStalledAnimation.d.ts.map +1 -0
  123. package/lib/types/components/Spinner/useStalledAnimation.js +71 -0
  124. package/lib/types/components/StreamingMarkdown.d.ts +12 -0
  125. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -0
  126. package/lib/types/components/StreamingMarkdown.js +39 -0
  127. package/lib/types/components/ThemePicker.d.ts +22 -0
  128. package/lib/types/components/ThemePicker.d.ts.map +1 -0
  129. package/lib/types/components/ThemePicker.js +51 -0
  130. package/lib/types/components/ThinkingToggle.d.ts +17 -0
  131. package/lib/types/components/ThinkingToggle.d.ts.map +1 -0
  132. package/lib/types/components/ThinkingToggle.js +30 -0
  133. package/lib/types/components/ToolUseLoader.d.ts +13 -0
  134. package/lib/types/components/ToolUseLoader.d.ts.map +1 -0
  135. package/lib/types/components/ToolUseLoader.js +17 -0
  136. package/lib/types/components/Whale.d.ts +22 -0
  137. package/lib/types/components/Whale.d.ts.map +1 -0
  138. package/lib/types/components/Whale.js +78 -0
  139. package/lib/types/components/WorkingSpinner.d.ts +26 -0
  140. package/lib/types/components/WorkingSpinner.d.ts.map +1 -0
  141. package/lib/types/components/WorkingSpinner.js +68 -0
  142. package/lib/types/components/activityFrames.d.ts +31 -0
  143. package/lib/types/components/activityFrames.d.ts.map +1 -0
  144. package/lib/types/components/activityFrames.js +83 -0
  145. package/lib/types/components/bigfont.d.ts +28 -0
  146. package/lib/types/components/bigfont.d.ts.map +1 -0
  147. package/lib/types/components/bigfont.js +91 -0
  148. package/lib/types/components/design-system/Byline.d.ts +14 -0
  149. package/lib/types/components/design-system/Byline.d.ts.map +1 -0
  150. package/lib/types/components/design-system/Byline.js +17 -0
  151. package/lib/types/components/design-system/Divider.d.ts +40 -0
  152. package/lib/types/components/design-system/Divider.d.ts.map +1 -0
  153. package/lib/types/components/design-system/Divider.js +24 -0
  154. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +19 -0
  155. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts.map +1 -0
  156. package/lib/types/components/design-system/KeyboardShortcutHint.js +14 -0
  157. package/lib/types/components/design-system/ListItem.d.ts +36 -0
  158. package/lib/types/components/design-system/ListItem.d.ts.map +1 -0
  159. package/lib/types/components/design-system/ListItem.js +48 -0
  160. package/lib/types/components/design-system/LoadingState.d.ts +19 -0
  161. package/lib/types/components/design-system/LoadingState.d.ts.map +1 -0
  162. package/lib/types/components/design-system/LoadingState.js +22 -0
  163. package/lib/types/components/design-system/Pane.d.ts +17 -0
  164. package/lib/types/components/design-system/Pane.d.ts.map +1 -0
  165. package/lib/types/components/design-system/Pane.js +15 -0
  166. package/lib/types/components/design-system/ProgressBar.d.ts +22 -0
  167. package/lib/types/components/design-system/ProgressBar.d.ts.map +1 -0
  168. package/lib/types/components/design-system/ProgressBar.js +27 -0
  169. package/lib/types/components/design-system/StatusIcon.d.ts +15 -0
  170. package/lib/types/components/design-system/StatusIcon.d.ts.map +1 -0
  171. package/lib/types/components/design-system/StatusIcon.js +20 -0
  172. package/lib/types/components/design-system/ThemeProvider.d.ts +11 -0
  173. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -0
  174. package/lib/types/components/design-system/ThemeProvider.js +135 -0
  175. package/lib/types/components/design-system/ThemedBox.d.ts +37 -0
  176. package/lib/types/components/design-system/ThemedBox.d.ts.map +1 -0
  177. package/lib/types/components/design-system/ThemedBox.js +26 -0
  178. package/lib/types/components/design-system/ThemedText.d.ts +56 -0
  179. package/lib/types/components/design-system/ThemedText.d.ts.map +1 -0
  180. package/lib/types/components/design-system/ThemedText.js +45 -0
  181. package/lib/types/components/messages/AssistantTextMessage.d.ts +18 -0
  182. package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -0
  183. package/lib/types/components/messages/AssistantTextMessage.js +15 -0
  184. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +23 -0
  185. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -0
  186. package/lib/types/components/messages/AssistantThinkingMessage.js +23 -0
  187. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +23 -0
  188. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -0
  189. package/lib/types/components/messages/AssistantToolUseMessage.js +220 -0
  190. package/lib/types/components/messages/MessageMetadata.d.ts +15 -0
  191. package/lib/types/components/messages/MessageMetadata.d.ts.map +1 -0
  192. package/lib/types/components/messages/MessageMetadata.js +20 -0
  193. package/lib/types/components/messages/UserPromptMessage.d.ts +19 -0
  194. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -0
  195. package/lib/types/components/messages/UserPromptMessage.js +15 -0
  196. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +39 -0
  197. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -0
  198. package/lib/types/components/questions/AskUserQuestionPanel.js +228 -0
  199. package/lib/types/components/shimmer.d.ts +35 -0
  200. package/lib/types/components/shimmer.d.ts.map +1 -0
  201. package/lib/types/components/shimmer.js +43 -0
  202. package/lib/types/components/whaleFrames.d.ts +25 -0
  203. package/lib/types/components/whaleFrames.d.ts.map +1 -0
  204. package/lib/types/components/whaleFrames.js +419 -0
  205. package/lib/types/customTheme.d.ts +104 -0
  206. package/lib/types/customTheme.d.ts.map +1 -0
  207. package/lib/types/customTheme.js +268 -0
  208. package/lib/types/effortPrefs.d.ts +22 -0
  209. package/lib/types/effortPrefs.d.ts.map +1 -0
  210. package/lib/types/effortPrefs.js +45 -0
  211. package/lib/types/history.d.ts +24 -0
  212. package/lib/types/history.d.ts.map +1 -0
  213. package/lib/types/history.js +75 -0
  214. package/lib/types/hooks/useBlink.d.ts +11 -0
  215. package/lib/types/hooks/useBlink.d.ts.map +1 -0
  216. package/lib/types/hooks/useBlink.js +20 -0
  217. package/lib/types/i18n.d.ts +926 -0
  218. package/lib/types/i18n.d.ts.map +1 -0
  219. package/lib/types/i18n.js +356 -0
  220. package/lib/types/index.d.ts +70 -0
  221. package/lib/types/index.d.ts.map +1 -0
  222. package/lib/types/index.js +31 -0
  223. package/lib/types/ink/Ansi.d.ts +11 -0
  224. package/lib/types/ink/Ansi.d.ts.map +1 -0
  225. package/lib/types/ink/Ansi.js +269 -0
  226. package/lib/types/ink/bidi.d.ts +18 -0
  227. package/lib/types/ink/bidi.d.ts.map +1 -0
  228. package/lib/types/ink/bidi.js +119 -0
  229. package/lib/types/ink/clearTerminal.d.ts +22 -0
  230. package/lib/types/ink/clearTerminal.d.ts.map +1 -0
  231. package/lib/types/ink/clearTerminal.js +72 -0
  232. package/lib/types/ink/colorize.d.ts +33 -0
  233. package/lib/types/ink/colorize.d.ts.map +1 -0
  234. package/lib/types/ink/colorize.js +213 -0
  235. package/lib/types/ink/components/AlternateScreen.d.ts +22 -0
  236. package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -0
  237. package/lib/types/ink/components/AlternateScreen.js +74 -0
  238. package/lib/types/ink/components/App.d.ts +73 -0
  239. package/lib/types/ink/components/App.d.ts.map +1 -0
  240. package/lib/types/ink/components/App.js +597 -0
  241. package/lib/types/ink/components/AppContext.d.ts +15 -0
  242. package/lib/types/ink/components/AppContext.d.ts.map +1 -0
  243. package/lib/types/ink/components/AppContext.js +11 -0
  244. package/lib/types/ink/components/Box.d.ts +49 -0
  245. package/lib/types/ink/components/Box.d.ts.map +1 -0
  246. package/lib/types/ink/components/Box.js +153 -0
  247. package/lib/types/ink/components/Button.d.ts +37 -0
  248. package/lib/types/ink/components/Button.d.ts.map +1 -0
  249. package/lib/types/ink/components/Button.js +166 -0
  250. package/lib/types/ink/components/ClockContext.d.ts +10 -0
  251. package/lib/types/ink/components/ClockContext.d.ts.map +1 -0
  252. package/lib/types/ink/components/ClockContext.js +108 -0
  253. package/lib/types/ink/components/CursorDeclarationContext.d.ts +30 -0
  254. package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -0
  255. package/lib/types/ink/components/CursorDeclarationContext.js +6 -0
  256. package/lib/types/ink/components/ErrorOverview.d.ts +7 -0
  257. package/lib/types/ink/components/ErrorOverview.d.ts.map +1 -0
  258. package/lib/types/ink/components/ErrorOverview.js +49 -0
  259. package/lib/types/ink/components/Link.d.ts +8 -0
  260. package/lib/types/ink/components/Link.d.ts.map +1 -0
  261. package/lib/types/ink/components/Link.js +33 -0
  262. package/lib/types/ink/components/Newline.d.ts +13 -0
  263. package/lib/types/ink/components/Newline.d.ts.map +1 -0
  264. package/lib/types/ink/components/Newline.js +29 -0
  265. package/lib/types/ink/components/NoSelect.d.ts +20 -0
  266. package/lib/types/ink/components/NoSelect.d.ts.map +1 -0
  267. package/lib/types/ink/components/NoSelect.js +56 -0
  268. package/lib/types/ink/components/RawAnsi.d.ts +17 -0
  269. package/lib/types/ink/components/RawAnsi.d.ts.map +1 -0
  270. package/lib/types/ink/components/RawAnsi.js +45 -0
  271. package/lib/types/ink/components/ScrollBox.d.ts +78 -0
  272. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -0
  273. package/lib/types/ink/components/ScrollBox.js +174 -0
  274. package/lib/types/ink/components/Spacer.d.ts +6 -0
  275. package/lib/types/ink/components/Spacer.d.ts.map +1 -0
  276. package/lib/types/ink/components/Spacer.js +19 -0
  277. package/lib/types/ink/components/StdinContext.d.ts +32 -0
  278. package/lib/types/ink/components/StdinContext.d.ts.map +1 -0
  279. package/lib/types/ink/components/StdinContext.js +16 -0
  280. package/lib/types/ink/components/TerminalFocusContext.d.ts +11 -0
  281. package/lib/types/ink/components/TerminalFocusContext.d.ts.map +1 -0
  282. package/lib/types/ink/components/TerminalFocusContext.js +45 -0
  283. package/lib/types/ink/components/TerminalSizeContext.d.ts +6 -0
  284. package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -0
  285. package/lib/types/ink/components/TerminalSizeContext.js +3 -0
  286. package/lib/types/ink/components/Text.d.ts +56 -0
  287. package/lib/types/ink/components/Text.d.ts.map +1 -0
  288. package/lib/types/ink/components/Text.js +194 -0
  289. package/lib/types/ink/constants.d.ts +3 -0
  290. package/lib/types/ink/constants.d.ts.map +1 -0
  291. package/lib/types/ink/constants.js +2 -0
  292. package/lib/types/ink/cursor.d.ts +11 -0
  293. package/lib/types/ink/cursor.d.ts.map +1 -0
  294. package/lib/types/ink/cursor.js +1 -0
  295. package/lib/types/ink/devtools.d.ts +7 -0
  296. package/lib/types/ink/devtools.d.ts.map +1 -0
  297. package/lib/types/ink/devtools.js +1 -0
  298. package/lib/types/ink/dom.d.ts +178 -0
  299. package/lib/types/ink/dom.d.ts.map +1 -0
  300. package/lib/types/ink/dom.js +424 -0
  301. package/lib/types/ink/events/click-event.d.ts +32 -0
  302. package/lib/types/ink/events/click-event.d.ts.map +1 -0
  303. package/lib/types/ink/events/click-event.js +36 -0
  304. package/lib/types/ink/events/dispatcher.d.ts +63 -0
  305. package/lib/types/ink/events/dispatcher.d.ts.map +1 -0
  306. package/lib/types/ink/events/dispatcher.js +194 -0
  307. package/lib/types/ink/events/emitter.d.ts +20 -0
  308. package/lib/types/ink/events/emitter.d.ts.map +1 -0
  309. package/lib/types/ink/events/emitter.js +43 -0
  310. package/lib/types/ink/events/event-handlers.d.ts +47 -0
  311. package/lib/types/ink/events/event-handlers.d.ts.map +1 -0
  312. package/lib/types/ink/events/event-handlers.js +30 -0
  313. package/lib/types/ink/events/event.d.ts +19 -0
  314. package/lib/types/ink/events/event.d.ts.map +1 -0
  315. package/lib/types/ink/events/event.js +22 -0
  316. package/lib/types/ink/events/focus-event.d.ts +19 -0
  317. package/lib/types/ink/events/focus-event.d.ts.map +1 -0
  318. package/lib/types/ink/events/focus-event.js +21 -0
  319. package/lib/types/ink/events/input-event.d.ts +53 -0
  320. package/lib/types/ink/events/input-event.d.ts.map +1 -0
  321. package/lib/types/ink/events/input-event.js +180 -0
  322. package/lib/types/ink/events/keyboard-event.d.ts +40 -0
  323. package/lib/types/ink/events/keyboard-event.d.ts.map +1 -0
  324. package/lib/types/ink/events/keyboard-event.js +65 -0
  325. package/lib/types/ink/events/paste-event.d.ts +11 -0
  326. package/lib/types/ink/events/paste-event.d.ts.map +1 -0
  327. package/lib/types/ink/events/paste-event.js +13 -0
  328. package/lib/types/ink/events/resize-event.d.ts +13 -0
  329. package/lib/types/ink/events/resize-event.d.ts.map +1 -0
  330. package/lib/types/ink/events/resize-event.js +16 -0
  331. package/lib/types/ink/events/terminal-event.d.ts +112 -0
  332. package/lib/types/ink/events/terminal-event.d.ts.map +1 -0
  333. package/lib/types/ink/events/terminal-event.js +131 -0
  334. package/lib/types/ink/events/terminal-focus-event.d.ts +21 -0
  335. package/lib/types/ink/events/terminal-focus-event.d.ts.map +1 -0
  336. package/lib/types/ink/events/terminal-focus-event.js +18 -0
  337. package/lib/types/ink/focus.d.ts +74 -0
  338. package/lib/types/ink/focus.d.ts.map +1 -0
  339. package/lib/types/ink/focus.js +188 -0
  340. package/lib/types/ink/frame.d.ts +119 -0
  341. package/lib/types/ink/frame.d.ts.map +1 -0
  342. package/lib/types/ink/frame.js +43 -0
  343. package/lib/types/ink/get-max-width.d.ts +20 -0
  344. package/lib/types/ink/get-max-width.d.ts.map +1 -0
  345. package/lib/types/ink/get-max-width.js +25 -0
  346. package/lib/types/ink/hit-test.d.ts +47 -0
  347. package/lib/types/ink/hit-test.d.ts.map +1 -0
  348. package/lib/types/ink/hit-test.js +126 -0
  349. package/lib/types/ink/hooks/use-animation-frame.d.ts +27 -0
  350. package/lib/types/ink/hooks/use-animation-frame.d.ts.map +1 -0
  351. package/lib/types/ink/hooks/use-animation-frame.js +48 -0
  352. package/lib/types/ink/hooks/use-app.d.ts +8 -0
  353. package/lib/types/ink/hooks/use-app.d.ts.map +1 -0
  354. package/lib/types/ink/hooks/use-app.js +8 -0
  355. package/lib/types/ink/hooks/use-copy-on-select.d.ts +22 -0
  356. package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -0
  357. package/lib/types/ink/hooks/use-copy-on-select.js +40 -0
  358. package/lib/types/ink/hooks/use-declared-cursor.d.ts +31 -0
  359. package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -0
  360. package/lib/types/ink/hooks/use-declared-cursor.js +65 -0
  361. package/lib/types/ink/hooks/use-input.d.ts +41 -0
  362. package/lib/types/ink/hooks/use-input.d.ts.map +1 -0
  363. package/lib/types/ink/hooks/use-input.js +73 -0
  364. package/lib/types/ink/hooks/use-interval.d.ts +23 -0
  365. package/lib/types/ink/hooks/use-interval.d.ts.map +1 -0
  366. package/lib/types/ink/hooks/use-interval.js +58 -0
  367. package/lib/types/ink/hooks/use-search-highlight.d.ts +34 -0
  368. package/lib/types/ink/hooks/use-search-highlight.d.ts.map +1 -0
  369. package/lib/types/ink/hooks/use-search-highlight.js +35 -0
  370. package/lib/types/ink/hooks/use-selection.d.ts +44 -0
  371. package/lib/types/ink/hooks/use-selection.d.ts.map +1 -0
  372. package/lib/types/ink/hooks/use-selection.js +64 -0
  373. package/lib/types/ink/hooks/use-stdin.d.ts +8 -0
  374. package/lib/types/ink/hooks/use-stdin.d.ts.map +1 -0
  375. package/lib/types/ink/hooks/use-stdin.js +8 -0
  376. package/lib/types/ink/hooks/use-tab-status.d.ts +18 -0
  377. package/lib/types/ink/hooks/use-tab-status.d.ts.map +1 -0
  378. package/lib/types/ink/hooks/use-tab-status.js +58 -0
  379. package/lib/types/ink/hooks/use-terminal-focus.d.ts +11 -0
  380. package/lib/types/ink/hooks/use-terminal-focus.d.ts.map +1 -0
  381. package/lib/types/ink/hooks/use-terminal-focus.js +15 -0
  382. package/lib/types/ink/hooks/use-terminal-size.d.ts +6 -0
  383. package/lib/types/ink/hooks/use-terminal-size.d.ts.map +1 -0
  384. package/lib/types/ink/hooks/use-terminal-size.js +12 -0
  385. package/lib/types/ink/hooks/use-terminal-title.d.ts +14 -0
  386. package/lib/types/ink/hooks/use-terminal-title.d.ts.map +1 -0
  387. package/lib/types/ink/hooks/use-terminal-title.js +30 -0
  388. package/lib/types/ink/hooks/use-terminal-viewport.d.ts +32 -0
  389. package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -0
  390. package/lib/types/ink/hooks/use-terminal-viewport.js +79 -0
  391. package/lib/types/ink/ink.d.ts +370 -0
  392. package/lib/types/ink/ink.d.ts.map +1 -0
  393. package/lib/types/ink/ink.js +1665 -0
  394. package/lib/types/ink/instances.d.ts +10 -0
  395. package/lib/types/ink/instances.d.ts.map +1 -0
  396. package/lib/types/ink/instances.js +13 -0
  397. package/lib/types/ink/layout/engine.d.ts +7 -0
  398. package/lib/types/ink/layout/engine.d.ts.map +1 -0
  399. package/lib/types/ink/layout/engine.js +8 -0
  400. package/lib/types/ink/layout/geometry.d.ts +86 -0
  401. package/lib/types/ink/layout/geometry.d.ts.map +1 -0
  402. package/lib/types/ink/layout/geometry.js +95 -0
  403. package/lib/types/ink/layout/node.d.ts +151 -0
  404. package/lib/types/ink/layout/node.d.ts.map +1 -0
  405. package/lib/types/ink/layout/node.js +72 -0
  406. package/lib/types/ink/layout/yoga.d.ts +69 -0
  407. package/lib/types/ink/layout/yoga.d.ts.map +1 -0
  408. package/lib/types/ink/layout/yoga.js +249 -0
  409. package/lib/types/ink/line-width-cache.d.ts +9 -0
  410. package/lib/types/ink/line-width-cache.d.ts.map +1 -0
  411. package/lib/types/ink/line-width-cache.js +45 -0
  412. package/lib/types/ink/log-update.d.ts +57 -0
  413. package/lib/types/ink/log-update.d.ts.map +1 -0
  414. package/lib/types/ink/log-update.js +710 -0
  415. package/lib/types/ink/measure-element.d.ts +19 -0
  416. package/lib/types/ink/measure-element.d.ts.map +1 -0
  417. package/lib/types/ink/measure-element.js +10 -0
  418. package/lib/types/ink/measure-text.d.ts +13 -0
  419. package/lib/types/ink/measure-text.d.ts.map +1 -0
  420. package/lib/types/ink/measure-text.js +38 -0
  421. package/lib/types/ink/node-cache.d.ts +33 -0
  422. package/lib/types/ink/node-cache.d.ts.map +1 -0
  423. package/lib/types/ink/node-cache.js +42 -0
  424. package/lib/types/ink/optimizer.d.ts +18 -0
  425. package/lib/types/ink/optimizer.d.ts.map +1 -0
  426. package/lib/types/ink/optimizer.js +83 -0
  427. package/lib/types/ink/output.d.ts +200 -0
  428. package/lib/types/ink/output.d.ts.map +1 -0
  429. package/lib/types/ink/output.js +663 -0
  430. package/lib/types/ink/parse-keypress.d.ts +132 -0
  431. package/lib/types/ink/parse-keypress.d.ts.map +1 -0
  432. package/lib/types/ink/parse-keypress.js +707 -0
  433. package/lib/types/ink/reconciler.d.ts +43 -0
  434. package/lib/types/ink/reconciler.d.ts.map +1 -0
  435. package/lib/types/ink/reconciler.js +413 -0
  436. package/lib/types/ink/render-border.d.ts +36 -0
  437. package/lib/types/ink/render-border.d.ts.map +1 -0
  438. package/lib/types/ink/render-border.js +143 -0
  439. package/lib/types/ink/render-node-to-output.d.ts +93 -0
  440. package/lib/types/ink/render-node-to-output.d.ts.map +1 -0
  441. package/lib/types/ink/render-node-to-output.js +1290 -0
  442. package/lib/types/ink/render-to-screen.d.ts +65 -0
  443. package/lib/types/ink/render-to-screen.d.ts.map +1 -0
  444. package/lib/types/ink/render-to-screen.js +189 -0
  445. package/lib/types/ink/renderer.d.ts +24 -0
  446. package/lib/types/ink/renderer.d.ts.map +1 -0
  447. package/lib/types/ink/renderer.js +136 -0
  448. package/lib/types/ink/root.d.ts +91 -0
  449. package/lib/types/ink/root.d.ts.map +1 -0
  450. package/lib/types/ink/root.js +93 -0
  451. package/lib/types/ink/screen.d.ts +443 -0
  452. package/lib/types/ink/screen.d.ts.map +1 -0
  453. package/lib/types/ink/screen.js +1295 -0
  454. package/lib/types/ink/searchHighlight.d.ts +25 -0
  455. package/lib/types/ink/searchHighlight.d.ts.map +1 -0
  456. package/lib/types/ink/searchHighlight.js +82 -0
  457. package/lib/types/ink/selection.d.ts +323 -0
  458. package/lib/types/ink/selection.d.ts.map +1 -0
  459. package/lib/types/ink/selection.js +881 -0
  460. package/lib/types/ink/squash-text-nodes.d.ts +30 -0
  461. package/lib/types/ink/squash-text-nodes.d.ts.map +1 -0
  462. package/lib/types/ink/squash-text-nodes.js +63 -0
  463. package/lib/types/ink/stringWidth.d.ts +11 -0
  464. package/lib/types/ink/stringWidth.d.ts.map +1 -0
  465. package/lib/types/ink/stringWidth.js +209 -0
  466. package/lib/types/ink/styles.d.ts +324 -0
  467. package/lib/types/ink/styles.d.ts.map +1 -0
  468. package/lib/types/ink/styles.js +307 -0
  469. package/lib/types/ink/supports-hyperlinks.d.ts +20 -0
  470. package/lib/types/ink/supports-hyperlinks.d.ts.map +1 -0
  471. package/lib/types/ink/supports-hyperlinks.js +44 -0
  472. package/lib/types/ink/tabstops.d.ts +9 -0
  473. package/lib/types/ink/tabstops.d.ts.map +1 -0
  474. package/lib/types/ink/tabstops.js +46 -0
  475. package/lib/types/ink/terminal-focus-state.d.ts +35 -0
  476. package/lib/types/ink/terminal-focus-state.d.ts.map +1 -0
  477. package/lib/types/ink/terminal-focus-state.js +57 -0
  478. package/lib/types/ink/terminal-querier.d.ts +161 -0
  479. package/lib/types/ink/terminal-querier.d.ts.map +1 -0
  480. package/lib/types/ink/terminal-querier.js +204 -0
  481. package/lib/types/ink/terminal.d.ts +80 -0
  482. package/lib/types/ink/terminal.d.ts.map +1 -0
  483. package/lib/types/ink/terminal.js +268 -0
  484. package/lib/types/ink/termio/ansi.d.ts +75 -0
  485. package/lib/types/ink/termio/ansi.d.ts.map +1 -0
  486. package/lib/types/ink/termio/ansi.js +79 -0
  487. package/lib/types/ink/termio/csi.d.ts +253 -0
  488. package/lib/types/ink/termio/csi.d.ts.map +1 -0
  489. package/lib/types/ink/termio/csi.js +347 -0
  490. package/lib/types/ink/termio/dec.d.ts +61 -0
  491. package/lib/types/ink/termio/dec.d.ts.map +1 -0
  492. package/lib/types/ink/termio/dec.js +76 -0
  493. package/lib/types/ink/termio/esc.d.ts +15 -0
  494. package/lib/types/ink/termio/esc.d.ts.map +1 -0
  495. package/lib/types/ink/termio/esc.js +57 -0
  496. package/lib/types/ink/termio/osc.d.ts +208 -0
  497. package/lib/types/ink/termio/osc.d.ts.map +1 -0
  498. package/lib/types/ink/termio/osc.js +466 -0
  499. package/lib/types/ink/termio/parser.d.ts +46 -0
  500. package/lib/types/ink/termio/parser.d.ts.map +1 -0
  501. package/lib/types/ink/termio/parser.js +366 -0
  502. package/lib/types/ink/termio/sgr.d.ts +17 -0
  503. package/lib/types/ink/termio/sgr.d.ts.map +1 -0
  504. package/lib/types/ink/termio/sgr.js +300 -0
  505. package/lib/types/ink/termio/tokenize.d.ts +50 -0
  506. package/lib/types/ink/termio/tokenize.d.ts.map +1 -0
  507. package/lib/types/ink/termio/tokenize.js +266 -0
  508. package/lib/types/ink/termio/types.d.ts +211 -0
  509. package/lib/types/ink/termio/types.d.ts.map +1 -0
  510. package/lib/types/ink/termio/types.js +68 -0
  511. package/lib/types/ink/termio.d.ts +25 -0
  512. package/lib/types/ink/termio.d.ts.map +1 -0
  513. package/lib/types/ink/termio.js +24 -0
  514. package/lib/types/ink/truncateToWidth.d.ts +7 -0
  515. package/lib/types/ink/truncateToWidth.d.ts.map +1 -0
  516. package/lib/types/ink/truncateToWidth.js +18 -0
  517. package/lib/types/ink/useTerminalNotification.d.ts +45 -0
  518. package/lib/types/ink/useTerminalNotification.d.ts.map +1 -0
  519. package/lib/types/ink/useTerminalNotification.js +70 -0
  520. package/lib/types/ink/warn.d.ts +7 -0
  521. package/lib/types/ink/warn.d.ts.map +1 -0
  522. package/lib/types/ink/warn.js +15 -0
  523. package/lib/types/ink/widest-line.d.ts +7 -0
  524. package/lib/types/ink/widest-line.d.ts.map +1 -0
  525. package/lib/types/ink/widest-line.js +19 -0
  526. package/lib/types/ink/wrap-text.d.ts +10 -0
  527. package/lib/types/ink/wrap-text.d.ts.map +1 -0
  528. package/lib/types/ink/wrap-text.js +61 -0
  529. package/lib/types/ink/wrapAnsi.d.ts +18 -0
  530. package/lib/types/ink/wrapAnsi.d.ts.map +1 -0
  531. package/lib/types/ink/wrapAnsi.js +16 -0
  532. package/lib/types/invariant.d.ts +20 -0
  533. package/lib/types/invariant.d.ts.map +1 -0
  534. package/lib/types/invariant.js +26 -0
  535. package/lib/types/modelPrefs.d.ts +37 -0
  536. package/lib/types/modelPrefs.d.ts.map +1 -0
  537. package/lib/types/modelPrefs.js +66 -0
  538. package/lib/types/modelRoute.d.ts +79 -0
  539. package/lib/types/modelRoute.d.ts.map +1 -0
  540. package/lib/types/modelRoute.js +96 -0
  541. package/lib/types/native-ts/yoga-layout/enums.d.ts +183 -0
  542. package/lib/types/native-ts/yoga-layout/enums.d.ts.map +1 -0
  543. package/lib/types/native-ts/yoga-layout/enums.js +150 -0
  544. package/lib/types/native-ts/yoga-layout/index.d.ts +788 -0
  545. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -0
  546. package/lib/types/native-ts/yoga-layout/index.js +2571 -0
  547. package/lib/types/packaged-skills.d.ts +10 -0
  548. package/lib/types/packaged-skills.d.ts.map +1 -0
  549. package/lib/types/packaged-skills.js +63 -0
  550. package/lib/types/plugin.d.ts +33 -0
  551. package/lib/types/plugin.d.ts.map +1 -0
  552. package/lib/types/plugin.js +454 -0
  553. package/lib/types/presetPrefs.d.ts +29 -0
  554. package/lib/types/presetPrefs.d.ts.map +1 -0
  555. package/lib/types/presetPrefs.js +61 -0
  556. package/lib/types/presets.d.ts +110 -0
  557. package/lib/types/presets.d.ts.map +1 -0
  558. package/lib/types/presets.js +114 -0
  559. package/lib/types/questions.d.ts +97 -0
  560. package/lib/types/questions.d.ts.map +1 -0
  561. package/lib/types/questions.js +201 -0
  562. package/lib/types/screens/Chat.d.ts +23 -0
  563. package/lib/types/screens/Chat.d.ts.map +1 -0
  564. package/lib/types/screens/Chat.js +1263 -0
  565. package/lib/types/screens/StatusLine.d.ts +16 -0
  566. package/lib/types/screens/StatusLine.d.ts.map +1 -0
  567. package/lib/types/screens/StatusLine.js +105 -0
  568. package/lib/types/screens/StatusMetrics.d.ts +87 -0
  569. package/lib/types/screens/StatusMetrics.d.ts.map +1 -0
  570. package/lib/types/screens/StatusMetrics.js +252 -0
  571. package/lib/types/sessionHistory.d.ts +32 -0
  572. package/lib/types/sessionHistory.d.ts.map +1 -0
  573. package/lib/types/sessionHistory.js +87 -0
  574. package/lib/types/theme.d.ts +115 -0
  575. package/lib/types/theme.d.ts.map +1 -0
  576. package/lib/types/theme.js +300 -0
  577. package/lib/types/themePrefs.d.ts +28 -0
  578. package/lib/types/themePrefs.d.ts.map +1 -0
  579. package/lib/types/themePrefs.js +59 -0
  580. package/lib/types/ui.d.ts +28 -0
  581. package/lib/types/ui.d.ts.map +1 -0
  582. package/lib/types/ui.js +25 -0
  583. package/lib/types/update.d.ts +76 -0
  584. package/lib/types/update.d.ts.map +1 -0
  585. package/lib/types/update.js +203 -0
  586. package/lib/types/utils/clipboard.d.ts +43 -0
  587. package/lib/types/utils/clipboard.d.ts.map +1 -0
  588. package/lib/types/utils/clipboard.js +82 -0
  589. package/lib/types/utils/debug.d.ts +8 -0
  590. package/lib/types/utils/debug.d.ts.map +1 -0
  591. package/lib/types/utils/debug.js +12 -0
  592. package/lib/types/utils/earlyInput.d.ts +7 -0
  593. package/lib/types/utils/earlyInput.d.ts.map +1 -0
  594. package/lib/types/utils/earlyInput.js +6 -0
  595. package/lib/types/utils/env.d.ts +10 -0
  596. package/lib/types/utils/env.d.ts.map +1 -0
  597. package/lib/types/utils/env.js +9 -0
  598. package/lib/types/utils/envUtils.d.ts +8 -0
  599. package/lib/types/utils/envUtils.d.ts.map +1 -0
  600. package/lib/types/utils/envUtils.js +13 -0
  601. package/lib/types/utils/execFileNoThrow.d.ts +34 -0
  602. package/lib/types/utils/execFileNoThrow.d.ts.map +1 -0
  603. package/lib/types/utils/execFileNoThrow.js +31 -0
  604. package/lib/types/utils/fullscreen.d.ts +8 -0
  605. package/lib/types/utils/fullscreen.d.ts.map +1 -0
  606. package/lib/types/utils/fullscreen.js +10 -0
  607. package/lib/types/utils/intl.d.ts +7 -0
  608. package/lib/types/utils/intl.d.ts.map +1 -0
  609. package/lib/types/utils/intl.js +9 -0
  610. package/lib/types/utils/loaded-context.d.ts +20 -0
  611. package/lib/types/utils/loaded-context.d.ts.map +1 -0
  612. package/lib/types/utils/loaded-context.js +36 -0
  613. package/lib/types/utils/log.d.ts +7 -0
  614. package/lib/types/utils/log.d.ts.map +1 -0
  615. package/lib/types/utils/log.js +9 -0
  616. package/lib/types/utils/mentions.d.ts +30 -0
  617. package/lib/types/utils/mentions.d.ts.map +1 -0
  618. package/lib/types/utils/mentions.js +72 -0
  619. package/lib/types/utils/narration.d.ts +11 -0
  620. package/lib/types/utils/narration.d.ts.map +1 -0
  621. package/lib/types/utils/narration.js +16 -0
  622. package/lib/types/utils/semver.d.ts +9 -0
  623. package/lib/types/utils/semver.d.ts.map +1 -0
  624. package/lib/types/utils/semver.js +24 -0
  625. package/lib/types/utils/sliceAnsi.d.ts +12 -0
  626. package/lib/types/utils/sliceAnsi.d.ts.map +1 -0
  627. package/lib/types/utils/sliceAnsi.js +79 -0
  628. package/lib/types/working-activity.d.ts +19 -0
  629. package/lib/types/working-activity.d.ts.map +1 -0
  630. package/lib/types/working-activity.js +18 -0
  631. package/package.json +141 -0
  632. package/skills/audit/SKILL.md +24 -0
  633. package/skills/bug/SKILL.md +27 -0
  634. package/skills/pr-comments/SKILL.md +20 -0
  635. package/skills/practice/SKILL.md +22 -0
  636. package/skills/release-notes/SKILL.md +25 -0
  637. package/skills/review/SKILL.md +25 -0
  638. package/skills/vuln-check/SKILL.md +25 -0
@@ -0,0 +1,203 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { readFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { gt, valid } from 'semver';
7
+ const PACKAGE_NAME = '@deepseek-harness-tui/dsh-tui';
8
+ const DEFAULT_REGISTRY = 'https://registry.npmjs.org';
9
+ const UPDATE_CHECK_TIMEOUT_MS = 4000;
10
+ /** env marker set on the /update restart; the new process verifies it at boot. */
11
+ const UPDATED_FROM_ENV = 'DSH_CC_UPDATED_FROM';
12
+ /** Read the version from either the compiled package or the source checkout. */
13
+ export function installedTuiVersion() {
14
+ const here = dirname(fileURLToPath(import.meta.url));
15
+ for (const relativePath of ['../../package.json', '../package.json']) {
16
+ try {
17
+ const parsed = JSON.parse(readFileSync(join(here, relativePath), 'utf8'));
18
+ if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {
19
+ const packageJson = parsed;
20
+ const version = packageJson.version;
21
+ if (packageJson.name === PACKAGE_NAME && typeof version === 'string' && valid(version) !== null) {
22
+ return version;
23
+ }
24
+ }
25
+ }
26
+ catch {
27
+ // Try the source-layout fallback after the compiled-layout path.
28
+ }
29
+ }
30
+ return undefined;
31
+ }
32
+ /**
33
+ * The profile this TUI was booted with (`dsh --profile <name>`), read from
34
+ * the launcher argv the process inherited. dsh sets no profile env var, and
35
+ * its launcher parses its own flags first, so the first `--profile` token in
36
+ * argv is the launcher's. Undefined for non-profile launches (source
37
+ * checkouts, `--config` overlays) — there is no profile installation for
38
+ * `/update` to act on, so the command must stay disabled there.
39
+ */
40
+ export function resolveDshProfileName(argv = process.argv) {
41
+ for (let i = 0; i < argv.length; i++) {
42
+ const arg = argv[i];
43
+ if (arg === '--profile') {
44
+ const value = argv[i + 1];
45
+ return value !== undefined && value !== '' && !value.startsWith('-') ? value : undefined;
46
+ }
47
+ if (arg.startsWith('--profile=')) {
48
+ const value = arg.slice('--profile='.length);
49
+ return value !== '' ? value : undefined;
50
+ }
51
+ }
52
+ return undefined;
53
+ }
54
+ /**
55
+ * Resolve the registry base URL the way npm/pnpm would: `NPM_CONFIG_REGISTRY`
56
+ * (both spellings) over the `registry=` line in ~/.npmrc over npmjs.org, so
57
+ * mirror users see the same `latest` their package manager would install.
58
+ */
59
+ export function resolveRegistryBase() {
60
+ const fromEnv = process.env.NPM_CONFIG_REGISTRY ?? process.env.npm_config_registry;
61
+ if (fromEnv !== undefined && fromEnv !== '')
62
+ return fromEnv.replace(/\/+$/, '');
63
+ try {
64
+ const npmrc = readFileSync(join(homedir(), '.npmrc'), 'utf8');
65
+ const match = /^\s*registry\s*=\s*(\S+)\s*$/m.exec(npmrc);
66
+ if (match !== null)
67
+ return match[1].replace(/\/+$/, '');
68
+ }
69
+ catch {
70
+ // No readable user .npmrc — the default registry applies.
71
+ }
72
+ return DEFAULT_REGISTRY;
73
+ }
74
+ /** True when `current` is a strictly newer valid version than `previous`. */
75
+ export function isVersionNewer(current, previous) {
76
+ const a = valid(current);
77
+ const b = valid(previous);
78
+ return a !== null && b !== null && gt(a, b);
79
+ }
80
+ function isRecord(value) {
81
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
82
+ }
83
+ /** Fetch `latest` from the configured registry; undefined on any failure. */
84
+ async function fetchLatestVersion() {
85
+ const controller = new AbortController();
86
+ const timeout = setTimeout(() => controller.abort(), UPDATE_CHECK_TIMEOUT_MS);
87
+ try {
88
+ const response = await fetch(`${resolveRegistryBase()}/${PACKAGE_NAME}/latest`, {
89
+ headers: { accept: 'application/json' },
90
+ signal: controller.signal,
91
+ });
92
+ if (!response.ok)
93
+ return undefined;
94
+ const payload = await response.json();
95
+ const latest = isRecord(payload) && typeof payload.version === 'string'
96
+ ? valid(payload.version)
97
+ : null;
98
+ return latest ?? undefined;
99
+ }
100
+ catch {
101
+ return undefined;
102
+ }
103
+ finally {
104
+ clearTimeout(timeout);
105
+ }
106
+ }
107
+ /**
108
+ * Classify this install against a fresh registry lookup: an update is
109
+ * available, the install is already latest, or the answer is unknown
110
+ * (offline / registry error / unreadable own version).
111
+ */
112
+ export async function resolveTuiUpdateTarget() {
113
+ const current = installedTuiVersion();
114
+ const currentVersion = current === undefined ? null : valid(current);
115
+ if (currentVersion === null)
116
+ return { kind: 'unknown' };
117
+ const latest = await fetchLatestVersion();
118
+ if (latest === undefined)
119
+ return { kind: 'unknown' };
120
+ if (!gt(latest, currentVersion))
121
+ return { kind: 'latest', current: currentVersion };
122
+ return { kind: 'update', current: currentVersion, latest };
123
+ }
124
+ /**
125
+ * Check npm for a newer published TUI version. Network and registry errors
126
+ * are intentionally treated as "no result" so an offline launch never delays
127
+ * or blocks the interactive TUI.
128
+ */
129
+ export async function checkForTuiUpdate() {
130
+ const target = await resolveTuiUpdateTarget();
131
+ return target.kind === 'update' ? { current: target.current, latest: target.latest } : undefined;
132
+ }
133
+ /** cmd.exe joins spawn arguments with spaces; quote anything that could split. */
134
+ export function shellQuote(args) {
135
+ return args.map(arg => (/[ \t"^&|<>()]/.test(arg) ? `"${arg.replace(/"/g, '""')}"` : arg));
136
+ }
137
+ /**
138
+ * Run a child process with its output attached to the user's terminal. The
139
+ * shell is opt-in per call: `dsh.cmd` needs it, but the node restart must
140
+ * never go through cmd.exe — the standard install path
141
+ * `C:\Program Files\nodejs\node.exe` splits on the space and the replacement
142
+ * process never starts, leaving an updated package and a dead TUI.
143
+ */
144
+ function runProcess(command, args, options = {}) {
145
+ return new Promise(resolve => {
146
+ let settled = false;
147
+ const useShell = options.shell === true && process.platform === 'win32';
148
+ const child = spawn(command, useShell ? shellQuote(args) : args, {
149
+ env: options.env,
150
+ stdio: 'inherit',
151
+ shell: useShell,
152
+ });
153
+ const finish = (code) => {
154
+ if (settled)
155
+ return;
156
+ settled = true;
157
+ resolve(code);
158
+ };
159
+ child.once('error', error => {
160
+ process.stderr.write(`dsh-tui: failed to run ${command}: ${error.message}\n`);
161
+ finish(127);
162
+ });
163
+ child.once('close', code => finish(code ?? 1));
164
+ });
165
+ }
166
+ /**
167
+ * Update the installed dsh-tui package and restart the same launcher while
168
+ * preserving the active session. The TUI must already be unmounted before
169
+ * this is called so pnpm output cannot corrupt the rendered terminal frame.
170
+ *
171
+ * `--latest` is required: `pnpm add` writes a caret range into the profile
172
+ * manifest, and a plain `pnpm update` stays inside that range — with this
173
+ * project's minor-per-release cadence the TUI would restart unchanged while
174
+ * reporting success. The restart carries `DSH_CC_UPDATED_FROM` so the new
175
+ * process can warn when the version did not actually move (e.g. a mirror
176
+ * registry still serving the old `latest`).
177
+ *
178
+ * @param sessionId - Session to resume in the replacement process.
179
+ * @param profile - The dsh profile this TUI was launched with; updating any
180
+ * other profile would leave the running install untouched.
181
+ * @returns Exit codes for the update run and the replacement process.
182
+ */
183
+ export async function updateTuiAndRestart(sessionId, profile) {
184
+ const dsh = process.platform === 'win32' ? 'dsh.cmd' : 'dsh';
185
+ const updateCode = await runProcess(dsh, [
186
+ 'plugin',
187
+ '--profile',
188
+ profile,
189
+ 'update',
190
+ '--latest',
191
+ PACKAGE_NAME,
192
+ ], { shell: true });
193
+ if (updateCode !== 0)
194
+ return { updateCode, restartCode: updateCode };
195
+ const restartCode = await runProcess(process.execPath, [...process.execArgv, ...process.argv.slice(1)], {
196
+ env: {
197
+ ...process.env,
198
+ DSH_CC_RESUME_SESSION: sessionId,
199
+ [UPDATED_FROM_ENV]: installedTuiVersion() ?? '',
200
+ },
201
+ });
202
+ return { updateCode, restartCode };
203
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Windows clipboard access for Ctrl+V paste. The TUI runs in raw mode, so
3
+ * the console never performs its own paste for Ctrl+V — the key arrives at
4
+ * the app and the clipboard is read here. PowerShell `Get-Clipboard` is the
5
+ * zero-dependency route: file drops (Explorer copy) come back as a
6
+ * FileDropList (the user pastes a file → insert its path), anything else
7
+ * comes back as text. Text is base64-encoded on the PowerShell side so the
8
+ * line-oriented stdout parse survives multi-line clipboard content (a raw
9
+ * write would put every line on its own output line and drop all but the
10
+ * first); CJK survives because base64 is pure ASCII.
11
+ */
12
+ /**
13
+ * Read the Windows clipboard: file paths when Explorer copied files,
14
+ * otherwise the plain text. Returns null when the clipboard holds neither.
15
+ * Clipboard access is retried — another process (e.g. Explorer) briefly
16
+ * holding the clipboard open makes OpenClipboard fail with a transient
17
+ * error.
18
+ *
19
+ * @returns `{ kind: 'files'; paths: string[] }` for file drops,
20
+ * `{ kind: 'text'; text: string }` for text, or null when empty/blocked.
21
+ */
22
+ export declare function readClipboard(): Promise<{
23
+ kind: 'files';
24
+ paths: string[];
25
+ } | {
26
+ kind: 'text';
27
+ text: string;
28
+ } | null>;
29
+ /**
30
+ * Render pasted clipboard content for insertion into the prompt: file paths
31
+ * quoted when they contain whitespace, joined with single spaces.
32
+ * @param content - Clipboard content as read by {@link readClipboard}.
33
+ * @returns The prompt-ready text: quoted, space-joined paths, or the text
34
+ * with line endings normalized.
35
+ */
36
+ export declare function formatClipboardInsert(content: {
37
+ kind: 'files';
38
+ paths: string[];
39
+ } | {
40
+ kind: 'text';
41
+ text: string;
42
+ }): string;
43
+ //# sourceMappingURL=clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../src/utils/clipboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,OAAO,CACpC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B,IAAI,CACP,CAqCA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3E,MAAM,CAOR"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Windows clipboard access for Ctrl+V paste. The TUI runs in raw mode, so
3
+ * the console never performs its own paste for Ctrl+V — the key arrives at
4
+ * the app and the clipboard is read here. PowerShell `Get-Clipboard` is the
5
+ * zero-dependency route: file drops (Explorer copy) come back as a
6
+ * FileDropList (the user pastes a file → insert its path), anything else
7
+ * comes back as text. Text is base64-encoded on the PowerShell side so the
8
+ * line-oriented stdout parse survives multi-line clipboard content (a raw
9
+ * write would put every line on its own output line and drop all but the
10
+ * first); CJK survives because base64 is pure ASCII.
11
+ */
12
+ import { execFile } from 'node:child_process';
13
+ const PS_SCRIPT = [
14
+ "$ErrorActionPreference='SilentlyContinue'",
15
+ '[Console]::OutputEncoding=[System.Text.Encoding]::UTF8',
16
+ '$files=$null',
17
+ 'try { $files = Get-Clipboard -Format FileDropList -ErrorAction Stop } catch {}',
18
+ 'if($files){foreach($f in $files){Write-Output ("FILE:"+$f.FullName)}}',
19
+ 'if(-not $files){$t=Get-Clipboard -Raw; if($null -ne $t){Write-Output ("TEXT64:"+[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($t)))}}',
20
+ ].join('; ');
21
+ /**
22
+ * Read the Windows clipboard: file paths when Explorer copied files,
23
+ * otherwise the plain text. Returns null when the clipboard holds neither.
24
+ * Clipboard access is retried — another process (e.g. Explorer) briefly
25
+ * holding the clipboard open makes OpenClipboard fail with a transient
26
+ * error.
27
+ *
28
+ * @returns `{ kind: 'files'; paths: string[] }` for file drops,
29
+ * `{ kind: 'text'; text: string }` for text, or null when empty/blocked.
30
+ */
31
+ export function readClipboard() {
32
+ return new Promise(resolve => {
33
+ let attempts = 0;
34
+ const attempt = () => {
35
+ attempts += 1;
36
+ const child = execFile('powershell', ['-NoProfile', '-NonInteractive', '-Command', PS_SCRIPT], { encoding: 'utf8', windowsHide: true, timeout: 3000 }, (error, stdout) => {
37
+ if (error) {
38
+ if (attempts < 3) {
39
+ // Transient clipboard lock — retry shortly.
40
+ setTimeout(attempt, 150);
41
+ return;
42
+ }
43
+ resolve(null);
44
+ return;
45
+ }
46
+ const files = [];
47
+ const texts = [];
48
+ for (const line of stdout.split(/\r?\n/)) {
49
+ if (line.startsWith('FILE:'))
50
+ files.push(line.slice(5));
51
+ else if (line.startsWith('TEXT64:')) {
52
+ texts.push(Buffer.from(line.slice(7), 'base64').toString('utf8'));
53
+ }
54
+ }
55
+ if (files.length > 0)
56
+ resolve({ kind: 'files', paths: files });
57
+ else if (texts.length > 0)
58
+ resolve({ kind: 'text', text: texts.join('\n') });
59
+ else
60
+ resolve(null);
61
+ });
62
+ // The app must never be held hostage by a stuck PowerShell.
63
+ child.unref();
64
+ };
65
+ attempt();
66
+ });
67
+ }
68
+ /**
69
+ * Render pasted clipboard content for insertion into the prompt: file paths
70
+ * quoted when they contain whitespace, joined with single spaces.
71
+ * @param content - Clipboard content as read by {@link readClipboard}.
72
+ * @returns The prompt-ready text: quoted, space-joined paths, or the text
73
+ * with line endings normalized.
74
+ */
75
+ export function formatClipboardInsert(content) {
76
+ if (content.kind === 'files') {
77
+ return content.paths
78
+ .map(path => (/\s/.test(path) ? `"${path}"` : path))
79
+ .join(' ');
80
+ }
81
+ return content.text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
82
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Debug logger for the ported Ink core. Writes to stderr only when
3
+ * `CC_TUI_DEBUG` is set, so normal runs stay quiet.
4
+ * @param message - The message to log.
5
+ * @param fields - Optional JSON-serialized fields appended to the line.
6
+ */
7
+ export declare function logForDebugging(message: string, fields?: Record<string, unknown>): void;
8
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/utils/debug.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAIvF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Debug logger for the ported Ink core. Writes to stderr only when
3
+ * `CC_TUI_DEBUG` is set, so normal runs stay quiet.
4
+ * @param message - The message to log.
5
+ * @param fields - Optional JSON-serialized fields appended to the line.
6
+ */
7
+ export function logForDebugging(message, fields) {
8
+ if (!process.env.CC_TUI_DEBUG)
9
+ return;
10
+ const suffix = fields === undefined ? '' : ` ${JSON.stringify(fields)}`;
11
+ process.stderr.write(`[dsh-tui] ${message}${suffix}\n`);
12
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The ported Ink core calls this once stdin handoff completes
3
+ * (ink/components/App.tsx). Early-input capture is not used by dsh-tui, so this
4
+ * is a no-op.
5
+ */
6
+ export declare function stopCapturingEarlyInput(): void;
7
+ //# sourceMappingURL=earlyInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"earlyInput.d.ts","sourceRoot":"","sources":["../../../src/utils/earlyInput.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAAG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The ported Ink core calls this once stdin handoff completes
3
+ * (ink/components/App.tsx). Early-input capture is not used by dsh-tui, so this
4
+ * is a no-op.
5
+ */
6
+ export function stopCapturingEarlyInput() { }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Minimal terminal-environment shim for the ported Ink core. The original
3
+ * module computed a richer `env` object from the Claude Code app context; the
4
+ * Ink core only reads `env.terminal` (termio/osc.ts chooses the OSC terminator
5
+ * for Kitty).
6
+ */
7
+ export declare const env: {
8
+ readonly terminal: string;
9
+ };
10
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,GAAG,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAE5C,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Minimal terminal-environment shim for the ported Ink core. The original
3
+ * module computed a richer `env` object from the Claude Code app context; the
4
+ * Ink core only reads `env.terminal` (termio/osc.ts chooses the OSC terminator
5
+ * for Kitty).
6
+ */
7
+ export const env = {
8
+ terminal: (process.env.TERM_PROGRAM ?? process.env.TERM ?? 'unknown').toLowerCase(),
9
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Environment truthiness check for the ported Ink core. Accepts the common
3
+ * shell truthy spellings (`1`, `true`, `yes`, `on`).
4
+ * @param value - The environment value to interpret.
5
+ * @returns True for booleans `true` and the truthy spellings, false otherwise.
6
+ */
7
+ export declare function isEnvTruthy(value: string | boolean | undefined | null): boolean;
8
+ //# sourceMappingURL=envUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/envUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAI/E"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Environment truthiness check for the ported Ink core. Accepts the common
3
+ * shell truthy spellings (`1`, `true`, `yes`, `on`).
4
+ * @param value - The environment value to interpret.
5
+ * @returns True for booleans `true` and the truthy spellings, false otherwise.
6
+ */
7
+ export function isEnvTruthy(value) {
8
+ if (value === undefined || value === null)
9
+ return false;
10
+ if (typeof value === 'boolean')
11
+ return value;
12
+ return ['1', 'true', 'yes', 'on'].includes(value.toLowerCase());
13
+ }
@@ -0,0 +1,34 @@
1
+ /** The settled outcome of a no-throw command run. */
2
+ export interface ExecFileNoThrowResult {
3
+ code: number | null;
4
+ stdout: string;
5
+ stderr: string;
6
+ }
7
+ /**
8
+ * Options for {@link execFileNoThrow}: stdin payload, timeout, and child
9
+ * working directory.
10
+ */
11
+ export interface ExecFileNoThrowOptions {
12
+ /** Stdin payload (OSC 52 clipboard helpers and tmux load-buffer). */
13
+ input?: string;
14
+ /** Kill the child after this many milliseconds. */
15
+ timeout?: number;
16
+ /**
17
+ * Accepted for call-site compatibility with the original execa-based
18
+ * implementation; `false` (the only value the Ink core passes) matches this
19
+ * shim's behavior of running in the current working directory.
20
+ */
21
+ useCwd?: boolean;
22
+ /** Working directory for the child; defaults to the parent's cwd. */
23
+ cwd?: string;
24
+ }
25
+ /**
26
+ * Run a command without throwing: resolves with `{ code, stdout, stderr }`
27
+ * even when the process exits non-zero or cannot spawn.
28
+ * @param file - The executable path to spawn.
29
+ * @param args - Command-line arguments; defaults to none.
30
+ * @param options - Spawn options (input, timeout, cwd).
31
+ * @returns The process outcome: exit code, captured stdout, and captured stderr.
32
+ */
33
+ export declare function execFileNoThrow(file: string, args?: readonly string[], options?: ExecFileNoThrowOptions): Promise<ExecFileNoThrowResult>;
34
+ //# sourceMappingURL=execFileNoThrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execFileNoThrow.d.ts","sourceRoot":"","sources":["../../../src/utils/execFileNoThrow.ts"],"names":[],"mappings":"AAEA,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAoBhC"}
@@ -0,0 +1,31 @@
1
+ import { spawn } from 'node:child_process';
2
+ /**
3
+ * Run a command without throwing: resolves with `{ code, stdout, stderr }`
4
+ * even when the process exits non-zero or cannot spawn.
5
+ * @param file - The executable path to spawn.
6
+ * @param args - Command-line arguments; defaults to none.
7
+ * @param options - Spawn options (input, timeout, cwd).
8
+ * @returns The process outcome: exit code, captured stdout, and captured stderr.
9
+ */
10
+ export function execFileNoThrow(file, args, options) {
11
+ return new Promise(resolve => {
12
+ const child = spawn(file, args ?? [], { timeout: options?.timeout, cwd: options?.cwd });
13
+ let stdout = '';
14
+ let stderr = '';
15
+ child.stdout.on('data', (chunk) => {
16
+ stdout += chunk.toString();
17
+ });
18
+ child.stderr.on('data', (chunk) => {
19
+ stderr += chunk.toString();
20
+ });
21
+ child.on('error', () => {
22
+ resolve({ code: 1, stdout, stderr });
23
+ });
24
+ child.on('close', code => {
25
+ resolve({ code, stdout, stderr });
26
+ });
27
+ if (options?.input !== undefined)
28
+ child.stdin.write(options.input);
29
+ child.stdin.end();
30
+ });
31
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Whether mouse click handling is disabled for the ported Ink core. dsh-tui
3
+ * reads its own env flag (`CC_TUI_DISABLE_MOUSE`); the original module
4
+ * consulted Claude Code's fullscreen state.
5
+ * @returns True when CC_TUI_DISABLE_MOUSE is set to a truthy value.
6
+ */
7
+ export declare function isMouseClicksDisabled(): boolean;
8
+ //# sourceMappingURL=fullscreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen.d.ts","sourceRoot":"","sources":["../../../src/utils/fullscreen.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
@@ -0,0 +1,10 @@
1
+ import { isEnvTruthy } from './envUtils.js';
2
+ /**
3
+ * Whether mouse click handling is disabled for the ported Ink core. dsh-tui
4
+ * reads its own env flag (`CC_TUI_DISABLE_MOUSE`); the original module
5
+ * consulted Claude Code's fullscreen state.
6
+ * @returns True when CC_TUI_DISABLE_MOUSE is set to a truthy value.
7
+ */
8
+ export function isMouseClicksDisabled() {
9
+ return isEnvTruthy(process.env.CC_TUI_DISABLE_MOUSE);
10
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Memoized `Intl.Segmenter` with grapheme granularity, used by the ported Ink
3
+ * core for width-aware string handling (stringWidth, output, termio parser).
4
+ * @returns The shared grapheme segmenter, created once on first use.
5
+ */
6
+ export declare function getGraphemeSegmenter(): Intl.Segmenter;
7
+ //# sourceMappingURL=intl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intl.d.ts","sourceRoot":"","sources":["../../../src/utils/intl.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,SAAS,CAErD"}
@@ -0,0 +1,9 @@
1
+ let graphemeSegmenter;
2
+ /**
3
+ * Memoized `Intl.Segmenter` with grapheme granularity, used by the ported Ink
4
+ * core for width-aware string handling (stringWidth, output, termio parser).
5
+ * @returns The shared grapheme segmenter, created once on first use.
6
+ */
7
+ export function getGraphemeSegmenter() {
8
+ return (graphemeSegmenter ??= new Intl.Segmenter('en', { granularity: 'grapheme' }));
9
+ }
@@ -0,0 +1,20 @@
1
+ import type { LoadedContext } from '../channel.js';
2
+ /** Per-entry display cap: the panel shows the beginning of long texts. */
3
+ export declare const CONTEXT_ENTRY_MAX_CHARS = 800;
4
+ /**
5
+ * Truncate one entry's text for the panel body. The model-visible text is
6
+ * the source of truth and stays complete in the session log; the panel only
7
+ * bounds its own rendering.
8
+ * @param text - the interpolated model-visible text.
9
+ * @param max - character cap, defaults to {@link CONTEXT_ENTRY_MAX_CHARS}.
10
+ * @returns the text, or its head plus a truncation marker.
11
+ */
12
+ export declare function truncateContextText(text: string, max?: number): string;
13
+ /**
14
+ * One-line collapsed summary of a loaded-context snapshot, naming only the
15
+ * non-empty groups (`${t('context-sections', { n: context.sections.length })} · ${t('context-files', { n: context.files.length })} · ${t('context-skills', { n: context.skills.length })} · ${t('context-tools', { n: context.tools.length })}`).
16
+ * @param context - the loaded-context snapshot.
17
+ * @returns the summary, or `''` when every group is empty.
18
+ */
19
+ export declare function summarizeLoadedContext(context: LoadedContext): string;
20
+ //# sourceMappingURL=loaded-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loaded-context.d.ts","sourceRoot":"","sources":["../../../src/utils/loaded-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAGlD,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAE1C;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAA0B,GAAG,MAAM,CAGvF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAQrE"}
@@ -0,0 +1,36 @@
1
+ import { t } from '../i18n.js';
2
+ /** Per-entry display cap: the panel shows the beginning of long texts. */
3
+ export const CONTEXT_ENTRY_MAX_CHARS = 800;
4
+ /**
5
+ * Truncate one entry's text for the panel body. The model-visible text is
6
+ * the source of truth and stays complete in the session log; the panel only
7
+ * bounds its own rendering.
8
+ * @param text - the interpolated model-visible text.
9
+ * @param max - character cap, defaults to {@link CONTEXT_ENTRY_MAX_CHARS}.
10
+ * @returns the text, or its head plus a truncation marker.
11
+ */
12
+ export function truncateContextText(text, max = CONTEXT_ENTRY_MAX_CHARS) {
13
+ if (text.length <= max)
14
+ return text;
15
+ return `${text.slice(0, max)}${t('context-truncated')}`;
16
+ }
17
+ /**
18
+ * One-line collapsed summary of a loaded-context snapshot, naming only the
19
+ * non-empty groups (`${t('context-sections', { n: context.sections.length })} · ${t('context-files', { n: context.files.length })} · ${t('context-skills', { n: context.skills.length })} · ${t('context-tools', { n: context.tools.length })}`).
20
+ * @param context - the loaded-context snapshot.
21
+ * @returns the summary, or `''` when every group is empty.
22
+ */
23
+ export function summarizeLoadedContext(context) {
24
+ const parts = [];
25
+ if (context.sections.length > 0)
26
+ parts.push(t('context-sections', { n: context.sections.length }));
27
+ if (context.files.length > 0)
28
+ parts.push(t('context-files', { n: context.files.length }));
29
+ if (context.contexts.length > 0)
30
+ parts.push(t('context-runtime', { n: context.contexts.length }));
31
+ if (context.skills.length > 0)
32
+ parts.push(t('context-skills', { n: context.skills.length }));
33
+ if (context.tools.length > 0)
34
+ parts.push(t('context-tools', { n: context.tools.length }));
35
+ return parts.join(' · ');
36
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Error logger for the ported Ink core. Always writes to stderr (an Ink
3
+ * renderer failure must never pass silently).
4
+ * @param error - The error to log; its stack trace when available.
5
+ */
6
+ export declare function logError(error: unknown): void;
7
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/utils/log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAG7C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Error logger for the ported Ink core. Always writes to stderr (an Ink
3
+ * renderer failure must never pass silently).
4
+ * @param error - The error to log; its stack trace when available.
5
+ */
6
+ export function logError(error) {
7
+ const text = error instanceof Error ? error.stack ?? error.message : String(error);
8
+ process.stderr.write(`[dsh-tui] ${text}\n`);
9
+ }