@deepseek-harness-tui/dsh-tui 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (735) hide show
  1. package/README.md +73 -14
  2. package/bin/dsh-tui.js +200 -34
  3. package/cordis.patch.yml +16 -52
  4. package/cordis.yml +6 -2
  5. package/guide/dsh-tui-guide/claude-backend.en.md +44 -7
  6. package/guide/dsh-tui-guide/claude-backend.md +28 -6
  7. package/guide/dsh-tui-guide/codex-backend.en.md +34 -7
  8. package/guide/dsh-tui-guide/codex-backend.md +17 -2
  9. package/guide/dsh-tui-guide/configuration.en.md +129 -16
  10. package/guide/dsh-tui-guide/configuration.md +110 -14
  11. package/guide/dsh-tui-guide/interaction.en.md +57 -24
  12. package/guide/dsh-tui-guide/interaction.md +42 -19
  13. package/guide/dsh-tui-guide/plugins.en.md +36 -3
  14. package/guide/dsh-tui-guide/plugins.md +21 -2
  15. package/guide/dsh-tui-guide/themes.en.md +23 -14
  16. package/guide/dsh-tui-guide/themes.md +19 -12
  17. package/guide/dsh-tui-guide/user-guide.en.md +51 -20
  18. package/guide/dsh-tui-guide/user-guide.md +41 -21
  19. package/lib/settings.json +103 -9
  20. package/lib/types/adapter/channel/ui-policy.d.ts +1 -1
  21. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  22. package/lib/types/adapter/channel/ui-policy.js +3 -0
  23. package/lib/types/adapter/channel/ui.d.ts +2 -0
  24. package/lib/types/adapter/channel/ui.d.ts.map +1 -1
  25. package/lib/types/adapter/channel/ui.js +6 -2
  26. package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
  27. package/lib/types/adapter/kernel/runtime.js +2 -0
  28. package/lib/types/adapter/ports/channel-settings.d.ts +9 -0
  29. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  30. package/lib/types/adapter/ports/channel-ui.d.ts +50 -12
  31. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  32. package/lib/types/adapter/ports/channel-view.d.ts +21 -0
  33. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  34. package/lib/types/adapter/spec/backend-capabilities.d.ts +22 -0
  35. package/lib/types/adapter/spec/backend-capabilities.d.ts.map +1 -0
  36. package/lib/types/adapter/spec/backend-capabilities.js +49 -0
  37. package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
  38. package/lib/types/adapter/spec/protocol-constants.js +10 -3
  39. package/lib/types/adapter/spec/tui-contributions.d.ts +3 -0
  40. package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
  41. package/lib/types/adapter/spec/tui-contributions.js +7 -0
  42. package/lib/types/adapter/standard/registry.d.ts +6 -0
  43. package/lib/types/adapter/standard/registry.d.ts.map +1 -1
  44. package/lib/types/adapter/standard/registry.js +65 -15
  45. package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -1
  46. package/lib/types/adapter/standard/tui-extension.js +7 -1
  47. package/lib/types/adapter/standard/types.d.ts +10 -1
  48. package/lib/types/adapter/standard/types.d.ts.map +1 -1
  49. package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -1
  50. package/lib/types/adapter/upstream/host-descriptor-driver.js +52 -0
  51. package/lib/types/agent/backend-manifest.d.ts +152 -0
  52. package/lib/types/agent/backend-manifest.d.ts.map +1 -0
  53. package/lib/types/agent/backend-manifest.js +14 -0
  54. package/lib/types/agent/backend.d.ts +71 -5
  55. package/lib/types/agent/backend.d.ts.map +1 -1
  56. package/lib/types/agent/capabilities.d.ts +6 -0
  57. package/lib/types/agent/capabilities.d.ts.map +1 -1
  58. package/lib/types/agent/index.d.ts +2 -0
  59. package/lib/types/agent/index.d.ts.map +1 -1
  60. package/lib/types/agent/refs.d.ts +11 -1
  61. package/lib/types/agent/refs.d.ts.map +1 -1
  62. package/lib/types/agent/starting-session.d.ts +4 -0
  63. package/lib/types/agent/starting-session.d.ts.map +1 -0
  64. package/lib/types/agent/starting-session.js +19 -0
  65. package/lib/types/backends/claude/activity.d.ts +1 -1
  66. package/lib/types/backends/claude/activity.d.ts.map +1 -1
  67. package/lib/types/backends/claude/activity.js +5 -5
  68. package/lib/types/backends/claude/auth.d.ts.map +1 -1
  69. package/lib/types/backends/claude/auth.js +10 -3
  70. package/lib/types/backends/claude/backend.d.ts.map +1 -1
  71. package/lib/types/backends/claude/backend.js +103 -29
  72. package/lib/types/backends/claude/catalog.d.ts +2 -1
  73. package/lib/types/backends/claude/catalog.d.ts.map +1 -1
  74. package/lib/types/backends/claude/catalog.js +15 -5
  75. package/lib/types/backends/claude/channels.d.ts +5 -3
  76. package/lib/types/backends/claude/channels.d.ts.map +1 -1
  77. package/lib/types/backends/claude/channels.js +5 -4
  78. package/lib/types/backends/claude/contract.d.ts +4 -0
  79. package/lib/types/backends/claude/contract.d.ts.map +1 -1
  80. package/lib/types/backends/claude/contract.js +4 -0
  81. package/lib/types/backends/claude/controls.d.ts +4 -0
  82. package/lib/types/backends/claude/controls.d.ts.map +1 -1
  83. package/lib/types/backends/claude/controls.js +34 -42
  84. package/lib/types/backends/claude/dialogs.d.ts +8 -2
  85. package/lib/types/backends/claude/dialogs.d.ts.map +1 -1
  86. package/lib/types/backends/claude/dialogs.js +24 -16
  87. package/lib/types/backends/claude/images.d.ts +1 -1
  88. package/lib/types/backends/claude/images.d.ts.map +1 -1
  89. package/lib/types/backends/claude/images.js +7 -7
  90. package/lib/types/backends/claude/manifest.d.ts +21 -0
  91. package/lib/types/backends/claude/manifest.d.ts.map +1 -0
  92. package/lib/types/backends/claude/manifest.js +29 -0
  93. package/lib/types/backends/claude/older-history.js +2 -2
  94. package/lib/types/backends/claude/permissions.js +11 -11
  95. package/lib/types/backends/claude/prefs.d.ts +4 -2
  96. package/lib/types/backends/claude/prefs.d.ts.map +1 -1
  97. package/lib/types/backends/claude/prefs.js +4 -3
  98. package/lib/types/backends/claude/process.d.ts +16 -4
  99. package/lib/types/backends/claude/process.d.ts.map +1 -1
  100. package/lib/types/backends/claude/process.js +100 -37
  101. package/lib/types/backends/claude/send-message.d.ts +1 -1
  102. package/lib/types/backends/claude/send-message.d.ts.map +1 -1
  103. package/lib/types/backends/claude/session/auth.js +22 -22
  104. package/lib/types/backends/claude/session/channels.d.ts +4 -0
  105. package/lib/types/backends/claude/session/channels.d.ts.map +1 -1
  106. package/lib/types/backends/claude/session/channels.js +5 -3
  107. package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -1
  108. package/lib/types/backends/claude/session/lifecycle.js +31 -23
  109. package/lib/types/backends/claude/session/store.js +8 -8
  110. package/lib/types/backends/claude/session/subagents.js +2 -2
  111. package/lib/types/backends/claude/session/types.d.ts +7 -0
  112. package/lib/types/backends/claude/session/types.d.ts.map +1 -1
  113. package/lib/types/backends/claude/side-query.js +3 -3
  114. package/lib/types/backends/claude/task-output.js +5 -5
  115. package/lib/types/backends/claude/text.d.ts +778 -0
  116. package/lib/types/backends/claude/text.d.ts.map +1 -0
  117. package/lib/types/backends/claude/text.js +298 -0
  118. package/lib/types/backends/claude/transcript-file.d.ts +1 -1
  119. package/lib/types/backends/claude/transcript-file.d.ts.map +1 -1
  120. package/lib/types/backends/claude/transcript-file.js +4 -4
  121. package/lib/types/backends/claude/translate/attempts.js +2 -2
  122. package/lib/types/backends/claude/translate/core.js +3 -3
  123. package/lib/types/backends/claude/translate/messages.js +4 -4
  124. package/lib/types/backends/claude/translate/system.js +14 -14
  125. package/lib/types/backends/claude/translate/tasks.js +2 -2
  126. package/lib/types/backends/claude/translate/types.d.ts +1 -1
  127. package/lib/types/backends/claude/translate/types.d.ts.map +1 -1
  128. package/lib/types/backends/codex/auth/external-tokens.js +16 -16
  129. package/lib/types/backends/codex/auth/status.js +14 -14
  130. package/lib/types/backends/codex/backend.d.ts +4 -19
  131. package/lib/types/backends/codex/backend.d.ts.map +1 -1
  132. package/lib/types/backends/codex/backend.js +118 -25
  133. package/lib/types/backends/codex/catalog.d.ts +2 -1
  134. package/lib/types/backends/codex/catalog.d.ts.map +1 -1
  135. package/lib/types/backends/codex/catalog.js +63 -18
  136. package/lib/types/backends/codex/channels.d.ts +6 -3
  137. package/lib/types/backends/codex/channels.d.ts.map +1 -1
  138. package/lib/types/backends/codex/channels.js +15 -13
  139. package/lib/types/backends/codex/detect.d.ts.map +1 -1
  140. package/lib/types/backends/codex/detect.js +9 -6
  141. package/lib/types/backends/codex/manifest.d.ts +30 -0
  142. package/lib/types/backends/codex/manifest.d.ts.map +1 -0
  143. package/lib/types/backends/codex/manifest.js +23 -0
  144. package/lib/types/backends/codex/prefs.d.ts +4 -2
  145. package/lib/types/backends/codex/prefs.d.ts.map +1 -1
  146. package/lib/types/backends/codex/prefs.js +4 -3
  147. package/lib/types/backends/codex/rpc/hub.js +2 -2
  148. package/lib/types/backends/codex/session/activity.d.ts +1 -1
  149. package/lib/types/backends/codex/session/activity.d.ts.map +1 -1
  150. package/lib/types/backends/codex/session/activity.js +13 -13
  151. package/lib/types/backends/codex/session/approvals.js +30 -30
  152. package/lib/types/backends/codex/session/commands.d.ts +8 -2
  153. package/lib/types/backends/codex/session/commands.d.ts.map +1 -1
  154. package/lib/types/backends/codex/session/commands.js +71 -23
  155. package/lib/types/backends/codex/session/controls.d.ts +1 -1
  156. package/lib/types/backends/codex/session/controls.d.ts.map +1 -1
  157. package/lib/types/backends/codex/session/controls.js +21 -16
  158. package/lib/types/backends/codex/session/goals.d.ts.map +1 -1
  159. package/lib/types/backends/codex/session/goals.js +3 -3
  160. package/lib/types/backends/codex/session/history.js +2 -2
  161. package/lib/types/backends/codex/session/images.js +8 -8
  162. package/lib/types/backends/codex/session/input.d.ts +6 -2
  163. package/lib/types/backends/codex/session/input.d.ts.map +1 -1
  164. package/lib/types/backends/codex/session/input.js +55 -13
  165. package/lib/types/backends/codex/session/plan-review.js +6 -6
  166. package/lib/types/backends/codex/session/session.d.ts.map +1 -1
  167. package/lib/types/backends/codex/session/session.js +66 -34
  168. package/lib/types/backends/codex/session/side-query.d.ts.map +1 -1
  169. package/lib/types/backends/codex/session/side-query.js +27 -9
  170. package/lib/types/backends/codex/session/state.d.ts +6 -1
  171. package/lib/types/backends/codex/session/state.d.ts.map +1 -1
  172. package/lib/types/backends/codex/session/subagents.js +5 -5
  173. package/lib/types/backends/codex/session/tasks.js +4 -4
  174. package/lib/types/backends/codex/text.d.ts +933 -0
  175. package/lib/types/backends/codex/text.d.ts.map +1 -0
  176. package/lib/types/backends/codex/text.js +313 -0
  177. package/lib/types/backends/codex/translate/items.js +4 -4
  178. package/lib/types/backends/codex/translate/live.d.ts.map +1 -1
  179. package/lib/types/backends/codex/translate/live.js +11 -8
  180. package/lib/types/backends/codex/translate/notices.js +10 -10
  181. package/lib/types/backends/shared/channel-slug.d.ts +4 -0
  182. package/lib/types/backends/shared/channel-slug.d.ts.map +1 -0
  183. package/lib/types/backends/shared/channel-slug.js +25 -0
  184. package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -1
  185. package/lib/types/backends/shared/channel-tokens.js +30 -23
  186. package/lib/types/{channel → backends/shared}/elicitation.d.ts +78 -21
  187. package/lib/types/backends/shared/elicitation.d.ts.map +1 -0
  188. package/lib/types/{channel → backends/shared}/elicitation.js +64 -66
  189. package/lib/types/backends/shared/image-size.d.ts +33 -0
  190. package/lib/types/backends/shared/image-size.d.ts.map +1 -0
  191. package/lib/types/backends/shared/image-size.js +134 -0
  192. package/lib/types/{utils → backends/shared}/jsonl.d.ts +5 -1
  193. package/lib/types/backends/shared/jsonl.d.ts.map +1 -0
  194. package/lib/types/{utils → backends/shared}/jsonl.js +5 -1
  195. package/lib/types/backends/shared/localized-text.d.ts +30 -0
  196. package/lib/types/backends/shared/localized-text.d.ts.map +1 -0
  197. package/lib/types/backends/shared/localized-text.js +24 -0
  198. package/lib/types/backends/shared/platform-text.d.ts +88 -0
  199. package/lib/types/backends/shared/platform-text.d.ts.map +1 -0
  200. package/lib/types/backends/shared/platform-text.js +33 -0
  201. package/lib/types/branding.d.ts +13 -0
  202. package/lib/types/branding.d.ts.map +1 -1
  203. package/lib/types/branding.js +18 -0
  204. package/lib/types/channel/channel-slug.d.ts +3 -1
  205. package/lib/types/channel/channel-slug.d.ts.map +1 -1
  206. package/lib/types/channel/channel-slug.js +3 -1
  207. package/lib/types/channel/sanitize.d.ts +7 -0
  208. package/lib/types/channel/sanitize.d.ts.map +1 -1
  209. package/lib/types/channel/sanitize.js +9 -0
  210. package/lib/types/channel/usage.d.ts.map +1 -1
  211. package/lib/types/channel/usage.js +5 -0
  212. package/lib/types/commands.d.ts +5 -0
  213. package/lib/types/commands.d.ts.map +1 -1
  214. package/lib/types/commands.js +47 -8
  215. package/lib/types/components/AgentMessageComposer.d.ts.map +1 -1
  216. package/lib/types/components/AgentMessageComposer.js +3 -2
  217. package/lib/types/components/BtwPanel.d.ts.map +1 -1
  218. package/lib/types/components/BtwPanel.js +4 -2
  219. package/lib/types/components/Chat/JobCard.js +3 -3
  220. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  221. package/lib/types/components/CommandSuggestions.js +20 -6
  222. package/lib/types/components/ContextBarView.d.ts +5 -1
  223. package/lib/types/components/ContextBarView.d.ts.map +1 -1
  224. package/lib/types/components/ContextBarView.js +6 -3
  225. package/lib/types/components/ExtensionDialog.d.ts.map +1 -1
  226. package/lib/types/components/ExtensionDialog.js +2 -3
  227. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  228. package/lib/types/components/GoalTodoPanel.js +14 -3
  229. package/lib/types/components/InlineMathParagraph.js +1 -1
  230. package/lib/types/components/KernelPicker.d.ts.map +1 -1
  231. package/lib/types/components/KernelPicker.js +1 -1
  232. package/lib/types/components/LogoV2.d.ts.map +1 -1
  233. package/lib/types/components/LogoV2.js +9 -6
  234. package/lib/types/components/MarkdownTable.d.ts.map +1 -1
  235. package/lib/types/components/MarkdownTable.js +4 -3
  236. package/lib/types/components/MessageList.d.ts.map +1 -1
  237. package/lib/types/components/MessageList.js +18 -5
  238. package/lib/types/components/ModelPicker.d.ts +24 -31
  239. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  240. package/lib/types/components/ModelPicker.js +115 -40
  241. package/lib/types/components/PromptEditor.d.ts +3 -3
  242. package/lib/types/components/PromptInput.d.ts +21 -3
  243. package/lib/types/components/PromptInput.d.ts.map +1 -1
  244. package/lib/types/components/PromptInput.js +58 -118
  245. package/lib/types/components/SdkInstallWizard.d.ts +3 -1
  246. package/lib/types/components/SdkInstallWizard.d.ts.map +1 -1
  247. package/lib/types/components/SdkInstallWizard.js +8 -1
  248. package/lib/types/components/SearchBox.d.ts +13 -15
  249. package/lib/types/components/SearchBox.d.ts.map +1 -1
  250. package/lib/types/components/SearchBox.js +58 -27
  251. package/lib/types/components/ThemePicker.d.ts +1 -1
  252. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  253. package/lib/types/components/ThemePicker.js +14 -11
  254. package/lib/types/components/Tooltip.js +1 -1
  255. package/lib/types/components/WorkingSpinner.js +1 -1
  256. package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
  257. package/lib/types/components/WorkspaceFlowPicker.js +4 -3
  258. package/lib/types/components/composerImageTokens.d.ts +24 -0
  259. package/lib/types/components/composerImageTokens.d.ts.map +1 -0
  260. package/lib/types/components/composerImageTokens.js +37 -0
  261. package/lib/types/components/design-system/InputCaret.d.ts +7 -0
  262. package/lib/types/components/design-system/InputCaret.d.ts.map +1 -0
  263. package/lib/types/components/design-system/InputCaret.js +9 -0
  264. package/lib/types/components/design-system/ListItem.d.ts +13 -2
  265. package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
  266. package/lib/types/components/design-system/ListItem.js +11 -5
  267. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  268. package/lib/types/components/design-system/ThemeProvider.js +6 -8
  269. package/lib/types/components/kernelCatalog.d.ts +55 -11
  270. package/lib/types/components/kernelCatalog.d.ts.map +1 -1
  271. package/lib/types/components/kernelCatalog.js +42 -23
  272. package/lib/types/components/launchpadActions.d.ts +4 -0
  273. package/lib/types/components/launchpadActions.d.ts.map +1 -1
  274. package/lib/types/components/launchpadActions.js +5 -4
  275. package/lib/types/components/launchpadLayout.d.ts.map +1 -1
  276. package/lib/types/components/launchpadLayout.js +2 -2
  277. package/lib/types/components/messages/UserPromptMessage.d.ts +4 -3
  278. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
  279. package/lib/types/components/messages/UserPromptMessage.js +4 -3
  280. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  281. package/lib/types/components/questions/AskUserQuestionPanel.js +8 -3
  282. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  283. package/lib/types/components/questions/PlanReviewPanel.js +4 -3
  284. package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -1
  285. package/lib/types/components/questions/ProviderModelEditor.js +3 -13
  286. package/lib/types/components/sessions/ForeignSessionRow.d.ts +3 -1
  287. package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -1
  288. package/lib/types/components/sessions/ForeignSessionRow.js +5 -2
  289. package/lib/types/components/sessions/SessionListRow.d.ts +3 -1
  290. package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
  291. package/lib/types/components/sessions/SessionListRow.js +5 -2
  292. package/lib/types/components/sidePanel/PanelBar.d.ts +1 -0
  293. package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
  294. package/lib/types/components/sidePanel/PanelBar.js +21 -17
  295. package/lib/types/components/sidePanel/SidePanelColumn.d.ts +1 -1
  296. package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
  297. package/lib/types/components/sidePanel/SidePanelColumn.js +2 -1
  298. package/lib/types/components/sidePanel/SidePanelLayout.d.ts +6 -4
  299. package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -1
  300. package/lib/types/components/sidePanel/SidePanelLayout.js +33 -7
  301. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +4 -2
  302. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
  303. package/lib/types/components/sidePanel/btw/BtwComposer.js +12 -4
  304. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
  305. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +59 -15
  306. package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
  307. package/lib/types/components/sidePanel/btw/BtwThreadScene.js +4 -2
  308. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +1 -1
  309. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
  310. package/lib/types/components/sidePanel/btw/BtwThreadView.js +12 -6
  311. package/lib/types/components/sidePanel/companion/CompanionPanel.js +2 -2
  312. package/lib/types/components/sidePanel/types.d.ts +1 -1
  313. package/lib/types/components/sidePanel/types.d.ts.map +1 -1
  314. package/lib/types/components/sidePanel/useSidePanel.d.ts +2 -0
  315. package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -1
  316. package/lib/types/components/sidePanel/useSidePanel.js +11 -1
  317. package/lib/types/components/splashFonts.d.ts +24 -1
  318. package/lib/types/components/splashFonts.d.ts.map +1 -1
  319. package/lib/types/components/splashFonts.js +40 -5
  320. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
  321. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
  322. package/lib/types/components/workspaces/HomeWorkspaceRow.js +5 -2
  323. package/lib/types/dsh-adapter/admission-loader.d.ts +20 -0
  324. package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -0
  325. package/lib/types/dsh-adapter/admission-loader.js +256 -0
  326. package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
  327. package/lib/types/dsh-adapter/backend/translate.js +3 -0
  328. package/lib/types/dsh-adapter/backend-admission.d.ts +64 -0
  329. package/lib/types/dsh-adapter/backend-admission.d.ts.map +1 -0
  330. package/lib/types/dsh-adapter/backend-admission.js +34 -0
  331. package/lib/types/dsh-adapter/backend-contribution.d.ts +26 -0
  332. package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -0
  333. package/lib/types/dsh-adapter/backend-contribution.js +37 -0
  334. package/lib/types/dsh-adapter/backend-registry.d.ts +136 -0
  335. package/lib/types/dsh-adapter/backend-registry.d.ts.map +1 -0
  336. package/lib/types/dsh-adapter/backend-registry.js +285 -0
  337. package/lib/types/dsh-adapter/backends.d.ts +67 -24
  338. package/lib/types/dsh-adapter/backends.d.ts.map +1 -1
  339. package/lib/types/dsh-adapter/backends.generated.d.ts +12 -0
  340. package/lib/types/dsh-adapter/backends.generated.d.ts.map +1 -0
  341. package/lib/types/dsh-adapter/backends.generated.js +6 -0
  342. package/lib/types/dsh-adapter/backends.js +92 -46
  343. package/lib/types/dsh-adapter/channel/action-readiness.d.ts +2 -0
  344. package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
  345. package/lib/types/dsh-adapter/channel/action-readiness.js +9 -3
  346. package/lib/types/dsh-adapter/channel/agent-view-projection.js +2 -2
  347. package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
  348. package/lib/types/dsh-adapter/channel/background-action.js +8 -3
  349. package/lib/types/dsh-adapter/channel/binding-events.d.ts +16 -3
  350. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  351. package/lib/types/dsh-adapter/channel/binding-events.js +18 -46
  352. package/lib/types/dsh-adapter/channel/channel-host.d.ts +45 -0
  353. package/lib/types/dsh-adapter/channel/channel-host.d.ts.map +1 -0
  354. package/lib/types/dsh-adapter/channel/channel-host.js +1 -0
  355. package/lib/types/dsh-adapter/channel/command-completions.d.ts +5 -0
  356. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
  357. package/lib/types/dsh-adapter/channel/command-completions.js +16 -0
  358. package/lib/types/dsh-adapter/channel/composer-images.d.ts +4 -2
  359. package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
  360. package/lib/types/dsh-adapter/channel/composer-images.js +36 -5
  361. package/lib/types/dsh-adapter/channel/cordis-host.d.ts +14 -0
  362. package/lib/types/dsh-adapter/channel/cordis-host.d.ts.map +1 -0
  363. package/lib/types/dsh-adapter/channel/cordis-host.js +35 -0
  364. package/lib/types/dsh-adapter/channel/core/actions.d.ts +3 -3
  365. package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -1
  366. package/lib/types/dsh-adapter/channel/core/actions.js +15 -6
  367. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +7 -3
  368. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -1
  369. package/lib/types/dsh-adapter/channel/core/binding-feed.js +3 -0
  370. package/lib/types/dsh-adapter/channel/core/compose.d.ts +12 -28
  371. package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -1
  372. package/lib/types/dsh-adapter/channel/core/compose.js +318 -117
  373. package/lib/types/dsh-adapter/channel/core/files.d.ts +7 -2
  374. package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -1
  375. package/lib/types/dsh-adapter/channel/core/files.js +1 -0
  376. package/lib/types/dsh-adapter/channel/core/host.d.ts +12 -6
  377. package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -1
  378. package/lib/types/dsh-adapter/channel/core/host.js +69 -35
  379. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +5 -3
  380. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -1
  381. package/lib/types/dsh-adapter/channel/core/local-actions.js +5 -2
  382. package/lib/types/dsh-adapter/channel/core/session-controls.js +2 -2
  383. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +7 -4
  384. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -1
  385. package/lib/types/dsh-adapter/channel/core/session-switch.js +8 -4
  386. package/lib/types/dsh-adapter/channel/core/sessions.d.ts +1 -1
  387. package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -1
  388. package/lib/types/dsh-adapter/channel/core/sessions.js +75 -16
  389. package/lib/types/dsh-adapter/channel/extensions.d.ts +4 -3
  390. package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -1
  391. package/lib/types/dsh-adapter/channel/extensions.js +41 -22
  392. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +2 -2
  393. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  394. package/lib/types/dsh-adapter/channel/input-delivery.js +14 -5
  395. package/lib/types/dsh-adapter/channel/job-projection.d.ts +4 -0
  396. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
  397. package/lib/types/dsh-adapter/channel/job-projection.js +205 -24
  398. package/lib/types/dsh-adapter/channel/mentions.d.ts +3 -3
  399. package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -1
  400. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +1 -0
  401. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  402. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +138 -8
  403. package/lib/types/dsh-adapter/channel/model-actions.d.ts +5 -1
  404. package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
  405. package/lib/types/dsh-adapter/channel/model-actions.js +40 -28
  406. package/lib/types/dsh-adapter/channel/model-selection.d.ts +17 -0
  407. package/lib/types/dsh-adapter/channel/model-selection.d.ts.map +1 -0
  408. package/lib/types/dsh-adapter/channel/model-selection.js +109 -0
  409. package/lib/types/dsh-adapter/channel/model-switch.d.ts +12 -21
  410. package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
  411. package/lib/types/dsh-adapter/channel/model-switch.js +39 -102
  412. package/lib/types/dsh-adapter/channel/projection.js +1 -1
  413. package/lib/types/dsh-adapter/channel/reports.d.ts +1 -1
  414. package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
  415. package/lib/types/dsh-adapter/channel/reports.js +11 -3
  416. package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
  417. package/lib/types/dsh-adapter/channel/session-fork.js +33 -20
  418. package/lib/types/dsh-adapter/channel/session-listing.d.ts +20 -0
  419. package/lib/types/dsh-adapter/channel/session-listing.d.ts.map +1 -0
  420. package/lib/types/dsh-adapter/channel/session-listing.js +51 -0
  421. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +3 -1
  422. package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
  423. package/lib/types/dsh-adapter/channel/session-metadata.js +56 -27
  424. package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
  425. package/lib/types/dsh-adapter/channel/session-resume.js +15 -8
  426. package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
  427. package/lib/types/dsh-adapter/channel/session-rewind.js +38 -24
  428. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
  429. package/lib/types/dsh-adapter/channel/session-tree-actions.js +38 -24
  430. package/lib/types/dsh-adapter/channel/settings-host.d.ts +2 -2
  431. package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
  432. package/lib/types/dsh-adapter/channel/settings-host.js +1 -0
  433. package/lib/types/dsh-adapter/channel/state.d.ts +37 -1
  434. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  435. package/lib/types/dsh-adapter/channel/state.js +14 -1
  436. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  437. package/lib/types/dsh-adapter/channel/subagent-projection.js +66 -6
  438. package/lib/types/dsh-adapter/channel/task-completion.d.ts +6 -0
  439. package/lib/types/dsh-adapter/channel/task-completion.d.ts.map +1 -0
  440. package/lib/types/dsh-adapter/channel/task-completion.js +114 -0
  441. package/lib/types/dsh-adapter/channel/transcript.d.ts +1 -1
  442. package/lib/types/dsh-adapter/channel/transcript.js +1 -1
  443. package/lib/types/dsh-adapter/channel/upstream-retry.d.ts +81 -0
  444. package/lib/types/dsh-adapter/channel/upstream-retry.d.ts.map +1 -0
  445. package/lib/types/dsh-adapter/channel/upstream-retry.js +138 -0
  446. package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
  447. package/lib/types/dsh-adapter/channel/workspace-actions.js +9 -8
  448. package/lib/types/dsh-adapter/channel-ui.d.ts +3 -1
  449. package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -1
  450. package/lib/types/dsh-adapter/channel-ui.js +4 -2
  451. package/lib/types/dsh-adapter/channel.d.ts +2 -2
  452. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  453. package/lib/types/dsh-adapter/channel.js +19 -5
  454. package/lib/types/dsh-adapter/context-occupancy.d.ts +81 -4
  455. package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
  456. package/lib/types/dsh-adapter/context-occupancy.js +108 -17
  457. package/lib/types/dsh-adapter/contract.d.ts +1 -1
  458. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  459. package/lib/types/dsh-adapter/contract.js +15 -0
  460. package/lib/types/dsh-adapter/entry-slot.d.ts +36 -0
  461. package/lib/types/dsh-adapter/entry-slot.d.ts.map +1 -0
  462. package/lib/types/dsh-adapter/entry-slot.js +28 -0
  463. package/lib/types/dsh-adapter/fresh-agent.d.ts +22 -0
  464. package/lib/types/dsh-adapter/fresh-agent.d.ts.map +1 -0
  465. package/lib/types/dsh-adapter/fresh-agent.js +221 -0
  466. package/lib/types/dsh-adapter/host-access.d.ts +16 -1
  467. package/lib/types/dsh-adapter/host-access.d.ts.map +1 -1
  468. package/lib/types/dsh-adapter/host-access.js +53 -2
  469. package/lib/types/dsh-adapter/host-contract.d.ts +103 -0
  470. package/lib/types/dsh-adapter/host-contract.d.ts.map +1 -0
  471. package/lib/types/dsh-adapter/host-contract.js +76 -0
  472. package/lib/types/dsh-adapter/host-dsh.d.ts +106 -0
  473. package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -0
  474. package/lib/types/dsh-adapter/host-dsh.js +466 -0
  475. package/lib/types/dsh-adapter/host-entry.d.ts +9 -0
  476. package/lib/types/dsh-adapter/host-entry.d.ts.map +1 -0
  477. package/lib/types/dsh-adapter/host-entry.js +228 -0
  478. package/lib/types/dsh-adapter/index.d.ts +55 -18
  479. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  480. package/lib/types/dsh-adapter/index.js +59 -7
  481. package/lib/types/dsh-adapter/install/executors.d.ts +44 -0
  482. package/lib/types/dsh-adapter/install/executors.d.ts.map +1 -0
  483. package/lib/types/dsh-adapter/install/executors.js +15 -0
  484. package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts +3 -0
  485. package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts.map +1 -0
  486. package/lib/types/dsh-adapter/install/pnpm-profile-add.js +150 -0
  487. package/lib/types/dsh-adapter/jobs.d.ts +7 -0
  488. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  489. package/lib/types/dsh-adapter/jobs.js +13 -0
  490. package/lib/types/dsh-adapter/lite-profile.d.ts +50 -0
  491. package/lib/types/dsh-adapter/lite-profile.d.ts.map +1 -0
  492. package/lib/types/dsh-adapter/lite-profile.js +49 -0
  493. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -1
  494. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
  495. package/lib/types/dsh-adapter/migrate/parse/jsonl.js +4 -3
  496. package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -1
  497. package/lib/types/dsh-adapter/oauth/profiles.js +5 -1
  498. package/lib/types/dsh-adapter/panels.d.ts +7 -0
  499. package/lib/types/dsh-adapter/panels.d.ts.map +1 -1
  500. package/lib/types/dsh-adapter/panels.js +35 -2
  501. package/lib/types/dsh-adapter/plugin-completions.d.ts +32 -0
  502. package/lib/types/dsh-adapter/plugin-completions.d.ts.map +1 -0
  503. package/lib/types/dsh-adapter/plugin-completions.js +80 -0
  504. package/lib/types/dsh-adapter/plugin-declaration.d.ts +21 -0
  505. package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -0
  506. package/lib/types/dsh-adapter/plugin-declaration.js +53 -0
  507. package/lib/types/dsh-adapter/plugin-host.d.ts +13 -2
  508. package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
  509. package/lib/types/dsh-adapter/plugin-host.js +34 -8
  510. package/lib/types/dsh-adapter/plugin-manager.d.ts +68 -0
  511. package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -0
  512. package/lib/types/dsh-adapter/plugin-manager.js +51 -0
  513. package/lib/types/dsh-adapter/plugin.d.ts +50 -1
  514. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  515. package/lib/types/dsh-adapter/plugin.js +870 -233
  516. package/lib/types/dsh-adapter/plugins-info.d.ts +44 -8
  517. package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
  518. package/lib/types/dsh-adapter/plugins-info.js +354 -34
  519. package/lib/types/dsh-adapter/process-exit.d.ts +43 -0
  520. package/lib/types/dsh-adapter/process-exit.d.ts.map +1 -0
  521. package/lib/types/dsh-adapter/process-exit.js +60 -0
  522. package/lib/types/dsh-adapter/root-dispose.d.ts +18 -0
  523. package/lib/types/dsh-adapter/root-dispose.d.ts.map +1 -0
  524. package/lib/types/dsh-adapter/root-dispose.js +28 -0
  525. package/lib/types/dsh-adapter/session-list-metadata.d.ts +20 -0
  526. package/lib/types/dsh-adapter/session-list-metadata.d.ts.map +1 -0
  527. package/lib/types/dsh-adapter/session-list-metadata.js +56 -0
  528. package/lib/types/dsh-adapter/session-seed.d.ts +11 -0
  529. package/lib/types/dsh-adapter/session-seed.d.ts.map +1 -0
  530. package/lib/types/dsh-adapter/session-seed.js +47 -0
  531. package/lib/types/dsh-adapter/sessions/list.d.ts +3 -1
  532. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
  533. package/lib/types/dsh-adapter/sessions/list.js +11 -5
  534. package/lib/types/dsh-adapter/sessions/snapshot.d.ts +0 -2
  535. package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -1
  536. package/lib/types/dsh-adapter/sessions/snapshot.js +7 -70
  537. package/lib/types/dsh-adapter/startup-args.d.ts +2 -0
  538. package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -1
  539. package/lib/types/dsh-adapter/startup-args.js +5 -0
  540. package/lib/types/dsh-adapter/subagents.d.ts +33 -1
  541. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  542. package/lib/types/dsh-adapter/subagents.js +110 -8
  543. package/lib/types/dsh-adapter/tui-settings.d.ts +57 -0
  544. package/lib/types/dsh-adapter/tui-settings.d.ts.map +1 -0
  545. package/lib/types/dsh-adapter/tui-settings.js +199 -0
  546. package/lib/types/effortPrefs.d.ts +6 -3
  547. package/lib/types/effortPrefs.d.ts.map +1 -1
  548. package/lib/types/effortPrefs.js +7 -4
  549. package/lib/types/hostEntryRoute.d.ts +18 -0
  550. package/lib/types/hostEntryRoute.d.ts.map +1 -0
  551. package/lib/types/hostEntryRoute.js +57 -0
  552. package/lib/types/i18n.d.ts +363 -1432
  553. package/lib/types/i18n.d.ts.map +1 -1
  554. package/lib/types/i18n.js +155 -385
  555. package/lib/types/ink/components/AlternateScreen.js +2 -2
  556. package/lib/types/ink/components/App.d.ts +1 -0
  557. package/lib/types/ink/components/App.d.ts.map +1 -1
  558. package/lib/types/ink/components/App.js +16 -4
  559. package/lib/types/ink/components/CursorDeclarationContext.d.ts +9 -0
  560. package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -1
  561. package/lib/types/ink/components/CursorDeclarationContext.js +2 -0
  562. package/lib/types/ink/hooks/use-copy-on-select.d.ts +2 -2
  563. package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
  564. package/lib/types/ink/hooks/use-copy-on-select.js +13 -7
  565. package/lib/types/ink/hooks/use-declared-cursor.d.ts +11 -3
  566. package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -1
  567. package/lib/types/ink/hooks/use-declared-cursor.js +30 -10
  568. package/lib/types/ink/ink.d.ts +22 -17
  569. package/lib/types/ink/ink.d.ts.map +1 -1
  570. package/lib/types/ink/ink.js +151 -40
  571. package/lib/types/ink/kitty-graphics.d.ts +2 -0
  572. package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
  573. package/lib/types/ink/kitty-graphics.js +6 -1
  574. package/lib/types/ink/node-cache.d.ts +2 -1
  575. package/lib/types/ink/node-cache.d.ts.map +1 -1
  576. package/lib/types/ink/output.d.ts +10 -4
  577. package/lib/types/ink/output.d.ts.map +1 -1
  578. package/lib/types/ink/output.js +14 -10
  579. package/lib/types/ink/render-node-to-output.d.ts +5 -2
  580. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  581. package/lib/types/ink/render-node-to-output.js +27 -9
  582. package/lib/types/ink/renderer.d.ts +1 -0
  583. package/lib/types/ink/renderer.d.ts.map +1 -1
  584. package/lib/types/ink/renderer.js +4 -3
  585. package/lib/types/ink/root.d.ts +4 -1
  586. package/lib/types/ink/root.d.ts.map +1 -1
  587. package/lib/types/ink/screen.d.ts +4 -2
  588. package/lib/types/ink/screen.d.ts.map +1 -1
  589. package/lib/types/ink/selection.d.ts +10 -1
  590. package/lib/types/ink/selection.d.ts.map +1 -1
  591. package/lib/types/ink/selection.js +94 -25
  592. package/lib/types/ink/stdin-handoff.d.ts +11 -0
  593. package/lib/types/ink/stdin-handoff.d.ts.map +1 -0
  594. package/lib/types/ink/stdin-handoff.js +20 -0
  595. package/lib/types/ink/styles.d.ts +2 -1
  596. package/lib/types/ink/styles.d.ts.map +1 -1
  597. package/lib/types/ink/terminal-image.d.ts +6 -4
  598. package/lib/types/ink/terminal-image.d.ts.map +1 -1
  599. package/lib/types/ink/terminal-image.js +16 -39
  600. package/lib/types/ink/terminal-notification.d.ts +8 -0
  601. package/lib/types/ink/terminal-notification.d.ts.map +1 -0
  602. package/lib/types/ink/terminal-notification.js +83 -0
  603. package/lib/types/ink/terminal.d.ts +9 -0
  604. package/lib/types/ink/terminal.d.ts.map +1 -1
  605. package/lib/types/ink/terminal.js +34 -1
  606. package/lib/types/ink/termio/csi.d.ts +11 -0
  607. package/lib/types/ink/termio/csi.d.ts.map +1 -1
  608. package/lib/types/ink/termio/csi.js +13 -0
  609. package/lib/types/ink/update-overflow-guard.d.ts +6 -0
  610. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  611. package/lib/types/ink/update-overflow-guard.js +17 -0
  612. package/lib/types/ink/wrap-text.d.ts +6 -0
  613. package/lib/types/ink/wrap-text.d.ts.map +1 -1
  614. package/lib/types/ink/wrap-text.js +17 -0
  615. package/lib/types/kernelPrefs.d.ts +129 -16
  616. package/lib/types/kernelPrefs.d.ts.map +1 -1
  617. package/lib/types/kernelPrefs.js +98 -35
  618. package/lib/types/math/inline-layout.d.ts +2 -0
  619. package/lib/types/math/inline-layout.d.ts.map +1 -1
  620. package/lib/types/math/inline-layout.js +5 -27
  621. package/lib/types/modelGroups.d.ts +15 -27
  622. package/lib/types/modelGroups.d.ts.map +1 -1
  623. package/lib/types/modelGroups.js +17 -31
  624. package/lib/types/modelPrefs.d.ts +5 -4
  625. package/lib/types/modelPrefs.d.ts.map +1 -1
  626. package/lib/types/modelPrefs.js +5 -4
  627. package/lib/types/modelRoute.d.ts +23 -9
  628. package/lib/types/modelRoute.d.ts.map +1 -1
  629. package/lib/types/modelRoute.js +25 -11
  630. package/lib/types/permissionPrefs.d.ts +34 -0
  631. package/lib/types/permissionPrefs.d.ts.map +1 -0
  632. package/lib/types/permissionPrefs.js +61 -0
  633. package/lib/types/plugin-host.d.ts +1 -0
  634. package/lib/types/plugin-host.d.ts.map +1 -1
  635. package/lib/types/presetPrefs.d.ts +17 -3
  636. package/lib/types/presetPrefs.d.ts.map +1 -1
  637. package/lib/types/presetPrefs.js +20 -3
  638. package/lib/types/reload.d.ts +6 -10
  639. package/lib/types/reload.d.ts.map +1 -1
  640. package/lib/types/reload.js +14 -14
  641. package/lib/types/screens/Chat.d.ts +22 -15
  642. package/lib/types/screens/Chat.d.ts.map +1 -1
  643. package/lib/types/screens/Chat.js +442 -272
  644. package/lib/types/screens/Launchpad.d.ts +27 -17
  645. package/lib/types/screens/Launchpad.d.ts.map +1 -1
  646. package/lib/types/screens/Launchpad.js +241 -78
  647. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  648. package/lib/types/screens/SessionSupervisor.js +53 -12
  649. package/lib/types/screens/Settings.d.ts.map +1 -1
  650. package/lib/types/screens/Settings.js +6 -0
  651. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  652. package/lib/types/screens/StatusLine.js +24 -7
  653. package/lib/types/screens/StatusMetrics.d.ts +46 -1
  654. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  655. package/lib/types/screens/StatusMetrics.js +72 -0
  656. package/lib/types/screens/chat/useKernelPicker.d.ts +8 -4
  657. package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -1
  658. package/lib/types/screens/chat/useKernelPicker.js +61 -21
  659. package/lib/types/screens/chat/useModelPicker.d.ts +42 -0
  660. package/lib/types/screens/chat/useModelPicker.d.ts.map +1 -0
  661. package/lib/types/screens/chat/useModelPicker.js +182 -0
  662. package/lib/types/screens/chatOverlay.d.ts +11 -4
  663. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  664. package/lib/types/screens/chatOverlay.js +0 -1
  665. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +4 -1
  666. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -1
  667. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +26 -5
  668. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +1 -1
  669. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  670. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +51 -29
  671. package/lib/types/sessionHistory.d.ts +5 -0
  672. package/lib/types/sessionHistory.d.ts.map +1 -1
  673. package/lib/types/sessionHistory.js +5 -0
  674. package/lib/types/sessions/listSnapshot.d.ts +6 -0
  675. package/lib/types/sessions/listSnapshot.d.ts.map +1 -0
  676. package/lib/types/sessions/listSnapshot.js +67 -0
  677. package/lib/types/settings/definitions.d.ts +50 -0
  678. package/lib/types/settings/definitions.d.ts.map +1 -1
  679. package/lib/types/settings/definitions.js +42 -8
  680. package/lib/types/terminal-utils/cjk-emphasis.d.ts +28 -0
  681. package/lib/types/terminal-utils/cjk-emphasis.d.ts.map +1 -0
  682. package/lib/types/terminal-utils/cjk-emphasis.js +31 -0
  683. package/lib/types/terminal-utils/markdown.d.ts +3 -1
  684. package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
  685. package/lib/types/terminal-utils/markdown.js +7 -2
  686. package/lib/types/theme.d.ts +29 -12
  687. package/lib/types/theme.d.ts.map +1 -1
  688. package/lib/types/theme.js +310 -23
  689. package/lib/types/themeCatalog.d.ts.map +1 -1
  690. package/lib/types/themeCatalog.js +21 -2
  691. package/lib/types/tips.js +4 -4
  692. package/lib/types/tuiSettingsFile.d.ts +56 -0
  693. package/lib/types/tuiSettingsFile.d.ts.map +1 -0
  694. package/lib/types/tuiSettingsFile.js +206 -0
  695. package/lib/types/ui.d.ts +2 -0
  696. package/lib/types/ui.d.ts.map +1 -1
  697. package/lib/types/ui.js +2 -0
  698. package/lib/types/update.d.ts +72 -26
  699. package/lib/types/update.d.ts.map +1 -1
  700. package/lib/types/update.js +131 -43
  701. package/lib/types/utils/bmp.d.ts +7 -0
  702. package/lib/types/utils/bmp.d.ts.map +1 -1
  703. package/lib/types/utils/bmp.js +27 -0
  704. package/lib/types/utils/bootTrace.d.ts +2 -0
  705. package/lib/types/utils/bootTrace.d.ts.map +1 -0
  706. package/lib/types/utils/bootTrace.js +20 -0
  707. package/lib/types/utils/clipboard.d.ts.map +1 -1
  708. package/lib/types/utils/clipboard.js +11 -3
  709. package/lib/types/utils/credentials.d.ts +14 -2
  710. package/lib/types/utils/credentials.d.ts.map +1 -1
  711. package/lib/types/utils/credentials.js +34 -11
  712. package/lib/types/utils/imageResize.d.ts +10 -20
  713. package/lib/types/utils/imageResize.d.ts.map +1 -1
  714. package/lib/types/utils/imageResize.js +61 -134
  715. package/lib/types/utils/inputPaste.d.ts +2 -2
  716. package/lib/types/utils/inputPaste.js +2 -2
  717. package/lib/types/utils/pastedImagePath.d.ts +5 -0
  718. package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
  719. package/lib/types/utils/pastedImagePath.js +33 -0
  720. package/package.json +36 -6
  721. package/presets/winbash.mjs +716 -0
  722. package/tui-profile/protocols/profile-definitions.d.ts +1 -0
  723. package/tui-profile/protocols/profile-definitions.js +14 -0
  724. package/tui-profile/protocols/tui-contributions.d.ts +55 -0
  725. package/tui-profile/protocols/tui-contributions.js +141 -0
  726. package/tui-profile/registry/contracts/backend-v1alpha1.json +13 -0
  727. package/tui-profile/registry/registry-0.15.json +12 -0
  728. package/lib/types/backends/claude/install.d.ts +0 -15
  729. package/lib/types/backends/claude/install.d.ts.map +0 -1
  730. package/lib/types/backends/claude/install.js +0 -91
  731. package/lib/types/channel/elicitation.d.ts.map +0 -1
  732. package/lib/types/dsh-adapter/channel/session-lineage.d.ts +0 -42
  733. package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +0 -1
  734. package/lib/types/dsh-adapter/channel/session-lineage.js +0 -51
  735. package/lib/types/utils/jsonl.d.ts.map +0 -1
@@ -0,0 +1,285 @@
1
+ import { isBackendIdSyntax } from '../agent/backend-manifest.js';
2
+ import { BACKEND_CAPABILITY_NAMES } from '../adapter/spec/backend-capabilities.js';
3
+ import { EXPECTED_PERMISSIONS } from '../adapter/spec/protocol-constants.js';
4
+ import { validateBackendSpec } from '../adapter/spec/tui-contributions.js';
5
+ import { cleanRenderText } from '../channel/sanitize.js';
6
+ import { BUILTIN_BACKEND_IDS } from '../kernelPrefs.js';
7
+ import { logForDebugging } from '../utils/debug.js';
8
+ import { backendAdmission } from './backend-admission.js';
9
+ import { backendContributionOf } from './backend-contribution.js';
10
+ import { GENERATED_BACKENDS } from './backends.generated.js';
11
+ import { installExecutor } from './install/executors.js';
12
+ export { isBackendIdSyntax };
13
+ /**
14
+ * The DSH kernel. In-tree and always available, but **not** an `AgentBackend`:
15
+ * its session is built by `createDshSession()` from the DSH agent, and P0 does
16
+ * not force it into the backend contract just for symmetry (roadmap §7.3).
17
+ * Seeded first, so the picker order stays `dsh, claude, codex, …`.
18
+ */
19
+ const DSH_MANIFEST = {
20
+ id: 'dsh',
21
+ label: { kind: 'key', key: 'kernel-label-dsh' },
22
+ shortLabel: 'DSH',
23
+ product: 'dsh-core',
24
+ inTree: true,
25
+ alwaysAvailable: true,
26
+ // Not an `AgentBackend`, so it has no optional session surface to declare —
27
+ // stated explicitly rather than left to the projection's default (B-2).
28
+ capabilities: [],
29
+ grants: [],
30
+ };
31
+ /**
32
+ * What replaced Stage A's `HOST_INSTALLABLE_BACKEND_ID = 'claude'`: a manifest
33
+ * now *names an executor* (`BackendManifest.install.executor`) and the registry
34
+ * looks the name up in the host's table (`src/dsh-adapter/install/`). An entry is
35
+ * installable exactly when that lookup finds something, so the row that opens a
36
+ * wizard is the row whose own recipe names an executor this host runs — not the
37
+ * row that happens to wear the privileged id.
38
+ *
39
+ * A table rather than a static import of one backend's installer, because the
40
+ * discovery this has to survive is the post-mount one: Stage C reads a bundle's
41
+ * contribution after the plugin is mounted (§4.4), and a link-time constant could
42
+ * not be consulted then.
43
+ *
44
+ * An unknown executor is **not** a registration error (§6 item 12): the entry
45
+ * registers with no install surface, and its "not installed" row degrades to
46
+ * detection's own hint instead of growing a button that cannot work. The recipe
47
+ * is therefore validated for *shape* here, never for whether this host likes its
48
+ * value. The strings a plugin declares are also the wizard's render path and (on
49
+ * Windows) a `pnpm add` argument, so admitting a third-party recipe is Stage C/D
50
+ * work — until then a plugin may name only a value of this closed table.
51
+ */
52
+ const installableOf = (manifest) => manifest.install !== undefined && installExecutor(manifest.install.executor) !== undefined;
53
+ /** Registration order = picker order (`listBackends`). */
54
+ const entries = new Map();
55
+ /**
56
+ * Cell budget for a plugin-declared name. The picker pane is at most ~72 cells
57
+ * wide and the launchpad plate far narrower, so this only bounds what a
58
+ * misbehaving manifest can put on the render path (and in the notices written to
59
+ * stdout) — layout truncation stays the renderer's job.
60
+ */
61
+ const LABEL_MAX_CELLS = 48;
62
+ /** Close hooks of the entries whose module was actually imported (D4). */
63
+ const loadedUnloads = new Map();
64
+ /**
65
+ * What this host knows when admitting a backend declaration (B-2). The
66
+ * vocabularies come from the spec plane (`src/adapter/spec/**`), the granted set
67
+ * is empty until a backend grant flow exists (C stage) — which is why every
68
+ * in-tree manifest declares `grants: []` rather than a permission nobody could
69
+ * grant (D-3).
70
+ */
71
+ const HOST_ADMISSION_FACTS = {
72
+ reservedIds: new Set(BUILTIN_BACKEND_IDS),
73
+ capabilityNames: new Set(BACKEND_CAPABILITY_NAMES),
74
+ permissionNames: new Set(EXPECTED_PERMISSIONS.map(permission => permission.name)),
75
+ granted: new Set(),
76
+ };
77
+ /**
78
+ * The same facts for **this host's own seed**: a built-in manifest legitimately
79
+ * wears a built-in id, so the reserved set is the one rule that flips. Everything
80
+ * else (the capability and permission vocabularies) applies to a seed exactly as
81
+ * it does to a contribution — and the admission verdict is still recorded, which
82
+ * is what makes the dogfood check in `verify-backend-contribution.ts` meaningful.
83
+ */
84
+ const SEED_ADMISSION_FACTS = { ...HOST_ADMISSION_FACTS, reservedIds: new Set() };
85
+ const admissionFactsFor = (manifest) => manifest.inTree ? SEED_ADMISSION_FACTS : HOST_ADMISSION_FACTS;
86
+ /**
87
+ * Add one entry. The built-in seeds register themselves below; the plugin
88
+ * discovery of Stage C is the intended second caller, which is why the checks
89
+ * are loud rather than lenient: a bad manifest must fail at registration, not
90
+ * paint a wrong row.
91
+ */
92
+ export function registerBackend(entry) {
93
+ const { manifest } = entry;
94
+ const where = `dsh-tui: backend "${manifest.id}"`;
95
+ if (!isBackendIdSyntax(manifest.id)) {
96
+ throw new Error(`${where} has an invalid id (lowercase letters, digits and dashes, at most 32 characters)`);
97
+ }
98
+ if (entries.has(manifest.id))
99
+ throw new Error(`${where} is already registered`);
100
+ if (!manifest.inTree && BUILTIN_BACKEND_IDS.includes(manifest.id)) {
101
+ // `dsh` refs serialize without a prefix (`formatSessionRef`), so a plugin
102
+ // wearing that id would collide with first-party references.
103
+ throw new Error(`${where} is a reserved built-in id`);
104
+ }
105
+ if (!manifest.inTree && manifest.label.kind === 'key') {
106
+ // Otherwise a plugin could claim a first-party name: `t()` returns the text
107
+ // of an existing key (`src/i18n.ts`), so the row would read "DeepSeek Harness".
108
+ throw new Error(`${where} is not in-tree and may not use a host label key; declare { kind: 'literal', text }`);
109
+ }
110
+ if (!manifest.inTree && manifest.alwaysAvailable === true) {
111
+ throw new Error(`${where} is not in-tree and may not be always-available`);
112
+ }
113
+ if (!manifest.inTree && manifest.nativeKey !== undefined) {
114
+ throw new Error(`${where} is not in-tree and may not declare a native channel`);
115
+ }
116
+ if (manifest.alwaysAvailable === true && entry.load !== undefined) {
117
+ throw new Error(`${where} is always-available and must not have a loader (it is not an AgentBackend)`);
118
+ }
119
+ // Shape only: what the recipe names is the host's business, and a value it does
120
+ // not implement means "no install surface", never a refused registration.
121
+ const install = manifest.install;
122
+ if (install !== undefined && ![install.executor, install.specifier, install.version].every(field => typeof field === 'string' && field !== '')) {
123
+ throw new Error(`${where} declares an install recipe without a non-empty executor, specifier and version`);
124
+ }
125
+ // The contribution family gate (B-2). Order matters: project the in-tree
126
+ // superset down to the public declaration, validate that declaration against the
127
+ // family's own definition (the same validator every other host of this protocol
128
+ // runs), then decide the half only this host can answer — capability and
129
+ // permission vocabularies. A refusal here is a build-time error and must be
130
+ // loud; a `waiting_authorization` entry registers, because the id does exist and
131
+ // the boot, the warnings and the session refs must know it, but it is not
132
+ // offered (see {@link listOfferedBackends}).
133
+ const contribution = validateBackendSpec(backendContributionOf(manifest));
134
+ const verdict = backendAdmission(contribution, admissionFactsFor(manifest));
135
+ if (verdict.decision === 'rejected' || verdict.decision === 'unknown') {
136
+ throw new Error(`${where} was refused at admission: ${verdict.reasonCode}`);
137
+ }
138
+ const admission = verdict;
139
+ // Plugin-declared names are external input: flatten control/escape sequences
140
+ // and cap the width here, once, so the picker, the launchpad plate and the
141
+ // handoff notices all render the same sanitized text (in-tree names are this
142
+ // package's own strings and stay verbatim; `label.key` must stay a raw key).
143
+ const registered = {
144
+ // The one place that may mint a KernelBackendId: the syntax gate above has
145
+ // already run, and membership is this very map.
146
+ id: manifest.id,
147
+ manifest: manifest.inTree ? manifest : {
148
+ ...manifest,
149
+ label: manifest.label.kind === 'literal' ? { kind: 'literal', text: cleanRenderText(manifest.label.text, LABEL_MAX_CELLS) } : manifest.label,
150
+ shortLabel: cleanRenderText(manifest.shortLabel, LABEL_MAX_CELLS),
151
+ },
152
+ installable: installableOf(manifest),
153
+ admission,
154
+ ...(entry.load === undefined ? {} : { load: entry.load }),
155
+ };
156
+ entries.set(manifest.id, registered);
157
+ }
158
+ // The built-in seed: dsh first, then the generated index in directory-name
159
+ // order (claude, codex, …).
160
+ registerBackend({ manifest: DSH_MANIFEST });
161
+ for (const entry of GENERATED_BACKENDS)
162
+ registerBackend(entry);
163
+ /** Every registered backend, in declaration order (= picker order). */
164
+ export function listBackends() {
165
+ return [...entries.values()];
166
+ }
167
+ /**
168
+ * The entries a picker may offer (B-2). A `waiting_authorization` entry is
169
+ * registered — its id exists, the boot's two-stage parse must find it, and its
170
+ * session refs must resolve — but it is not offered: nothing has granted what it
171
+ * declares, so selecting it would open a backend the host cannot describe. Today
172
+ * no entry is in that state (every in-tree manifest declares `grants: []`); the
173
+ * shape exists so the C stage's grant flow has somewhere to land.
174
+ */
175
+ export function listOfferedBackends() {
176
+ return listBackends().filter(entry => entry.admission.decision !== 'waiting_authorization');
177
+ }
178
+ /**
179
+ * Read-only probe behind the host descriptor's `Backend` contract (W-2): is the
180
+ * backend admission machine mounted, and does it answer for a *contribution*?
181
+ *
182
+ * The descriptor publishes `tui.dsh/v1alpha1#Backend` only on real probe evidence
183
+ * (`hasVerificationEvidence`, descriptor publication barrier), and "a service row
184
+ * exists" is deliberately not evidence. So this probe walks the same path a
185
+ * third-party declaration takes — build a declaration no host owns, run it
186
+ * through the family validator, then through the host's admission facts — and
187
+ * reports what came back. It registers nothing, imports nothing and writes
188
+ * nothing: an entry that was never loaded is still never loaded.
189
+ */
190
+ export function probeBackendAdmission() {
191
+ const entries = listBackends();
192
+ const offered = listOfferedBackends().length;
193
+ // A declaration with no reserved id, no capabilities and no grants — the shape
194
+ // the profile's own CLI-shaped fixture uses, so the verdict cannot depend on
195
+ // anything this host happens to have registered.
196
+ const declaration = validateBackendSpec({
197
+ id: 'admission-probe',
198
+ label: { text: 'Admission probe' },
199
+ shortLabel: 'Admission probe',
200
+ capabilities: [],
201
+ grants: [],
202
+ });
203
+ const verdict = backendAdmission(declaration, HOST_ADMISSION_FACTS);
204
+ if (verdict.decision !== 'compatible') {
205
+ throw new Error(`dsh-tui: backend admission machine answered ${verdict.decision}; it cannot admit a contribution`);
206
+ }
207
+ return Object.freeze({ registered: entries.length, offered, verdict: 'compatible' });
208
+ }
209
+ /** One backend, or undefined when no such backend is registered. */
210
+ export function getBackend(id) {
211
+ return entries.get(id);
212
+ }
213
+ /** Whether an untrusted value names a backend this process can actually run.
214
+ * This is the second half of the parse (D1) and the only way to obtain a
215
+ * {@link KernelBackendId} outside `kernelPrefs`' own syntax gate. */
216
+ export function isRegisteredBackend(value) {
217
+ return isBackendIdSyntax(value) && entries.has(value);
218
+ }
219
+ /**
220
+ * The backend a configured / remembered value names: trimmed, lowercased, and
221
+ * **registered**. Anything else is undefined, which every caller already treats
222
+ * as "no choice made" (dsh + a warning) — the semantics an unknown value had
223
+ * before the set was open (D1).
224
+ */
225
+ export function parseBackendChoice(value) {
226
+ if (typeof value !== 'string')
227
+ return undefined;
228
+ const id = value.trim().toLowerCase();
229
+ return isRegisteredBackend(id) ? id : undefined;
230
+ }
231
+ /** The display name of a backend id: its manifest's short brand name, else the
232
+ * id itself (a session from an uninstalled plugin must still render as
233
+ * something). */
234
+ export function backendLabel(id) {
235
+ return getBackend(id)?.manifest.shortLabel ?? id;
236
+ }
237
+ /**
238
+ * Import one registered backend's implementation and book its pool hook.
239
+ *
240
+ * The two failure messages stay distinct (D1): "not registered" means the id was
241
+ * never a choice, "has no loader" means the id names the host's own kernel.
242
+ */
243
+ export async function loadBackend(id) {
244
+ const entry = entries.get(id);
245
+ if (entry === undefined)
246
+ throw new Error(`dsh-tui: backend "${id}" is not registered`);
247
+ if (entry.load === undefined)
248
+ throw new Error(`dsh-tui: backend "${id}" has no loader (only the DSH kernel is not an AgentBackend)`);
249
+ const module = await entry.load();
250
+ const { backendExport, unloadExport } = entry.manifest;
251
+ if (unloadExport !== undefined) {
252
+ const unload = module[unloadExport];
253
+ if (typeof unload !== 'function') {
254
+ throw new Error(`dsh-tui: backend "${id}" declares unloadExport "${unloadExport}", but its module does not export it`);
255
+ }
256
+ // Overwriting is fine: the same module instance hands back the same hook.
257
+ loadedUnloads.set(id, unload);
258
+ }
259
+ const exportName = backendExport ?? 'backend';
260
+ const backend = module[exportName];
261
+ if (backend === undefined)
262
+ throw new Error(`dsh-tui: backend "${id}" does not export "${exportName}"`);
263
+ return backend;
264
+ }
265
+ /**
266
+ * Close the pooled, process-wide resources of every backend this process
267
+ * actually loaded, in load order, then forget them (idempotent).
268
+ *
269
+ * Called once from the exit funnel *after* `ctx.root.fiber.dispose()`: closing a
270
+ * pool first would break the in-flight sessions whose calls still hold it
271
+ * (D4-P3). A failing or hanging hook must not block the exit — failures only
272
+ * reach the debug log, and a stuck one is caught by the funnel's existing 5s
273
+ * bound (P4).
274
+ */
275
+ export async function unloadBackends() {
276
+ for (const [id, unload] of loadedUnloads) {
277
+ try {
278
+ await unload();
279
+ }
280
+ catch (error) {
281
+ logForDebugging(`dsh-tui: backend "${id}" unload failed (${error instanceof Error ? error.message : String(error)})`);
282
+ }
283
+ }
284
+ loadedUnloads.clear();
285
+ }
@@ -1,41 +1,78 @@
1
1
  /** Non-DSH backend loading, detection and startup session ownership. */
2
2
  import type { Context } from '@deepseek-ai/cordis';
3
- import type { AgentBackend, BackendHost, OpenTarget, SdkInstallTarget, SdkInstaller } from '../agent/backend.js';
3
+ import type { AgentBackend, BackendHost, OpenTarget, SdkInstallSurface } from '../agent/backend.js';
4
4
  import type { AgentEvent } from '../agent/events.js';
5
5
  import type { AgentSession } from '../agent/session.js';
6
6
  import type { KernelStatus } from '../components/kernelCatalog.js';
7
- /** Close an already-loaded backend's pooled processes without loading it on DSH. */
8
- export declare function closeBackendResources(): Promise<void>;
9
- export declare const BACKEND_LOADERS: {
10
- claude: () => Promise<AgentBackend>;
11
- codex: () => Promise<AgentBackend>;
12
- };
13
- /** The kernel picker's one-click SDK install surface (Chat consumes it as
14
- * props; the types are the neutral ones from agent/backend.js). */
15
- export declare const sdkInstall: {
16
- resolveTarget: () => SdkInstallTarget;
17
- start: (dir: string) => SdkInstaller;
18
- checkPnpm: () => Promise<boolean>;
19
- pinned: {
20
- readonly specifier: "@anthropic-ai/claude-agent-sdk@0.3.287";
21
- readonly version: "0.3.287";
22
- };
23
- };
24
- /** All probes and sessions share one credential source per provider. */
25
- export declare function createBackendHost(ctx: Context, cwd: string, stderr: (line: string) => void): Promise<BackendHost>;
26
- /** Resume failures abort boot; history is read before the channel's first paint. */
27
- export declare function openBackendStartup(ctx: Context, backend: AgentBackend, input: {
7
+ /**
8
+ * The install surface of one registered backend (Stage B / B-1): the manifest's
9
+ * recipe with the actions of the executor that recipe names. Undefined when the
10
+ * entry declares no recipe, is not registered, or names an executor this host
11
+ * does not implement — all three are "no install surface", which the picker
12
+ * renders as the dim row's dead-end reason.
13
+ *
14
+ * The manifest says **what** (specifier + pin) and **which executor**; nothing
15
+ * here imports a backend, and nothing is resolved before the user picks a row:
16
+ * the entry behind that row is the one whose recipe gets run (§6 item 12).
17
+ *
18
+ * The id is a plain `string` on purpose, exactly like `getBackend`: membership is
19
+ * half of what this answers, so asking about an id that was never registered is a
20
+ * question with an answer, not a type error.
21
+ */
22
+ export declare function installSurfaceFor(id: string): SdkInstallSurface | undefined;
23
+ /**
24
+ * The host services of one backend. Built per backend (not once for all of
25
+ * them) because `dataDir` is backend-scoped: `<DATA_DIR>/backends/<id>` is the
26
+ * only place a backend has any business writing, and the id is what names it.
27
+ *
28
+ * `locale` is a live read, not a snapshot: `/lang` switches the whole UI at
29
+ * runtime, and a backend's own text follows it string by string (B-3). The
30
+ * language union is restated by `getLang()`'s own return type, so a new
31
+ * shipped language fails to compile here until the domain contract knows it.
32
+ */
33
+ export declare function createBackendHost(ctx: Context, backendId: string, cwd: string, stderr: (line: string) => void): Promise<BackendHost>;
34
+ /**
35
+ * What the channel needs about the startup backend before its session exists,
36
+ * plus `start()`, which opens it (mount claim, open, history); the screen
37
+ * mounts in between.
38
+ * A resume failure rejects `start()`; no fresh session is started instead.
39
+ */
40
+ export declare function prepareBackendStartup(ctx: Context, backend: AgentBackend, input: {
28
41
  readonly cwd: string;
29
42
  readonly stderr: (line: string) => void;
30
43
  readonly configuredSessionId?: string;
31
44
  readonly argv: readonly string[];
32
45
  }): Promise<{
33
- session: AgentSession;
46
+ resumedSessionId: string | undefined;
34
47
  label: string;
35
48
  backendId: string;
49
+ catalog: import("../agent/backend.js").SessionCatalog | undefined;
50
+ sessionPrefs: import("../agent/backend.js").BackendSessionPrefs;
51
+ start: () => Promise<{
52
+ session: AgentSession;
53
+ initialHistory: readonly AgentEvent[];
54
+ }>;
55
+ persisted: (_sessionId: string, rows: readonly {
56
+ readonly kind: string;
57
+ }[]) => boolean;
58
+ resumeCommand: (sessionId: string) => string;
59
+ open: (target: Extract<OpenTarget, {
60
+ readonly kind: "create" | "resume";
61
+ }>) => Promise<AgentSession>;
62
+ }>;
63
+ /** Resume failures abort boot; history is read before the channel's first paint. */
64
+ export declare function openBackendStartup(ctx: Context, backend: AgentBackend, input: Parameters<typeof prepareBackendStartup>[2]): Promise<{
65
+ session: AgentSession;
36
66
  initialHistory: readonly AgentEvent[];
67
+ resumedSessionId: string | undefined;
68
+ label: string;
69
+ backendId: string;
37
70
  catalog: import("../agent/backend.js").SessionCatalog | undefined;
38
71
  sessionPrefs: import("../agent/backend.js").BackendSessionPrefs;
72
+ start: () => Promise<{
73
+ session: AgentSession;
74
+ initialHistory: readonly AgentEvent[];
75
+ }>;
39
76
  persisted: (_sessionId: string, rows: readonly {
40
77
  readonly kind: string;
41
78
  }[]) => boolean;
@@ -44,6 +81,12 @@ export declare function openBackendStartup(ctx: Context, backend: AgentBackend,
44
81
  readonly kind: "create" | "resume";
45
82
  }>) => Promise<AgentSession>;
46
83
  }>;
47
- /** Probe optional backends lazily; failed loading leaves their row unavailable. */
84
+ /**
85
+ * Probe every optional backend once (`dsh` is always available and has no
86
+ * loader). Loading goes through the registry, so a probed backend's pool hook is
87
+ * booked just like an opened one's — a backend that builds its pool in `detect()`
88
+ * (the contract does not forbid it) is then still closed at exit. Failures leave
89
+ * their row unavailable instead of failing the probe.
90
+ */
48
91
  export declare function probeKernels(ctx: Context, cwd: string): Promise<Record<string, KernelStatus>>;
49
92
  //# sourceMappingURL=backends.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backends.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backends.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAyB,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvI,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAclE,oFAAoF;AACpF,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,eAAO,MAAM,eAAe;;;CAMoD,CAAA;AAEhF;oEACoE;AACpE,eAAO,MAAM,UAAU;yBACF,gBAAgB;iBACtB,MAAM,KAAG,YAAY;qBACnB,OAAO,CAAC,OAAO,CAAC;;;;;CAEhC,CAAA;AAID,wEAAwE;AACxE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAiBvH;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE;IACnF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC;;;;;;;4BAgD2B,MAAM,QAAQ,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;+BAC/C,MAAM;mBAClB,OAAO,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;GAG7E;AAED,mFAAmF;AACnF,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAYnG"}
1
+ {"version":3,"file":"backends.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backends.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAyB,UAAU,EAAE,iBAAiB,EAAkC,MAAM,qBAAqB,CAAA;AAC1J,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAWlE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAW3E;AAID;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAqB1I;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE;IACtF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC;;;;;;iBASyB,OAAO,CAAC;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,cAAc,EAAE,SAAS,UAAU,EAAE,CAAA;KAAE,CAAC;4BA2CvE,MAAM,QAAQ,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;+BAC/C,MAAM;mBAClB,OAAO,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;GAG7E;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAnDnF,YAAY;oBAAkB,SAAS,UAAU,EAAE;;;;;;iBAAtE,OAAO,CAAC;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,cAAc,EAAE,SAAS,UAAU,EAAE,CAAA;KAAE,CAAC;4BA2CvE,MAAM,QAAQ,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;+BAC/C,MAAM;mBAClB,OAAO,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;GAS7E;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAenG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * GENERATED by scripts/gen-backend-index.mjs — do not edit.
3
+ * 2 backend manifest(s) in directory-name order (picker order):
4
+ * claude, codex.
5
+ *
6
+ * `pnpm compile` refreshes this file: commit the result. It is checked in
7
+ * because the CI test groups restore the build artifact instead of compiling, and
8
+ * the registry imports it from `src/` (see the generator for the whole story).
9
+ */
10
+ import type { BackendEntry } from '../agent/backend-manifest.js';
11
+ export declare const GENERATED_BACKENDS: readonly BackendEntry[];
12
+ //# sourceMappingURL=backends.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backends.generated.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backends.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAIhE,eAAO,MAAM,kBAAkB,EAAE,SAAS,YAAY,EAGrD,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { manifest as claudeManifest } from '../backends/claude/manifest.js';
2
+ import { manifest as codexManifest } from '../backends/codex/manifest.js';
3
+ export const GENERATED_BACKENDS = [
4
+ { manifest: claudeManifest, load: () => import('../backends/claude/index.js') },
5
+ { manifest: codexManifest, load: () => import('../backends/codex/index.js') },
6
+ ];
@@ -1,40 +1,63 @@
1
+ import { join } from 'node:path';
1
2
  import { formatSessionRef } from '../agent/refs.js';
3
+ import { getBackend, listBackends, loadBackend } from './backend-registry.js';
2
4
  import { reserveMount, reserveNewSession } from '../sessionMounts.js';
3
5
  import { resumeTargetFromArgv } from '../sessionHistory.js';
4
6
  import { mountFailureText } from '../sessions/resumeFailure.js';
7
+ import { getLang } from '../i18n.js';
8
+ import { installedTuiVersion } from '../update.js';
5
9
  import { logForDebugging } from '../utils/debug.js';
6
- // Static on purpose: the install module imports no vendor package (node
7
- // built-ins + update.ts, which this adapter loads anyway), so a DSH-only
8
- // boot pays nothing for having the wizard's surface at hand.
9
- import { checkPnpmAvailable, CLAUDE_SDK_SPECIFIER, resolveSdkInstallTarget, startClaudeSdkInstall } from '../backends/claude/install.js';
10
- import { VALIDATED_SDK_VERSION } from '../backends/claude/contract.js';
10
+ import { DATA_DIR } from '../utils/paths.js';
11
+ import { installExecutor } from './install/executors.js';
11
12
  import { fileChannelTokens } from '../backends/shared/channel-tokens.js';
12
- let closeCodexHubs;
13
- /** Close an already-loaded backend's pooled processes without loading it on DSH. */
14
- export async function closeBackendResources() {
15
- await closeCodexHubs?.();
13
+ /**
14
+ * The install surface of one registered backend (Stage B / B-1): the manifest's
15
+ * recipe with the actions of the executor that recipe names. Undefined when the
16
+ * entry declares no recipe, is not registered, or names an executor this host
17
+ * does not implement — all three are "no install surface", which the picker
18
+ * renders as the dim row's dead-end reason.
19
+ *
20
+ * The manifest says **what** (specifier + pin) and **which executor**; nothing
21
+ * here imports a backend, and nothing is resolved before the user picks a row:
22
+ * the entry behind that row is the one whose recipe gets run (§6 item 12).
23
+ *
24
+ * The id is a plain `string` on purpose, exactly like `getBackend`: membership is
25
+ * half of what this answers, so asking about an id that was never registered is a
26
+ * question with an answer, not a type error.
27
+ */
28
+ export function installSurfaceFor(id) {
29
+ const recipe = getBackend(id)?.manifest.install;
30
+ if (recipe === undefined)
31
+ return undefined;
32
+ const executor = installExecutor(recipe.executor);
33
+ if (executor === undefined)
34
+ return undefined;
35
+ return {
36
+ ...recipe,
37
+ resolveTarget: () => executor.resolveTarget(),
38
+ start: (dir) => executor.start(recipe.specifier, dir),
39
+ preflight: () => executor.preflight(),
40
+ };
16
41
  }
17
- export const BACKEND_LOADERS = {
18
- claude: () => import('../backends/claude/index.js').then(m => m.claudeBackend),
19
- codex: () => import('../backends/codex/index.js').then(m => {
20
- closeCodexHubs = m.closeAllCodexHubs;
21
- return m.codexBackend;
22
- }),
23
- };
24
- /** The kernel picker's one-click SDK install surface (Chat consumes it as
25
- * props; the types are the neutral ones from agent/backend.js). */
26
- export const sdkInstall = {
27
- resolveTarget: () => resolveSdkInstallTarget(),
28
- start: (dir) => startClaudeSdkInstall(dir),
29
- checkPnpm: () => checkPnpmAvailable(),
30
- pinned: { specifier: CLAUDE_SDK_SPECIFIER, version: VALIDATED_SDK_VERSION },
31
- };
32
42
  const credentialSources = new Map();
33
- /** All probes and sessions share one credential source per provider. */
34
- export async function createBackendHost(ctx, cwd, stderr) {
43
+ /**
44
+ * The host services of one backend. Built per backend (not once for all of
45
+ * them) because `dataDir` is backend-scoped: `<DATA_DIR>/backends/<id>` is the
46
+ * only place a backend has any business writing, and the id is what names it.
47
+ *
48
+ * `locale` is a live read, not a snapshot: `/lang` switches the whole UI at
49
+ * runtime, and a backend's own text follows it string by string (B-3). The
50
+ * language union is restated by `getLang()`'s own return type, so a new
51
+ * shipped language fails to compile here until the domain contract knows it.
52
+ */
53
+ export async function createBackendHost(ctx, backendId, cwd, stderr) {
35
54
  const { createOAuthCredentialSource } = await import('./oauth-credential-source.js');
55
+ const appVersion = installedTuiVersion();
36
56
  return {
37
57
  cwd,
58
+ dataDir: join(DATA_DIR, 'backends', backendId),
59
+ locale: () => getLang(),
60
+ ...(appVersion === undefined ? {} : { appVersion }),
38
61
  debug: message => logForDebugging(message),
39
62
  warn: message => ctx.logger.warn(message),
40
63
  stderr,
@@ -49,26 +72,37 @@ export async function createBackendHost(ctx, cwd, stderr) {
49
72
  },
50
73
  };
51
74
  }
52
- /** Resume failures abort boot; history is read before the channel's first paint. */
53
- export async function openBackendStartup(ctx, backend, input) {
75
+ /**
76
+ * What the channel needs about the startup backend before its session exists,
77
+ * plus `start()`, which opens it (mount claim, open, history); the screen
78
+ * mounts in between.
79
+ * A resume failure rejects `start()`; no fresh session is started instead.
80
+ */
81
+ export async function prepareBackendStartup(ctx, backend, input) {
54
82
  const launch = backend.launch;
55
83
  if (launch === undefined)
56
84
  throw new Error(`dsh-tui: backend "${backend.id}" does not support startup`);
57
- const host = await createBackendHost(ctx, input.cwd, input.stderr);
58
- const prefs = launch.sessionPrefs(host.debug);
85
+ const host = await createBackendHost(ctx, backend.id, input.cwd, input.stderr);
86
+ const prefs = launch.sessionPrefs(host);
59
87
  const requested = (input.configuredSessionId ?? resumeTargetFromArgv(input.argv, () => prefs.lastSession()))?.trim();
60
88
  const resumeId = requested === undefined || requested === ''
61
89
  ? undefined
62
90
  : requested.startsWith(`${backend.id}:`) ? requested.slice(backend.id.length + 1) : requested;
63
- let session;
64
- let initialHistory = [];
65
- if (resumeId !== undefined) {
91
+ const start = async () => {
92
+ if (resumeId === undefined) {
93
+ const session = await backend.open({ kind: 'create', cwd: input.cwd }, host);
94
+ const { reservation } = await reserveNewSession(formatSessionRef(session.ref));
95
+ reservation.settle();
96
+ return { session, initialHistory: [] };
97
+ }
66
98
  const key = formatSessionRef({ backendId: backend.id, sessionId: resumeId });
67
99
  const reserved = await reserveMount(key);
68
100
  if (!reserved.ok) {
69
101
  throw new Error(`dsh-tui: cannot resume ${backend.descriptor.label} session "${resumeId}": ${mountFailureText(reserved)} — ` +
70
102
  'two processes driving one session would interleave its transcript. Close that terminal, or drop --resume to start a fresh session.');
71
103
  }
104
+ let session;
105
+ let initialHistory;
72
106
  try {
73
107
  session = await backend.open({ kind: 'resume', sessionId: resumeId }, host);
74
108
  try {
@@ -88,36 +122,48 @@ export async function openBackendStartup(ctx, backend, input) {
88
122
  reserved.reservation.settle();
89
123
  prefs.setLastSession(resumeId);
90
124
  prefs.touch(resumeId);
91
- }
92
- else {
93
- session = await backend.open({ kind: 'create', cwd: input.cwd }, host);
94
- const { reservation } = await reserveNewSession(formatSessionRef(session.ref));
95
- reservation.settle();
96
- }
125
+ return { session, initialHistory };
126
+ };
97
127
  return {
98
- session,
128
+ // Boot and landing-page state use the target this backend actually opened.
129
+ resumedSessionId: resumeId,
99
130
  label: backend.descriptor.label,
100
131
  backendId: backend.id,
101
- initialHistory,
102
132
  catalog: backend.catalog,
103
133
  sessionPrefs: prefs,
134
+ start,
104
135
  // A submitted user row means the backend has persisted a resumable transcript.
105
136
  persisted: (_sessionId, rows) => rows.some(row => row.kind === 'user'),
106
137
  resumeCommand: (sessionId) => launch.resumeCommand(sessionId),
107
138
  open: (target) => backend.open(target, target.kind === 'create' ? { ...host, cwd: target.cwd } : host),
108
139
  };
109
140
  }
110
- /** Probe optional backends lazily; failed loading leaves their row unavailable. */
141
+ /** Resume failures abort boot; history is read before the channel's first paint. */
142
+ export async function openBackendStartup(ctx, backend, input) {
143
+ const prepared = await prepareBackendStartup(ctx, backend, input);
144
+ return { ...prepared, ...await prepared.start() };
145
+ }
146
+ /**
147
+ * Probe every optional backend once (`dsh` is always available and has no
148
+ * loader). Loading goes through the registry, so a probed backend's pool hook is
149
+ * booked just like an opened one's — a backend that builds its pool in `detect()`
150
+ * (the contract does not forbid it) is then still closed at exit. Failures leave
151
+ * their row unavailable instead of failing the probe.
152
+ */
111
153
  export async function probeKernels(ctx, cwd) {
112
- const host = await createBackendHost(ctx, cwd, () => undefined);
113
154
  const statuses = {};
114
- for (const [id, load] of Object.entries(BACKEND_LOADERS)) {
155
+ for (const entry of listBackends()) {
156
+ if (entry.load === undefined)
157
+ continue;
158
+ // One host per entry: `dataDir` is backend-scoped, and a probe must not
159
+ // hand a backend a directory that is not its own.
160
+ const host = await createBackendHost(ctx, entry.id, cwd, () => undefined);
115
161
  try {
116
- statuses[id] = await (await load()).detect(host);
162
+ statuses[entry.id] = await (await loadBackend(entry.id)).detect(host);
117
163
  }
118
164
  catch (error) {
119
165
  host.debug('dsh-tui: kernel probe failed (' + (error instanceof Error ? error.message : String(error)) + ')');
120
- statuses[id] = { installed: false };
166
+ statuses[entry.id] = { installed: false };
121
167
  }
122
168
  }
123
169
  return statuses;
@@ -14,6 +14,8 @@ export type ChannelActionMethods = Pick<ChannelState, ChannelActionMethodName>;
14
14
  export declare function createChannelActionMethods(getReadyActions: () => ChannelActionDelegates): ChannelActionMethods;
15
15
  export declare function createChannelActionReadiness(): {
16
16
  install(next: ChannelActionDelegates): void;
17
+ /** Replace the installed table (the adoption-window extension, core/compose.ts). */
18
+ reinstall(next: ChannelActionDelegates): void;
17
19
  getReadyActions(): ChannelActionDelegates;
18
20
  };
19
21
  /**