@deepseek-harness-tui/dsh-tui 0.14.1 → 0.16.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 (886) hide show
  1. package/README.md +163 -17
  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 +47 -10
  8. package/guide/dsh-tui-guide/codex-backend.md +26 -4
  9. package/guide/dsh-tui-guide/configuration.en.md +168 -18
  10. package/guide/dsh-tui-guide/configuration.md +144 -16
  11. package/guide/dsh-tui-guide/getting-started.en.md +15 -0
  12. package/guide/dsh-tui-guide/getting-started.md +15 -0
  13. package/guide/dsh-tui-guide/interaction.en.md +64 -24
  14. package/guide/dsh-tui-guide/interaction.md +49 -19
  15. package/guide/dsh-tui-guide/plugins.en.md +97 -3
  16. package/guide/dsh-tui-guide/plugins.md +55 -2
  17. package/guide/dsh-tui-guide/themes.en.md +23 -14
  18. package/guide/dsh-tui-guide/themes.md +19 -12
  19. package/guide/dsh-tui-guide/user-guide.en.md +53 -21
  20. package/guide/dsh-tui-guide/user-guide.md +43 -22
  21. package/lib/settings.json +103 -9
  22. package/lib/types/adapter/channel/projection.d.ts.map +1 -1
  23. package/lib/types/adapter/channel/projection.js +1 -0
  24. package/lib/types/adapter/channel/ui-policy.d.ts +1 -1
  25. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  26. package/lib/types/adapter/channel/ui-policy.js +4 -0
  27. package/lib/types/adapter/channel/ui.d.ts +2 -0
  28. package/lib/types/adapter/channel/ui.d.ts.map +1 -1
  29. package/lib/types/adapter/channel/ui.js +6 -2
  30. package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
  31. package/lib/types/adapter/kernel/runtime.js +2 -0
  32. package/lib/types/adapter/ports/channel-catalog.d.ts +5 -1
  33. package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
  34. package/lib/types/adapter/ports/channel-settings.d.ts +14 -3
  35. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  36. package/lib/types/adapter/ports/channel-ui.d.ts +56 -12
  37. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  38. package/lib/types/adapter/ports/channel-view.d.ts +68 -0
  39. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  40. package/lib/types/adapter/ports/channel.d.ts +2 -0
  41. package/lib/types/adapter/ports/channel.d.ts.map +1 -1
  42. package/lib/types/adapter/spec/backend-capabilities.d.ts +22 -0
  43. package/lib/types/adapter/spec/backend-capabilities.d.ts.map +1 -0
  44. package/lib/types/adapter/spec/backend-capabilities.js +49 -0
  45. package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
  46. package/lib/types/adapter/spec/protocol-constants.js +10 -3
  47. package/lib/types/adapter/spec/tui-contributions.d.ts +3 -0
  48. package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
  49. package/lib/types/adapter/spec/tui-contributions.js +7 -0
  50. package/lib/types/adapter/standard/registry.d.ts +6 -0
  51. package/lib/types/adapter/standard/registry.d.ts.map +1 -1
  52. package/lib/types/adapter/standard/registry.js +65 -15
  53. package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -1
  54. package/lib/types/adapter/standard/tui-extension.js +7 -1
  55. package/lib/types/adapter/standard/types.d.ts +10 -1
  56. package/lib/types/adapter/standard/types.d.ts.map +1 -1
  57. package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -1
  58. package/lib/types/adapter/upstream/host-descriptor-driver.js +52 -0
  59. package/lib/types/agent/backend-manifest.d.ts +152 -0
  60. package/lib/types/agent/backend-manifest.d.ts.map +1 -0
  61. package/lib/types/agent/backend-manifest.js +14 -0
  62. package/lib/types/agent/backend.d.ts +71 -5
  63. package/lib/types/agent/backend.d.ts.map +1 -1
  64. package/lib/types/agent/capabilities.d.ts +6 -0
  65. package/lib/types/agent/capabilities.d.ts.map +1 -1
  66. package/lib/types/agent/events.d.ts +3 -2
  67. package/lib/types/agent/events.d.ts.map +1 -1
  68. package/lib/types/agent/index.d.ts +2 -0
  69. package/lib/types/agent/index.d.ts.map +1 -1
  70. package/lib/types/agent/refs.d.ts +11 -1
  71. package/lib/types/agent/refs.d.ts.map +1 -1
  72. package/lib/types/agent/starting-session.d.ts +4 -0
  73. package/lib/types/agent/starting-session.d.ts.map +1 -0
  74. package/lib/types/agent/starting-session.js +19 -0
  75. package/lib/types/backends/claude/activity.d.ts +1 -1
  76. package/lib/types/backends/claude/activity.d.ts.map +1 -1
  77. package/lib/types/backends/claude/activity.js +5 -5
  78. package/lib/types/backends/claude/auth.d.ts.map +1 -1
  79. package/lib/types/backends/claude/auth.js +10 -3
  80. package/lib/types/backends/claude/backend.d.ts.map +1 -1
  81. package/lib/types/backends/claude/backend.js +103 -29
  82. package/lib/types/backends/claude/catalog.d.ts +2 -1
  83. package/lib/types/backends/claude/catalog.d.ts.map +1 -1
  84. package/lib/types/backends/claude/catalog.js +15 -5
  85. package/lib/types/backends/claude/channels.d.ts +5 -3
  86. package/lib/types/backends/claude/channels.d.ts.map +1 -1
  87. package/lib/types/backends/claude/channels.js +5 -4
  88. package/lib/types/backends/claude/contract.d.ts +4 -0
  89. package/lib/types/backends/claude/contract.d.ts.map +1 -1
  90. package/lib/types/backends/claude/contract.js +4 -0
  91. package/lib/types/backends/claude/controls.d.ts +4 -0
  92. package/lib/types/backends/claude/controls.d.ts.map +1 -1
  93. package/lib/types/backends/claude/controls.js +34 -42
  94. package/lib/types/backends/claude/dialogs.d.ts +8 -2
  95. package/lib/types/backends/claude/dialogs.d.ts.map +1 -1
  96. package/lib/types/backends/claude/dialogs.js +24 -16
  97. package/lib/types/backends/claude/images.d.ts +1 -1
  98. package/lib/types/backends/claude/images.d.ts.map +1 -1
  99. package/lib/types/backends/claude/images.js +7 -7
  100. package/lib/types/backends/claude/manifest.d.ts +21 -0
  101. package/lib/types/backends/claude/manifest.d.ts.map +1 -0
  102. package/lib/types/backends/claude/manifest.js +29 -0
  103. package/lib/types/backends/claude/older-history.js +2 -2
  104. package/lib/types/backends/claude/permissions.js +11 -11
  105. package/lib/types/backends/claude/prefs.d.ts +4 -2
  106. package/lib/types/backends/claude/prefs.d.ts.map +1 -1
  107. package/lib/types/backends/claude/prefs.js +4 -3
  108. package/lib/types/backends/claude/process.d.ts +16 -4
  109. package/lib/types/backends/claude/process.d.ts.map +1 -1
  110. package/lib/types/backends/claude/process.js +100 -37
  111. package/lib/types/backends/claude/send-message.d.ts +1 -1
  112. package/lib/types/backends/claude/send-message.d.ts.map +1 -1
  113. package/lib/types/backends/claude/session/auth.js +22 -22
  114. package/lib/types/backends/claude/session/channels.d.ts +4 -0
  115. package/lib/types/backends/claude/session/channels.d.ts.map +1 -1
  116. package/lib/types/backends/claude/session/channels.js +5 -3
  117. package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -1
  118. package/lib/types/backends/claude/session/lifecycle.js +31 -23
  119. package/lib/types/backends/claude/session/store.js +8 -8
  120. package/lib/types/backends/claude/session/subagents.js +2 -2
  121. package/lib/types/backends/claude/session/types.d.ts +7 -0
  122. package/lib/types/backends/claude/session/types.d.ts.map +1 -1
  123. package/lib/types/backends/claude/side-query.js +3 -3
  124. package/lib/types/backends/claude/task-output.js +5 -5
  125. package/lib/types/backends/claude/text.d.ts +778 -0
  126. package/lib/types/backends/claude/text.d.ts.map +1 -0
  127. package/lib/types/backends/claude/text.js +298 -0
  128. package/lib/types/backends/claude/transcript-file.d.ts +1 -1
  129. package/lib/types/backends/claude/transcript-file.d.ts.map +1 -1
  130. package/lib/types/backends/claude/transcript-file.js +4 -4
  131. package/lib/types/backends/claude/translate/attempts.js +2 -2
  132. package/lib/types/backends/claude/translate/core.js +3 -3
  133. package/lib/types/backends/claude/translate/messages.js +4 -4
  134. package/lib/types/backends/claude/translate/system.js +14 -14
  135. package/lib/types/backends/claude/translate/tasks.js +2 -2
  136. package/lib/types/backends/claude/translate/types.d.ts +1 -1
  137. package/lib/types/backends/claude/translate/types.d.ts.map +1 -1
  138. package/lib/types/backends/codex/auth/external-tokens.js +16 -16
  139. package/lib/types/backends/codex/auth/status.js +14 -14
  140. package/lib/types/backends/codex/backend.d.ts +4 -19
  141. package/lib/types/backends/codex/backend.d.ts.map +1 -1
  142. package/lib/types/backends/codex/backend.js +118 -25
  143. package/lib/types/backends/codex/catalog.d.ts +2 -1
  144. package/lib/types/backends/codex/catalog.d.ts.map +1 -1
  145. package/lib/types/backends/codex/catalog.js +63 -18
  146. package/lib/types/backends/codex/channels.d.ts +6 -3
  147. package/lib/types/backends/codex/channels.d.ts.map +1 -1
  148. package/lib/types/backends/codex/channels.js +15 -13
  149. package/lib/types/backends/codex/contract.d.ts +3 -0
  150. package/lib/types/backends/codex/contract.d.ts.map +1 -1
  151. package/lib/types/backends/codex/contract.js +3 -0
  152. package/lib/types/backends/codex/detect.d.ts.map +1 -1
  153. package/lib/types/backends/codex/detect.js +9 -6
  154. package/lib/types/backends/codex/manifest.d.ts +30 -0
  155. package/lib/types/backends/codex/manifest.d.ts.map +1 -0
  156. package/lib/types/backends/codex/manifest.js +23 -0
  157. package/lib/types/backends/codex/prefs.d.ts +4 -2
  158. package/lib/types/backends/codex/prefs.d.ts.map +1 -1
  159. package/lib/types/backends/codex/prefs.js +4 -3
  160. package/lib/types/backends/codex/rpc/hub.js +2 -2
  161. package/lib/types/backends/codex/session/activity.d.ts +1 -1
  162. package/lib/types/backends/codex/session/activity.d.ts.map +1 -1
  163. package/lib/types/backends/codex/session/activity.js +13 -13
  164. package/lib/types/backends/codex/session/approvals.js +30 -30
  165. package/lib/types/backends/codex/session/async-questions.d.ts +17 -0
  166. package/lib/types/backends/codex/session/async-questions.d.ts.map +1 -0
  167. package/lib/types/backends/codex/session/async-questions.js +89 -0
  168. package/lib/types/backends/codex/session/commands.d.ts +8 -2
  169. package/lib/types/backends/codex/session/commands.d.ts.map +1 -1
  170. package/lib/types/backends/codex/session/commands.js +71 -23
  171. package/lib/types/backends/codex/session/controls.d.ts +1 -1
  172. package/lib/types/backends/codex/session/controls.d.ts.map +1 -1
  173. package/lib/types/backends/codex/session/controls.js +21 -16
  174. package/lib/types/backends/codex/session/goals.d.ts.map +1 -1
  175. package/lib/types/backends/codex/session/goals.js +3 -3
  176. package/lib/types/backends/codex/session/history.js +2 -2
  177. package/lib/types/backends/codex/session/images.js +8 -8
  178. package/lib/types/backends/codex/session/input.d.ts +6 -2
  179. package/lib/types/backends/codex/session/input.d.ts.map +1 -1
  180. package/lib/types/backends/codex/session/input.js +55 -13
  181. package/lib/types/backends/codex/session/plan-review.js +6 -6
  182. package/lib/types/backends/codex/session/session.d.ts.map +1 -1
  183. package/lib/types/backends/codex/session/session.js +100 -42
  184. package/lib/types/backends/codex/session/side-query.d.ts.map +1 -1
  185. package/lib/types/backends/codex/session/side-query.js +27 -9
  186. package/lib/types/backends/codex/session/state.d.ts +6 -1
  187. package/lib/types/backends/codex/session/state.d.ts.map +1 -1
  188. package/lib/types/backends/codex/session/subagents.js +5 -5
  189. package/lib/types/backends/codex/session/tasks.js +4 -4
  190. package/lib/types/backends/codex/text.d.ts +933 -0
  191. package/lib/types/backends/codex/text.d.ts.map +1 -0
  192. package/lib/types/backends/codex/text.js +313 -0
  193. package/lib/types/backends/codex/translate/items.d.ts.map +1 -1
  194. package/lib/types/backends/codex/translate/items.js +7 -5
  195. package/lib/types/backends/codex/translate/live.d.ts.map +1 -1
  196. package/lib/types/backends/codex/translate/live.js +11 -8
  197. package/lib/types/backends/codex/translate/notices.js +10 -10
  198. package/lib/types/backends/codex/translate/question-reply.d.ts +11 -0
  199. package/lib/types/backends/codex/translate/question-reply.d.ts.map +1 -0
  200. package/lib/types/backends/codex/translate/question-reply.js +53 -0
  201. package/lib/types/backends/shared/channel-slug.d.ts +4 -0
  202. package/lib/types/backends/shared/channel-slug.d.ts.map +1 -0
  203. package/lib/types/backends/shared/channel-slug.js +25 -0
  204. package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -1
  205. package/lib/types/backends/shared/channel-tokens.js +30 -23
  206. package/lib/types/{channel → backends/shared}/elicitation.d.ts +78 -21
  207. package/lib/types/backends/shared/elicitation.d.ts.map +1 -0
  208. package/lib/types/{channel → backends/shared}/elicitation.js +64 -66
  209. package/lib/types/backends/shared/image-size.d.ts +33 -0
  210. package/lib/types/backends/shared/image-size.d.ts.map +1 -0
  211. package/lib/types/backends/shared/image-size.js +134 -0
  212. package/lib/types/{utils → backends/shared}/jsonl.d.ts +5 -1
  213. package/lib/types/backends/shared/jsonl.d.ts.map +1 -0
  214. package/lib/types/{utils → backends/shared}/jsonl.js +5 -1
  215. package/lib/types/backends/shared/localized-text.d.ts +30 -0
  216. package/lib/types/backends/shared/localized-text.d.ts.map +1 -0
  217. package/lib/types/backends/shared/localized-text.js +24 -0
  218. package/lib/types/backends/shared/platform-text.d.ts +88 -0
  219. package/lib/types/backends/shared/platform-text.d.ts.map +1 -0
  220. package/lib/types/backends/shared/platform-text.js +33 -0
  221. package/lib/types/branding.d.ts +13 -0
  222. package/lib/types/branding.d.ts.map +1 -1
  223. package/lib/types/branding.js +18 -0
  224. package/lib/types/channel/channel-slug.d.ts +3 -1
  225. package/lib/types/channel/channel-slug.d.ts.map +1 -1
  226. package/lib/types/channel/channel-slug.js +3 -1
  227. package/lib/types/channel/projection.d.ts.map +1 -1
  228. package/lib/types/channel/projection.js +10 -0
  229. package/lib/types/channel/sanitize.d.ts +7 -0
  230. package/lib/types/channel/sanitize.d.ts.map +1 -1
  231. package/lib/types/channel/sanitize.js +9 -0
  232. package/lib/types/channel/usage.d.ts.map +1 -1
  233. package/lib/types/channel/usage.js +5 -0
  234. package/lib/types/commands.d.ts +15 -0
  235. package/lib/types/commands.d.ts.map +1 -1
  236. package/lib/types/commands.js +58 -10
  237. package/lib/types/components/AgentMessageComposer.d.ts.map +1 -1
  238. package/lib/types/components/AgentMessageComposer.js +3 -2
  239. package/lib/types/components/BtwPanel.d.ts.map +1 -1
  240. package/lib/types/components/BtwPanel.js +4 -2
  241. package/lib/types/components/Chat/JobCard.js +3 -3
  242. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  243. package/lib/types/components/CommandSuggestions.js +24 -7
  244. package/lib/types/components/ContextBarView.d.ts +5 -1
  245. package/lib/types/components/ContextBarView.d.ts.map +1 -1
  246. package/lib/types/components/ContextBarView.js +6 -3
  247. package/lib/types/components/ExtensionDialog.d.ts.map +1 -1
  248. package/lib/types/components/ExtensionDialog.js +2 -3
  249. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  250. package/lib/types/components/GoalTodoPanel.js +14 -3
  251. package/lib/types/components/InlineMathParagraph.js +1 -1
  252. package/lib/types/components/KernelPicker.d.ts.map +1 -1
  253. package/lib/types/components/KernelPicker.js +1 -1
  254. package/lib/types/components/LogoV2.d.ts +4 -1
  255. package/lib/types/components/LogoV2.d.ts.map +1 -1
  256. package/lib/types/components/LogoV2.js +14 -9
  257. package/lib/types/components/MarkdownTable.d.ts.map +1 -1
  258. package/lib/types/components/MarkdownTable.js +4 -3
  259. package/lib/types/components/MessageList.d.ts.map +1 -1
  260. package/lib/types/components/MessageList.js +109 -15
  261. package/lib/types/components/ModelPicker.d.ts +24 -31
  262. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  263. package/lib/types/components/ModelPicker.js +115 -40
  264. package/lib/types/components/PermissionsPicker.d.ts +10 -1
  265. package/lib/types/components/PermissionsPicker.d.ts.map +1 -1
  266. package/lib/types/components/PermissionsPicker.js +24 -16
  267. package/lib/types/components/PluginInstallPane.d.ts +21 -0
  268. package/lib/types/components/PluginInstallPane.d.ts.map +1 -0
  269. package/lib/types/components/PluginInstallPane.js +84 -0
  270. package/lib/types/components/PluginManagePane.d.ts +21 -0
  271. package/lib/types/components/PluginManagePane.d.ts.map +1 -0
  272. package/lib/types/components/PluginManagePane.js +69 -0
  273. package/lib/types/components/PromptEditor.d.ts +3 -3
  274. package/lib/types/components/PromptInput.d.ts +21 -3
  275. package/lib/types/components/PromptInput.d.ts.map +1 -1
  276. package/lib/types/components/PromptInput.js +65 -121
  277. package/lib/types/components/SdkInstallWizard.d.ts +3 -1
  278. package/lib/types/components/SdkInstallWizard.d.ts.map +1 -1
  279. package/lib/types/components/SdkInstallWizard.js +8 -1
  280. package/lib/types/components/SearchBox.d.ts +13 -15
  281. package/lib/types/components/SearchBox.d.ts.map +1 -1
  282. package/lib/types/components/SearchBox.js +58 -27
  283. package/lib/types/components/SubagentCard.d.ts +13 -1
  284. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  285. package/lib/types/components/SubagentCard.js +27 -12
  286. package/lib/types/components/SubagentDashboard.d.ts +8 -1
  287. package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
  288. package/lib/types/components/SubagentDashboard.js +58 -16
  289. package/lib/types/components/ThemePicker.d.ts +1 -1
  290. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  291. package/lib/types/components/ThemePicker.js +14 -11
  292. package/lib/types/components/Tooltip.js +1 -1
  293. package/lib/types/components/WorkingSpinner.js +1 -1
  294. package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
  295. package/lib/types/components/WorkspaceFlowPicker.js +4 -3
  296. package/lib/types/components/composerImageTokens.d.ts +24 -0
  297. package/lib/types/components/composerImageTokens.d.ts.map +1 -0
  298. package/lib/types/components/composerImageTokens.js +37 -0
  299. package/lib/types/components/design-system/InputCaret.d.ts +7 -0
  300. package/lib/types/components/design-system/InputCaret.d.ts.map +1 -0
  301. package/lib/types/components/design-system/InputCaret.js +9 -0
  302. package/lib/types/components/design-system/ListItem.d.ts +13 -2
  303. package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
  304. package/lib/types/components/design-system/ListItem.js +11 -5
  305. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  306. package/lib/types/components/design-system/ThemeProvider.js +6 -8
  307. package/lib/types/components/kernelCatalog.d.ts +55 -11
  308. package/lib/types/components/kernelCatalog.d.ts.map +1 -1
  309. package/lib/types/components/kernelCatalog.js +42 -23
  310. package/lib/types/components/launchpadActions.d.ts +4 -0
  311. package/lib/types/components/launchpadActions.d.ts.map +1 -1
  312. package/lib/types/components/launchpadActions.js +5 -4
  313. package/lib/types/components/launchpadLayout.d.ts +14 -1
  314. package/lib/types/components/launchpadLayout.d.ts.map +1 -1
  315. package/lib/types/components/launchpadLayout.js +38 -19
  316. package/lib/types/components/messages/TeamMessageBubble.d.ts +20 -0
  317. package/lib/types/components/messages/TeamMessageBubble.d.ts.map +1 -0
  318. package/lib/types/components/messages/TeamMessageBubble.js +15 -0
  319. package/lib/types/components/messages/UserPromptMessage.d.ts +4 -3
  320. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
  321. package/lib/types/components/messages/UserPromptMessage.js +4 -3
  322. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  323. package/lib/types/components/questions/AskUserQuestionPanel.js +8 -3
  324. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  325. package/lib/types/components/questions/PlanReviewPanel.js +4 -3
  326. package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -1
  327. package/lib/types/components/questions/ProviderModelEditor.js +3 -13
  328. package/lib/types/components/sessions/ForeignSessionRow.d.ts +3 -1
  329. package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -1
  330. package/lib/types/components/sessions/ForeignSessionRow.js +5 -2
  331. package/lib/types/components/sessions/SessionListRow.d.ts +3 -1
  332. package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
  333. package/lib/types/components/sessions/SessionListRow.js +5 -2
  334. package/lib/types/components/sidePanel/PanelBar.d.ts +1 -0
  335. package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
  336. package/lib/types/components/sidePanel/PanelBar.js +21 -17
  337. package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -1
  338. package/lib/types/components/sidePanel/PanelHost.js +5 -1
  339. package/lib/types/components/sidePanel/PanelStore.d.ts +8 -0
  340. package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -1
  341. package/lib/types/components/sidePanel/PanelStore.js +11 -0
  342. package/lib/types/components/sidePanel/SidePanelColumn.d.ts +1 -1
  343. package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
  344. package/lib/types/components/sidePanel/SidePanelColumn.js +15 -2
  345. package/lib/types/components/sidePanel/SidePanelLayout.d.ts +6 -4
  346. package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -1
  347. package/lib/types/components/sidePanel/SidePanelLayout.js +33 -7
  348. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +7 -0
  349. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -1
  350. package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +4 -0
  351. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +7 -2
  352. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
  353. package/lib/types/components/sidePanel/btw/BtwComposer.js +28 -8
  354. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts +2 -1
  355. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
  356. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +156 -21
  357. package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts +6 -2
  358. package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
  359. package/lib/types/components/sidePanel/btw/BtwThreadScene.js +64 -16
  360. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +15 -5
  361. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
  362. package/lib/types/components/sidePanel/btw/BtwThreadView.js +101 -10
  363. package/lib/types/components/sidePanel/btw/threads.d.ts +18 -0
  364. package/lib/types/components/sidePanel/btw/threads.d.ts.map +1 -1
  365. package/lib/types/components/sidePanel/btw/threads.js +51 -0
  366. package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -1
  367. package/lib/types/components/sidePanel/builtinPanels.js +5 -1
  368. package/lib/types/components/sidePanel/companion/CompanionPanel.js +2 -2
  369. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +5 -1
  370. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -1
  371. package/lib/types/components/sidePanel/companion/SplashMascot.js +19 -4
  372. package/lib/types/components/sidePanel/companion/skins.d.ts +8 -0
  373. package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -1
  374. package/lib/types/components/sidePanel/companion/skins.js +57 -12
  375. package/lib/types/components/sidePanel/types.d.ts +7 -1
  376. package/lib/types/components/sidePanel/types.d.ts.map +1 -1
  377. package/lib/types/components/sidePanel/useSidePanel.d.ts +2 -0
  378. package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -1
  379. package/lib/types/components/sidePanel/useSidePanel.js +11 -1
  380. package/lib/types/components/splashArtRows.d.ts +29 -0
  381. package/lib/types/components/splashArtRows.d.ts.map +1 -0
  382. package/lib/types/components/splashArtRows.js +31 -0
  383. package/lib/types/components/splashFonts.d.ts +24 -1
  384. package/lib/types/components/splashFonts.d.ts.map +1 -1
  385. package/lib/types/components/splashFonts.js +40 -5
  386. package/lib/types/components/teamRoster.d.ts +70 -0
  387. package/lib/types/components/teamRoster.d.ts.map +1 -0
  388. package/lib/types/components/teamRoster.js +78 -0
  389. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
  390. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
  391. package/lib/types/components/workspaces/HomeWorkspaceRow.js +5 -2
  392. package/lib/types/dsh-adapter/admission-loader.d.ts +102 -0
  393. package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -0
  394. package/lib/types/dsh-adapter/admission-loader.js +301 -0
  395. package/lib/types/dsh-adapter/agent-view.d.ts.map +1 -1
  396. package/lib/types/dsh-adapter/agent-view.js +3 -1
  397. package/lib/types/dsh-adapter/approvals.d.ts +7 -0
  398. package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
  399. package/lib/types/dsh-adapter/approvals.js +45 -1
  400. package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
  401. package/lib/types/dsh-adapter/backend/translate.js +71 -8
  402. package/lib/types/dsh-adapter/backend-admission.d.ts +64 -0
  403. package/lib/types/dsh-adapter/backend-admission.d.ts.map +1 -0
  404. package/lib/types/dsh-adapter/backend-admission.js +34 -0
  405. package/lib/types/dsh-adapter/backend-assembly.d.ts +31 -0
  406. package/lib/types/dsh-adapter/backend-assembly.d.ts.map +1 -0
  407. package/lib/types/dsh-adapter/backend-assembly.js +225 -0
  408. package/lib/types/dsh-adapter/backend-contribution.d.ts +62 -0
  409. package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -0
  410. package/lib/types/dsh-adapter/backend-contribution.js +78 -0
  411. package/lib/types/dsh-adapter/backend-registry.d.ts +136 -0
  412. package/lib/types/dsh-adapter/backend-registry.d.ts.map +1 -0
  413. package/lib/types/dsh-adapter/backend-registry.js +304 -0
  414. package/lib/types/dsh-adapter/backends.d.ts +67 -24
  415. package/lib/types/dsh-adapter/backends.d.ts.map +1 -1
  416. package/lib/types/dsh-adapter/backends.generated.d.ts +12 -0
  417. package/lib/types/dsh-adapter/backends.generated.d.ts.map +1 -0
  418. package/lib/types/dsh-adapter/backends.generated.js +6 -0
  419. package/lib/types/dsh-adapter/backends.js +91 -46
  420. package/lib/types/dsh-adapter/bundled-presets.d.ts.map +1 -1
  421. package/lib/types/dsh-adapter/bundled-presets.js +60 -3
  422. package/lib/types/dsh-adapter/channel/action-readiness.d.ts +2 -0
  423. package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
  424. package/lib/types/dsh-adapter/channel/action-readiness.js +9 -3
  425. package/lib/types/dsh-adapter/channel/agent-view-projection.js +2 -2
  426. package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
  427. package/lib/types/dsh-adapter/channel/background-action.js +8 -3
  428. package/lib/types/dsh-adapter/channel/binding-events.d.ts +17 -3
  429. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  430. package/lib/types/dsh-adapter/channel/binding-events.js +19 -46
  431. package/lib/types/dsh-adapter/channel/channel-host.d.ts +45 -0
  432. package/lib/types/dsh-adapter/channel/channel-host.d.ts.map +1 -0
  433. package/lib/types/dsh-adapter/channel/channel-host.js +1 -0
  434. package/lib/types/dsh-adapter/channel/command-completions.d.ts +5 -0
  435. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
  436. package/lib/types/dsh-adapter/channel/command-completions.js +79 -6
  437. package/lib/types/dsh-adapter/channel/compaction.d.ts +7 -2
  438. package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
  439. package/lib/types/dsh-adapter/channel/compaction.js +100 -26
  440. package/lib/types/dsh-adapter/channel/composer-images.d.ts +4 -2
  441. package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
  442. package/lib/types/dsh-adapter/channel/composer-images.js +36 -5
  443. package/lib/types/dsh-adapter/channel/cordis-host.d.ts +14 -0
  444. package/lib/types/dsh-adapter/channel/cordis-host.d.ts.map +1 -0
  445. package/lib/types/dsh-adapter/channel/cordis-host.js +35 -0
  446. package/lib/types/dsh-adapter/channel/core/actions.d.ts +3 -3
  447. package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -1
  448. package/lib/types/dsh-adapter/channel/core/actions.js +15 -6
  449. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +10 -3
  450. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -1
  451. package/lib/types/dsh-adapter/channel/core/binding-feed.js +5 -1
  452. package/lib/types/dsh-adapter/channel/core/compose.d.ts +12 -28
  453. package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -1
  454. package/lib/types/dsh-adapter/channel/core/compose.js +330 -117
  455. package/lib/types/dsh-adapter/channel/core/files.d.ts +7 -2
  456. package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -1
  457. package/lib/types/dsh-adapter/channel/core/files.js +1 -0
  458. package/lib/types/dsh-adapter/channel/core/host.d.ts +12 -6
  459. package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -1
  460. package/lib/types/dsh-adapter/channel/core/host.js +69 -35
  461. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +5 -3
  462. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -1
  463. package/lib/types/dsh-adapter/channel/core/local-actions.js +5 -2
  464. package/lib/types/dsh-adapter/channel/core/session-controls.js +2 -2
  465. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +7 -4
  466. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -1
  467. package/lib/types/dsh-adapter/channel/core/session-switch.js +8 -4
  468. package/lib/types/dsh-adapter/channel/core/sessions.d.ts +1 -1
  469. package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -1
  470. package/lib/types/dsh-adapter/channel/core/sessions.js +75 -16
  471. package/lib/types/dsh-adapter/channel/extensions.d.ts +4 -3
  472. package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -1
  473. package/lib/types/dsh-adapter/channel/extensions.js +109 -30
  474. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +2 -2
  475. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  476. package/lib/types/dsh-adapter/channel/input-delivery.js +14 -5
  477. package/lib/types/dsh-adapter/channel/job-projection.d.ts +4 -0
  478. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
  479. package/lib/types/dsh-adapter/channel/job-projection.js +205 -24
  480. package/lib/types/dsh-adapter/channel/mentions.d.ts +3 -3
  481. package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -1
  482. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +7 -0
  483. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  484. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +235 -13
  485. package/lib/types/dsh-adapter/channel/model-actions.d.ts +5 -1
  486. package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
  487. package/lib/types/dsh-adapter/channel/model-actions.js +48 -29
  488. package/lib/types/dsh-adapter/channel/model-selection.d.ts +17 -0
  489. package/lib/types/dsh-adapter/channel/model-selection.d.ts.map +1 -0
  490. package/lib/types/dsh-adapter/channel/model-selection.js +109 -0
  491. package/lib/types/dsh-adapter/channel/model-switch.d.ts +12 -21
  492. package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
  493. package/lib/types/dsh-adapter/channel/model-switch.js +39 -102
  494. package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -1
  495. package/lib/types/dsh-adapter/channel/permissions.js +4 -1
  496. package/lib/types/dsh-adapter/channel/projection-helpers.d.ts.map +1 -1
  497. package/lib/types/dsh-adapter/channel/projection-helpers.js +2 -0
  498. package/lib/types/dsh-adapter/channel/projection.js +1 -1
  499. package/lib/types/dsh-adapter/channel/reports.d.ts +1 -1
  500. package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
  501. package/lib/types/dsh-adapter/channel/reports.js +11 -3
  502. package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
  503. package/lib/types/dsh-adapter/channel/session-fork.js +33 -20
  504. package/lib/types/dsh-adapter/channel/session-listing.d.ts +20 -0
  505. package/lib/types/dsh-adapter/channel/session-listing.d.ts.map +1 -0
  506. package/lib/types/dsh-adapter/channel/session-listing.js +51 -0
  507. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +3 -1
  508. package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
  509. package/lib/types/dsh-adapter/channel/session-metadata.js +60 -30
  510. package/lib/types/dsh-adapter/channel/session-reset.js +2 -2
  511. package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
  512. package/lib/types/dsh-adapter/channel/session-resume.js +22 -8
  513. package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
  514. package/lib/types/dsh-adapter/channel/session-rewind.js +38 -24
  515. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
  516. package/lib/types/dsh-adapter/channel/session-tree-actions.js +38 -24
  517. package/lib/types/dsh-adapter/channel/settings-host.d.ts +5 -2
  518. package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
  519. package/lib/types/dsh-adapter/channel/settings-host.js +136 -5
  520. package/lib/types/dsh-adapter/channel/state.d.ts +43 -1
  521. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  522. package/lib/types/dsh-adapter/channel/state.js +14 -1
  523. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  524. package/lib/types/dsh-adapter/channel/subagent-projection.js +84 -12
  525. package/lib/types/dsh-adapter/channel/task-completion.d.ts +6 -0
  526. package/lib/types/dsh-adapter/channel/task-completion.d.ts.map +1 -0
  527. package/lib/types/dsh-adapter/channel/task-completion.js +114 -0
  528. package/lib/types/dsh-adapter/channel/transcript.d.ts +8 -1
  529. package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
  530. package/lib/types/dsh-adapter/channel/transcript.js +20 -3
  531. package/lib/types/dsh-adapter/channel/upstream-retry.d.ts +81 -0
  532. package/lib/types/dsh-adapter/channel/upstream-retry.d.ts.map +1 -0
  533. package/lib/types/dsh-adapter/channel/upstream-retry.js +138 -0
  534. package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
  535. package/lib/types/dsh-adapter/channel/workspace-actions.js +9 -8
  536. package/lib/types/dsh-adapter/channel-ui.d.ts +3 -1
  537. package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -1
  538. package/lib/types/dsh-adapter/channel-ui.js +4 -2
  539. package/lib/types/dsh-adapter/channel.d.ts +2 -2
  540. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  541. package/lib/types/dsh-adapter/channel.js +19 -5
  542. package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts +55 -0
  543. package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts.map +1 -0
  544. package/lib/types/dsh-adapter/compat/agent-team-0.2.0.js +96 -0
  545. package/lib/types/dsh-adapter/context-occupancy.d.ts +81 -4
  546. package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
  547. package/lib/types/dsh-adapter/context-occupancy.js +108 -17
  548. package/lib/types/dsh-adapter/contract.d.ts +4 -4
  549. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  550. package/lib/types/dsh-adapter/contract.js +20 -5
  551. package/lib/types/dsh-adapter/effect-ledger.d.ts +7 -0
  552. package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
  553. package/lib/types/dsh-adapter/effect-ledger.js +8 -1
  554. package/lib/types/dsh-adapter/entry-slot.d.ts +38 -0
  555. package/lib/types/dsh-adapter/entry-slot.d.ts.map +1 -0
  556. package/lib/types/dsh-adapter/entry-slot.js +28 -0
  557. package/lib/types/dsh-adapter/fresh-agent.d.ts +22 -0
  558. package/lib/types/dsh-adapter/fresh-agent.d.ts.map +1 -0
  559. package/lib/types/dsh-adapter/fresh-agent.js +226 -0
  560. package/lib/types/dsh-adapter/host-access.d.ts +16 -1
  561. package/lib/types/dsh-adapter/host-access.d.ts.map +1 -1
  562. package/lib/types/dsh-adapter/host-access.js +148 -2
  563. package/lib/types/dsh-adapter/host-contract.d.ts +103 -0
  564. package/lib/types/dsh-adapter/host-contract.d.ts.map +1 -0
  565. package/lib/types/dsh-adapter/host-contract.js +77 -0
  566. package/lib/types/dsh-adapter/host-dsh.d.ts +112 -0
  567. package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -0
  568. package/lib/types/dsh-adapter/host-dsh.js +481 -0
  569. package/lib/types/dsh-adapter/host-entry.d.ts +9 -0
  570. package/lib/types/dsh-adapter/host-entry.d.ts.map +1 -0
  571. package/lib/types/dsh-adapter/host-entry.js +253 -0
  572. package/lib/types/dsh-adapter/index.d.ts +53 -17
  573. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  574. package/lib/types/dsh-adapter/index.js +63 -9
  575. package/lib/types/dsh-adapter/install/executors.d.ts +44 -0
  576. package/lib/types/dsh-adapter/install/executors.d.ts.map +1 -0
  577. package/lib/types/dsh-adapter/install/executors.js +15 -0
  578. package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts +3 -0
  579. package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts.map +1 -0
  580. package/lib/types/dsh-adapter/install/pnpm-profile-add.js +150 -0
  581. package/lib/types/dsh-adapter/invariant.d.ts +7 -2
  582. package/lib/types/dsh-adapter/invariant.d.ts.map +1 -1
  583. package/lib/types/dsh-adapter/invariant.js +6 -3
  584. package/lib/types/dsh-adapter/jobs.d.ts +7 -0
  585. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  586. package/lib/types/dsh-adapter/jobs.js +13 -0
  587. package/lib/types/dsh-adapter/lite-profile.d.ts +50 -0
  588. package/lib/types/dsh-adapter/lite-profile.d.ts.map +1 -0
  589. package/lib/types/dsh-adapter/lite-profile.js +49 -0
  590. package/lib/types/dsh-adapter/migrate/index.js +2 -2
  591. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -1
  592. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
  593. package/lib/types/dsh-adapter/migrate/parse/jsonl.js +4 -3
  594. package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -1
  595. package/lib/types/dsh-adapter/oauth/profiles.js +5 -1
  596. package/lib/types/dsh-adapter/panels.d.ts +7 -0
  597. package/lib/types/dsh-adapter/panels.d.ts.map +1 -1
  598. package/lib/types/dsh-adapter/panels.js +41 -2
  599. package/lib/types/dsh-adapter/plugin-completions.d.ts +32 -0
  600. package/lib/types/dsh-adapter/plugin-completions.d.ts.map +1 -0
  601. package/lib/types/dsh-adapter/plugin-completions.js +80 -0
  602. package/lib/types/dsh-adapter/plugin-declaration.d.ts +119 -0
  603. package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -0
  604. package/lib/types/dsh-adapter/plugin-declaration.js +183 -0
  605. package/lib/types/dsh-adapter/plugin-feed.d.ts +94 -0
  606. package/lib/types/dsh-adapter/plugin-feed.d.ts.map +1 -0
  607. package/lib/types/dsh-adapter/plugin-feed.js +135 -0
  608. package/lib/types/dsh-adapter/plugin-guard.d.ts +115 -0
  609. package/lib/types/dsh-adapter/plugin-guard.d.ts.map +1 -0
  610. package/lib/types/dsh-adapter/plugin-guard.js +108 -0
  611. package/lib/types/dsh-adapter/plugin-host.d.ts +13 -2
  612. package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
  613. package/lib/types/dsh-adapter/plugin-host.js +34 -8
  614. package/lib/types/dsh-adapter/plugin-install.d.ts +160 -0
  615. package/lib/types/dsh-adapter/plugin-install.d.ts.map +1 -0
  616. package/lib/types/dsh-adapter/plugin-install.js +545 -0
  617. package/lib/types/dsh-adapter/plugin-manage.d.ts +178 -0
  618. package/lib/types/dsh-adapter/plugin-manage.d.ts.map +1 -0
  619. package/lib/types/dsh-adapter/plugin-manage.js +468 -0
  620. package/lib/types/dsh-adapter/plugin-manager.d.ts +144 -0
  621. package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -0
  622. package/lib/types/dsh-adapter/plugin-manager.js +83 -0
  623. package/lib/types/dsh-adapter/plugin.d.ts +50 -1
  624. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  625. package/lib/types/dsh-adapter/plugin.js +918 -234
  626. package/lib/types/dsh-adapter/plugins-info.d.ts +130 -8
  627. package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
  628. package/lib/types/dsh-adapter/plugins-info.js +469 -44
  629. package/lib/types/dsh-adapter/process-exit.d.ts +43 -0
  630. package/lib/types/dsh-adapter/process-exit.d.ts.map +1 -0
  631. package/lib/types/dsh-adapter/process-exit.js +60 -0
  632. package/lib/types/dsh-adapter/root-dispose.d.ts +18 -0
  633. package/lib/types/dsh-adapter/root-dispose.d.ts.map +1 -0
  634. package/lib/types/dsh-adapter/root-dispose.js +28 -0
  635. package/lib/types/dsh-adapter/session-list-metadata.d.ts +20 -0
  636. package/lib/types/dsh-adapter/session-list-metadata.d.ts.map +1 -0
  637. package/lib/types/dsh-adapter/session-list-metadata.js +56 -0
  638. package/lib/types/dsh-adapter/session-projection-store.d.ts +66 -0
  639. package/lib/types/dsh-adapter/session-projection-store.d.ts.map +1 -0
  640. package/lib/types/dsh-adapter/session-projection-store.js +149 -0
  641. package/lib/types/dsh-adapter/session-seed.d.ts +11 -0
  642. package/lib/types/dsh-adapter/session-seed.d.ts.map +1 -0
  643. package/lib/types/dsh-adapter/session-seed.js +47 -0
  644. package/lib/types/dsh-adapter/sessions/list.d.ts +3 -1
  645. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
  646. package/lib/types/dsh-adapter/sessions/list.js +11 -5
  647. package/lib/types/dsh-adapter/sessions/snapshot.d.ts +0 -2
  648. package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -1
  649. package/lib/types/dsh-adapter/sessions/snapshot.js +7 -70
  650. package/lib/types/dsh-adapter/settingsEditor.js +2 -2
  651. package/lib/types/dsh-adapter/sideQuestion.d.ts +21 -0
  652. package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
  653. package/lib/types/dsh-adapter/sideQuestion.js +53 -0
  654. package/lib/types/dsh-adapter/startup-args.d.ts +2 -0
  655. package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -1
  656. package/lib/types/dsh-adapter/startup-args.js +5 -0
  657. package/lib/types/dsh-adapter/subagents.d.ts +33 -1
  658. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  659. package/lib/types/dsh-adapter/subagents.js +112 -9
  660. package/lib/types/dsh-adapter/team-mode.d.ts +74 -0
  661. package/lib/types/dsh-adapter/team-mode.d.ts.map +1 -0
  662. package/lib/types/dsh-adapter/team-mode.js +188 -0
  663. package/lib/types/dsh-adapter/team-roster.d.ts +67 -0
  664. package/lib/types/dsh-adapter/team-roster.d.ts.map +1 -0
  665. package/lib/types/dsh-adapter/team-roster.js +136 -0
  666. package/lib/types/dsh-adapter/team-tools.d.ts +58 -0
  667. package/lib/types/dsh-adapter/team-tools.d.ts.map +1 -0
  668. package/lib/types/dsh-adapter/team-tools.js +208 -0
  669. package/lib/types/dsh-adapter/tui-settings.d.ts +57 -0
  670. package/lib/types/dsh-adapter/tui-settings.d.ts.map +1 -0
  671. package/lib/types/dsh-adapter/tui-settings.js +199 -0
  672. package/lib/types/dsh-adapter/types.d.ts +1 -1
  673. package/lib/types/dsh-adapter/types.d.ts.map +1 -1
  674. package/lib/types/effortPrefs.d.ts +6 -3
  675. package/lib/types/effortPrefs.d.ts.map +1 -1
  676. package/lib/types/effortPrefs.js +7 -4
  677. package/lib/types/hostEntryRoute.d.ts +18 -0
  678. package/lib/types/hostEntryRoute.d.ts.map +1 -0
  679. package/lib/types/hostEntryRoute.js +57 -0
  680. package/lib/types/i18n.d.ts +961 -1439
  681. package/lib/types/i18n.d.ts.map +1 -1
  682. package/lib/types/i18n.js +443 -387
  683. package/lib/types/ink/components/AlternateScreen.js +2 -2
  684. package/lib/types/ink/components/App.d.ts +1 -0
  685. package/lib/types/ink/components/App.d.ts.map +1 -1
  686. package/lib/types/ink/components/App.js +16 -4
  687. package/lib/types/ink/components/CursorDeclarationContext.d.ts +9 -0
  688. package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -1
  689. package/lib/types/ink/components/CursorDeclarationContext.js +2 -0
  690. package/lib/types/ink/components/ScrollBox.d.ts +9 -0
  691. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
  692. package/lib/types/ink/components/ScrollBox.js +23 -0
  693. package/lib/types/ink/dom.d.ts.map +1 -1
  694. package/lib/types/ink/hooks/use-copy-on-select.d.ts +2 -2
  695. package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
  696. package/lib/types/ink/hooks/use-copy-on-select.js +13 -7
  697. package/lib/types/ink/hooks/use-declared-cursor.d.ts +11 -3
  698. package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -1
  699. package/lib/types/ink/hooks/use-declared-cursor.js +30 -10
  700. package/lib/types/ink/ink.d.ts +22 -17
  701. package/lib/types/ink/ink.d.ts.map +1 -1
  702. package/lib/types/ink/ink.js +151 -40
  703. package/lib/types/ink/kitty-graphics.d.ts +2 -0
  704. package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
  705. package/lib/types/ink/kitty-graphics.js +6 -1
  706. package/lib/types/ink/node-cache.d.ts +2 -1
  707. package/lib/types/ink/node-cache.d.ts.map +1 -1
  708. package/lib/types/ink/output.d.ts +10 -4
  709. package/lib/types/ink/output.d.ts.map +1 -1
  710. package/lib/types/ink/output.js +14 -10
  711. package/lib/types/ink/render-node-to-output.d.ts +5 -2
  712. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  713. package/lib/types/ink/render-node-to-output.js +27 -9
  714. package/lib/types/ink/renderer.d.ts +1 -0
  715. package/lib/types/ink/renderer.d.ts.map +1 -1
  716. package/lib/types/ink/renderer.js +4 -3
  717. package/lib/types/ink/root.d.ts +4 -1
  718. package/lib/types/ink/root.d.ts.map +1 -1
  719. package/lib/types/ink/screen.d.ts +4 -2
  720. package/lib/types/ink/screen.d.ts.map +1 -1
  721. package/lib/types/ink/selection.d.ts +10 -1
  722. package/lib/types/ink/selection.d.ts.map +1 -1
  723. package/lib/types/ink/selection.js +94 -25
  724. package/lib/types/ink/stdin-handoff.d.ts +11 -0
  725. package/lib/types/ink/stdin-handoff.d.ts.map +1 -0
  726. package/lib/types/ink/stdin-handoff.js +20 -0
  727. package/lib/types/ink/styles.d.ts +2 -1
  728. package/lib/types/ink/styles.d.ts.map +1 -1
  729. package/lib/types/ink/terminal-image.d.ts +6 -4
  730. package/lib/types/ink/terminal-image.d.ts.map +1 -1
  731. package/lib/types/ink/terminal-image.js +16 -39
  732. package/lib/types/ink/terminal-notification.d.ts +8 -0
  733. package/lib/types/ink/terminal-notification.d.ts.map +1 -0
  734. package/lib/types/ink/terminal-notification.js +83 -0
  735. package/lib/types/ink/terminal.d.ts +9 -0
  736. package/lib/types/ink/terminal.d.ts.map +1 -1
  737. package/lib/types/ink/terminal.js +34 -1
  738. package/lib/types/ink/termio/csi.d.ts +11 -0
  739. package/lib/types/ink/termio/csi.d.ts.map +1 -1
  740. package/lib/types/ink/termio/csi.js +13 -0
  741. package/lib/types/ink/update-overflow-guard.d.ts +6 -0
  742. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  743. package/lib/types/ink/update-overflow-guard.js +17 -0
  744. package/lib/types/ink/wrap-text.d.ts +6 -0
  745. package/lib/types/ink/wrap-text.d.ts.map +1 -1
  746. package/lib/types/ink/wrap-text.js +17 -0
  747. package/lib/types/kernelPrefs.d.ts +130 -17
  748. package/lib/types/kernelPrefs.d.ts.map +1 -1
  749. package/lib/types/kernelPrefs.js +98 -35
  750. package/lib/types/math/inline-layout.d.ts +2 -0
  751. package/lib/types/math/inline-layout.d.ts.map +1 -1
  752. package/lib/types/math/inline-layout.js +5 -27
  753. package/lib/types/modelGroups.d.ts +15 -27
  754. package/lib/types/modelGroups.d.ts.map +1 -1
  755. package/lib/types/modelGroups.js +17 -31
  756. package/lib/types/modelPrefs.d.ts +5 -4
  757. package/lib/types/modelPrefs.d.ts.map +1 -1
  758. package/lib/types/modelPrefs.js +5 -4
  759. package/lib/types/modelRoute.d.ts +23 -9
  760. package/lib/types/modelRoute.d.ts.map +1 -1
  761. package/lib/types/modelRoute.js +25 -11
  762. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  763. package/lib/types/native-ts/yoga-layout/index.js +8 -1
  764. package/lib/types/permissionPrefs.d.ts +34 -0
  765. package/lib/types/permissionPrefs.d.ts.map +1 -0
  766. package/lib/types/permissionPrefs.js +61 -0
  767. package/lib/types/permissionPresetLabels.d.ts +25 -0
  768. package/lib/types/permissionPresetLabels.d.ts.map +1 -0
  769. package/lib/types/permissionPresetLabels.js +33 -0
  770. package/lib/types/plugin-host.d.ts +1 -0
  771. package/lib/types/plugin-host.d.ts.map +1 -1
  772. package/lib/types/preset-patch.d.ts +22 -0
  773. package/lib/types/preset-patch.d.ts.map +1 -0
  774. package/lib/types/preset-patch.js +14 -0
  775. package/lib/types/presetPrefs.d.ts +17 -3
  776. package/lib/types/presetPrefs.d.ts.map +1 -1
  777. package/lib/types/presetPrefs.js +20 -3
  778. package/lib/types/reload.d.ts +6 -10
  779. package/lib/types/reload.d.ts.map +1 -1
  780. package/lib/types/reload.js +14 -14
  781. package/lib/types/screens/Chat.d.ts +55 -16
  782. package/lib/types/screens/Chat.d.ts.map +1 -1
  783. package/lib/types/screens/Chat.js +742 -280
  784. package/lib/types/screens/Launchpad.d.ts +33 -17
  785. package/lib/types/screens/Launchpad.d.ts.map +1 -1
  786. package/lib/types/screens/Launchpad.js +256 -78
  787. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  788. package/lib/types/screens/SessionSupervisor.js +53 -12
  789. package/lib/types/screens/Settings.d.ts.map +1 -1
  790. package/lib/types/screens/Settings.js +7 -0
  791. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  792. package/lib/types/screens/StatusLine.js +24 -7
  793. package/lib/types/screens/StatusMetrics.d.ts +46 -1
  794. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  795. package/lib/types/screens/StatusMetrics.js +72 -0
  796. package/lib/types/screens/chat/useKernelPicker.d.ts +8 -4
  797. package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -1
  798. package/lib/types/screens/chat/useKernelPicker.js +61 -21
  799. package/lib/types/screens/chat/useModelPicker.d.ts +42 -0
  800. package/lib/types/screens/chat/useModelPicker.d.ts.map +1 -0
  801. package/lib/types/screens/chat/useModelPicker.js +182 -0
  802. package/lib/types/screens/chat/usePluginWriteFlow.d.ts +68 -0
  803. package/lib/types/screens/chat/usePluginWriteFlow.d.ts.map +1 -0
  804. package/lib/types/screens/chat/usePluginWriteFlow.js +92 -0
  805. package/lib/types/screens/chatOverlay.d.ts +30 -5
  806. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  807. package/lib/types/screens/chatOverlay.js +0 -1
  808. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +4 -1
  809. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -1
  810. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +26 -5
  811. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +1 -1
  812. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  813. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +51 -29
  814. package/lib/types/sessionHistory.d.ts +5 -0
  815. package/lib/types/sessionHistory.d.ts.map +1 -1
  816. package/lib/types/sessionHistory.js +5 -0
  817. package/lib/types/sessionModes.d.ts +5 -3
  818. package/lib/types/sessionModes.d.ts.map +1 -1
  819. package/lib/types/sessionModes.js +9 -3
  820. package/lib/types/sessions/listSnapshot.d.ts +6 -0
  821. package/lib/types/sessions/listSnapshot.d.ts.map +1 -0
  822. package/lib/types/sessions/listSnapshot.js +67 -0
  823. package/lib/types/settings/definitions.d.ts +50 -0
  824. package/lib/types/settings/definitions.d.ts.map +1 -1
  825. package/lib/types/settings/definitions.js +42 -8
  826. package/lib/types/terminal-utils/cjk-emphasis.d.ts +28 -0
  827. package/lib/types/terminal-utils/cjk-emphasis.d.ts.map +1 -0
  828. package/lib/types/terminal-utils/cjk-emphasis.js +31 -0
  829. package/lib/types/terminal-utils/markdown.d.ts +3 -1
  830. package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
  831. package/lib/types/terminal-utils/markdown.js +7 -2
  832. package/lib/types/theme.d.ts +29 -12
  833. package/lib/types/theme.d.ts.map +1 -1
  834. package/lib/types/theme.js +310 -23
  835. package/lib/types/themeCatalog.d.ts.map +1 -1
  836. package/lib/types/themeCatalog.js +21 -2
  837. package/lib/types/tips.js +4 -4
  838. package/lib/types/tuiSettingsFile.d.ts +56 -0
  839. package/lib/types/tuiSettingsFile.d.ts.map +1 -0
  840. package/lib/types/tuiSettingsFile.js +206 -0
  841. package/lib/types/ui.d.ts +2 -0
  842. package/lib/types/ui.d.ts.map +1 -1
  843. package/lib/types/ui.js +2 -0
  844. package/lib/types/update.d.ts +72 -26
  845. package/lib/types/update.d.ts.map +1 -1
  846. package/lib/types/update.js +131 -43
  847. package/lib/types/utils/bmp.d.ts +7 -0
  848. package/lib/types/utils/bmp.d.ts.map +1 -1
  849. package/lib/types/utils/bmp.js +27 -0
  850. package/lib/types/utils/bootTrace.d.ts +2 -0
  851. package/lib/types/utils/bootTrace.d.ts.map +1 -0
  852. package/lib/types/utils/bootTrace.js +20 -0
  853. package/lib/types/utils/clipboard.d.ts.map +1 -1
  854. package/lib/types/utils/clipboard.js +11 -3
  855. package/lib/types/utils/credentials.d.ts +14 -2
  856. package/lib/types/utils/credentials.d.ts.map +1 -1
  857. package/lib/types/utils/credentials.js +34 -11
  858. package/lib/types/utils/imageResize.d.ts +10 -20
  859. package/lib/types/utils/imageResize.d.ts.map +1 -1
  860. package/lib/types/utils/imageResize.js +61 -134
  861. package/lib/types/utils/inputPaste.d.ts +2 -2
  862. package/lib/types/utils/inputPaste.js +2 -2
  863. package/lib/types/utils/pastedImagePath.d.ts +5 -0
  864. package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
  865. package/lib/types/utils/pastedImagePath.js +33 -0
  866. package/lib/types/utils/paths.d.ts +11 -0
  867. package/lib/types/utils/paths.d.ts.map +1 -1
  868. package/lib/types/utils/paths.js +13 -0
  869. package/package.json +150 -114
  870. package/presets/winbash.mjs +716 -0
  871. package/tui-profile/feed/README.md +63 -0
  872. package/tui-profile/feed/first-party.json +10 -0
  873. package/tui-profile/protocols/profile-definitions.d.ts +1 -0
  874. package/tui-profile/protocols/profile-definitions.js +14 -0
  875. package/tui-profile/protocols/tui-contributions.d.ts +55 -0
  876. package/tui-profile/protocols/tui-contributions.js +141 -0
  877. package/tui-profile/registry/contracts/backend-v1alpha1.json +13 -0
  878. package/tui-profile/registry/registry-0.15.json +12 -0
  879. package/lib/types/backends/claude/install.d.ts +0 -15
  880. package/lib/types/backends/claude/install.d.ts.map +0 -1
  881. package/lib/types/backends/claude/install.js +0 -91
  882. package/lib/types/channel/elicitation.d.ts.map +0 -1
  883. package/lib/types/dsh-adapter/channel/session-lineage.d.ts +0 -42
  884. package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +0 -1
  885. package/lib/types/dsh-adapter/channel/session-lineage.js +0 -51
  886. package/lib/types/utils/jsonl.d.ts.map +0 -1
@@ -1,21 +1,29 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import React from 'react';
3
- import { Box, Text, useInput, useTerminalSize } from '../ui.js';
3
+ import { unlink } from 'node:fs/promises';
4
+ import { basename, resolve } from 'node:path';
5
+ import { Box, Text, useInput, useTerminalSize, useNativeCursor } from '../ui.js';
4
6
  import { SearchBox } from '../components/SearchBox.js';
5
7
  import { OverlayAbove } from '../components/OverlayAbove.js';
6
8
  import { CommandSuggestions } from '../components/CommandSuggestions.js';
7
9
  import { LogoV2 } from '../components/LogoV2.js';
8
10
  import { resolveLaunchpadLayout } from '../components/launchpadLayout.js';
9
- import { kernelDisplayName, kernelSubtitle } from '../components/kernelCatalog.js';
11
+ import { kernelSubtitle } from '../components/kernelCatalog.js';
10
12
  import { fitParamParts, PARAM_SEPARATOR } from '../components/launchpadParams.js';
11
13
  import { useTooltip } from '../components/Tooltip.js';
12
- import { pickSplashFont, splashFontById } from '../components/splashFonts.js';
14
+ import { resolveSplashTitleFont, pickSplashFont, splashFontById } from '../components/splashFonts.js';
15
+ import { pickSplashEgg } from '../components/splashEggs.js';
16
+ import { resolveSplashArtForm, splashArtRows } from '../components/splashArtRows.js';
17
+ import { useSplashMascotSkin, useSplashMascotBox } from '../components/sidePanel/companion/SplashMascot.js';
13
18
  import { t } from '../i18n.js';
14
19
  import { isMinimalUiMode } from '../minimalUiMode.js';
15
20
  import { stringWidth } from '../ink/stringWidth.js';
16
- import { isPlainReturn } from '../utils/modifiers.js';
21
+ import { isMod, isPlainReturn } from '../utils/modifiers.js';
17
22
  import { actionMatches } from '../utils/keymap.js';
18
23
  import { formatClipboardInsert, readClipboard } from '../utils/clipboard.js';
24
+ import { imagePathMediaType, parsePastedImagePath, readBoundedRegularFile, stageClipboardFilePaths } from '../utils/pastedImagePath.js';
25
+ import { resolveBindingGeneration } from '../components/promptDraftCache.js';
26
+ import { imageTokenSpans, snapOffImageToken, expandImageTokenRange } from '../components/composerImageTokens.js';
19
27
  import { collapseToSingleLine, insertSingleLineAt, matchesPasteShortcut, stripBracketedPasteMarkers, } from '../utils/inputPaste.js';
20
28
  /** 光标闪烁一个相位的毫秒数(用户要求 500–600ms 一相位)。 */
21
29
  const CARET_BLINK_MS = 550;
@@ -153,7 +161,7 @@ function CornerChip({ label, focused, onActivate, onHover, onHoverLeave, }) {
153
161
  /**
154
162
  * 右下角内核区(第八版):列出可选内核并标出记住的那个。第一行 TUI 版本不动,其后一行一个内核
155
163
  * ——当前内核打 `▸ ` 前缀、保持主题蓝;其余行前缀两格空格、文字 dim(前缀等宽
156
- * 让名字对齐)。行文本 = `短品牌名 · 副标题`(名字取 kernelDisplayName:DSH /
164
+ * 让名字对齐)。行文本 = `短品牌名 · 副标题`(名字取 manifest 的 shortLabel:DSH /
157
165
  * Claude——全名 40 列会挤掉左下角的目录铭牌;副标题 = 版本 / 置灰原因,缺席就
158
166
  * 只画名字,见 kernelCatalog 的 kernelSubtitle)。目标形状:
159
167
  *
@@ -174,7 +182,7 @@ function KernelCorner({ rows, focused, onActivate, onHover, onHoverLeave, }) {
174
182
  const [hovered, setHovered] = React.useState(false);
175
183
  const interactive = onActivate !== undefined;
176
184
  const active = interactive && (hovered || focused);
177
- return (_jsx(Box, { flexShrink: 0, flexDirection: "row", justifyContent: "flex-end", children: _jsx(Box, { flexDirection: "column", alignItems: "flex-start", ...(interactive
185
+ return (_jsx(Box, { flexShrink: 0, flexDirection: "row", justifyContent: "flex-end", children: _jsx(Box, { flexDirection: "column", alignItems: "flex-end", ...(interactive
178
186
  ? {
179
187
  onMouseEnter: () => { setHovered(true); onHover(); },
180
188
  onMouseLeave: () => { setHovered(false); onHoverLeave(); },
@@ -213,15 +221,13 @@ function KernelCorner({ rows, focused, onActivate, onHover, onHoverLeave, }) {
213
221
  * **输入框在这一屏是唯一有状态的部件**:用户敲进去的东西必须原样带进聊天页,
214
222
  * 否则"第一屏输入的字"就被这一屏吞了。第六版起行首 `/` 会弹出**命令补全面板**
215
223
  * (`commands`/`onCommandPick` 两缝,数据与组件都与聊天页 composer 同源),
216
- * 面板选中直接执行命令;面板没收掉时整行仍原样交给 `onSubmit`,由 `Chat`
224
+ * Tab 补全到输入框,Enter/点击执行并清空输入;面板收起时整行原样交给 `onSubmit`,由 `Chat`
217
225
  * 走它既有的命令表判定(合并命令表,含 registry 命令)再决定 runCommand 或
218
226
  * 发送。本地只读一点:行首是不是 `/`,用来把输入框左边的提示符从 `❯` 换成
219
227
  * `⌘`。
220
228
  *
221
- * 光标闪烁:只在输入框有焦点(`focusIndex < 0`)且终端持有焦点时跑,
222
- * 约 550ms 一个相位;**相位只切换样式**(inverse ↔ inverse+dim,见
223
- * `SearchBox` 的 `caretBlink` 契约),不增删任何字符——无头回归读的是
224
- * 视口纯文本,闪烁对它不可见,断言不随相位抖动。
229
+ * TTY 输入使用终端原生光标,闪烁与动画继承终端配置。无原生光标的
230
+ * 呈现环境保留约 550ms 的样式闪烁;相位不增删字符、不挪动文本。
225
231
  *
226
232
  * 居中与降级:宽度走 `resolveSplashLayout` 那一套(与开屏同源,阈值不会漂),
227
233
  * 高度走 `resolveLaunchpadLayout`(整块撤:Tips → 键帽行 → 立绘 → 只留输入框)。
@@ -230,9 +236,9 @@ function KernelCorner({ rows, focused, onActivate, onHover, onHoverLeave, }) {
230
236
  * 天然没有它们,所以每个可点目标都必须有一条键盘路径(这里全部有:焦点 +
231
237
  * Enter)。
232
238
  */
233
- export function Launchpad({ query, cursorOffset, focusIndex, isTerminalFocused, whale, whaleIdle, whaleGirl, brand, fontId, starred, onStarClick, firstRun, actions, overlayPanel, inputPaused = false, onParamPick, model, effort, preset, permission, commands, onCommandPick, clipboardReader = readClipboard,
239
+ export function Launchpad({ query, cursorOffset, focusIndex, isTerminalFocused, whale, whaleIdle, whaleGirl, brand, companionSkin, fontId, egg, starred, onStarClick, firstRun, actions, overlayPanel, inputPaused = false, onParamPick, model, effort, preset, permission, commands, onCommandPick, clipboardReader = readClipboard, imageComposer,
234
240
  /** Tips 自动轮换间隔(第七版;测试缝:无头回归注入短间隔确定性驱动相位)。 */
235
- tipRotateMs = TIP_ROTATE_MS,
241
+ tipRotateMs = TIP_ROTATE_MS, notice,
236
242
  /** 左下角工作目录铭牌被点击/回车时交给 Chat(开既有的 /workspace 工作区菜单)。 */
237
243
  onOpenWorkspace,
238
244
  /** 右下角内核区的目录行(第八版:一行一个内核,当前那个打 ▸)。 */
@@ -245,16 +251,19 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
245
251
  // 光标偏移只在"输入框有焦点"时才有意义;未给(或焦点在快捷入口行)时
246
252
  // 一律按行尾算——这与 `SearchBox` 自己的 `cursorOffset ?? query.length`
247
253
  // 同一条约定,两处必须一致,否则退格会从"看不见的位置"删字。
248
- const caret = focusIndex === -1 ? (cursorOffset ?? query.length) : query.length;
254
+ const boundImageSpans = (text) => imageTokenSpans(text).filter(span => imageComposer?.bindings.has(span.token) === true);
255
+ const imageSpans = boundImageSpans(query);
256
+ const caret = snapOffImageToken(imageSpans, focusIndex === -1 ? (cursorOffset ?? query.length) : query.length, 'nearest');
249
257
  /** 焦点是否在输入框上(-1);参数段(≤-2)与动作入口(≥0)都不算。 */
250
258
  const inputFocused = focusIndex === -1;
251
259
  // ── 命令补全面板(第六版 BUG 1)──────────────────────────────────────────
252
260
  // 与聊天页 composer 同一套契约:行首 / + 有候选 → 面板上屏;↑/↓ 移选中、
253
- // Enter/Tab/点击执行选中命令、Esc 只收面板(不清草稿——用户可能只是想
261
+ // Tab 补全到输入框,Enter/点击执行并清空输入、Esc 只收面板(用户可能只是想
254
262
  // 看一眼)。`dismissedFor` 记住"这条 query 被收过":Esc 之后继续打字
255
263
  // (query 变了)面板自然回来,与 PromptInput 的补全行为同源。
256
264
  const [paletteIndex, setPaletteIndex] = React.useState(0);
257
265
  const [paletteDismissedFor, setPaletteDismissedFor] = React.useState('');
266
+ const paletteInput = query;
258
267
  const paletteCommands = commands !== undefined && query.startsWith('/') && query !== paletteDismissedFor
259
268
  ? commands
260
269
  : [];
@@ -262,9 +271,15 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
262
271
  const paletteSelectedIndex = Math.min(paletteIndex, Math.max(0, paletteCommands.length - 1));
263
272
  const paletteSelected = paletteCommands[paletteSelectedIndex];
264
273
  const pickCommand = (commandLine) => {
265
- setPaletteDismissedFor(query);
266
- if (onCommandPick !== undefined)
267
- onCommandPick(commandLine);
274
+ setPaletteDismissedFor('');
275
+ setPaletteIndex(0);
276
+ // Edits earlier in the same stdin batch update the mirror before props
277
+ // and completion rows can render again. A stale row must not replace them.
278
+ const notice = onCommandPick?.(queryRef.current === query ? commandLine : queryRef.current);
279
+ if (typeof notice === 'string')
280
+ showPasteNotice(notice);
281
+ else
282
+ pasteRevisionRef.current += 1;
268
283
  };
269
284
  // ── Tips 轮换(第六版设计 2)─────────────────────────────────────────────
270
285
  // 轮换顺序(注释即契约):launchpad-tip → launchpad-tip-2 → launchpad-tip-3
@@ -281,7 +296,39 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
281
296
  queryRef.current = query;
282
297
  const caretRef = React.useRef(caret);
283
298
  caretRef.current = caret;
299
+ const changeQuery = (text, offset) => {
300
+ const nextCaret = snapOffImageToken(boundImageSpans(text), offset, offset < caretRef.current ? 'start' : offset > caretRef.current ? 'end' : 'nearest');
301
+ queryRef.current = text;
302
+ caretRef.current = nextCaret;
303
+ onQueryChange(text, nextCaret);
304
+ };
305
+ const deleteRange = (start, end) => {
306
+ const text = queryRef.current;
307
+ const range = expandImageTokenRange(boundImageSpans(text), start, end);
308
+ changeQuery(text.slice(0, range.start) + text.slice(range.end), range.start);
309
+ };
284
310
  const clipboardBusyRef = React.useRef(false);
311
+ const pasteRevisionRef = React.useRef(0);
312
+ const mountedRef = React.useRef(true);
313
+ const imageChainRef = React.useRef(Promise.resolve());
314
+ React.useEffect(() => {
315
+ mountedRef.current = true;
316
+ return () => { mountedRef.current = false; };
317
+ }, []);
318
+ const capturePasteLease = () => {
319
+ const revision = pasteRevisionRef.current;
320
+ const channel = imageComposer?.channel;
321
+ const agentId = channel?.agentId;
322
+ const generation = channel === undefined ? 0 : resolveBindingGeneration(channel);
323
+ const imageGeneration = channel?.stagedImageGeneration?.() ?? 0;
324
+ return {
325
+ imageGeneration,
326
+ isCurrent: () => mountedRef.current && revision === pasteRevisionRef.current
327
+ && (channel === undefined || (channel.agentId === agentId
328
+ && resolveBindingGeneration(channel) === generation
329
+ && (channel.stagedImageGeneration?.() ?? 0) === imageGeneration)),
330
+ };
331
+ };
285
332
  /** 粘贴提示:落地页没有 toast 基础设施,借 Tips 行显示 4 秒(失败不能静默)。 */
286
333
  const [pasteNotice, setPasteNotice] = React.useState(undefined);
287
334
  const noticeTimerRef = React.useRef(null);
@@ -300,6 +347,10 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
300
347
  if (noticeTimerRef.current !== null)
301
348
  clearTimeout(noticeTimerRef.current);
302
349
  }, []);
350
+ /** Tips 行此刻被哪条提示占用(粘贴提示优先于 channel 通知)。 */
351
+ const rowNotice = pasteNotice !== undefined
352
+ ? { text: pasteNotice, color: 'warning' }
353
+ : notice;
303
354
  /** 单行插入(粘贴):换行折叠成空格、`\r` 去掉——落地页是单行编辑器,
304
355
  * 多行内容不许拼出换行(Enter 才是提交)。落在当下光标处。 */
305
356
  const insertSingleLine = (text) => {
@@ -308,16 +359,73 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
308
359
  return;
309
360
  // 异步落点守则:读回那一刻的 query/caret 才算数(refs 每次渲染刷新)。
310
361
  const next = insertSingleLineAt(queryRef.current, caretRef.current, clean);
311
- onQueryChange(next.text, next.caret);
362
+ changeQuery(next.text, next.caret);
312
363
  onFocusChange(-1);
313
364
  };
365
+ const pasteImagePaths = (paths, lease, bitmap = false) => {
366
+ const work = async () => {
367
+ if (!lease.isCurrent())
368
+ return;
369
+ if (imageComposer === undefined) {
370
+ showPasteNotice(t('input-image-paste-failed', { err: 'image attachments are unavailable in this profile' }));
371
+ return;
372
+ }
373
+ const { channel, bindings } = imageComposer;
374
+ const limits = channel.stagedImageLimits?.();
375
+ const { parts, staged, failure, failureCode } = await stageClipboardFilePaths(paths, async (path) => {
376
+ if (!lease.isCurrent())
377
+ throw new Error('the draft changed while the image was being staged');
378
+ if (limits === undefined)
379
+ throw new Error('image attachments are unavailable in this profile');
380
+ const data = await readBoundedRegularFile(path, limits.maxImageBytes);
381
+ if (!lease.isCurrent())
382
+ throw new Error('the draft changed while the image was being staged');
383
+ return channel.stageComposerImage({
384
+ data,
385
+ mediaType: imagePathMediaType(path) ?? 'image/png',
386
+ name: basename(path),
387
+ path: resolve(path),
388
+ }, lease.imageGeneration);
389
+ }, path => formatClipboardInsert({ kind: 'files', paths: [path] }), Math.max(0, (limits?.maxImagesPerMessage ?? 0) - bindings.size));
390
+ if (!lease.isCurrent() || staged.some(handle => channel.hasStagedImage(handle.stageId) !== true)) {
391
+ for (const handle of staged)
392
+ channel.discardStagedImage(handle.stageId);
393
+ return;
394
+ }
395
+ let number = 1;
396
+ const reserved = new Set(queryRef.current.match(/\[Image #\d+\]/gu) ?? []);
397
+ const text = parts.map(part => {
398
+ if (part.kind === 'text')
399
+ return part.value;
400
+ while (reserved.has(`[Image #${number}]`))
401
+ number += 1;
402
+ const token = `[Image #${number++}]`;
403
+ bindings.set(token, part.value.stageId);
404
+ return token;
405
+ }).join(' ');
406
+ // A failed bitmap export is temporary and must never become a path reference.
407
+ if (!bitmap || staged.length > 0)
408
+ insertSingleLine(`${text} `);
409
+ if (failure !== '') {
410
+ showPasteNotice(t('input-image-paste-failed', { err: failureCode === 'image-limit' ? t('input-image-paste-limit') : failure }));
411
+ }
412
+ else if (staged.length > 0) {
413
+ const adapted = staged.filter(handle => handle.adjustment !== undefined).length;
414
+ showPasteNotice(adapted > 0
415
+ ? t('input-images-staged-adapted', { count: staged.length, adapted })
416
+ : t('input-images-staged', { count: staged.length }));
417
+ }
418
+ };
419
+ const queued = imageChainRef.current.then(work, work);
420
+ imageChainRef.current = queued.catch(() => undefined);
421
+ return queued;
422
+ };
314
423
  // 光标闪烁相位(第四版修订:**自动呼吸**,不要求终端 focus 事件)。开关只看
315
424
  // 「输入框是这一屏的焦点目标」(focusIndex < 0)——`isTerminalFocused` 依赖
316
- // DECSET 1004 focus 事件,Windows Terminal 下要点击窗口才发,拿它当开关就
317
- // 出现"必须手动点一下才开始闪"(用户实测)。它其余的语义(SearchBox 的
318
- // 失焦降级等)保留,只是不再控制闪烁。样式切换、字符不动(模块头注释里
319
- // 的契约)。定时器 unref——探针宿主不因闪烁挂着事件循环。
320
- const inputActive = inputFocused;
425
+ // The native caret owns blinking in TTYs; only the painted fallback needs
426
+ // a timer. Do not gate it on terminal focus events, which can arrive late.
427
+ const nativeCursor = useNativeCursor();
428
+ const inputActive = inputFocused && !nativeCursor;
321
429
  const [caretPhase, setCaretPhase] = React.useState(true);
322
430
  React.useEffect(() => {
323
431
  if (!inputActive) {
@@ -368,31 +476,50 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
368
476
  const cornerLeft = [cwd, branch].filter(part => part !== undefined && part !== '').join(':');
369
477
  // 右下角铭牌带(第八版):第一行 TUI 版本,其后一行一个内核。
370
478
  // 行文本 = `名字 · 副标题`——副标题(版本 / 置灰原因)与选择器同源
371
- // (kernelSubtitle),读不到就只画名字,绝不编造。
479
+ // (kernelSubtitle),读不到就只画名字,绝不编造。**登录状态不进铭牌**:
480
+ // 铭牌只报「有哪些内核、各自什么版本」,未登录在选择器里看(切换时才需要,
481
+ // noteKey 在那边走副标题),右下角保持只有名字与版号的干净两列。
372
482
  const tuiPart = tuiVersion === undefined || tuiVersion === '' ? undefined : `dsh-tui v${tuiVersion}`;
373
- // 名字用**短品牌名**(DSH / Claude,与启动页「内核 · DSH」那个 chip 同源):
374
- // 这一格与左下角的 `工作目录:分支` 共用底边,全名(DeepSeek Harness · … = 40 列)
375
- // 在窄终端里会把左边的目录铭牌挤掉。选择器那一屏有地方,仍用全名(labelKey)。
483
+ // 名字用**短品牌名**(option.shortLabel,来自 manifest:DSH / Claude,与启动页
484
+ // 「内核 · DSH」那个 chip 同源):这一格与左下角的 `工作目录:分支` 共用底边,
485
+ // 全名(DeepSeek Harness · … = 40 列)在窄终端里会把左边的目录铭牌挤掉。
486
+ // 选择器那一屏有地方,仍用全名(label)。
376
487
  const kernelRows = (kernels ?? []).map(option => {
377
- const subtitle = kernelSubtitle(option, key => t(key));
378
- const name = kernelDisplayName(option.id);
488
+ const { noteKey: _loginNote, ...rest } = option;
489
+ const subtitle = kernelSubtitle(rest, key => t(key));
490
+ const name = option.shortLabel;
379
491
  return { id: option.id, current: option.current, label: subtitle === undefined ? name : name + ' \u00b7 ' + subtitle };
380
492
  });
381
493
  /** 内核区进不进焦点环:画得出来**且**接了回调(可点才需要键盘等价操作)。 */
382
494
  const kernelCornerFocusable = kernelRows.length > 0 && onKernelPick !== undefined;
383
495
  const cardWidth = Math.max(24, Math.min(columns - 4, 72));
496
+ // 当天字体与节日只在 mount 时选一次,并交给 Logo,避免预算与渲染各自读日期。
497
+ // 立绘槽的吉祥物皮肤(`companion.skin`)同理:这一层与 `LogoV2` 读同一个
498
+ // 源(同一份 `useSyncExternalStore` 订阅),预算与渲染不会各看各的。
499
+ const mascotSkin = useSplashMascotSkin(companionSkin);
500
+ const mascotBox = useSplashMascotBox(mascotSkin, (brand ?? 'deepseek') === 'deepseek' && (whale || whaleGirl));
501
+ const [dailyFont] = React.useState(() => pickSplashFont());
502
+ const [dailyEgg] = React.useState(() => egg === undefined ? pickSplashEgg() : egg);
503
+ const font = fontId === undefined ? dailyFont : splashFontById(fontId);
504
+ const titleFont = resolveSplashTitleFont(font, brand, dailyEgg);
505
+ // 预算与 LogoV2 共享形态、图片槽:紧凑图片已缩减占位时不能仍按侧栏的15行算。
506
+ const splashArtForm = resolveSplashArtForm({ brand, whaleGirl, mascotSkin });
507
+ const artRows = splashArtRows(splashArtForm, mascotBox);
384
508
  const layout = resolveLaunchpadLayout(columns, rows, {
385
509
  params: hasParams,
386
510
  whale,
387
511
  whaleGirl,
388
- font: launchpadFont(fontId),
512
+ font: titleFont,
513
+ artRows,
514
+ // 右下角铭牌自身行数:第一行(目录 + TUI 版号)+ 一行一个内核(第八版)。
515
+ cornerRows: 1 + kernelRows.length,
389
516
  });
390
517
  // Tips 自动轮换(第七版,用户要「呼吸感」):约 10s 一换,与点击/焦点+Enter
391
518
  // 的手动切换**并存**——手动切换改 tipIndex,本 effect 以 tipIndex 为依赖,
392
519
  // 重臂即计时重置(刚点完不会立刻被自动轮换跳走)。只在 Tips 行真的在画、
393
520
  // 且不是首启句/粘贴提示时跑;本组件被整屏盖住时随之卸载,定时器自然停。
394
521
  // 切换只改那一行文本(TIP_KEYS 查表),行高与居中位置不变——无布局抖动。
395
- const tipsAutoRotatable = layout.showTip && pasteNotice === undefined && !firstRun;
522
+ const tipsAutoRotatable = layout.showTip && rowNotice === undefined && !firstRun;
396
523
  React.useEffect(() => {
397
524
  if (!tipsAutoRotatable)
398
525
  return;
@@ -415,7 +542,7 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
415
542
  *
416
543
  * 编辑能力刻意只做单行编辑器该有的那几样:退格 / Delete / 左右移动 /
417
544
  * Home / End / 粘贴。首屏不是编辑器,用户在上面打的第一句通常就一两个
418
- * 词;多行、图片、`@` 补全都属于聊天页,敲 Enter 就过去了。
545
+ * 词;多行与 `@` 补全属于聊天页,图片经同一 channel 暂存。
419
546
  *
420
547
  * `↑/↓` 与 `Tab` 在键帽行上移动焦点;焦点在 `-1` 时这两组键无操作
421
548
  * (首屏没有可滚的东西)。
@@ -425,12 +552,24 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
425
552
  // 选择器回到这里)。没有这道闸,选择器分支没消费的键会漏进草稿。
426
553
  if (inputPaused)
427
554
  return;
555
+ const query = queryRef.current;
556
+ const caret = caretRef.current;
428
557
  const composing = key.ctrl || key.meta || key.super;
429
558
  // 终端原生粘贴(bracketed paste:Ctrl+Shift+V / 右键 / Shift+Insert):
430
559
  // ink 把载荷标成 isPasted 交给 useInput;标记字节(\x1b[200~ / 201~)在
431
560
  // 解析层已被剥掉,这里的 input 就是纯载荷。换行折叠成单行(见上)。
432
561
  if (event?.isPasted === true && input.length > 0) {
433
- insertSingleLine(stripBracketedPasteMarkers(input));
562
+ const text = stripBracketedPasteMarkers(input);
563
+ const path = parsePastedImagePath(text);
564
+ if (path !== null && imageComposer !== undefined) {
565
+ const lease = capturePasteLease();
566
+ void pasteImagePaths([path], lease).catch(error => {
567
+ if (lease.isCurrent())
568
+ showPasteNotice(t('input-image-paste-failed', { err: String(error) }));
569
+ });
570
+ }
571
+ else
572
+ insertSingleLine(text);
434
573
  event.stopImmediatePropagation();
435
574
  return;
436
575
  }
@@ -439,27 +578,49 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
439
578
  // 曾经的 bug:组合键兜底把 Ctrl+V 一口吞掉,粘贴永远是死的。
440
579
  if (matchesPasteShortcut(input, key)) {
441
580
  if (!clipboardBusyRef.current) {
581
+ const lease = capturePasteLease();
442
582
  clipboardBusyRef.current = true;
443
583
  void clipboardReader()
444
- .then(content => {
445
- if (content === null) {
446
- showPasteNotice(t('input-clipboard-empty'));
447
- return;
584
+ .then(async (content) => {
585
+ const temporaryPath = content?.kind === 'image' ? content.path : undefined;
586
+ try {
587
+ if (!lease.isCurrent())
588
+ return;
589
+ if (content === null) {
590
+ showPasteNotice(t('input-clipboard-empty'));
591
+ return;
592
+ }
593
+ if (content.kind === 'unavailable') {
594
+ showPasteNotice(t(content.wsl === true ? 'input-clipboard-unavailable-wsl' : 'input-clipboard-unavailable'));
595
+ return;
596
+ }
597
+ if (content.kind === 'image') {
598
+ if (imagePathMediaType(content.path) === undefined) {
599
+ showPasteNotice(t('input-image-format-unsupported'));
600
+ return;
601
+ }
602
+ await pasteImagePaths([content.path], lease, true);
603
+ return;
604
+ }
605
+ if (content.kind === 'files' && imageComposer !== undefined) {
606
+ await pasteImagePaths(content.paths, lease);
607
+ return;
608
+ }
609
+ const text = formatClipboardInsert(content);
610
+ const path = parsePastedImagePath(text);
611
+ if (path !== null && imageComposer !== undefined)
612
+ await pasteImagePaths([path], lease);
613
+ else
614
+ insertSingleLine(text);
448
615
  }
449
- if (content.kind === 'unavailable') {
450
- showPasteNotice(t(content.wsl === true ? 'input-clipboard-unavailable-wsl' : 'input-clipboard-unavailable'));
451
- return;
616
+ finally {
617
+ if (temporaryPath !== undefined)
618
+ await unlink(temporaryPath).catch(() => undefined);
452
619
  }
453
- if (content.kind === 'image') {
454
- // 单行编辑器不能暂存图片(staged image 是聊天页的能力);
455
- // 插入临时文件路径只会留一条谁也读不懂的路径——提示而不是插入。
456
- showPasteNotice(t('input-clipboard-unavailable'));
457
- return;
458
- }
459
- insertSingleLine(formatClipboardInsert(content));
460
620
  })
461
621
  .catch(() => {
462
- showPasteNotice(t('input-clipboard-read-failed'));
622
+ if (lease.isCurrent())
623
+ showPasteNotice(t('input-clipboard-read-failed'));
463
624
  })
464
625
  .finally(() => {
465
626
  clipboardBusyRef.current = false;
@@ -480,7 +641,7 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
480
641
  }
481
642
  }
482
643
  // 命令补全面板(第六版 BUG 1):面板开着时 ↑/↓/Enter/Tab/Esc 全归面板——
483
- // 与聊天页 composer 的补全菜单同一套键位。Enter/Tab/点击 = 执行选中命令
644
+ // 与聊天页 composer 的补全菜单同一套键位。Tab 补全;Enter/点击执行选中命令
484
645
  // (onCommandPick → Chat 的 runCommand,绝不 submit);Esc 只收面板,
485
646
  // 草稿一字不动(用户可能只是想看一眼有什么命令)。
486
647
  if (paletteOpen && paletteSelected !== undefined) {
@@ -490,8 +651,17 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
490
651
  event.stopImmediatePropagation();
491
652
  return;
492
653
  }
493
- if (key.tab || isPlainReturn(key)) {
494
- pickCommand(paletteSelected.commandLine ?? '/' + paletteSelected.name + ' ');
654
+ if (key.tab) {
655
+ if (!key.shift && query === paletteInput) {
656
+ const replacement = paletteSelected.replacement;
657
+ setPaletteIndex(0);
658
+ changeQuery(replacement, replacement.length);
659
+ }
660
+ event.stopImmediatePropagation();
661
+ return;
662
+ }
663
+ if (isPlainReturn(key)) {
664
+ pickCommand(paletteSelected.commandLine);
495
665
  event.stopImmediatePropagation();
496
666
  return;
497
667
  }
@@ -502,18 +672,20 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
502
672
  }
503
673
  }
504
674
  if (key.escape) {
675
+ pasteRevisionRef.current += 1;
505
676
  // 空输入时 Esc 去看会话(首屏最常见的下一步);已经有字就只清空它,
506
677
  // 免得辛苦打的半句话被一次性丢掉。
507
678
  if (query !== '')
508
- onQueryChange('', 0);
679
+ changeQuery('', 0);
509
680
  else
510
681
  onEscape('sessions');
511
682
  event.stopImmediatePropagation();
512
683
  return;
513
684
  }
514
685
  if (key.ctrl && (input === 'c' || input === 'd')) {
686
+ pasteRevisionRef.current += 1;
515
687
  if (query !== '')
516
- onQueryChange('', 0);
688
+ changeQuery('', 0);
517
689
  else
518
690
  onEscape('exit');
519
691
  event.stopImmediatePropagation();
@@ -545,8 +717,13 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
545
717
  }
546
718
  else {
547
719
  const focused = focusIndex >= 0 ? actions[focusIndex] : undefined;
548
- if (focused === undefined)
549
- onSubmit(query);
720
+ if (focused === undefined) {
721
+ const notice = onSubmit(query);
722
+ if (typeof notice === 'string')
723
+ showPasteNotice(notice);
724
+ else
725
+ pasteRevisionRef.current += 1;
726
+ }
550
727
  else
551
728
  onAction(focused);
552
729
  }
@@ -564,7 +741,7 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
564
741
  // 入口 + Tips 行(第六版设计 2,环的最后一格——它在版面上就在入口行下方)。
565
742
  // 窄终端里 `fitChips`/参数行的宽度裁剪会丢掉放不下的那几个,按
566
743
  // 整张表绕圈会让焦点指着一个看不见的目标、Enter 触发一个看不见的动作。
567
- const tipsFocusable = layout.showTip && pasteNotice === undefined && !firstRun;
744
+ const tipsFocusable = layout.showTip && rowNotice === undefined && !firstRun;
568
745
  // 左下角铭牌(第七版):画得出来且接了 onOpenWorkspace 才进环。
569
746
  const cornerFocusable = layout.showCorners && cornerLeft !== '' && onOpenWorkspace !== undefined;
570
747
  // 环的顺序 = 版面顺序(↓ 一路向下):…→ Tips → 左下目录铭牌 → 右下内核区。
@@ -590,7 +767,7 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
590
767
  : key.end ? query.length
591
768
  : key.leftArrow ? Math.max(0, prevBoundary(query, at))
592
769
  : Math.min(query.length, nextBoundary(query, at));
593
- onQueryChange(query, next);
770
+ changeQuery(query, next);
594
771
  event.stopImmediatePropagation();
595
772
  return;
596
773
  }
@@ -601,17 +778,28 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
601
778
  if (key.backspace) {
602
779
  if (at === 0)
603
780
  return;
604
- const cut = prevBoundary(query, at);
605
- onQueryChange(query.slice(0, cut) + query.slice(at), cut);
781
+ deleteRange(prevBoundary(query, at), at);
606
782
  }
607
783
  else {
608
784
  if (at >= query.length)
609
785
  return;
610
- onQueryChange(query.slice(0, at) + query.slice(nextBoundary(query, at)), at);
786
+ deleteRange(at, nextBoundary(query, at));
611
787
  }
612
788
  event.stopImmediatePropagation();
613
789
  return;
614
790
  }
791
+ if (isMod(key) && input === 'w') {
792
+ if (!inputFocused)
793
+ return;
794
+ let start = caret;
795
+ while (start > 0 && /\s/u.test(query[start - 1]))
796
+ start--;
797
+ while (start > 0 && !/\s/u.test(query[start - 1]))
798
+ start--;
799
+ deleteRange(start, caret);
800
+ event.stopImmediatePropagation();
801
+ return;
802
+ }
615
803
  if (composing || key.return)
616
804
  return;
617
805
  // 可打印输入(含粘贴整段):接到光标处,交给 SearchBox 的窗口化去滚。
@@ -619,11 +807,11 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
619
807
  if (typed === '')
620
808
  return;
621
809
  const at = caret;
622
- onQueryChange(query.slice(0, at) + typed + query.slice(at), at + typed.length);
810
+ changeQuery(query.slice(0, at) + typed + query.slice(at), at + typed.length);
623
811
  onFocusChange(-1);
624
812
  event.stopImmediatePropagation();
625
813
  });
626
- return (_jsxs(Box, { flexDirection: "column", width: columns, height: rows, onClick: onBlankClick, children: [_jsxs(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: [layout.showHero && (_jsx(LogoV2, { fontId: fontId, whale: layout.showWhale && whale, whaleIdle: whaleIdle, whaleGirl: layout.showWhale && whaleGirl, brand: brand, starred: starred, onStarClick: onStarClick, skipIntro: true, align: "center", chrome: "minimal", arrangement: "column" })), _jsxs(Box, { flexDirection: "column", width: cardWidth, marginTop: layout.heroGapRows, children: [_jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: inputFocused ? 'suggestion' : 'inactive', paddingX: 1, width: cardWidth, children: _jsx(SearchBox, { query: query, placeholder: t('launchpad-placeholder'),
814
+ return (_jsxs(Box, { flexDirection: "column", width: columns, height: rows, onClick: onBlankClick, children: [_jsxs(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: [layout.showHero && (_jsx(LogoV2, { fontId: font.id, egg: dailyEgg, whale: layout.showWhale && whale, whaleIdle: whaleIdle, whaleGirl: layout.showWhale && whaleGirl, brand: brand, companionSkin: companionSkin, mascotBox: mascotBox, starred: starred, onStarClick: onStarClick, skipIntro: true, align: "center", chrome: "minimal", arrangement: "column" })), _jsxs(Box, { flexDirection: "column", width: cardWidth, marginTop: layout.heroGapRows, children: [_jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: inputFocused ? 'suggestion' : 'inactive', paddingX: 1, width: cardWidth, children: _jsx(SearchBox, { query: query, placeholder: t('launchpad-placeholder'),
627
815
  // 第七版(用户原话「光标永远不消失 哪怕焦点没了也不消失」):
628
816
  // 只要这一屏在,输入光标**常在**——焦点挪到参数段/入口行只影响
629
817
  // 外框提亮(inputFocused),不再当光标的开关。
@@ -631,20 +819,20 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
631
819
  // 占位紧跟 ❯ 之后左对齐(用户实测要求;只影响落地页这一处)。
632
820
  placeholderAlign: "left",
633
821
  // 边框由外层卡片画——SearchBox 自己那圈收起来,否则就是框套框。
634
- borderless: true, prefix: query.startsWith('/') ? '⌘' : '❯', width: cardWidth - 4, cursorOffset: caret, caretBlink: inputFocused ? caretPhase : true }) }), hasParams && (_jsx(Box, { paddingLeft: 2, height: 1, flexDirection: "row", children: fittedParams.map((part, index) => (_jsxs(React.Fragment, { children: [index > 0 && _jsx(Text, { dimColor: true, children: PARAM_SEPARATOR }), onParamPick === undefined ? (_jsx(Text, { color: part.colored === true ? 'autoAccept' : undefined, bold: part.colored === true, dimColor: part.colored !== true, children: part.value })) : (_jsx(ParamChip, { label: part.value, fullValue: part.fullValue, truncated: part.truncated, colored: part.colored, focused: focusIndex === paramFocusOf(part.segment), activationNonce: paramActivation?.segment === part.segment ? paramActivation.nonce : 0, onActivate: () => onParamPick(part.segment), onHover: () => onFocusChange(paramFocusOf(part.segment)), onHoverLeave: () => {
822
+ borderless: true, prefix: query.startsWith('/') ? '⌘' : '❯', width: cardWidth - 4, cursorOffset: caret, imageSpans: imageSpans, caretBlink: inputFocused ? caretPhase : true }) }), hasParams && (_jsx(Box, { paddingLeft: 2, height: 1, flexDirection: "row", children: fittedParams.map((part, index) => (_jsxs(React.Fragment, { children: [index > 0 && _jsx(Text, { dimColor: true, children: PARAM_SEPARATOR }), onParamPick === undefined ? (_jsx(Text, { color: part.colored === true ? 'autoAccept' : undefined, bold: part.colored === true, dimColor: part.colored !== true, children: part.value })) : (_jsx(ParamChip, { label: part.value, fullValue: part.fullValue, truncated: part.truncated, colored: part.colored, focused: focusIndex === paramFocusOf(part.segment), activationNonce: paramActivation?.segment === part.segment ? paramActivation.nonce : 0, onActivate: () => onParamPick(part.segment), onHover: () => onFocusChange(paramFocusOf(part.segment)), onHoverLeave: () => {
635
823
  if (focusIndex === paramFocusOf(part.segment))
636
824
  onFocusChange(-1);
637
- } }))] }, part.segment))) })), overlayPanel !== undefined && (_jsx(OverlayAbove, { maxHeight: Math.max(rows - 8, 1), transparent: true, children: _jsx(Box, { onClick: (event) => { event.stopImmediatePropagation(); }, children: overlayPanel }) })), overlayPanel === undefined && paletteOpen && paletteSelected !== undefined && (_jsx(OverlayAbove, { maxHeight: Math.max(rows - 8, 1), transparent: true, children: _jsx(Box, { onClick: (event) => { event.stopImmediatePropagation(); }, children: _jsx(CommandSuggestions, { commands: paletteCommands, selectedIndex: paletteSelectedIndex, columns: columns, query: query, onPick: (index) => {
825
+ } }))] }, part.segment))) })), overlayPanel !== undefined && (_jsx(OverlayAbove, { maxHeight: Math.max(rows - 8, 1), transparent: true, children: _jsx(Box, { onClick: (event) => { event.stopImmediatePropagation(); }, children: overlayPanel }) })), overlayPanel === undefined && paletteOpen && paletteSelected !== undefined && (_jsx(OverlayAbove, { maxHeight: Math.max(rows - 8, 1), transparent: true, children: _jsx(Box, { onClick: (event) => { event.stopImmediatePropagation(); }, children: _jsx(CommandSuggestions, { commands: paletteCommands, selectedIndex: paletteSelectedIndex, columns: cardWidth, query: query, onPick: (index) => {
638
826
  const command = paletteCommands[index];
639
827
  if (command !== undefined) {
640
- pickCommand(command.commandLine ?? '/' + command.name + ' ');
828
+ pickCommand(command.commandLine);
641
829
  }
642
830
  } }) }) }))] }), hasParams && layout.showHints && hintsFit && layout.hintsGapRows > 0 && (_jsx(Box, { flexShrink: 0, height: 1 })), layout.showHints && hintsFit && (_jsx(Box, { flexShrink: 0, flexDirection: "row", gap: 2, alignSelf: "center", width: columns, justifyContent: "flex-end", paddingRight: Math.max(0, Math.floor((columns - cardWidth) / 2)), children: chips.map(({ index, label }) => (_jsx(ActionChip, { label: label, focused: focusIndex === index, onActivate: () => onAction(actions[index]), onHover: () => onFocusChange(index), onHoverLeave: () => {
643
831
  if (focusIndex === index)
644
832
  onFocusChange(-1);
645
- } }, actions[index].id))) })), (layout.showTip || pasteNotice !== undefined) && (_jsx(Box, { flexShrink: 0, alignSelf: "center", marginTop: layout.tipGapRows, ...(pasteNotice === undefined && !firstRun
833
+ } }, actions[index].id))) })), (layout.showTip || rowNotice !== undefined) && (_jsx(Box, { flexShrink: 0, alignSelf: "center", marginTop: layout.tipGapRows, ...(rowNotice === undefined && !firstRun
646
834
  ? { onClick: (event) => { event.stopImmediatePropagation(); rotateTip(); } }
647
- : {}), children: pasteNotice === undefined ? (_jsxs(_Fragment, { children: [_jsxs(Text, { color: "warning", children: ["\u25CF ", t('launchpad-tip-prefix')] }), _jsx(Text, { color: focusIndex === TIPS_FOCUS ? 'suggestion' : undefined, bold: focusIndex === TIPS_FOCUS, dimColor: focusIndex !== TIPS_FOCUS, children: firstRun ? t('launchpad-first-run') : t(TIP_KEYS[tipIndex]) })] })) : (_jsxs(Text, { color: "warning", children: ["\u25CF ", pasteNotice] })) }))] }), layout.showCorners && (_jsxs(Box, { flexShrink: 0, flexDirection: "column", children: [_jsxs(Box, { flexShrink: 0, flexDirection: "row", justifyContent: "space-between", height: 1, children: [cornerLeft !== '' && onOpenWorkspace !== undefined ? (_jsx(CornerChip, { label: cornerLeft, focused: focusIndex === CWD_CORNER_FOCUS, onActivate: onOpenWorkspace, onHover: () => onFocusChange(CWD_CORNER_FOCUS), onHoverLeave: () => {
835
+ : {}), children: rowNotice === undefined ? (_jsxs(_Fragment, { children: [_jsxs(Text, { color: "warning", children: ["\u25CF ", t('launchpad-tip-prefix')] }), _jsx(Text, { color: focusIndex === TIPS_FOCUS ? 'suggestion' : undefined, bold: focusIndex === TIPS_FOCUS, dimColor: focusIndex !== TIPS_FOCUS, children: firstRun ? t('launchpad-first-run') : t(TIP_KEYS[tipIndex]) })] })) : (_jsxs(Text, { color: rowNotice.color ?? 'warning', children: ["\u25CF ", rowNotice.text] })) }))] }), layout.showCorners && (_jsxs(Box, { flexShrink: 0, flexDirection: "column", children: [_jsxs(Box, { flexShrink: 0, flexDirection: "row", justifyContent: "space-between", height: 1, children: [cornerLeft !== '' && onOpenWorkspace !== undefined ? (_jsx(CornerChip, { label: cornerLeft, focused: focusIndex === CWD_CORNER_FOCUS, onActivate: onOpenWorkspace, onHover: () => onFocusChange(CWD_CORNER_FOCUS), onHoverLeave: () => {
648
836
  if (focusIndex === CWD_CORNER_FOCUS)
649
837
  onFocusChange(-1);
650
838
  } })) : (_jsx(Text, { dimColor: true, wrap: "truncate-middle", children: cornerLeft })), _jsx(Text, { dimColor: true, wrap: "truncate-middle", children: tuiPart ?? '' })] }), kernelRows.length > 0 && (_jsx(KernelCorner, { rows: kernelRows, focused: focusIndex === KERNEL_CORNER_FOCUS, onActivate: onKernelPick, onHover: () => onFocusChange(KERNEL_CORNER_FOCUS), onHoverLeave: () => {
@@ -710,16 +898,6 @@ export function nextBoundary(text, at) {
710
898
  const first = rest[0] ?? '';
711
899
  return at + first.length;
712
900
  }
713
- /**
714
- * 当天那款字体:设置项 pin 住就用它,否则按日期轮换。
715
- * 与 `LogoV2` 同源——两边必须解出同一款,否则宽轴阈值会互相矛盾。
716
- *
717
- * @param fontId - 设置项 `dsh-tui.splashFont` 的值。
718
- * @returns 那款字体。
719
- */
720
- function launchpadFont(fontId) {
721
- return fontId === undefined ? pickSplashFont() : splashFontById(fontId);
722
- }
723
901
  /** 最小模式这一屏整体不存在(与 `LogoHeader` 同规则):直接进会话。 */
724
902
  export function launchpadVisible() {
725
903
  return !isMinimalUiMode();
@@ -1 +1 @@
1
- {"version":3,"file":"SessionSupervisor.d.ts","sourceRoot":"","sources":["../../../src/screens/SessionSupervisor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAA;AAarE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAEpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AASzH,OAAO,KAAK,EAAqB,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAMpE,OAAO,EAA2L,mBAAmB,EAAsD,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACpU,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,IAAI,EACJ,OAAO,EACP,aAAa,EACb,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,kDAAkD;IAClD,OAAO,IAAI,IAAI,CAAA;IACf,qEAAqE;IACrE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACvD,wDAAwD;IACxD,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,6EAA6E;IAC7E,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClD;;;;OAIG;IACH,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACxC,SAAS,CAAC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACnF;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAA;CAChE,GAAG,KAAK,CAAC,SAAS,CA0zBlB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOzF;AAED,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"SessionSupervisor.d.ts","sourceRoot":"","sources":["../../../src/screens/SessionSupervisor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAA;AAarE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAEpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAUzH,OAAO,KAAK,EAAqB,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAMpE,OAAO,EAA2L,mBAAmB,EAAsD,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACpU,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,IAAI,EACJ,OAAO,EACP,aAAa,EACb,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,kDAAkD;IAClD,OAAO,IAAI,IAAI,CAAA;IACf,qEAAqE;IACrE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACvD,wDAAwD;IACxD,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,6EAA6E;IAC7E,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClD;;;;OAIG;IACH,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACxC,SAAS,CAAC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACnF;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAA;CAChE,GAAG,KAAK,CAAC,SAAS,CAu2BlB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOzF;AAED,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,CAAA"}