@deepseek-harness-tui/dsh-tui 0.14.0 → 0.15.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 (735) hide show
  1. package/README.md +73 -14
  2. package/bin/dsh-tui.js +200 -34
  3. package/cordis.patch.yml +16 -52
  4. package/cordis.yml +6 -2
  5. package/guide/dsh-tui-guide/claude-backend.en.md +44 -7
  6. package/guide/dsh-tui-guide/claude-backend.md +28 -6
  7. package/guide/dsh-tui-guide/codex-backend.en.md +34 -7
  8. package/guide/dsh-tui-guide/codex-backend.md +17 -2
  9. package/guide/dsh-tui-guide/configuration.en.md +129 -16
  10. package/guide/dsh-tui-guide/configuration.md +110 -14
  11. package/guide/dsh-tui-guide/interaction.en.md +57 -24
  12. package/guide/dsh-tui-guide/interaction.md +42 -19
  13. package/guide/dsh-tui-guide/plugins.en.md +36 -3
  14. package/guide/dsh-tui-guide/plugins.md +21 -2
  15. package/guide/dsh-tui-guide/themes.en.md +23 -14
  16. package/guide/dsh-tui-guide/themes.md +19 -12
  17. package/guide/dsh-tui-guide/user-guide.en.md +51 -20
  18. package/guide/dsh-tui-guide/user-guide.md +41 -21
  19. package/lib/settings.json +103 -9
  20. package/lib/types/adapter/channel/ui-policy.d.ts +1 -1
  21. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  22. package/lib/types/adapter/channel/ui-policy.js +3 -0
  23. package/lib/types/adapter/channel/ui.d.ts +2 -0
  24. package/lib/types/adapter/channel/ui.d.ts.map +1 -1
  25. package/lib/types/adapter/channel/ui.js +6 -2
  26. package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
  27. package/lib/types/adapter/kernel/runtime.js +2 -0
  28. package/lib/types/adapter/ports/channel-settings.d.ts +9 -0
  29. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  30. package/lib/types/adapter/ports/channel-ui.d.ts +50 -12
  31. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  32. package/lib/types/adapter/ports/channel-view.d.ts +21 -0
  33. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  34. package/lib/types/adapter/spec/backend-capabilities.d.ts +22 -0
  35. package/lib/types/adapter/spec/backend-capabilities.d.ts.map +1 -0
  36. package/lib/types/adapter/spec/backend-capabilities.js +49 -0
  37. package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
  38. package/lib/types/adapter/spec/protocol-constants.js +10 -3
  39. package/lib/types/adapter/spec/tui-contributions.d.ts +3 -0
  40. package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
  41. package/lib/types/adapter/spec/tui-contributions.js +7 -0
  42. package/lib/types/adapter/standard/registry.d.ts +6 -0
  43. package/lib/types/adapter/standard/registry.d.ts.map +1 -1
  44. package/lib/types/adapter/standard/registry.js +65 -15
  45. package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -1
  46. package/lib/types/adapter/standard/tui-extension.js +7 -1
  47. package/lib/types/adapter/standard/types.d.ts +10 -1
  48. package/lib/types/adapter/standard/types.d.ts.map +1 -1
  49. package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -1
  50. package/lib/types/adapter/upstream/host-descriptor-driver.js +52 -0
  51. package/lib/types/agent/backend-manifest.d.ts +152 -0
  52. package/lib/types/agent/backend-manifest.d.ts.map +1 -0
  53. package/lib/types/agent/backend-manifest.js +14 -0
  54. package/lib/types/agent/backend.d.ts +71 -5
  55. package/lib/types/agent/backend.d.ts.map +1 -1
  56. package/lib/types/agent/capabilities.d.ts +6 -0
  57. package/lib/types/agent/capabilities.d.ts.map +1 -1
  58. package/lib/types/agent/index.d.ts +2 -0
  59. package/lib/types/agent/index.d.ts.map +1 -1
  60. package/lib/types/agent/refs.d.ts +11 -1
  61. package/lib/types/agent/refs.d.ts.map +1 -1
  62. package/lib/types/agent/starting-session.d.ts +4 -0
  63. package/lib/types/agent/starting-session.d.ts.map +1 -0
  64. package/lib/types/agent/starting-session.js +19 -0
  65. package/lib/types/backends/claude/activity.d.ts +1 -1
  66. package/lib/types/backends/claude/activity.d.ts.map +1 -1
  67. package/lib/types/backends/claude/activity.js +5 -5
  68. package/lib/types/backends/claude/auth.d.ts.map +1 -1
  69. package/lib/types/backends/claude/auth.js +10 -3
  70. package/lib/types/backends/claude/backend.d.ts.map +1 -1
  71. package/lib/types/backends/claude/backend.js +103 -29
  72. package/lib/types/backends/claude/catalog.d.ts +2 -1
  73. package/lib/types/backends/claude/catalog.d.ts.map +1 -1
  74. package/lib/types/backends/claude/catalog.js +15 -5
  75. package/lib/types/backends/claude/channels.d.ts +5 -3
  76. package/lib/types/backends/claude/channels.d.ts.map +1 -1
  77. package/lib/types/backends/claude/channels.js +5 -4
  78. package/lib/types/backends/claude/contract.d.ts +4 -0
  79. package/lib/types/backends/claude/contract.d.ts.map +1 -1
  80. package/lib/types/backends/claude/contract.js +4 -0
  81. package/lib/types/backends/claude/controls.d.ts +4 -0
  82. package/lib/types/backends/claude/controls.d.ts.map +1 -1
  83. package/lib/types/backends/claude/controls.js +34 -42
  84. package/lib/types/backends/claude/dialogs.d.ts +8 -2
  85. package/lib/types/backends/claude/dialogs.d.ts.map +1 -1
  86. package/lib/types/backends/claude/dialogs.js +24 -16
  87. package/lib/types/backends/claude/images.d.ts +1 -1
  88. package/lib/types/backends/claude/images.d.ts.map +1 -1
  89. package/lib/types/backends/claude/images.js +7 -7
  90. package/lib/types/backends/claude/manifest.d.ts +21 -0
  91. package/lib/types/backends/claude/manifest.d.ts.map +1 -0
  92. package/lib/types/backends/claude/manifest.js +29 -0
  93. package/lib/types/backends/claude/older-history.js +2 -2
  94. package/lib/types/backends/claude/permissions.js +11 -11
  95. package/lib/types/backends/claude/prefs.d.ts +4 -2
  96. package/lib/types/backends/claude/prefs.d.ts.map +1 -1
  97. package/lib/types/backends/claude/prefs.js +4 -3
  98. package/lib/types/backends/claude/process.d.ts +16 -4
  99. package/lib/types/backends/claude/process.d.ts.map +1 -1
  100. package/lib/types/backends/claude/process.js +100 -37
  101. package/lib/types/backends/claude/send-message.d.ts +1 -1
  102. package/lib/types/backends/claude/send-message.d.ts.map +1 -1
  103. package/lib/types/backends/claude/session/auth.js +22 -22
  104. package/lib/types/backends/claude/session/channels.d.ts +4 -0
  105. package/lib/types/backends/claude/session/channels.d.ts.map +1 -1
  106. package/lib/types/backends/claude/session/channels.js +5 -3
  107. package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -1
  108. package/lib/types/backends/claude/session/lifecycle.js +31 -23
  109. package/lib/types/backends/claude/session/store.js +8 -8
  110. package/lib/types/backends/claude/session/subagents.js +2 -2
  111. package/lib/types/backends/claude/session/types.d.ts +7 -0
  112. package/lib/types/backends/claude/session/types.d.ts.map +1 -1
  113. package/lib/types/backends/claude/side-query.js +3 -3
  114. package/lib/types/backends/claude/task-output.js +5 -5
  115. package/lib/types/backends/claude/text.d.ts +778 -0
  116. package/lib/types/backends/claude/text.d.ts.map +1 -0
  117. package/lib/types/backends/claude/text.js +298 -0
  118. package/lib/types/backends/claude/transcript-file.d.ts +1 -1
  119. package/lib/types/backends/claude/transcript-file.d.ts.map +1 -1
  120. package/lib/types/backends/claude/transcript-file.js +4 -4
  121. package/lib/types/backends/claude/translate/attempts.js +2 -2
  122. package/lib/types/backends/claude/translate/core.js +3 -3
  123. package/lib/types/backends/claude/translate/messages.js +4 -4
  124. package/lib/types/backends/claude/translate/system.js +14 -14
  125. package/lib/types/backends/claude/translate/tasks.js +2 -2
  126. package/lib/types/backends/claude/translate/types.d.ts +1 -1
  127. package/lib/types/backends/claude/translate/types.d.ts.map +1 -1
  128. package/lib/types/backends/codex/auth/external-tokens.js +16 -16
  129. package/lib/types/backends/codex/auth/status.js +14 -14
  130. package/lib/types/backends/codex/backend.d.ts +4 -19
  131. package/lib/types/backends/codex/backend.d.ts.map +1 -1
  132. package/lib/types/backends/codex/backend.js +118 -25
  133. package/lib/types/backends/codex/catalog.d.ts +2 -1
  134. package/lib/types/backends/codex/catalog.d.ts.map +1 -1
  135. package/lib/types/backends/codex/catalog.js +63 -18
  136. package/lib/types/backends/codex/channels.d.ts +6 -3
  137. package/lib/types/backends/codex/channels.d.ts.map +1 -1
  138. package/lib/types/backends/codex/channels.js +15 -13
  139. package/lib/types/backends/codex/detect.d.ts.map +1 -1
  140. package/lib/types/backends/codex/detect.js +9 -6
  141. package/lib/types/backends/codex/manifest.d.ts +30 -0
  142. package/lib/types/backends/codex/manifest.d.ts.map +1 -0
  143. package/lib/types/backends/codex/manifest.js +23 -0
  144. package/lib/types/backends/codex/prefs.d.ts +4 -2
  145. package/lib/types/backends/codex/prefs.d.ts.map +1 -1
  146. package/lib/types/backends/codex/prefs.js +4 -3
  147. package/lib/types/backends/codex/rpc/hub.js +2 -2
  148. package/lib/types/backends/codex/session/activity.d.ts +1 -1
  149. package/lib/types/backends/codex/session/activity.d.ts.map +1 -1
  150. package/lib/types/backends/codex/session/activity.js +13 -13
  151. package/lib/types/backends/codex/session/approvals.js +30 -30
  152. package/lib/types/backends/codex/session/commands.d.ts +8 -2
  153. package/lib/types/backends/codex/session/commands.d.ts.map +1 -1
  154. package/lib/types/backends/codex/session/commands.js +71 -23
  155. package/lib/types/backends/codex/session/controls.d.ts +1 -1
  156. package/lib/types/backends/codex/session/controls.d.ts.map +1 -1
  157. package/lib/types/backends/codex/session/controls.js +21 -16
  158. package/lib/types/backends/codex/session/goals.d.ts.map +1 -1
  159. package/lib/types/backends/codex/session/goals.js +3 -3
  160. package/lib/types/backends/codex/session/history.js +2 -2
  161. package/lib/types/backends/codex/session/images.js +8 -8
  162. package/lib/types/backends/codex/session/input.d.ts +6 -2
  163. package/lib/types/backends/codex/session/input.d.ts.map +1 -1
  164. package/lib/types/backends/codex/session/input.js +55 -13
  165. package/lib/types/backends/codex/session/plan-review.js +6 -6
  166. package/lib/types/backends/codex/session/session.d.ts.map +1 -1
  167. package/lib/types/backends/codex/session/session.js +66 -34
  168. package/lib/types/backends/codex/session/side-query.d.ts.map +1 -1
  169. package/lib/types/backends/codex/session/side-query.js +27 -9
  170. package/lib/types/backends/codex/session/state.d.ts +6 -1
  171. package/lib/types/backends/codex/session/state.d.ts.map +1 -1
  172. package/lib/types/backends/codex/session/subagents.js +5 -5
  173. package/lib/types/backends/codex/session/tasks.js +4 -4
  174. package/lib/types/backends/codex/text.d.ts +933 -0
  175. package/lib/types/backends/codex/text.d.ts.map +1 -0
  176. package/lib/types/backends/codex/text.js +313 -0
  177. package/lib/types/backends/codex/translate/items.js +4 -4
  178. package/lib/types/backends/codex/translate/live.d.ts.map +1 -1
  179. package/lib/types/backends/codex/translate/live.js +11 -8
  180. package/lib/types/backends/codex/translate/notices.js +10 -10
  181. package/lib/types/backends/shared/channel-slug.d.ts +4 -0
  182. package/lib/types/backends/shared/channel-slug.d.ts.map +1 -0
  183. package/lib/types/backends/shared/channel-slug.js +25 -0
  184. package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -1
  185. package/lib/types/backends/shared/channel-tokens.js +30 -23
  186. package/lib/types/{channel → backends/shared}/elicitation.d.ts +78 -21
  187. package/lib/types/backends/shared/elicitation.d.ts.map +1 -0
  188. package/lib/types/{channel → backends/shared}/elicitation.js +64 -66
  189. package/lib/types/backends/shared/image-size.d.ts +33 -0
  190. package/lib/types/backends/shared/image-size.d.ts.map +1 -0
  191. package/lib/types/backends/shared/image-size.js +134 -0
  192. package/lib/types/{utils → backends/shared}/jsonl.d.ts +5 -1
  193. package/lib/types/backends/shared/jsonl.d.ts.map +1 -0
  194. package/lib/types/{utils → backends/shared}/jsonl.js +5 -1
  195. package/lib/types/backends/shared/localized-text.d.ts +30 -0
  196. package/lib/types/backends/shared/localized-text.d.ts.map +1 -0
  197. package/lib/types/backends/shared/localized-text.js +24 -0
  198. package/lib/types/backends/shared/platform-text.d.ts +88 -0
  199. package/lib/types/backends/shared/platform-text.d.ts.map +1 -0
  200. package/lib/types/backends/shared/platform-text.js +33 -0
  201. package/lib/types/branding.d.ts +13 -0
  202. package/lib/types/branding.d.ts.map +1 -1
  203. package/lib/types/branding.js +18 -0
  204. package/lib/types/channel/channel-slug.d.ts +3 -1
  205. package/lib/types/channel/channel-slug.d.ts.map +1 -1
  206. package/lib/types/channel/channel-slug.js +3 -1
  207. package/lib/types/channel/sanitize.d.ts +7 -0
  208. package/lib/types/channel/sanitize.d.ts.map +1 -1
  209. package/lib/types/channel/sanitize.js +9 -0
  210. package/lib/types/channel/usage.d.ts.map +1 -1
  211. package/lib/types/channel/usage.js +5 -0
  212. package/lib/types/commands.d.ts +5 -0
  213. package/lib/types/commands.d.ts.map +1 -1
  214. package/lib/types/commands.js +47 -8
  215. package/lib/types/components/AgentMessageComposer.d.ts.map +1 -1
  216. package/lib/types/components/AgentMessageComposer.js +3 -2
  217. package/lib/types/components/BtwPanel.d.ts.map +1 -1
  218. package/lib/types/components/BtwPanel.js +4 -2
  219. package/lib/types/components/Chat/JobCard.js +3 -3
  220. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  221. package/lib/types/components/CommandSuggestions.js +20 -6
  222. package/lib/types/components/ContextBarView.d.ts +5 -1
  223. package/lib/types/components/ContextBarView.d.ts.map +1 -1
  224. package/lib/types/components/ContextBarView.js +6 -3
  225. package/lib/types/components/ExtensionDialog.d.ts.map +1 -1
  226. package/lib/types/components/ExtensionDialog.js +2 -3
  227. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  228. package/lib/types/components/GoalTodoPanel.js +14 -3
  229. package/lib/types/components/InlineMathParagraph.js +1 -1
  230. package/lib/types/components/KernelPicker.d.ts.map +1 -1
  231. package/lib/types/components/KernelPicker.js +1 -1
  232. package/lib/types/components/LogoV2.d.ts.map +1 -1
  233. package/lib/types/components/LogoV2.js +9 -6
  234. package/lib/types/components/MarkdownTable.d.ts.map +1 -1
  235. package/lib/types/components/MarkdownTable.js +4 -3
  236. package/lib/types/components/MessageList.d.ts.map +1 -1
  237. package/lib/types/components/MessageList.js +18 -5
  238. package/lib/types/components/ModelPicker.d.ts +24 -31
  239. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  240. package/lib/types/components/ModelPicker.js +115 -40
  241. package/lib/types/components/PromptEditor.d.ts +3 -3
  242. package/lib/types/components/PromptInput.d.ts +21 -3
  243. package/lib/types/components/PromptInput.d.ts.map +1 -1
  244. package/lib/types/components/PromptInput.js +58 -118
  245. package/lib/types/components/SdkInstallWizard.d.ts +3 -1
  246. package/lib/types/components/SdkInstallWizard.d.ts.map +1 -1
  247. package/lib/types/components/SdkInstallWizard.js +8 -1
  248. package/lib/types/components/SearchBox.d.ts +13 -15
  249. package/lib/types/components/SearchBox.d.ts.map +1 -1
  250. package/lib/types/components/SearchBox.js +58 -27
  251. package/lib/types/components/ThemePicker.d.ts +1 -1
  252. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  253. package/lib/types/components/ThemePicker.js +14 -11
  254. package/lib/types/components/Tooltip.js +1 -1
  255. package/lib/types/components/WorkingSpinner.js +1 -1
  256. package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
  257. package/lib/types/components/WorkspaceFlowPicker.js +4 -3
  258. package/lib/types/components/composerImageTokens.d.ts +24 -0
  259. package/lib/types/components/composerImageTokens.d.ts.map +1 -0
  260. package/lib/types/components/composerImageTokens.js +37 -0
  261. package/lib/types/components/design-system/InputCaret.d.ts +7 -0
  262. package/lib/types/components/design-system/InputCaret.d.ts.map +1 -0
  263. package/lib/types/components/design-system/InputCaret.js +9 -0
  264. package/lib/types/components/design-system/ListItem.d.ts +13 -2
  265. package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
  266. package/lib/types/components/design-system/ListItem.js +11 -5
  267. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  268. package/lib/types/components/design-system/ThemeProvider.js +6 -8
  269. package/lib/types/components/kernelCatalog.d.ts +55 -11
  270. package/lib/types/components/kernelCatalog.d.ts.map +1 -1
  271. package/lib/types/components/kernelCatalog.js +42 -23
  272. package/lib/types/components/launchpadActions.d.ts +4 -0
  273. package/lib/types/components/launchpadActions.d.ts.map +1 -1
  274. package/lib/types/components/launchpadActions.js +5 -4
  275. package/lib/types/components/launchpadLayout.d.ts.map +1 -1
  276. package/lib/types/components/launchpadLayout.js +2 -2
  277. package/lib/types/components/messages/UserPromptMessage.d.ts +4 -3
  278. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
  279. package/lib/types/components/messages/UserPromptMessage.js +4 -3
  280. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  281. package/lib/types/components/questions/AskUserQuestionPanel.js +8 -3
  282. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  283. package/lib/types/components/questions/PlanReviewPanel.js +4 -3
  284. package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -1
  285. package/lib/types/components/questions/ProviderModelEditor.js +3 -13
  286. package/lib/types/components/sessions/ForeignSessionRow.d.ts +3 -1
  287. package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -1
  288. package/lib/types/components/sessions/ForeignSessionRow.js +5 -2
  289. package/lib/types/components/sessions/SessionListRow.d.ts +3 -1
  290. package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
  291. package/lib/types/components/sessions/SessionListRow.js +5 -2
  292. package/lib/types/components/sidePanel/PanelBar.d.ts +1 -0
  293. package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
  294. package/lib/types/components/sidePanel/PanelBar.js +21 -17
  295. package/lib/types/components/sidePanel/SidePanelColumn.d.ts +1 -1
  296. package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
  297. package/lib/types/components/sidePanel/SidePanelColumn.js +2 -1
  298. package/lib/types/components/sidePanel/SidePanelLayout.d.ts +6 -4
  299. package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -1
  300. package/lib/types/components/sidePanel/SidePanelLayout.js +33 -7
  301. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +4 -2
  302. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
  303. package/lib/types/components/sidePanel/btw/BtwComposer.js +12 -4
  304. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
  305. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +59 -15
  306. package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
  307. package/lib/types/components/sidePanel/btw/BtwThreadScene.js +4 -2
  308. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +1 -1
  309. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
  310. package/lib/types/components/sidePanel/btw/BtwThreadView.js +12 -6
  311. package/lib/types/components/sidePanel/companion/CompanionPanel.js +2 -2
  312. package/lib/types/components/sidePanel/types.d.ts +1 -1
  313. package/lib/types/components/sidePanel/types.d.ts.map +1 -1
  314. package/lib/types/components/sidePanel/useSidePanel.d.ts +2 -0
  315. package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -1
  316. package/lib/types/components/sidePanel/useSidePanel.js +11 -1
  317. package/lib/types/components/splashFonts.d.ts +24 -1
  318. package/lib/types/components/splashFonts.d.ts.map +1 -1
  319. package/lib/types/components/splashFonts.js +40 -5
  320. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
  321. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
  322. package/lib/types/components/workspaces/HomeWorkspaceRow.js +5 -2
  323. package/lib/types/dsh-adapter/admission-loader.d.ts +20 -0
  324. package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -0
  325. package/lib/types/dsh-adapter/admission-loader.js +256 -0
  326. package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
  327. package/lib/types/dsh-adapter/backend/translate.js +3 -0
  328. package/lib/types/dsh-adapter/backend-admission.d.ts +64 -0
  329. package/lib/types/dsh-adapter/backend-admission.d.ts.map +1 -0
  330. package/lib/types/dsh-adapter/backend-admission.js +34 -0
  331. package/lib/types/dsh-adapter/backend-contribution.d.ts +26 -0
  332. package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -0
  333. package/lib/types/dsh-adapter/backend-contribution.js +37 -0
  334. package/lib/types/dsh-adapter/backend-registry.d.ts +136 -0
  335. package/lib/types/dsh-adapter/backend-registry.d.ts.map +1 -0
  336. package/lib/types/dsh-adapter/backend-registry.js +285 -0
  337. package/lib/types/dsh-adapter/backends.d.ts +67 -24
  338. package/lib/types/dsh-adapter/backends.d.ts.map +1 -1
  339. package/lib/types/dsh-adapter/backends.generated.d.ts +12 -0
  340. package/lib/types/dsh-adapter/backends.generated.d.ts.map +1 -0
  341. package/lib/types/dsh-adapter/backends.generated.js +6 -0
  342. package/lib/types/dsh-adapter/backends.js +92 -46
  343. package/lib/types/dsh-adapter/channel/action-readiness.d.ts +2 -0
  344. package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
  345. package/lib/types/dsh-adapter/channel/action-readiness.js +9 -3
  346. package/lib/types/dsh-adapter/channel/agent-view-projection.js +2 -2
  347. package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
  348. package/lib/types/dsh-adapter/channel/background-action.js +8 -3
  349. package/lib/types/dsh-adapter/channel/binding-events.d.ts +16 -3
  350. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  351. package/lib/types/dsh-adapter/channel/binding-events.js +18 -46
  352. package/lib/types/dsh-adapter/channel/channel-host.d.ts +45 -0
  353. package/lib/types/dsh-adapter/channel/channel-host.d.ts.map +1 -0
  354. package/lib/types/dsh-adapter/channel/channel-host.js +1 -0
  355. package/lib/types/dsh-adapter/channel/command-completions.d.ts +5 -0
  356. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
  357. package/lib/types/dsh-adapter/channel/command-completions.js +16 -0
  358. package/lib/types/dsh-adapter/channel/composer-images.d.ts +4 -2
  359. package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
  360. package/lib/types/dsh-adapter/channel/composer-images.js +36 -5
  361. package/lib/types/dsh-adapter/channel/cordis-host.d.ts +14 -0
  362. package/lib/types/dsh-adapter/channel/cordis-host.d.ts.map +1 -0
  363. package/lib/types/dsh-adapter/channel/cordis-host.js +35 -0
  364. package/lib/types/dsh-adapter/channel/core/actions.d.ts +3 -3
  365. package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -1
  366. package/lib/types/dsh-adapter/channel/core/actions.js +15 -6
  367. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +7 -3
  368. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -1
  369. package/lib/types/dsh-adapter/channel/core/binding-feed.js +3 -0
  370. package/lib/types/dsh-adapter/channel/core/compose.d.ts +12 -28
  371. package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -1
  372. package/lib/types/dsh-adapter/channel/core/compose.js +318 -117
  373. package/lib/types/dsh-adapter/channel/core/files.d.ts +7 -2
  374. package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -1
  375. package/lib/types/dsh-adapter/channel/core/files.js +1 -0
  376. package/lib/types/dsh-adapter/channel/core/host.d.ts +12 -6
  377. package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -1
  378. package/lib/types/dsh-adapter/channel/core/host.js +69 -35
  379. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +5 -3
  380. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -1
  381. package/lib/types/dsh-adapter/channel/core/local-actions.js +5 -2
  382. package/lib/types/dsh-adapter/channel/core/session-controls.js +2 -2
  383. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +7 -4
  384. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -1
  385. package/lib/types/dsh-adapter/channel/core/session-switch.js +8 -4
  386. package/lib/types/dsh-adapter/channel/core/sessions.d.ts +1 -1
  387. package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -1
  388. package/lib/types/dsh-adapter/channel/core/sessions.js +75 -16
  389. package/lib/types/dsh-adapter/channel/extensions.d.ts +4 -3
  390. package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -1
  391. package/lib/types/dsh-adapter/channel/extensions.js +41 -22
  392. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +2 -2
  393. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  394. package/lib/types/dsh-adapter/channel/input-delivery.js +14 -5
  395. package/lib/types/dsh-adapter/channel/job-projection.d.ts +4 -0
  396. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
  397. package/lib/types/dsh-adapter/channel/job-projection.js +205 -24
  398. package/lib/types/dsh-adapter/channel/mentions.d.ts +3 -3
  399. package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -1
  400. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +1 -0
  401. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  402. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +138 -8
  403. package/lib/types/dsh-adapter/channel/model-actions.d.ts +5 -1
  404. package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
  405. package/lib/types/dsh-adapter/channel/model-actions.js +40 -28
  406. package/lib/types/dsh-adapter/channel/model-selection.d.ts +17 -0
  407. package/lib/types/dsh-adapter/channel/model-selection.d.ts.map +1 -0
  408. package/lib/types/dsh-adapter/channel/model-selection.js +109 -0
  409. package/lib/types/dsh-adapter/channel/model-switch.d.ts +12 -21
  410. package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
  411. package/lib/types/dsh-adapter/channel/model-switch.js +39 -102
  412. package/lib/types/dsh-adapter/channel/projection.js +1 -1
  413. package/lib/types/dsh-adapter/channel/reports.d.ts +1 -1
  414. package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
  415. package/lib/types/dsh-adapter/channel/reports.js +11 -3
  416. package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
  417. package/lib/types/dsh-adapter/channel/session-fork.js +33 -20
  418. package/lib/types/dsh-adapter/channel/session-listing.d.ts +20 -0
  419. package/lib/types/dsh-adapter/channel/session-listing.d.ts.map +1 -0
  420. package/lib/types/dsh-adapter/channel/session-listing.js +51 -0
  421. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +3 -1
  422. package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
  423. package/lib/types/dsh-adapter/channel/session-metadata.js +56 -27
  424. package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
  425. package/lib/types/dsh-adapter/channel/session-resume.js +15 -8
  426. package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
  427. package/lib/types/dsh-adapter/channel/session-rewind.js +38 -24
  428. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
  429. package/lib/types/dsh-adapter/channel/session-tree-actions.js +38 -24
  430. package/lib/types/dsh-adapter/channel/settings-host.d.ts +2 -2
  431. package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
  432. package/lib/types/dsh-adapter/channel/settings-host.js +1 -0
  433. package/lib/types/dsh-adapter/channel/state.d.ts +37 -1
  434. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  435. package/lib/types/dsh-adapter/channel/state.js +14 -1
  436. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  437. package/lib/types/dsh-adapter/channel/subagent-projection.js +66 -6
  438. package/lib/types/dsh-adapter/channel/task-completion.d.ts +6 -0
  439. package/lib/types/dsh-adapter/channel/task-completion.d.ts.map +1 -0
  440. package/lib/types/dsh-adapter/channel/task-completion.js +114 -0
  441. package/lib/types/dsh-adapter/channel/transcript.d.ts +1 -1
  442. package/lib/types/dsh-adapter/channel/transcript.js +1 -1
  443. package/lib/types/dsh-adapter/channel/upstream-retry.d.ts +81 -0
  444. package/lib/types/dsh-adapter/channel/upstream-retry.d.ts.map +1 -0
  445. package/lib/types/dsh-adapter/channel/upstream-retry.js +138 -0
  446. package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
  447. package/lib/types/dsh-adapter/channel/workspace-actions.js +9 -8
  448. package/lib/types/dsh-adapter/channel-ui.d.ts +3 -1
  449. package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -1
  450. package/lib/types/dsh-adapter/channel-ui.js +4 -2
  451. package/lib/types/dsh-adapter/channel.d.ts +2 -2
  452. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  453. package/lib/types/dsh-adapter/channel.js +19 -5
  454. package/lib/types/dsh-adapter/context-occupancy.d.ts +81 -4
  455. package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
  456. package/lib/types/dsh-adapter/context-occupancy.js +108 -17
  457. package/lib/types/dsh-adapter/contract.d.ts +1 -1
  458. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  459. package/lib/types/dsh-adapter/contract.js +15 -0
  460. package/lib/types/dsh-adapter/entry-slot.d.ts +36 -0
  461. package/lib/types/dsh-adapter/entry-slot.d.ts.map +1 -0
  462. package/lib/types/dsh-adapter/entry-slot.js +28 -0
  463. package/lib/types/dsh-adapter/fresh-agent.d.ts +22 -0
  464. package/lib/types/dsh-adapter/fresh-agent.d.ts.map +1 -0
  465. package/lib/types/dsh-adapter/fresh-agent.js +221 -0
  466. package/lib/types/dsh-adapter/host-access.d.ts +16 -1
  467. package/lib/types/dsh-adapter/host-access.d.ts.map +1 -1
  468. package/lib/types/dsh-adapter/host-access.js +53 -2
  469. package/lib/types/dsh-adapter/host-contract.d.ts +103 -0
  470. package/lib/types/dsh-adapter/host-contract.d.ts.map +1 -0
  471. package/lib/types/dsh-adapter/host-contract.js +76 -0
  472. package/lib/types/dsh-adapter/host-dsh.d.ts +106 -0
  473. package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -0
  474. package/lib/types/dsh-adapter/host-dsh.js +466 -0
  475. package/lib/types/dsh-adapter/host-entry.d.ts +9 -0
  476. package/lib/types/dsh-adapter/host-entry.d.ts.map +1 -0
  477. package/lib/types/dsh-adapter/host-entry.js +228 -0
  478. package/lib/types/dsh-adapter/index.d.ts +55 -18
  479. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  480. package/lib/types/dsh-adapter/index.js +59 -7
  481. package/lib/types/dsh-adapter/install/executors.d.ts +44 -0
  482. package/lib/types/dsh-adapter/install/executors.d.ts.map +1 -0
  483. package/lib/types/dsh-adapter/install/executors.js +15 -0
  484. package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts +3 -0
  485. package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts.map +1 -0
  486. package/lib/types/dsh-adapter/install/pnpm-profile-add.js +150 -0
  487. package/lib/types/dsh-adapter/jobs.d.ts +7 -0
  488. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  489. package/lib/types/dsh-adapter/jobs.js +13 -0
  490. package/lib/types/dsh-adapter/lite-profile.d.ts +50 -0
  491. package/lib/types/dsh-adapter/lite-profile.d.ts.map +1 -0
  492. package/lib/types/dsh-adapter/lite-profile.js +49 -0
  493. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -1
  494. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
  495. package/lib/types/dsh-adapter/migrate/parse/jsonl.js +4 -3
  496. package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -1
  497. package/lib/types/dsh-adapter/oauth/profiles.js +5 -1
  498. package/lib/types/dsh-adapter/panels.d.ts +7 -0
  499. package/lib/types/dsh-adapter/panels.d.ts.map +1 -1
  500. package/lib/types/dsh-adapter/panels.js +35 -2
  501. package/lib/types/dsh-adapter/plugin-completions.d.ts +32 -0
  502. package/lib/types/dsh-adapter/plugin-completions.d.ts.map +1 -0
  503. package/lib/types/dsh-adapter/plugin-completions.js +80 -0
  504. package/lib/types/dsh-adapter/plugin-declaration.d.ts +21 -0
  505. package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -0
  506. package/lib/types/dsh-adapter/plugin-declaration.js +53 -0
  507. package/lib/types/dsh-adapter/plugin-host.d.ts +13 -2
  508. package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
  509. package/lib/types/dsh-adapter/plugin-host.js +34 -8
  510. package/lib/types/dsh-adapter/plugin-manager.d.ts +68 -0
  511. package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -0
  512. package/lib/types/dsh-adapter/plugin-manager.js +51 -0
  513. package/lib/types/dsh-adapter/plugin.d.ts +50 -1
  514. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  515. package/lib/types/dsh-adapter/plugin.js +870 -233
  516. package/lib/types/dsh-adapter/plugins-info.d.ts +44 -8
  517. package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
  518. package/lib/types/dsh-adapter/plugins-info.js +354 -34
  519. package/lib/types/dsh-adapter/process-exit.d.ts +43 -0
  520. package/lib/types/dsh-adapter/process-exit.d.ts.map +1 -0
  521. package/lib/types/dsh-adapter/process-exit.js +60 -0
  522. package/lib/types/dsh-adapter/root-dispose.d.ts +18 -0
  523. package/lib/types/dsh-adapter/root-dispose.d.ts.map +1 -0
  524. package/lib/types/dsh-adapter/root-dispose.js +28 -0
  525. package/lib/types/dsh-adapter/session-list-metadata.d.ts +20 -0
  526. package/lib/types/dsh-adapter/session-list-metadata.d.ts.map +1 -0
  527. package/lib/types/dsh-adapter/session-list-metadata.js +56 -0
  528. package/lib/types/dsh-adapter/session-seed.d.ts +11 -0
  529. package/lib/types/dsh-adapter/session-seed.d.ts.map +1 -0
  530. package/lib/types/dsh-adapter/session-seed.js +47 -0
  531. package/lib/types/dsh-adapter/sessions/list.d.ts +3 -1
  532. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
  533. package/lib/types/dsh-adapter/sessions/list.js +11 -5
  534. package/lib/types/dsh-adapter/sessions/snapshot.d.ts +0 -2
  535. package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -1
  536. package/lib/types/dsh-adapter/sessions/snapshot.js +7 -70
  537. package/lib/types/dsh-adapter/startup-args.d.ts +2 -0
  538. package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -1
  539. package/lib/types/dsh-adapter/startup-args.js +5 -0
  540. package/lib/types/dsh-adapter/subagents.d.ts +33 -1
  541. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  542. package/lib/types/dsh-adapter/subagents.js +110 -8
  543. package/lib/types/dsh-adapter/tui-settings.d.ts +57 -0
  544. package/lib/types/dsh-adapter/tui-settings.d.ts.map +1 -0
  545. package/lib/types/dsh-adapter/tui-settings.js +199 -0
  546. package/lib/types/effortPrefs.d.ts +6 -3
  547. package/lib/types/effortPrefs.d.ts.map +1 -1
  548. package/lib/types/effortPrefs.js +7 -4
  549. package/lib/types/hostEntryRoute.d.ts +18 -0
  550. package/lib/types/hostEntryRoute.d.ts.map +1 -0
  551. package/lib/types/hostEntryRoute.js +57 -0
  552. package/lib/types/i18n.d.ts +363 -1432
  553. package/lib/types/i18n.d.ts.map +1 -1
  554. package/lib/types/i18n.js +155 -385
  555. package/lib/types/ink/components/AlternateScreen.js +2 -2
  556. package/lib/types/ink/components/App.d.ts +1 -0
  557. package/lib/types/ink/components/App.d.ts.map +1 -1
  558. package/lib/types/ink/components/App.js +16 -4
  559. package/lib/types/ink/components/CursorDeclarationContext.d.ts +9 -0
  560. package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -1
  561. package/lib/types/ink/components/CursorDeclarationContext.js +2 -0
  562. package/lib/types/ink/hooks/use-copy-on-select.d.ts +2 -2
  563. package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
  564. package/lib/types/ink/hooks/use-copy-on-select.js +13 -7
  565. package/lib/types/ink/hooks/use-declared-cursor.d.ts +11 -3
  566. package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -1
  567. package/lib/types/ink/hooks/use-declared-cursor.js +30 -10
  568. package/lib/types/ink/ink.d.ts +22 -17
  569. package/lib/types/ink/ink.d.ts.map +1 -1
  570. package/lib/types/ink/ink.js +151 -40
  571. package/lib/types/ink/kitty-graphics.d.ts +2 -0
  572. package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
  573. package/lib/types/ink/kitty-graphics.js +6 -1
  574. package/lib/types/ink/node-cache.d.ts +2 -1
  575. package/lib/types/ink/node-cache.d.ts.map +1 -1
  576. package/lib/types/ink/output.d.ts +10 -4
  577. package/lib/types/ink/output.d.ts.map +1 -1
  578. package/lib/types/ink/output.js +14 -10
  579. package/lib/types/ink/render-node-to-output.d.ts +5 -2
  580. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  581. package/lib/types/ink/render-node-to-output.js +27 -9
  582. package/lib/types/ink/renderer.d.ts +1 -0
  583. package/lib/types/ink/renderer.d.ts.map +1 -1
  584. package/lib/types/ink/renderer.js +4 -3
  585. package/lib/types/ink/root.d.ts +4 -1
  586. package/lib/types/ink/root.d.ts.map +1 -1
  587. package/lib/types/ink/screen.d.ts +4 -2
  588. package/lib/types/ink/screen.d.ts.map +1 -1
  589. package/lib/types/ink/selection.d.ts +10 -1
  590. package/lib/types/ink/selection.d.ts.map +1 -1
  591. package/lib/types/ink/selection.js +94 -25
  592. package/lib/types/ink/stdin-handoff.d.ts +11 -0
  593. package/lib/types/ink/stdin-handoff.d.ts.map +1 -0
  594. package/lib/types/ink/stdin-handoff.js +20 -0
  595. package/lib/types/ink/styles.d.ts +2 -1
  596. package/lib/types/ink/styles.d.ts.map +1 -1
  597. package/lib/types/ink/terminal-image.d.ts +6 -4
  598. package/lib/types/ink/terminal-image.d.ts.map +1 -1
  599. package/lib/types/ink/terminal-image.js +16 -39
  600. package/lib/types/ink/terminal-notification.d.ts +8 -0
  601. package/lib/types/ink/terminal-notification.d.ts.map +1 -0
  602. package/lib/types/ink/terminal-notification.js +83 -0
  603. package/lib/types/ink/terminal.d.ts +9 -0
  604. package/lib/types/ink/terminal.d.ts.map +1 -1
  605. package/lib/types/ink/terminal.js +34 -1
  606. package/lib/types/ink/termio/csi.d.ts +11 -0
  607. package/lib/types/ink/termio/csi.d.ts.map +1 -1
  608. package/lib/types/ink/termio/csi.js +13 -0
  609. package/lib/types/ink/update-overflow-guard.d.ts +6 -0
  610. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  611. package/lib/types/ink/update-overflow-guard.js +17 -0
  612. package/lib/types/ink/wrap-text.d.ts +6 -0
  613. package/lib/types/ink/wrap-text.d.ts.map +1 -1
  614. package/lib/types/ink/wrap-text.js +17 -0
  615. package/lib/types/kernelPrefs.d.ts +129 -16
  616. package/lib/types/kernelPrefs.d.ts.map +1 -1
  617. package/lib/types/kernelPrefs.js +98 -35
  618. package/lib/types/math/inline-layout.d.ts +2 -0
  619. package/lib/types/math/inline-layout.d.ts.map +1 -1
  620. package/lib/types/math/inline-layout.js +5 -27
  621. package/lib/types/modelGroups.d.ts +15 -27
  622. package/lib/types/modelGroups.d.ts.map +1 -1
  623. package/lib/types/modelGroups.js +17 -31
  624. package/lib/types/modelPrefs.d.ts +5 -4
  625. package/lib/types/modelPrefs.d.ts.map +1 -1
  626. package/lib/types/modelPrefs.js +5 -4
  627. package/lib/types/modelRoute.d.ts +23 -9
  628. package/lib/types/modelRoute.d.ts.map +1 -1
  629. package/lib/types/modelRoute.js +25 -11
  630. package/lib/types/permissionPrefs.d.ts +34 -0
  631. package/lib/types/permissionPrefs.d.ts.map +1 -0
  632. package/lib/types/permissionPrefs.js +61 -0
  633. package/lib/types/plugin-host.d.ts +1 -0
  634. package/lib/types/plugin-host.d.ts.map +1 -1
  635. package/lib/types/presetPrefs.d.ts +17 -3
  636. package/lib/types/presetPrefs.d.ts.map +1 -1
  637. package/lib/types/presetPrefs.js +20 -3
  638. package/lib/types/reload.d.ts +6 -10
  639. package/lib/types/reload.d.ts.map +1 -1
  640. package/lib/types/reload.js +14 -14
  641. package/lib/types/screens/Chat.d.ts +22 -15
  642. package/lib/types/screens/Chat.d.ts.map +1 -1
  643. package/lib/types/screens/Chat.js +442 -272
  644. package/lib/types/screens/Launchpad.d.ts +27 -17
  645. package/lib/types/screens/Launchpad.d.ts.map +1 -1
  646. package/lib/types/screens/Launchpad.js +241 -78
  647. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  648. package/lib/types/screens/SessionSupervisor.js +53 -12
  649. package/lib/types/screens/Settings.d.ts.map +1 -1
  650. package/lib/types/screens/Settings.js +6 -0
  651. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  652. package/lib/types/screens/StatusLine.js +24 -7
  653. package/lib/types/screens/StatusMetrics.d.ts +46 -1
  654. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  655. package/lib/types/screens/StatusMetrics.js +72 -0
  656. package/lib/types/screens/chat/useKernelPicker.d.ts +8 -4
  657. package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -1
  658. package/lib/types/screens/chat/useKernelPicker.js +61 -21
  659. package/lib/types/screens/chat/useModelPicker.d.ts +42 -0
  660. package/lib/types/screens/chat/useModelPicker.d.ts.map +1 -0
  661. package/lib/types/screens/chat/useModelPicker.js +182 -0
  662. package/lib/types/screens/chatOverlay.d.ts +11 -4
  663. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  664. package/lib/types/screens/chatOverlay.js +0 -1
  665. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +4 -1
  666. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -1
  667. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +26 -5
  668. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +1 -1
  669. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  670. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +51 -29
  671. package/lib/types/sessionHistory.d.ts +5 -0
  672. package/lib/types/sessionHistory.d.ts.map +1 -1
  673. package/lib/types/sessionHistory.js +5 -0
  674. package/lib/types/sessions/listSnapshot.d.ts +6 -0
  675. package/lib/types/sessions/listSnapshot.d.ts.map +1 -0
  676. package/lib/types/sessions/listSnapshot.js +67 -0
  677. package/lib/types/settings/definitions.d.ts +50 -0
  678. package/lib/types/settings/definitions.d.ts.map +1 -1
  679. package/lib/types/settings/definitions.js +42 -8
  680. package/lib/types/terminal-utils/cjk-emphasis.d.ts +28 -0
  681. package/lib/types/terminal-utils/cjk-emphasis.d.ts.map +1 -0
  682. package/lib/types/terminal-utils/cjk-emphasis.js +31 -0
  683. package/lib/types/terminal-utils/markdown.d.ts +3 -1
  684. package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
  685. package/lib/types/terminal-utils/markdown.js +7 -2
  686. package/lib/types/theme.d.ts +29 -12
  687. package/lib/types/theme.d.ts.map +1 -1
  688. package/lib/types/theme.js +310 -23
  689. package/lib/types/themeCatalog.d.ts.map +1 -1
  690. package/lib/types/themeCatalog.js +21 -2
  691. package/lib/types/tips.js +4 -4
  692. package/lib/types/tuiSettingsFile.d.ts +56 -0
  693. package/lib/types/tuiSettingsFile.d.ts.map +1 -0
  694. package/lib/types/tuiSettingsFile.js +206 -0
  695. package/lib/types/ui.d.ts +2 -0
  696. package/lib/types/ui.d.ts.map +1 -1
  697. package/lib/types/ui.js +2 -0
  698. package/lib/types/update.d.ts +72 -26
  699. package/lib/types/update.d.ts.map +1 -1
  700. package/lib/types/update.js +131 -43
  701. package/lib/types/utils/bmp.d.ts +7 -0
  702. package/lib/types/utils/bmp.d.ts.map +1 -1
  703. package/lib/types/utils/bmp.js +27 -0
  704. package/lib/types/utils/bootTrace.d.ts +2 -0
  705. package/lib/types/utils/bootTrace.d.ts.map +1 -0
  706. package/lib/types/utils/bootTrace.js +20 -0
  707. package/lib/types/utils/clipboard.d.ts.map +1 -1
  708. package/lib/types/utils/clipboard.js +11 -3
  709. package/lib/types/utils/credentials.d.ts +14 -2
  710. package/lib/types/utils/credentials.d.ts.map +1 -1
  711. package/lib/types/utils/credentials.js +34 -11
  712. package/lib/types/utils/imageResize.d.ts +10 -20
  713. package/lib/types/utils/imageResize.d.ts.map +1 -1
  714. package/lib/types/utils/imageResize.js +61 -134
  715. package/lib/types/utils/inputPaste.d.ts +2 -2
  716. package/lib/types/utils/inputPaste.js +2 -2
  717. package/lib/types/utils/pastedImagePath.d.ts +5 -0
  718. package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
  719. package/lib/types/utils/pastedImagePath.js +33 -0
  720. package/package.json +36 -6
  721. package/presets/winbash.mjs +716 -0
  722. package/tui-profile/protocols/profile-definitions.d.ts +1 -0
  723. package/tui-profile/protocols/profile-definitions.js +14 -0
  724. package/tui-profile/protocols/tui-contributions.d.ts +55 -0
  725. package/tui-profile/protocols/tui-contributions.js +141 -0
  726. package/tui-profile/registry/contracts/backend-v1alpha1.json +13 -0
  727. package/tui-profile/registry/registry-0.15.json +12 -0
  728. package/lib/types/backends/claude/install.d.ts +0 -15
  729. package/lib/types/backends/claude/install.d.ts.map +0 -1
  730. package/lib/types/backends/claude/install.js +0 -91
  731. package/lib/types/channel/elicitation.d.ts.map +0 -1
  732. package/lib/types/dsh-adapter/channel/session-lineage.d.ts +0 -42
  733. package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +0 -1
  734. package/lib/types/dsh-adapter/channel/session-lineage.js +0 -51
  735. package/lib/types/utils/jsonl.d.ts.map +0 -1
@@ -20,6 +20,14 @@ import { getLang, tOr } from './i18n.js';
20
20
  export function isCommandCompletionToken(value) {
21
21
  return /^[a-z0-9_.:\/-]+$/iu.test(value);
22
22
  }
23
+ /**
24
+ * Whether a value can occupy an ARGUMENT token. The command name keeps the
25
+ * strict charset above; an argument additionally allows `@`, the scope sigil of
26
+ * the package names `/plugin info <name>` completes (`@deepseek-ai/dsh-base`).
27
+ */
28
+ function isArgumentCompletionToken(value) {
29
+ return /^[a-z0-9_.:@\/-]+$/iu.test(value);
30
+ }
23
31
  /**
24
32
  * The built-in slash commands (name + description pairs). Plugin-registered
25
33
  * commands merge in at runtime; locals win on name collisions.
@@ -75,7 +83,7 @@ export const LOCAL_COMMANDS = [
75
83
  { name: 'hooks', description: 'Show hooks status' },
76
84
  { name: 'mcp', description: 'Show MCP status' },
77
85
  { name: 'skills', description: 'List available skills' },
78
- { name: 'plugins', description: 'Show plugin contract, grant, and ledger diagnostics' },
86
+ { name: 'plugin', description: 'Show plugin diagnostics, and the plugins this profile added' },
79
87
  { name: 'update', description: 'Update dsh-tui and restart' },
80
88
  // Skills are discovered through the DSH registry and added at runtime.
81
89
  // A local entry of the same name would win the collision filter.
@@ -88,7 +96,10 @@ export const LOCAL_COMMANDS = [
88
96
  // Help / exit
89
97
  { name: 'help', description: 'Show shortcuts and commands' },
90
98
  { name: 'tips', description: 'Show usage tips and shortcuts' },
91
- { name: 'kernel', description: 'Choose the kernel dsh-tui runs on (DSH or Claude)' },
99
+ { name: 'kernel', description: 'Choose the kernel dsh-tui runs on (DSH, Codex or Claude)' },
100
+ { name: 'dsh', description: 'Switch to the DSH kernel (restarts into a new session)' },
101
+ { name: 'codex', description: 'Switch to the Codex kernel (restarts into a new session)' },
102
+ { name: 'claude', description: 'Switch to the Claude kernel (restarts into a new session)' },
92
103
  { name: 'restart', description: 'Restart dsh-tui and resume this session' },
93
104
  { name: 'exit', description: 'Exit dsh-tui' },
94
105
  { name: 'quit', description: 'Exit dsh-tui', tag: 'alias of /exit' },
@@ -145,9 +156,8 @@ const LOCAL_COMMAND_REQUIREMENTS = new Map([
145
156
  ['activity', 'any'], ['thinking', 'any'], ['vim', 'any'], ['terminal-setup', 'any'],
146
157
  ['connect', 'any'], ['update', 'any'], ['export', 'any'], ['panel', 'any'],
147
158
  // The composition root serves these by respawning the process, so every
148
- // backend offers them. /kernel is also the only way back to DSH from
149
- // inside a non-DSH conversation (the launchpad's kernel entry is the other).
150
- ['kernel', 'any'], ['restart', 'any'],
159
+ // backend offers them, including the direct kernel shortcuts.
160
+ ['kernel', 'any'], ['dsh', 'any'], ['codex', 'any'], ['claude', 'any'], ['restart', 'any'],
151
161
  ['compact', 'compact'], ['resume', 'resume'], ['home', 'resume'], ['agentview', 'resume'],
152
162
  ['bg', 'resume'], ['background', 'resume'], ['rewind', 'rewind'], ['fork', 'fork'],
153
163
  ['model', 'models'], ['effort', 'effort'], ['agents', 'subagents'], ['jobs', 'tasks'], ['mcp', 'mcp'],
@@ -156,6 +166,10 @@ const LOCAL_COMMAND_REQUIREMENTS = new Map([
156
166
  // /trace opens on every backend; one without trajectory data shows the
157
167
  // unsupported state (channel.trajectorySource() decides, not this table).
158
168
  ['trace', 'any'],
169
+ // /plugin reads DSH-side services (the plugin-host row and the profile
170
+ // plugin service), so it stays on the `dsh` default: stated here rather than
171
+ // inherited from the unlisted fallback.
172
+ ['plugin', 'dsh'],
159
173
  ]);
160
174
  /** The requirement of one built-in command name (unlisted → `dsh`). */
161
175
  export function localCommandRequirement(name) {
@@ -212,6 +226,24 @@ export function isHiddenCommandName(input) {
212
226
  const name = input.replace(/^\//, '').trim();
213
227
  return HIDDEN_COMMAND_NAMES.has(name);
214
228
  }
229
+ /**
230
+ * Commands that may run while the channel is not ready (`ChannelUi.ready`
231
+ * false): the purely local ones. Everything else is refused before dispatch.
232
+ */
233
+ const BOOT_SAFE_COMMAND_NAMES = new Set([
234
+ 'exit', 'quit', 'q',
235
+ 'help', 'tips',
236
+ 'theme', 'lang', 'vim',
237
+ 'kernel', 'dsh', 'codex', 'claude',
238
+ 'deepseek',
239
+ // Opening a session by hand: the retry after a failed startup open. Run
240
+ // while the open is still going, the binding drops the startup candidate.
241
+ 'new', 'resume',
242
+ ]);
243
+ /** Whether a command name (no slash) may run before the channel is ready. */
244
+ export function isBootSafeCommand(name) {
245
+ return BOOT_SAFE_COMMAND_NAMES.has(name);
246
+ }
215
247
  /**
216
248
  * Resolve a command's description in the active UI language. The en text in
217
249
  * `LOCAL_COMMANDS` (and the registry's own text for external commands) is
@@ -260,6 +292,9 @@ export const WORKING_GATE_NOTICES = {
260
292
  // them is refused (`/kernel` confirms a switch; `/channel` imports, adds,
261
293
  // manages or switches to a profile that needs a process restart).
262
294
  kernel: 'kernel-switch-while-working',
295
+ dsh: 'kernel-switch-while-working',
296
+ codex: 'kernel-switch-while-working',
297
+ claude: 'kernel-switch-while-working',
263
298
  channel: 'channel-switch-while-working',
264
299
  };
265
300
  /**
@@ -373,10 +408,11 @@ export function completeCommands(input, roots = LOCAL_COMMANDS, children = () =>
373
408
  // Token charset includes `. : /` so provider/model specs (e.g.
374
409
  // `deepseek/deepseek-flash`, `openai/gpt-4.1`) survive as ONE token —
375
410
  // the /model completion matches its candidates against the whole spec.
376
- if (!body.split(/[\t ]+/u).every(token => token === '' || isCommandCompletionToken(token)))
411
+ // Arguments additionally allow `@` (npm scopes); the command name does not.
412
+ const tokens = body.split(/[\t ]+/u);
413
+ if (!tokens.every((token, index) => token === '' || (index === 0 ? isCommandCompletionToken(token) : isArgumentCompletionToken(token))))
377
414
  return [];
378
415
  const trailingSeparator = /[\t ]$/u.test(body);
379
- const tokens = body.split(/[\t ]+/u);
380
416
  const prefix = trailingSeparator ? '' : (tokens.pop() ?? '');
381
417
  if (trailingSeparator && tokens.at(-1) === '')
382
418
  tokens.pop();
@@ -392,7 +428,10 @@ export function completeCommands(input, roots = LOCAL_COMMANDS, children = () =>
392
428
  const normalizedPrefix = prefix.toLowerCase();
393
429
  return candidates.flatMap(candidate => {
394
430
  const completionToken = matchingCompletionToken(candidate, normalizedPrefix);
395
- if (completionToken === undefined || !isCommandCompletionToken(completionToken))
431
+ // Root candidates are command names (strict charset); everything deeper is
432
+ // an argument, where a scoped package name must survive.
433
+ const tokenOk = tokens.length === 0 ? isCommandCompletionToken : isArgumentCompletionToken;
434
+ if (completionToken === undefined || !tokenOk(completionToken))
396
435
  return [];
397
436
  const path = [...tokens, completionToken];
398
437
  const commandLine = `/${path.join(' ')}`;
@@ -1 +1 @@
1
- {"version":3,"file":"AgentMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/components/AgentMessageComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAGnB,gBAAgB,EACjB,MAAM,yBAAyB,CAAA;AAmChC,MAAM,WAAW,yBAAyB;IACxC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IACnC;4CACwC;IACxC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAA;IACrC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC9C,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACrC;;;;8EAI0E;IAC1E,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;CAC3E;AAED;sDACsD;AACtD,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAA;AAE7E,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKrE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,yBAAyB,GAAG,KAAK,CAAC,SAAS,CA0JrJ"}
1
+ {"version":3,"file":"AgentMessageComposer.d.ts","sourceRoot":"","sources":["../../../src/components/AgentMessageComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAGnB,gBAAgB,EACjB,MAAM,yBAAyB,CAAA;AAmChC,MAAM,WAAW,yBAAyB;IACxC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IACnC;4CACwC;IACxC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAA;IACrC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC9C,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACrC;;;;8EAI0E;IAC1E,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;CAC3E;AAED;sDACsD;AACtD,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAA;AAE7E,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKrE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,yBAAyB,GAAG,KAAK,CAAC,SAAS,CA2JrJ"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React from 'react';
3
- import { Box, Text, useInput } from '../ui.js';
3
+ import { Box, Text, InputCaret, useInput } from '../ui.js';
4
4
  import { t } from '../i18n.js';
5
5
  import { isPlainReturnInput } from '../utils/modifiers.js';
6
6
  import { agentMessageStateColor, agentMessageStateText, agentMessageViaText } from './messages/TranscriptLeaves.js';
@@ -151,7 +151,8 @@ export function AgentMessageComposer({ target, control, messages, focused, onFoc
151
151
  event.stopImmediatePropagation();
152
152
  }, { isActive: focused && keyHandlerRef === undefined });
153
153
  const viaLabel = agentMessageViaText(control.via);
154
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "accent", children: '› ' }), _jsx(Text, { bold: true, children: t('agent-message-compose-title', { name: shownName }) }), _jsx(Text, { dimColor: true, children: ` · ${viaLabel}` })] }), target.ambiguous === true && (_jsx(Text, { dimColor: true, children: t('agent-message-target-ambiguous', { id: target.agentId.slice(0, 8) }) })), target.name === undefined && (_jsx(Text, { color: "warning", children: t('agent-message-target-nameless') })), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { children: text.slice(0, caret) }), _jsx(Text, { inverse: true, children: ' ' }), _jsx(Text, { children: text.slice(caret) })] }), notice !== null && (_jsx(Text, { color: notice.failure === true ? 'error' : undefined, children: `${t(notice.key)}${notice.failure === true ? ` · ${t('agent-message-draft-retained')}` : ''}` })), latestIntentState !== undefined && sent !== null && (_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { dimColor: true, children: `${t('agent-message-submitted')}: ` }), _jsx(Text, { color: agentMessageStateColor(latestIntentState), children: agentMessageStateText(latestIntentState) }), _jsx(Text, { dimColor: true, children: ` · ${t('agent-message-inbox-note')}` })] })), _jsx(Text, { dimColor: true, children: canSubmit
154
+ const afterCaret = nextCodePoint(text, caret);
155
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "accent", children: '› ' }), _jsx(Text, { bold: true, children: t('agent-message-compose-title', { name: shownName }) }), _jsx(Text, { dimColor: true, children: ` · ${viaLabel}` })] }), target.ambiguous === true && (_jsx(Text, { dimColor: true, children: t('agent-message-target-ambiguous', { id: target.agentId.slice(0, 8) }) })), target.name === undefined && (_jsx(Text, { color: "warning", children: t('agent-message-target-nameless') })), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { children: text.slice(0, caret) }), _jsx(InputCaret, { active: focused, children: text.slice(caret, afterCaret) || ' ' }), _jsx(Text, { children: text.slice(afterCaret) })] }), notice !== null && (_jsx(Text, { color: notice.failure === true ? 'error' : undefined, children: `${t(notice.key)}${notice.failure === true ? ` · ${t('agent-message-draft-retained')}` : ''}` })), latestIntentState !== undefined && sent !== null && (_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { dimColor: true, children: `${t('agent-message-submitted')}: ` }), _jsx(Text, { color: agentMessageStateColor(latestIntentState), children: agentMessageStateText(latestIntentState) }), _jsx(Text, { dimColor: true, children: ` · ${t('agent-message-inbox-note')}` })] })), _jsx(Text, { dimColor: true, children: canSubmit
155
156
  ? (control.steer === true
156
157
  ? t('agent-message-hint-queue-steer')
157
158
  : t('agent-message-hint-queue'))
@@ -1 +1 @@
1
- {"version":3,"file":"BtwPanel.d.ts","sourceRoot":"","sources":["../../../src/components/BtwPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE;IACD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,GAAG,KAAK,CAAC,SAAS,CA+ClB"}
1
+ {"version":3,"file":"BtwPanel.d.ts","sourceRoot":"","sources":["../../../src/components/BtwPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE;IACD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,GAAG,KAAK,CAAC,SAAS,CAqDlB"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  /**
3
3
  * BtwPanelFallback:btw 侧栏面板未启用时的 /btw 浮层。同一问答只在一处
4
4
  * 呈现,Chat 只在面板未启用时挂它。
@@ -12,6 +12,7 @@ import React from 'react';
12
12
  import { Box, Text, useInput, useTerminalSize } from '../ui.js';
13
13
  import { t } from '../i18n.js';
14
14
  import { isPlainReturnInput } from '../utils/modifiers.js';
15
+ import { truncateWidth } from '../trajectory/format.js';
15
16
  import { BtwThreadView } from './sidePanel/btw/BtwThreadView.js';
16
17
  export function BtwPanelFallback({ thread, onClose, onCopy, }) {
17
18
  const scrollRef = React.useRef(null);
@@ -39,7 +40,8 @@ export function BtwPanelFallback({ thread, onClose, onCopy, }) {
39
40
  // 浮层拥有键盘:吞掉其余一切,不泄漏进身后的输入框。
40
41
  event.stopImmediatePropagation();
41
42
  });
42
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { flexDirection: "column", maxHeight: Math.max(5, rows - 8), children: _jsx(BtwThreadView, { thread: thread, width: columns, height: Math.max(5, rows - 10), alive: true, scrollHandleRef: scrollRef }) }), _jsx(Box, { onClick: settled(thread) ? () => { const latest = latestAnswer(thread); if (latest !== '')
43
+ const title = thread !== undefined && thread.turns.length > 0 ? thread.turns[0].question : '';
44
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", width: "100%", flexShrink: 0, children: [_jsxs(Text, { color: "warning", bold: true, children: [t('panel-title-btw'), " "] }), _jsx(Text, { dimColor: true, wrap: "truncate", children: truncateWidth(title, Math.max(4, columns - 10)) })] }), _jsx(Box, { flexDirection: "column", maxHeight: Math.max(5, rows - 9), children: _jsx(BtwThreadView, { thread: thread, width: columns, height: Math.max(5, rows - 11), alive: true, scrollHandleRef: scrollRef }) }), _jsx(Box, { onClick: settled(thread) ? () => { const latest = latestAnswer(thread); if (latest !== '')
43
45
  onCopy(latest); } : undefined, children: _jsxs(Text, { dimColor: true, children: [settled(thread) ? t('btw-hint-done') : t('btw-hint-loading'), ' · ', t('btw-panel-unavailable')] }) })] }));
44
46
  }
45
47
  function latestAnswer(thread) {
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { Box, Text, useAnimationFrame, useTerminalSize } from '../../ui.js';
4
4
  import { formatJobDuration } from '../../dsh-adapter/jobs.js';
5
5
  import { t } from '../../i18n.js';
6
- import wrapText from '../../ink/wrap-text.js';
6
+ import { wrapTextLines } from '../../ink/wrap-text.js';
7
7
  import { isMinimalUiMode } from '../../minimalUiMode.js';
8
8
  import { ProgressBar } from '../design-system/ProgressBar.js';
9
9
  /** The waterfall window mirrors the subagent card: a constant-height region. */
@@ -59,7 +59,7 @@ export function jobOutputRows(entries, width, budget) {
59
59
  const textWidth = Math.max(1, width - 1);
60
60
  for (let index = entries.length - 1; index >= 0 && rows.length < budget; index--) {
61
61
  const entry = entries[index];
62
- const wrapped = wrapText(entry.text, textWidth, 'wrap').split('\n');
62
+ const wrapped = wrapTextLines(entry.text, textWidth).map(line => line.text);
63
63
  for (let row = wrapped.length - 1; row >= 0 && rows.length < budget; row--) {
64
64
  rows.unshift({
65
65
  key: `${index}-${row}`,
@@ -78,7 +78,7 @@ export function jobCommandRows(text, width, expanded) {
78
78
  const body = (script === command ? script : script.replace(/^(['"])([\s\S]*)\1$/, '$2')).replace(/\r\n?/g, '\n').trim();
79
79
  const source = body.split('\n').filter((line, index, lines) => line.trim() !== '' || index === 0 || lines[index - 1]?.trim() !== '').join('\n');
80
80
  const shown = expanded ? source : source.split('\n')[0];
81
- const rows = wrapText(COMMAND_MARK + ' ' + shown, Math.max(1, width), 'wrap').split('\n');
81
+ const rows = wrapTextLines(COMMAND_MARK + ' ' + shown, Math.max(1, width)).map(line => line.text);
82
82
  return expanded ? rows : rows.slice(0, 1);
83
83
  }
84
84
  /** The renderer draws the continuous section edge across all content rows. */
@@ -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,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAMlD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,aAAa,EACb,OAAO,EACP,KAAU,EACV,MAAM,EACN,QAAQ,EACR,MAAM,EACN,WAAW,GACZ,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;IACf,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,KAAK,GAAG,KAAK,CAAA;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;sDACkD;IAClD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,iCAAiC;IACjC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAA;CACrC,GAAG,KAAK,CAAC,SAAS,CAkGlB"}
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,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAMlD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,aAAa,EACb,OAAO,EACP,KAAU,EACV,MAAM,EACN,QAAQ,EACR,MAAM,EACN,WAAW,GACZ,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;IACf,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,KAAK,GAAG,KAAK,CAAA;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;sDACkD;IAClD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,iCAAiC;IACjC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAA;CACrC,GAAG,KAAK,CAAC,SAAS,CAgHlB"}
@@ -58,14 +58,28 @@ export function CommandSuggestions({ commands, selectedIndex, columns, query = '
58
58
  const commandIndex = startIndex + offset;
59
59
  const isSelected = command.name === commands[selectedIndex]?.name;
60
60
  const isHeld = commandIndex >= holdStart;
61
- const tagText = command.tag ? `[${command.tag}] ` : '';
61
+ // tag = 宿主命令/技能的 `input.hint`(如 `/goal` 的
62
+ // `[<objective>|clear|edit <objective>|pause|resume]`,52 列),可能比整行
63
+ // 预算还长。它必须先吃预算并**截断**:行内容一旦超过 `usable`,flex 行就
64
+ // 出现负空间——两侧 `│` 被压到亚 1 列宽,`measure-text` 的
65
+ // `ceil(1 / 0.98) = 2` 会把整行量成两行,屏幕上就是该行后面多出一条幽灵
66
+ // 空行(启动页 72 列的卡片里 `/goal` 实测如此)。
67
+ const rawTagText = command.tag ? `[${command.tag}] ` : '';
68
+ // 行预算:内容宽 − 前导空格 1 − 指针列 2 − 名字列。
69
+ const rowBudget = Math.max(0, usable - 3 - nameWidth);
70
+ const tagText = stringWidth(rawTagText) <= rowBudget
71
+ ? rawTagText
72
+ : rowBudget >= 1 ? truncateToWidth(rawTagText, rowBudget - 1) + '…' : '';
62
73
  const tagWidth = stringWidth(tagText);
63
- // 行预算:内容宽 − 前导空格 1 − 指针列 2。
64
- const descriptionWidth = Math.max(0, usable - 3 - nameWidth - tagWidth);
74
+ // 预算被 tag 吃光时**不画**省略号:`truncateToWidth(raw, -1) + '…'` 会白送
75
+ // 1 列,同样把行顶出 `usable`。
76
+ const descriptionWidth = Math.max(0, rowBudget - tagWidth);
65
77
  const rawDescription = localizedDescription(command);
66
- const description = stringWidth(rawDescription) > descriptionWidth
67
- ? truncateToWidth(rawDescription, descriptionWidth - 1) + '…'
68
- : rawDescription;
78
+ const description = descriptionWidth === 0
79
+ ? ''
80
+ : stringWidth(rawDescription) > descriptionWidth
81
+ ? truncateToWidth(rawDescription, descriptionWidth - 1) + '…'
82
+ : rawDescription;
69
83
  const padAfter = Math.max(0, nameWidth - stringWidth(command.name));
70
84
  // 灰区整行一个 `subtle`,且刻意不做查询命中提亮(灰区不该看起来像
71
85
  // 「可用」)。选中行仍走下方通用样式,保证光标始终可见。
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { Color } from '../ink/styles.js';
3
3
  import { type ContextSegments } from '../screens/StatusMetrics.js';
4
+ import type { ContextBreakdown } from '../adapter/ports/channel-view.js';
4
5
  /**
5
6
  * The hoverable JSX twin of `renderContextBar`: the same segmented context
6
7
  * bar (same largest-remainder column split, same free-segment readout),
@@ -20,9 +21,12 @@ import { type ContextSegments } from '../screens/StatusMetrics.js';
20
21
  * The component path follows the ANSI path's geometry: this exists so the bar
21
22
  * can react to the pointer, not to restyle it.
22
23
  */
23
- export declare function ContextBarView({ segments, usedTokens, contextWindow, width, colors, onHover, }: {
24
+ export declare function ContextBarView({ segments, breakdown, usedTokens, contextWindow, width, colors, onHover, }: {
24
25
  /** Local token estimates per content type, dividing the filled portion only. */
25
26
  segments: ContextSegments;
27
+ /** The meter's composition, when the harness publishes one; the estimates
28
+ * above then only split its message side. */
29
+ breakdown?: ContextBreakdown | undefined;
26
30
  /** Measured occupancy, driving both fill length and readout. */
27
31
  usedTokens: number;
28
32
  /** The context window size in tokens. */
@@ -1 +1 @@
1
- {"version":3,"file":"ContextBarView.d.ts","sourceRoot":"","sources":["../../../src/components/ContextBarView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAWL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAA;AAEpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,UAAU,EACV,aAAa,EACb,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAE;IACD,gFAAgF;IAChF,QAAQ,EAAE,eAAe,CAAA;IACzB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAA;IAClB,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAA;KAAE,CAAA;IAC7C;+EAC2E;IAC3E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CACrC,GAAG,KAAK,CAAC,SAAS,CA6ElB"}
1
+ {"version":3,"file":"ContextBarView.d.ts","sourceRoot":"","sources":["../../../src/components/ContextBarView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAYL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAExE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,SAAS,EACT,UAAU,EACV,aAAa,EACb,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAE;IACD,gFAAgF;IAChF,QAAQ,EAAE,eAAe,CAAA;IACzB;kDAC8C;IAC9C,SAAS,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACxC,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAA;IAClB,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAA;KAAE,CAAA;IAC7C;+EAC2E;IAC3E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CACrC,GAAG,KAAK,CAAC,SAAS,CAqFlB"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Box, Text, useTheme } from '../ui.js';
3
3
  import { getTheme } from '../theme.js';
4
- import { FREE_SEGMENT_FILL, FREE_SEGMENT_TEXT, USED_SEGMENTS, usedSegmentColor, contextBarColumns, contextBarReadout, contextBarSegmentColors, contextBarUsedColor, contextPressureStep, rightAlignBarText, } from '../screens/StatusMetrics.js';
4
+ import { FREE_SEGMENT_FILL, FREE_SEGMENT_TEXT, USED_SEGMENTS, usedSegmentColor, barSegments, contextBarColumns, contextBarReadout, contextBarSegmentColors, contextBarUsedColor, contextPressureStep, rightAlignBarText, } from '../screens/StatusMetrics.js';
5
5
  /**
6
6
  * The hoverable JSX twin of `renderContextBar`: the same segmented context
7
7
  * bar (same largest-remainder column split, same free-segment readout),
@@ -21,7 +21,7 @@ import { FREE_SEGMENT_FILL, FREE_SEGMENT_TEXT, USED_SEGMENTS, usedSegmentColor,
21
21
  * The component path follows the ANSI path's geometry: this exists so the bar
22
22
  * can react to the pointer, not to restyle it.
23
23
  */
24
- export function ContextBarView({ segments, usedTokens, contextWindow, width, colors, onHover, }) {
24
+ export function ContextBarView({ segments, breakdown, usedTokens, contextWindow, width, colors, onHover, }) {
25
25
  // The five used fills come from the palette (contextBar* keys); only the free
26
26
  // segment still takes an override, since its shading is a light/dark call the
27
27
  // call site already made.
@@ -29,7 +29,10 @@ export function ContextBarView({ segments, usedTokens, contextWindow, width, col
29
29
  if (width <= 0 || contextWindow <= 0)
30
30
  return null;
31
31
  const segmentColors = contextBarSegmentColors(getTheme(themeName));
32
- const columns = contextBarColumns(segments, usedTokens, contextWindow, width);
32
+ // The composition re-weights the fills only: the occupancy still fixes the
33
+ // span, so the fills can never add up to a longer or shorter bar than the
34
+ // readout right of them quotes.
35
+ const columns = contextBarColumns(barSegments(segments, breakdown), usedTokens, contextWindow, width);
33
36
  // The readout is the bar's only text, and its one pressure signal: amber
34
37
  // from 80% occupancy, red from 95% (the footer's shared thresholds). The
35
38
  // theme key wins over the free-text color, which stays for comfortable
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ExtensionDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,OAAO,EAAe,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAGrG,MAAM,MAAM,oBAAoB,GAAG;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,GAAG,KAAK,CAAC,SAAS,CASrG"}
1
+ {"version":3,"file":"ExtensionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ExtensionDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,OAAO,EAAe,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAGrG,MAAM,MAAM,oBAAoB,GAAG;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,GAAG,KAAK,CAAC,SAAS,CASrG"}
@@ -32,6 +32,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
32
32
  import React from 'react';
33
33
  import { t } from '../i18n.js';
34
34
  import { Box, Text, useInput, useTerminalSize } from '../ui.js';
35
+ import { SearchBox } from './SearchBox.js';
35
36
  import { stringWidth } from '../ink/stringWidth.js';
36
37
  import { isPlainReturnInput } from '../utils/modifiers.js';
37
38
  import { actionMatches } from '../utils/keymap.js';
@@ -247,7 +248,5 @@ function InputDialog({ dialog, onDecide, onCancel, }) {
247
248
  insertChunk(event.isPasted ? flattenPasteInline(input) : input, event.isPasted === true);
248
249
  }
249
250
  }, { isActive: true });
250
- const shown = value === '' && dialog.placeholder !== undefined ? dialog.placeholder : value;
251
- const shownPoints = [...shown];
252
- return (_jsxs(Pane, { color: "permission", children: [_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "remember", bold: true, children: dialog.title }) }), _jsxs(Text, { children: [_jsx(Text, { dimColor: value === '', children: shownPoints.slice(0, cursor).join('') }), _jsx(Text, { inverse: true, children: shownPoints[cursor] ?? ' ' }), _jsx(Text, { children: shownPoints.slice(cursor + 1).join('') })] })] }), _jsx(Text, { dimColor: true, italic: true, children: _jsx(HintLine, { text: t('hint-ext-dialog-input') }) })] }));
251
+ return (_jsxs(Pane, { color: "permission", children: [_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "remember", bold: true, children: dialog.title }) }), _jsx(SearchBox, { query: value, cursorOffset: [...value].slice(0, cursor).join('').length, placeholder: dialog.placeholder ?? '', placeholderAlign: "left", prefix: "", borderless: true, isFocused: true, isTerminalFocused: true })] }), _jsx(Text, { dimColor: true, italic: true, children: _jsx(HintLine, { text: t('hint-ext-dialog-input') }) })] }));
253
252
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GoalTodoPanel.d.ts","sourceRoot":"","sources":["../../../src/components/GoalTodoPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,2BAA2B,CAAA;AAoC3E;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,OAAe,EAAE,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CASnH;AAsDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAiB,EACjB,QAAQ,EACR,OAAmB,EACnB,OAAc,EACd,QAAQ,EACR,SAAS,GACV,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB;8CAC0C;IAC1C,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC7B;oDACgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;oDAEgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,KAAK,CAAC,SAAS,CAkMlB"}
1
+ {"version":3,"file":"GoalTodoPanel.d.ts","sourceRoot":"","sources":["../../../src/components/GoalTodoPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,2BAA2B,CAAA;AAuC3E;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,OAAe,EAAE,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CASnH;AAsDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAiB,EACjB,QAAQ,EACR,OAAmB,EACnB,OAAc,EACd,QAAQ,EACR,SAAS,GACV,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB;8CAC0C;IAC1C,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC7B;oDACgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;oDAEgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,KAAK,CAAC,SAAS,CA0MlB"}
@@ -1,10 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import React from 'react';
3
3
  import { Box, Text, useAnimationFrame } from '../ui.js';
4
- import wrapText from '../ink/wrap-text.js';
4
+ import wrapText, { wrapTextLines } from '../ink/wrap-text.js';
5
5
  import { t } from '../i18n.js';
6
6
  import { primaryComboString } from '../utils/keymap.js';
7
7
  import { formatGoalBudget, formatGoalBudgetCompact } from '../channel/goal-command.js';
8
+ import { useTooltip } from './Tooltip.js';
9
+ import { stringWidth } from '../ink/stringWidth.js';
8
10
  /** Maximum todo rows shown before the overflow line. */
9
11
  const MAX_TODOS = 8;
10
12
  const PHASE_LABEL = {
@@ -91,6 +93,15 @@ function BranchPrefix({ last }) {
91
93
  */
92
94
  export function GoalTodoPanel({ channel, collapsed = false, onToggle, variant = 'default', visible = true, maxTodos, wrapWidth, }) {
93
95
  const goal = channel.goal;
96
+ const objectiveRef = React.useRef(null);
97
+ const goalTooltip = useTooltip(() => {
98
+ const width = objectiveRef.current?.yogaNode?.getComputedWidth() ?? 0;
99
+ if (goal === undefined || width <= 0)
100
+ return '';
101
+ return stringWidth(goal.objective) > width || goal.objective.includes('\n')
102
+ ? goal.objective
103
+ : '';
104
+ });
94
105
  const allTodos = channel.todos ?? [];
95
106
  const doneCount = allTodos.filter(todo => todo.status === 'completed').length;
96
107
  // Completed rows are useful progress while a turn is running, but become
@@ -152,7 +163,7 @@ export function GoalTodoPanel({ channel, collapsed = false, onToggle, variant =
152
163
  if (wrapWidth !== undefined && wrapWidth > 4) {
153
164
  let used = 0;
154
165
  for (const todo of todos) {
155
- const wrapped = wrapText(todo.content, wrapWidth, 'wrap').split('\n');
166
+ const wrapped = wrapTextLines(todo.content, wrapWidth).map(line => line.text);
156
167
  const lines = wrapped.length <= 2
157
168
  ? wrapped
158
169
  : [wrapped[0], wrapText(wrapped.slice(1).join(''), wrapWidth, 'truncate')];
@@ -171,7 +182,7 @@ export function GoalTodoPanel({ channel, collapsed = false, onToggle, variant =
171
182
  // Collapsed preview: the live task when one runs, else the next open row.
172
183
  const preview = allTodos.find(todo => todo.status === 'in_progress')
173
184
  ?? allTodos.find(todo => todo.status !== 'completed');
174
- return (_jsxs(Box, { ref: variant === 'panel' ? clockRef : undefined, flexDirection: "column", paddingLeft: variant === 'panel' ? 1 : 2, paddingRight: variant === 'panel' ? 1 : 2, paddingTop: 1, children: [goal !== undefined && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", width: "100%", height: 1, children: [_jsx(Text, { color: "suggestion", children: "\uD83C\uDFAF " }), _jsx(Box, { flexGrow: 1, flexShrink: 1, children: _jsx(Text, { bold: true, wrap: "truncate", children: goal.objective }) }), _jsx(Box, { flexShrink: 0, marginLeft: 1, children: _jsx(PhaseBadge, { phase: goal.phase, roundsStarted: goal.roundsStarted, maxGoalRounds: goal.maxGoalRounds, budget: goal.budget, elapsed: elapsed }) })] }), goal.phase === 'blocked' && goal.blockedReason !== undefined && (_jsxs(Box, { flexDirection: "row", marginTop: 1, height: 1, children: [_jsx(Text, { dimColor: true, children: "\u2502 " }), _jsx(Text, { color: "error", wrap: "truncate", children: goal.blockedReason.message })] }))] })), showTodoSection && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", height: 1, onClick: onToggle, onMouseEnter: () => setHeaderHovered(true), onMouseLeave: () => setHeaderHovered(false), backgroundColor: headerHovered ? 'userMessageBackgroundHover' : undefined, children: [_jsxs(Text, { dimColor: true, children: [collapsed ? '▸' : '▾', " "] }), _jsxs(Text, { dimColor: true, children: ["\u2713 ", doneCount, "/", allTodos.length] }), collapsed && preview !== undefined && (_jsx(Box, { flexGrow: 1, flexShrink: 1, marginLeft: 1, children: preview.status === 'in_progress' ? (_jsxs(Text, { wrap: "truncate", children: [_jsx(Text, { color: "suggestion", children: "\u25CF " }), preview.content] })) : (_jsxs(Text, { wrap: "truncate", dimColor: true, children: ["\u25CB ", preview.content] })) }))] }), !collapsed && (_jsxs(Box, { flexDirection: "column", children: [visibleTodos.map((item, index) => {
185
+ return (_jsxs(Box, { ref: variant === 'panel' ? clockRef : undefined, flexDirection: "column", paddingLeft: variant === 'panel' ? 1 : 2, paddingRight: variant === 'panel' ? 1 : 2, paddingTop: 1, children: [goal !== undefined && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", width: "100%", height: 1, children: [_jsx(Text, { color: "suggestion", children: "\uD83C\uDFAF " }), _jsx(Box, { ref: objectiveRef, flexGrow: 1, flexShrink: 1, ...goalTooltip, children: _jsx(Text, { bold: true, wrap: "truncate", children: goal.objective }) }), _jsx(Box, { flexShrink: 0, marginLeft: 1, children: _jsx(PhaseBadge, { phase: goal.phase, roundsStarted: goal.roundsStarted, maxGoalRounds: goal.maxGoalRounds, budget: goal.budget, elapsed: elapsed }) })] }), goal.phase === 'blocked' && goal.blockedReason !== undefined && (_jsxs(Box, { flexDirection: "row", marginTop: 1, height: 1, children: [_jsx(Text, { dimColor: true, children: "\u2502 " }), _jsx(Text, { color: "error", wrap: "truncate", children: goal.blockedReason.message })] }))] })), showTodoSection && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", height: 1, onClick: onToggle, onMouseEnter: () => setHeaderHovered(true), onMouseLeave: () => setHeaderHovered(false), backgroundColor: headerHovered ? 'userMessageBackgroundHover' : undefined, children: [_jsxs(Text, { dimColor: true, children: [collapsed ? '▸' : '▾', " "] }), _jsxs(Text, { dimColor: true, children: ["\u2713 ", doneCount, "/", allTodos.length] }), collapsed && preview !== undefined && (_jsx(Box, { flexGrow: 1, flexShrink: 1, marginLeft: 1, children: preview.status === 'in_progress' ? (_jsxs(Text, { wrap: "truncate", children: [_jsx(Text, { color: "suggestion", children: "\u25CF " }), preview.content] })) : (_jsxs(Text, { wrap: "truncate", dimColor: true, children: ["\u25CB ", preview.content] })) }))] }), !collapsed && (_jsxs(Box, { flexDirection: "column", children: [visibleTodos.map((item, index) => {
175
186
  const last = index === visibleTodos.length - 1 && hidden === 0;
176
187
  return item.lines.map((line, li) => (_jsxs(Box, { flexDirection: "row", height: 1, children: [li === 0 ? (_jsxs(_Fragment, { children: [_jsx(BranchPrefix, { last: last }), _jsx(TodoGlyph, { status: item.todo.status })] })) : (_jsx(Text, { dimColor: true, children: last ? ' ' : '\u2502 ' })), _jsx(Text, { wrap: "truncate", dimColor: item.todo.status === 'completed', children: line })] }, li)));
177
188
  }), hidden > 0 && (_jsxs(Box, { flexDirection: "row", height: 1, children: [_jsx(BranchPrefix, { last: true }), _jsxs(Text, { dimColor: true, children: ["\u2026 ", hidden, " more"] })] })), variant !== 'panel' && (_jsxs(Text, { dimColor: true, children: [" ", t('goal-todo-fold-hint', { key: primaryComboString('todoFold') })] }))] }))] }))] }));
@@ -59,7 +59,7 @@ export function InlineMathParagraph({ token, highlight }) {
59
59
  }, [results, width.value, formulas, token, highlight]);
60
60
  return (_jsxs(Box, { ref: width.ref, flexDirection: "column", children: [_jsx(Box, { height: 0, overflow: "hidden", children: _jsx(Text, { wrap: "truncate", children: WIDTH_PROBE }) }), layout === undefined
61
61
  ? _jsx(Text, { children: plain })
62
- : layout.rows.map((row, rowIndex) => (_jsx(Box, { flexDirection: "row", height: 1, softWrapContinuation: row.continuation ? layout.rows[rowIndex - 1]?.width : undefined, children: row.pieces.map((piece, pieceIndex) => {
62
+ : layout.rows.map((row, rowIndex) => (_jsx(Box, { flexDirection: "row", height: 1, softWrapContinuation: row.continuation ? (row.gap ? -1 : 1) * layout.rows[rowIndex - 1].width : undefined, children: row.pieces.map((piece, pieceIndex) => {
63
63
  if (piece.kind === 'text') {
64
64
  return (_jsx(Box, { width: piece.width, flexShrink: 0, children: _jsx(Text, { wrap: "truncate", children: piece.text }) }, `t${pieceIndex}`));
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"KernelPicker.d.ts","sourceRoot":"","sources":["../../../src/components/KernelPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IACpE,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,uBAAuB;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC,GAAG,KAAK,CAAC,SAAS,CAiDlB"}
1
+ {"version":3,"file":"KernelPicker.d.ts","sourceRoot":"","sources":["../../../src/components/KernelPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IACpE,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,uBAAuB;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC,GAAG,KAAK,CAAC,SAAS,CAoDlB"}
@@ -32,6 +32,6 @@ export function KernelPicker({ options, focusIndex, pinned, onPick }) {
32
32
  , {
33
33
  // 不可选 = 变暗(**始终**变暗,焦点落上来也只是多一个 ❯ 指针,
34
34
  // 不把「这一行选不了」这件事照亮成可选的假象)。
35
- dimColor: !option.selectable, color: option.current ? 'success' : focused && option.selectable ? 'suggestion' : undefined, bold: focused && option.selectable, wrap: "truncate-end", children: t(option.labelKey) }) }, option.id));
35
+ dimColor: !option.selectable, color: option.current ? 'success' : focused && option.selectable ? 'suggestion' : undefined, bold: focused && option.selectable, wrap: "truncate-end", children: option.label.kind === 'key' ? t(option.label.key) : option.label.text }) }, option.id));
36
36
  }), pinned === true && (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { dimColor: true, wrap: "wrap", children: t('kernel-pinned-hint') }) })), _jsx(Text, { dimColor: true, italic: true, children: _jsx(HintLine, { text: t('hint-confirm-exit') }) })] }) }));
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LogoV2.d.ts","sourceRoot":"","sources":["../../../src/components/LogoV2.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAoD,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAMxH,OAAO,EAAqC,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAM9E,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAU/E,OAAO,EAA+E,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AA+CjI;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAU,EACV,MAAM,EACN,GAAQ,EACR,SAAiB,EACjB,KAAK,EACL,GAAG,EACH,MAAM,EACN,KAAY,EACZ,SAAgB,EAChB,SAAiB,EACjB,KAAkB,EAClB,OAAe,EACf,UAAU,EACV,WAAW,EACX,OAAe,EACf,KAAK,EACL,GAAG,EACH,UAAU,EACV,KAAe,EACf,MAAe,EACf,WAAmB,EACnB,aAAa,GACd,EAAE;IACD,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB;0CACsC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,6EAA6E;IAC7E,GAAG,CAAC,EAAE,GAAG,CAAA;IACT;;qCAEiC;IACjC,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACtB;oEACgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mFAAmF;IACnF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;;8CAO0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;mCAG+B;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gDAAgD;IAChD,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;sCACkC;IAClC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB;;;4CAGwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;mCAG+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;2EACuE;IACvE,KAAK,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACnC;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC1B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAC9B;wDACoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GAAG,KAAK,CAAC,SAAS,CAujBlB"}
1
+ {"version":3,"file":"LogoV2.d.ts","sourceRoot":"","sources":["../../../src/components/LogoV2.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAoD,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAMxH,OAAO,EAAqC,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAM9E,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAU/E,OAAO,EAA+E,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AA+CjI;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAU,EACV,MAAM,EACN,GAAQ,EACR,SAAiB,EACjB,KAAK,EACL,GAAG,EACH,MAAM,EACN,KAAY,EACZ,SAAgB,EAChB,SAAiB,EACjB,KAAkB,EAClB,OAAe,EACf,UAAU,EACV,WAAW,EACX,OAAe,EACf,KAAK,EACL,GAAG,EACH,UAAU,EACV,KAAe,EACf,MAAe,EACf,WAAmB,EACnB,aAAa,GACd,EAAE;IACD,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB;0CACsC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,6EAA6E;IAC7E,GAAG,CAAC,EAAE,GAAG,CAAA;IACT;;qCAEiC;IACjC,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACtB;oEACgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mFAAmF;IACnF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;;8CAO0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;mCAG+B;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gDAAgD;IAChD,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;sCACkC;IAClC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB;;;4CAGwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;mCAG+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;2EACuE;IACvE,KAAK,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACnC;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC1B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAC9B;wDACoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GAAG,KAAK,CAAC,SAAS,CA0jBlB"}
@@ -13,7 +13,7 @@ import { useTheme } from './design-system/ThemeProvider.js';
13
13
  import { interpolateColor, parseRGB } from './Spinner/spinnerUtils.js';
14
14
  import { paintedWidth, renderBigText } from './bigfont.js';
15
15
  import { COLUMN_GAP, WHALE_BOX_WIDTH, resolveSplashLayout } from './splashLayout.js';
16
- import { withTagline, pickSplashFont, splashFontById } from './splashFonts.js';
16
+ import { resolveSplashTitleFont, pickSplashFont, splashFontById } from './splashFonts.js';
17
17
  import { pickSplashEgg, splashStarLine } from './splashEggs.js';
18
18
  import { isHistoricMilestone, markStarAsked, pendingStarMilestone, recordLaunch, STAR_MILESTONES, usageSnapshot } from '../usageStats.js';
19
19
  import { effectiveComboDisplay } from '../utils/keymap.js';
@@ -173,12 +173,11 @@ export function LogoV2({ model = '', effort, cwd = '', skipIntro = false, intro,
173
173
  // 词对紧解为预算。窄终端阶梯阈值跟着当天真实标题宽度走,与彩蛋共用
174
174
  // `withTagline`。
175
175
  const words = BRAND_SPLASH_WORDS[brand];
176
- const brandFont = brand !== 'deepseek' ? withTagline(font, words.top, words.bottom, { uniform: true }) : font;
177
176
  // 节日彩蛋:本地日期整天恒定,每次 mount 只判一次(照 pickSplashFont 的写法)。
178
177
  // 只换下排词——上排钉在品牌词上(deepseek 的 `DEEPSEEK` / claude 的 `CLAUDE`
179
178
  // / codex 的 `CODEX`)。
180
179
  const [dailyEgg] = React.useState(() => (egg === undefined ? pickSplashEgg() : egg));
181
- const titleFont = dailyEgg === null ? brandFont : withTagline(font, brand === 'deepseek' ? font.tagline.top : words.top, dailyEgg.bottom, brand === 'deepseek' ? undefined : { uniform: true });
180
+ const titleFont = resolveSplashTitleFont(font, brand, dailyEgg);
182
181
  // 窄终端阶梯:鲸鱼 + 大字 → 纯大字 → 纯鲸鱼 → 一行纯文字(阈值随字体字身宽度变)。
183
182
  const splash = resolveSplashLayout(columns, { whale, font: titleFont });
184
183
  /**
@@ -372,7 +371,8 @@ export function LogoV2({ model = '', effort, cwd = '', skipIntro = false, intro,
372
371
  ? Math.max(0, Math.round((portraitMode ? MAID_BOX_CENTER : WHALE_CENTER) - welcomeWidth / 2))
373
372
  : 2;
374
373
  // 两行标题各自用字体声明的字距;下排再按 `bottomIndent` 居中——
375
- // 两者一起保证画出来的列数相等(见 splashFonts 的 tagline 契约)。
374
+ // 两者一起保证画出来的列数相等(见 splashFonts 的 tagline 契约;声明了
375
+ // 固定字距的 shadow 例外:两行同字距、不再等宽,见下方金字塔路径)。
376
376
  // 节日彩蛋换的就是这里的两排词(`titleFont` 已按当天词对重解字距)。
377
377
  const { top: fontTop, bottom, topKerning, bottomKerning, bottomIndent } = titleFont.tagline;
378
378
  // 品牌词对经 withTagline 重解后 fontTop 即品牌上排词(含彩蛋日的钉顶)。
@@ -431,9 +431,12 @@ export function LogoV2({ model = '', effort, cwd = '', skipIntro = false, intro,
431
431
  ?? PALE;
432
432
  // 品牌档两行同字距后宽度不同,对齐按形态处理(用户定调):居中形态
433
433
  // (落地页/启动页)窄行补半差,两行各自居中成金字塔;钉左形态(对话页
434
- // 标题)两行左缘对齐。deepseek 档维持求解器的 bottomIndent(等宽契约)。
434
+ // 标题)两行左缘对齐。deepseek 档维持求解器的 bottomIndent(等宽契约),
435
+ // 例外是声明了固定字距的字体(shadow——等宽契约在 10 列字身上最紧只能
436
+ // 解出 5/7 字距,字间空得能走人):它两行同字距,两种形态都按半差居中。
435
437
  const uniformBrand = brand !== 'deepseek';
436
- const centeredTitle = uniformBrand && align === 'center';
438
+ const fixedKerning = !uniformBrand && titleFont.uniformKerning !== undefined;
439
+ const centeredTitle = (uniformBrand && align === 'center') || fixedKerning;
437
440
  const topInk = paintedWidth(titleFont, top, topKerning);
438
441
  const bottomInk = paintedWidth(titleFont, bottom, bottomKerning);
439
442
  const topIndent = centeredTitle ? Math.max(0, Math.round((bottomInk - topInk) / 2)) : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownTable.d.ts","sourceRoot":"","sources":["../../../src/components/MarkdownTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,QAAQ,CAAA;AAQ3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAMrE,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC,KAAK,CAAA;IACnB,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;IAC9B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAuID,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAiDtF"}
1
+ {"version":3,"file":"MarkdownTable.d.ts","sourceRoot":"","sources":["../../../src/components/MarkdownTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,QAAQ,CAAA;AAS3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAMrE,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC,KAAK,CAAA;IACnB,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;IAC9B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAuID,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAiDtF"}
@@ -3,6 +3,7 @@ import wrapAnsi from 'wrap-ansi';
3
3
  import { useTerminalSize } from '../ink/hooks/use-terminal-size.js';
4
4
  import Text from './design-system/ThemedText.js';
5
5
  import { stringWidth } from '../ink/stringWidth.js';
6
+ import { wrapTextLines } from '../ink/wrap-text.js';
6
7
  import stripAnsi from 'strip-ansi';
7
8
  import { truncateToWidth } from '../ink/truncateToWidth.js';
8
9
  import { formatToken, padAligned } from '../terminal-utils/markdown.js';
@@ -12,12 +13,12 @@ const MAX_ROW_LINES = 4;
12
13
  function wrapText(text, width, hard) {
13
14
  if (width <= 0)
14
15
  return [''];
15
- const wrapped = wrapAnsi(text.trimEnd(), width, {
16
+ const wrapped = wrapTextLines(text.trimEnd(), width, line => wrapAnsi(line, width, {
16
17
  hard,
17
18
  trim: false,
18
19
  wordWrap: true,
19
- });
20
- const lines = wrapped.split('\n').filter(line => line.length > 0);
20
+ }));
21
+ const lines = wrapped.filter(line => line.text.length > 0 || line.gap).map(line => line.text);
21
22
  return lines.length > 0 ? lines : [''];
22
23
  }
23
24
  function lineWidth(text) {
@@ -1 +1 @@
1
- {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList.tsx"],"names":[],"mappings":"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"}