@deepseek-harness-tui/dsh-tui 0.14.1 → 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
@@ -1,12 +1,34 @@
1
+ /**
2
+ * The backend-neutral channel core: one composition for every
3
+ * `AgentSession`, whatever backend serves it.
4
+ *
5
+ * `createCoreChannel` acquires, in one owner transaction, the binding, the
6
+ * host seams and decision gate, the emitter, notifications, context
7
+ * bookkeeping, the IDE selection link, the composer and input pipeline (FIFO,
8
+ * `tui/input` decisions, `@` mentions, staged images, IDE selection) ending in
9
+ * `session.submit`, the shared projector feed, session switching (`/new`),
10
+ * local actions, files, reports and the capability-backed actions, and builds
11
+ * the common half of the `ChannelState`. Nothing is subscribed and no action
12
+ * is callable yet.
13
+ *
14
+ * An extension (the DSH extensions, `../extensions.ts`) then `extend`s the
15
+ * core: hooks into the feed and the emitter, state fields it serves, and its
16
+ * action delegates on top of the core's. `start()` installs the action table
17
+ * once, starts the runtime subscriptions, binds the session, and hands the
18
+ * channel lifetime to Cordis. A session no extension claims is served by the
19
+ * core alone: every action is backed by a capability, the core, or explicitly
20
+ * unavailable.
21
+ */
1
22
  import { markChannelReadDirty } from '../../../adapter/channel/read-view.js';
2
23
  import { createActivityProjection } from '../../../channel/activity.js';
3
24
  import { channelCapabilities } from '../../../channel/capabilities.js';
4
25
  import { anchoredRow, prependHistoryRows, projectHistorySlice, restoreFoldedRows } from '../../../channel/history-restore.js';
5
26
  import { t } from '../../../i18n.js';
6
27
  import { WORKING_GATE_NOTICES } from '../../../commands.js';
28
+ import { markBoot } from '../../../utils/bootTrace.js';
7
29
  import { logForDebugging } from '../../../utils/debug.js';
8
30
  import { DEFAULT_SESSION_MODES } from '../../../sessionModes.js';
9
- import { resolveContextOccupancy } from '../../context-occupancy.js';
31
+ import { resolveContextBreakdown, resolveContextOccupancy } from '../../context-occupancy.js';
10
32
  import { IdeChannel, ideLockDir } from '../../ide-channel.js';
11
33
  import { createChannelActionMethods, createChannelActionReadiness } from '../action-readiness.js';
12
34
  import { createAttachedContextRegistry } from '../attached-context.js';
@@ -23,7 +45,7 @@ import { registerChannelOwner } from '../owner.js';
23
45
  import { unavailablePermissionPresetSnapshot } from '../permissions.js';
24
46
  import { createPreferences } from '../preferences.js';
25
47
  import { createSettingsHosts } from '../settings-host.js';
26
- import { createInitialChannelView } from '../state.js';
48
+ import { StartupOpenError, createInitialChannelView } from '../state.js';
27
49
  import { createCapabilityDelegates, installChannelActions } from './actions.js';
28
50
  import { createBindingFeed } from './binding-feed.js';
29
51
  import { createCoreFiles, NO_COMPLETION_CATALOG } from './files.js';
@@ -53,6 +75,9 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
53
75
  const host = resolveCoreHost(ctx, owner);
54
76
  let extension = {};
55
77
  let started = false;
78
+ /** One hook may extend the core during the first adoption; extend throws otherwise. */
79
+ let adoptHook;
80
+ let adoptWindow = false;
56
81
  const emitter = createChannelEmitter(() => state, () => extension.flushDeferred?.() ?? false, {
57
82
  // Folding drops a row's full text on the promise that `loadOlder`
58
83
  // restores it; without a history slicer every row stays whole. A
@@ -205,7 +230,11 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
205
230
  localImageStore ??= createLocalImageStore(() => binding.session.capabilities.images?.limits ?? NO_IMAGES);
206
231
  return localImageStore;
207
232
  };
208
- const composer = createComposerImages(ctx, owner, { generation: () => state.agentBindingGeneration, localImages });
233
+ const composer = createComposerImages(ctx, owner, {
234
+ generation: () => state.agentBindingGeneration,
235
+ sessionId: () => state.agentId,
236
+ localImages,
237
+ });
209
238
  const files = createCoreFiles(ctx, {
210
239
  owner,
211
240
  binding,
@@ -227,7 +256,6 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
227
256
  * matched by its call id, not by this.
228
257
  */
229
258
  let agentMessageIntents = 0;
230
- const messaging = binding.session.capabilities.subagents?.messaging;
231
259
  const actionReadiness = createChannelActionReadiness();
232
260
  const getReadyActions = () => {
233
261
  owner.assertActive();
@@ -267,6 +295,73 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
267
295
  // and never holding a non-DSH session's id): `read` is a cached lookup, so
268
296
  // the accessor on the state below stays cheap.
269
297
  const contextPressure = options.contextPressure;
298
+ /**
299
+ * The subagent control for `session`: interrupt always; the transcript read
300
+ * and messaging only while the session serves them. Rebuilt per adoption.
301
+ */
302
+ const subagentControlFor = (session) => {
303
+ const messaging = session.capabilities.subagents?.messaging;
304
+ return {
305
+ interrupt: agentId => {
306
+ const control = binding.session.capabilities.subagents;
307
+ if (control === undefined) {
308
+ unavailable('agents');
309
+ return false;
310
+ }
311
+ const subagent = activity.subagent(agentId);
312
+ if (subagent === undefined || (subagent.status !== 'running' && subagent.status !== 'starting'))
313
+ return false;
314
+ void control.interrupt(subagent.agentId).then(stopped => {
315
+ if (!stopped && owner.current())
316
+ notify(t('subagent-interrupt-failed', { id: subagent.agentId.slice(0, 8) }), { color: 'warning', timeoutMs: 6000 });
317
+ }, (error) => {
318
+ if (owner.current())
319
+ notify(t('capability-failed', { name: 'agents', err: error instanceof Error ? error.message : String(error) }), { color: 'error', timeoutMs: 8000 });
320
+ });
321
+ return true;
322
+ },
323
+ // The child transcript source exists only while the bound session's
324
+ // `subagents.history` capability does (Claude's store read; the DSH
325
+ // extension replaces this whole control with one backed by its own
326
+ // child transcript reader). The detail scene renders a Transcript page
327
+ // only when this method exists. A failed read resolves null, so the
328
+ // scene shows "unavailable" rather than an empty transcript.
329
+ ...(session.capabilities.subagents?.history === undefined ? {} : {
330
+ history: (agentId, window) => {
331
+ const history = binding.session.capabilities.subagents?.history;
332
+ if (history === undefined)
333
+ return Promise.resolve(null);
334
+ return history(agentId, window).catch(() => null);
335
+ },
336
+ }),
337
+ /** Parent-mediated messaging uses the session's submit pipeline. */
338
+ ...(messaging === undefined ? {} : {
339
+ message: {
340
+ via: messaging,
341
+ steer: false,
342
+ listTargets: () => Promise.resolve(state.subagents.map(sub => ({
343
+ agentId: sub.agentId,
344
+ ...(sub.sessionId === undefined ? {} : { sessionId: sub.sessionId }),
345
+ label: sub.description,
346
+ ...(sub.mode === undefined ? {} : { mode: sub.mode }),
347
+ status: sub.status,
348
+ }))),
349
+ submit: (input) => {
350
+ const text = input.text.trim();
351
+ if (text === '')
352
+ return Promise.resolve({ ok: false, reason: 'failed', message: 'empty text' });
353
+ const name = input.targetName !== undefined && input.targetName.trim() !== '' ? input.targetName.trim() : input.targetId;
354
+ const tool = binding.session.capabilities.subagents?.messagingTool;
355
+ const envelope = tool === undefined ? t('agent-message-envelope', { name, id: input.targetId, text }) : t('agent-message-native-envelope', { tool, name, id: input.targetId, text });
356
+ const intentId = `agent-message-${(agentMessageIntents += 1)}`;
357
+ dispatchUserText(envelope, 'followup', [], undefined);
358
+ return Promise.resolve({ ok: true, intentId, state: 'issued' });
359
+ },
360
+ messages: () => activity.agentMessages(),
361
+ },
362
+ }),
363
+ };
364
+ };
270
365
  const state = {
271
366
  ...createInputActions(() => state, () => binding.session, owner, inputConvergence, composer, (text, placement, images) => dispatchUserText(text, placement, images), (command, includeInContext) => getReadyActions().runLocalCommand(command, includeInContext), sessionId => { extension.touchSession?.(sessionId); }),
272
367
  subscribe: emitter.subscribe,
@@ -303,6 +398,15 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
303
398
  get contextOccupancy() {
304
399
  return resolveContextOccupancy(contextPressure?.read(state.sessionId), state.lastUsage, state.contextWindow, feed.projector.contextUsage());
305
400
  },
401
+ /**
402
+ * The composition half of the same meter unit, derived on read for the same
403
+ * reason (and refreshed by the same change feed). `undefined` on a harness
404
+ * whose meter publishes no `contextBreakdown`: the bar then weights its
405
+ * fills with this channel's own per-content-type estimates alone.
406
+ */
407
+ get contextBreakdown() {
408
+ return resolveContextBreakdown(contextPressure?.readBreakdown?.(state.sessionId));
409
+ },
306
410
  commandList: localCommandsFor(initialCapabilities.commands),
307
411
  backendCapabilities: initialCapabilities,
308
412
  capabilities: () => extension.agentCapabilities?.() ?? sessionAgentCapabilities(),
@@ -507,66 +611,7 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
507
611
  };
508
612
  },
509
613
  ...actionMethods,
510
- subagentControl: {
511
- interrupt: agentId => {
512
- const control = binding.session.capabilities.subagents;
513
- if (control === undefined) {
514
- unavailable('agents');
515
- return false;
516
- }
517
- const subagent = activity.subagent(agentId);
518
- if (subagent === undefined || (subagent.status !== 'running' && subagent.status !== 'starting'))
519
- return false;
520
- void control.interrupt(subagent.agentId).then(stopped => {
521
- if (!stopped && owner.current())
522
- notify(t('subagent-interrupt-failed', { id: subagent.agentId.slice(0, 8) }), { color: 'warning', timeoutMs: 6000 });
523
- }, (error) => {
524
- if (owner.current())
525
- notify(t('capability-failed', { name: 'agents', err: error instanceof Error ? error.message : String(error) }), { color: 'error', timeoutMs: 8000 });
526
- });
527
- return true;
528
- },
529
- // The child transcript source exists only while the bound session's
530
- // `subagents.history` capability does (Claude's store read; the DSH
531
- // extension replaces this whole control with one backed by its own
532
- // child transcript reader). The detail scene renders a Transcript page
533
- // only when this method exists. A failed read resolves null, so the
534
- // scene shows "unavailable" rather than an empty transcript.
535
- ...(binding.session.capabilities.subagents?.history === undefined ? {} : {
536
- history: (agentId, window) => {
537
- const history = binding.session.capabilities.subagents?.history;
538
- if (history === undefined)
539
- return Promise.resolve(null);
540
- return history(agentId, window).catch(() => null);
541
- },
542
- }),
543
- /** Parent-mediated messaging uses the session's submit pipeline. */
544
- ...(messaging === undefined ? {} : {
545
- message: {
546
- via: messaging,
547
- steer: false,
548
- listTargets: () => Promise.resolve(state.subagents.map(sub => ({
549
- agentId: sub.agentId,
550
- ...(sub.sessionId === undefined ? {} : { sessionId: sub.sessionId }),
551
- label: sub.description,
552
- ...(sub.mode === undefined ? {} : { mode: sub.mode }),
553
- status: sub.status,
554
- }))),
555
- submit: (input) => {
556
- const text = input.text.trim();
557
- if (text === '')
558
- return Promise.resolve({ ok: false, reason: 'failed', message: 'empty text' });
559
- const name = input.targetName !== undefined && input.targetName.trim() !== '' ? input.targetName.trim() : input.targetId;
560
- const tool = binding.session.capabilities.subagents?.messagingTool;
561
- const envelope = tool === undefined ? t('agent-message-envelope', { name, id: input.targetId, text }) : t('agent-message-native-envelope', { tool, name, id: input.targetId, text });
562
- const intentId = `agent-message-${(agentMessageIntents += 1)}`;
563
- dispatchUserText(envelope, 'followup', [], undefined);
564
- return Promise.resolve({ ok: true, intentId, state: 'issued' });
565
- },
566
- messages: () => activity.agentMessages(),
567
- },
568
- }),
569
- },
614
+ subagentControl: subagentControlFor(initialSession),
570
615
  jobControl: {
571
616
  kill: id => {
572
617
  const tasks = binding.session.capabilities.tasks;
@@ -683,7 +728,8 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
683
728
  trajectory: { observe: (event, replaying) => { if (trajectoryOwned())
684
729
  agentTrajectory.observe(event, replaying); } },
685
730
  checkContextWarning, notify: (...args) => notify(...args),
686
- renderer: host.rendererRuntime,
731
+ // Read per event (late row).
732
+ get renderer() { return host.rendererRuntime; },
687
733
  selectionAttached: messageId => selectionAttachments.take(messageId),
688
734
  },
689
735
  resetTrajectory: () => { if (trajectoryOwned())
@@ -769,10 +815,15 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
769
815
  state,
770
816
  rowIds,
771
817
  resetProjection: feed.resetProjection,
772
- resetActivity: () => { activity.reset(); },
818
+ resetActivity: candidate => {
819
+ activity.reset();
820
+ if (activityOwned())
821
+ state.subagentControl = subagentControlFor(candidate);
822
+ },
773
823
  snapshotOf,
774
824
  resetControls: controls.reset,
775
825
  bind: seed => feed.bind(seed),
826
+ attach: candidate => { attachOnAdopt(candidate); },
776
827
  bound: () => binding.session,
777
828
  mounts: SESSION_MOUNT_LEDGER,
778
829
  ...(options.sessionPrefs === undefined ? {} : { touch: (sessionId) => options.sessionPrefs?.touch(sessionId) }),
@@ -798,7 +849,7 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
798
849
  binding,
799
850
  state,
800
851
  rowIds,
801
- workspace: host.workspaceService,
852
+ get workspace() { return host.workspaceService; },
802
853
  resetProjection: feed.resetProjection,
803
854
  notify,
804
855
  unavailable,
@@ -821,15 +872,196 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
821
872
  },
822
873
  });
823
874
  const reports = createCoreReports({ owner, binding, state: () => state });
875
+ /**
876
+ * Adopt the startup session once its open settles (`options.startup`). No
877
+ * switch: no veto, no switched notice, and the rows stay. A failed open
878
+ * leaves the placeholder bound and `ready` false, with a notice row
879
+ * pointing at `/new` (or a `StartupOpenError`'s own hint).
880
+ */
881
+ const adoptStartup = (startup) => {
882
+ const adoption = binding.capture();
883
+ let history = [];
884
+ let route;
885
+ let agentPreset;
886
+ const backend = state.backendCapabilities.backendLabel;
887
+ // The shared open-failure funnel: also the tail segment's, so a throw
888
+ // after a successful open can never escape as an unhandled rejection.
889
+ const onOpenFailed = (error) => {
890
+ // Released, or a `/new` / `/resume` replaced the placeholder first.
891
+ // A tail throw released the channel (binding.adopt's rollback), so it
892
+ // takes this same early exit.
893
+ if (!owner.current() || binding.session !== adoption.session)
894
+ return;
895
+ logForDebugging(`channel: startup session failed to open (${error instanceof Error ? error.message : String(error)})`);
896
+ // A notice is one line: the reason's first line, and the way out on a
897
+ // row of its own so a long reason cannot crowd it out.
898
+ const reason = (error instanceof Error ? error.message : String(error)).split('\n')[0];
899
+ state.startupFailure = reason;
900
+ state.rows.push({ id: rowIds.value++, kind: 'notice', text: t('startup-open-failed', { backend, err: reason }) });
901
+ state.rows.push({ id: rowIds.value++, kind: 'notice', text: error instanceof StartupOpenError ? error.hint : t('startup-open-failed-hint') });
902
+ state.emit();
903
+ };
904
+ void binding.prepare(adoption, async () => {
905
+ const opened = await startup;
906
+ history = opened.history;
907
+ route = opened.route;
908
+ agentPreset = opened.agentPreset;
909
+ return opened.session;
910
+ }).then(async (candidate) => {
911
+ try {
912
+ const previousCwd = state.cwd;
913
+ binding.adopt(candidate, adoption, (_previous, disposePrevious) => {
914
+ feed.resetProjection();
915
+ if (activityOwned()) {
916
+ activity.reset();
917
+ state.subagentControl = subagentControlFor(candidate);
918
+ }
919
+ state.agentId = candidate.ref.sessionId;
920
+ state.sessionId = candidate.ref.sessionId;
921
+ // A resumed session runs where it was recorded, known only now.
922
+ state.cwd = candidate.cwd;
923
+ state.displayCwd = host.workspaceService.describe(candidate.cwd).description ?? candidate.cwd;
924
+ state.backendCapabilities = snapshotOf(candidate);
925
+ // Route and preset the opener resolved only now; written before the
926
+ // extensions attach, so theirs win.
927
+ if (route !== undefined) {
928
+ state.provider = route.provider;
929
+ state.model = route.model;
930
+ }
931
+ if (agentPreset !== undefined)
932
+ state.agentPreset = agentPreset;
933
+ controls.reset();
934
+ attachOnAdopt(candidate);
935
+ state.ready = true;
936
+ state.startupFailure = undefined;
937
+ feed.bind(history);
938
+ disposePrevious('dispose');
939
+ state.emit();
940
+ });
941
+ if (state.cwd !== previousCwd)
942
+ resetIdeSelection();
943
+ refreshGitBranch();
944
+ scheduleSessionPreload();
945
+ markBoot('startup-adopted');
946
+ }
947
+ catch (error) {
948
+ // The tail segment runs after the open succeeded; its throws take
949
+ // the open-failure funnel below instead of an unhandled rejection.
950
+ // binding.adopt() already revoked a failed transaction (the candidate
951
+ // is closed, the channel released); a throw from before that point
952
+ // still owns a prepared candidate, so hand it back for closing.
953
+ logForDebugging(`channel: startup adoption tail failed (${error instanceof Error ? error.message : String(error)})`);
954
+ try {
955
+ await binding.abandon(candidate);
956
+ }
957
+ catch { /* a failed close must not mask the setup error */ }
958
+ throw error;
959
+ }
960
+ }).catch(onOpenFailed);
961
+ };
824
962
  /** A fresh session in another directory (the session browser's new-session
825
963
  * card, `/workspace`'s handoff): the core `/new` with a target. */
826
964
  const workspaces = createWorkspaceActions(state, {
827
965
  owner,
828
- service: host.workspaceService,
966
+ get service() { return host.workspaceService; },
829
967
  newSession: target => sessionSwitch.newSession(target),
830
968
  refreshGitBranch: () => refreshGitBranch(),
831
969
  notify,
832
970
  });
971
+ /** The actions the core serves itself (read at install time: the
972
+ * completion catalog is the extension's). */
973
+ const coreDelegates = () => ({
974
+ commandCompletions: files.commandCompletions(extension.completions ?? NO_COMPLETION_CATALOG),
975
+ runLocalCommand: local.runLocalCommand,
976
+ loadOlder: local.loadOlder,
977
+ clear: () => {
978
+ local.clear();
979
+ clearedGeneration = state.agentBindingGeneration;
980
+ },
981
+ setActivityFrames: local.setActivityFrames,
982
+ pushLocal: local.pushLocal,
983
+ listFileCandidates: files.listFileCandidates,
984
+ listFiles: files.listFiles,
985
+ doctorInfo: reports.doctorInfo,
986
+ exportSession: reports.exportSession,
987
+ newSession: () => sessionSwitch.newSession(),
988
+ // `/agents` from the event-driven roster (the DSH extension serves its own).
989
+ mcpStatus: () => {
990
+ if (binding.session.capabilities.mcp === undefined)
991
+ return unavailableLines('mcp');
992
+ const fence = mcpFence();
993
+ return controls.mcpReport(fence.session, fence.current) ?? [t('backend-mcp-loading')];
994
+ },
995
+ listSubagents: () => Promise.resolve(binding.session.capabilities.subagents === undefined ? unavailableLines('agents') : activity.listLines()),
996
+ resolveWorkspace: workspaces.resolveWorkspace,
997
+ switchWorkspace: workspaces.switchWorkspace,
998
+ ...sessionActions.delegates,
999
+ });
1000
+ let listedFrom;
1001
+ let listedCwd;
1002
+ const installActions = (replace) => {
1003
+ const listSessions = extension.delegates?.listSessions ?? sessionActions.delegates.listSessions;
1004
+ installChannelActions(actionReadiness, {
1005
+ unavailable,
1006
+ unavailableLines,
1007
+ capability: createCapabilityDelegates({
1008
+ owner,
1009
+ session: () => binding.session,
1010
+ state: () => state,
1011
+ notify,
1012
+ unavailable,
1013
+ unavailableLines,
1014
+ guarded,
1015
+ }),
1016
+ core: coreDelegates(),
1017
+ extension: {
1018
+ ...extension.delegates,
1019
+ listSessions: (onEnriched, onPartial) => {
1020
+ listedFrom = listSessions;
1021
+ listedCwd = state.cwd;
1022
+ return listSessions(onEnriched, onPartial);
1023
+ },
1024
+ },
1025
+ }, replace);
1026
+ };
1027
+ /** The first adoption can install DSH listing actions or change cwd. */
1028
+ const scheduleSessionPreload = () => {
1029
+ if (options.sessionCatalog === undefined && extension.delegates?.listSessions === undefined)
1030
+ return;
1031
+ const preload = setImmediate(() => {
1032
+ releasePreload();
1033
+ const listSessions = extension.delegates?.listSessions ?? sessionActions.delegates.listSessions;
1034
+ if (!owner.current() || (listedFrom === listSessions && listedCwd === state.cwd))
1035
+ return;
1036
+ void state.listSessions().catch(error => {
1037
+ logForDebugging(`session list preload failed: ${error instanceof Error ? error.message : String(error)}`);
1038
+ });
1039
+ });
1040
+ const releasePreload = owner.own(() => clearImmediate(preload));
1041
+ };
1042
+ /** Runs `adoptHook` after the core wrote the session's state, before the
1043
+ * bind; a throw fails the adoption transaction. */
1044
+ const attachOnAdopt = (candidate) => {
1045
+ const hook = adoptHook;
1046
+ if (hook === undefined)
1047
+ return;
1048
+ adoptHook = undefined;
1049
+ const before = extension;
1050
+ adoptWindow = true;
1051
+ try {
1052
+ hook(candidate);
1053
+ }
1054
+ finally {
1055
+ adoptWindow = false;
1056
+ }
1057
+ if (extension === before)
1058
+ return;
1059
+ installActions(true);
1060
+ if (extension.start !== before.start) {
1061
+ extension.start?.before?.();
1062
+ extension.start?.after?.();
1063
+ }
1064
+ };
833
1065
  const refreshGitBranch = createGitBranchRefresher(ctx, {
834
1066
  owner,
835
1067
  state,
@@ -854,9 +1086,9 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
854
1086
  reports,
855
1087
  resetIdeSelection,
856
1088
  refreshGitBranch,
857
- /** Merge an extension's contributions (before `start`). */
1089
+ /** Merge an extension's contributions (before `start`, or in the adoption window). */
858
1090
  extend(next) {
859
- if (started)
1091
+ if (started && !adoptWindow)
860
1092
  throw new Error('dsh-tui: Channel extensions must attach before the channel starts');
861
1093
  extension = {
862
1094
  ...extension,
@@ -864,67 +1096,34 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
864
1096
  delegates: { ...extension.delegates, ...next.delegates },
865
1097
  };
866
1098
  },
1099
+ /** Register (before `start`) the adoption-window hook (see `adoptHook`). */
1100
+ extendOnAdopt(hook) {
1101
+ if (started)
1102
+ throw new Error('dsh-tui: Channel adoption extensions must register before the channel starts');
1103
+ if (adoptHook !== undefined)
1104
+ throw new Error('dsh-tui: Channel adoption extension already registered');
1105
+ adoptHook = hook;
1106
+ },
867
1107
  /** Install the actions, start the runtime, bind the session. */
868
1108
  start() {
869
1109
  if (started)
870
1110
  throw new Error('dsh-tui: Channel already started');
871
1111
  started = true;
872
- const core = {
873
- commandCompletions: files.commandCompletions(extension.completions ?? NO_COMPLETION_CATALOG),
874
- runLocalCommand: local.runLocalCommand,
875
- loadOlder: local.loadOlder,
876
- clear: () => {
877
- local.clear();
878
- clearedGeneration = state.agentBindingGeneration;
879
- },
880
- setActivityFrames: local.setActivityFrames,
881
- pushLocal: local.pushLocal,
882
- listFileCandidates: files.listFileCandidates,
883
- listFiles: files.listFiles,
884
- doctorInfo: reports.doctorInfo,
885
- exportSession: reports.exportSession,
886
- newSession: () => sessionSwitch.newSession(),
887
- // `/agents` from the event-driven roster (the DSH extension serves its own).
888
- mcpStatus: () => {
889
- if (binding.session.capabilities.mcp === undefined)
890
- return unavailableLines('mcp');
891
- const fence = mcpFence();
892
- return controls.mcpReport(fence.session, fence.current) ?? [t('backend-mcp-loading')];
893
- },
894
- listSubagents: () => Promise.resolve(binding.session.capabilities.subagents === undefined ? unavailableLines('agents') : activity.listLines()),
895
- resolveWorkspace: workspaces.resolveWorkspace,
896
- switchWorkspace: workspaces.switchWorkspace,
897
- ...sessionActions.delegates,
898
- };
899
- installChannelActions(actionReadiness, {
900
- unavailable,
901
- unavailableLines,
902
- capability: createCapabilityDelegates({
903
- owner,
904
- session: () => binding.session,
905
- state: () => state,
906
- notify,
907
- unavailable,
908
- unavailableLines,
909
- guarded,
910
- }),
911
- core,
912
- extension: extension.delegates,
913
- });
1112
+ installActions(false);
914
1113
  // Everything below can synchronously invoke external callbacks. It runs
915
1114
  // only after the owner is registered and the complete delegate surface
916
1115
  // is installed; the outer construction transaction rolls every step back.
917
1116
  extension.start?.before?.();
918
- startHostSubscriptions(host, owner, state);
1117
+ startHostSubscriptions(host, owner, state, ctx);
919
1118
  extension.start?.after?.();
920
1119
  // The startup session's history, read ahead of construction, paints
921
1120
  // before any live event (an extension owning the facts replays its own).
922
1121
  feed.bind(extension.bind?.ownsSessionFacts === true ? undefined : options.initialHistory);
923
- // Cordis owns the Channel lifetime. Rebinding handles the common case;
1122
+ scheduleSessionPreload();
1123
+ // The host owns the Channel lifetime. Rebinding handles the common case;
924
1124
  // this effect closes the final timer and releases the DecisionEvents
925
- // dispatch-topology marker when the Channel's context unloads.
926
- const effect = ctx.effect;
927
- effect?.call(ctx, () => () => {
1125
+ // dispatch-topology marker when the host unloads the Channel.
1126
+ ctx.effect?.(() => () => {
928
1127
  // The context owns the complete Channel lifetime. Keep emitter and
929
1128
  // IDE-link teardown in the same finally funnel.
930
1129
  state.releaseContributions();
@@ -932,6 +1131,8 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
932
1131
  refreshGitBranch();
933
1132
  if (extension.bind?.ownsSessionFacts !== true)
934
1133
  state.emit();
1134
+ if (options.startup !== undefined)
1135
+ adoptStartup(options.startup);
935
1136
  return state;
936
1137
  },
937
1138
  };
@@ -7,7 +7,7 @@
7
7
  * own commands join the command list itself (core/session-controls.ts), so
8
8
  * completion lists them like any other entry.
9
9
  */
10
- import type { Context } from '@deepseek-ai/cordis';
10
+ import type { ServiceLookup } from '../channel-host.js';
11
11
  import type { CommandCompletionNode } from '../../../commands.js';
12
12
  import type { ChannelBinding } from '../binding.js';
13
13
  import type { ChannelOwner } from '../owner.js';
@@ -32,10 +32,15 @@ export interface CompletionCatalog {
32
32
  }[];
33
33
  warmEffortLevels(): void;
34
34
  };
35
+ /** `/plugin info <name>`: the bundles the profile added (absent = no service). */
36
+ plugin?: {
37
+ warmPluginNames(): void;
38
+ pluginNames(): readonly CommandCompletionNode[];
39
+ };
35
40
  }
36
41
  /** No argument catalogs: the tree offers its static nodes only. */
37
42
  export declare const NO_COMPLETION_CATALOG: CompletionCatalog;
38
- export declare function createCoreFiles(ctx: Context, deps: {
43
+ export declare function createCoreFiles(ctx: ServiceLookup, deps: {
39
44
  owner: Pick<ChannelOwner, 'current' | 'signal'>;
40
45
  binding: Pick<ChannelBinding, 'capture' | 'isCurrent'>;
41
46
  state: () => ChannelState;
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../src/dsh-adapter/channel/core/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAKnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,IAAI,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACnG,KAAK,EAAE;QACL,cAAc,IAAI,IAAI,CAAA;QACtB,UAAU,IAAI,SAAS,qBAAqB,EAAE,CAAA;QAC9C,iBAAiB,IAAI,IAAI,CAAA;QACzB,aAAa,IAAI,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;QACpG,gBAAgB,IAAI,IAAI,CAAA;KACzB,CAAA;CACF;AAED,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,EAAE,iBASnC,CAAA;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;IAClD,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAA;IAC/C,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,WAAW,CAAC,CAAA;IACtD,KAAK,EAAE,MAAM,YAAY,CAAA;IACzB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,cAAc,CAAC,CAAA;IAClD,sEAAsE;IACtE,aAAa,IAAI,OAAO,CAAA;IACxB,gEAAgE;IAChE,UAAU,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAC7C;sBAIwB,SAAS,GAAG,SAAS;;cAvC1C,CAAC;YAAoB,CAAA;;;IAoDrB,qEAAqE;gCACzC,iBAAiB,GAAG,YAAY,CAAC,oBAAoB,CAAC;EAWrF"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../src/dsh-adapter/channel/core/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAKnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,IAAI,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACnG,KAAK,EAAE;QACL,cAAc,IAAI,IAAI,CAAA;QACtB,UAAU,IAAI,SAAS,qBAAqB,EAAE,CAAA;QAC9C,iBAAiB,IAAI,IAAI,CAAA;QACzB,aAAa,IAAI,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;QACpG,gBAAgB,IAAI,IAAI,CAAA;KACzB,CAAA;IACD,kFAAkF;IAClF,MAAM,CAAC,EAAE;QACP,eAAe,IAAI,IAAI,CAAA;QACvB,WAAW,IAAI,SAAS,qBAAqB,EAAE,CAAA;KAChD,CAAA;CACF;AAED,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,EAAE,iBASnC,CAAA;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE;IACxD,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAA;IAC/C,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,WAAW,CAAC,CAAA;IACtD,KAAK,EAAE,MAAM,YAAY,CAAA;IACzB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,cAAc,CAAC,CAAA;IAClD,sEAAsE;IACtE,aAAa,IAAI,OAAO,CAAA;IACxB,gEAAgE;IAChE,UAAU,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAC7C;sBAIwB,SAAS,GAAG,SAAS;;cA5C9C,CAAA;YAAmB,CAAC;;;IAyDhB,qEAAqE;gCACzC,iBAAiB,GAAG,YAAY,CAAC,oBAAoB,CAAC;EAYrF"}
@@ -39,6 +39,7 @@ export function createCoreFiles(ctx, deps) {
39
39
  workspaceCommands: catalog.workspaceCommands,
40
40
  ...(deps.mcpServers === undefined ? {} : { mcpServers: deps.mcpServers }),
41
41
  model: catalog.model,
42
+ ...(catalog.plugin === undefined ? {} : { plugin: catalog.plugin }),
42
43
  });
43
44
  },
44
45
  };
@@ -6,7 +6,6 @@
6
6
  * changes, and the git-branch breadcrumb. Each lookup degrades when its row
7
7
  * is not mounted, whatever backend serves the session.
8
8
  */
9
- import type { Context } from '@deepseek-ai/cordis';
10
9
  import type { AdapterRuntimeOptions } from '../../../adapter/kernel/runtime.js';
11
10
  import { readGrantStore } from '../../../adapter/standard/grants.js';
12
11
  import { getHostCommandTrees } from '../../command-trees.js';
@@ -15,9 +14,13 @@ import { getHostSceneRuntime } from '../../scenes.js';
15
14
  import { getHostSettingsSections } from '../../settings-sections.js';
16
15
  import { getHostThemes } from '../../themes.js';
17
16
  import { createLocalWorkspaceRuntime, getHostWorkspaceRuntime } from '../../workspaces.js';
17
+ import type { ChannelHost, ServiceLookup } from '../channel-host.js';
18
18
  import type { ChannelOwner } from '../owner.js';
19
19
  import type { ChannelState } from '../types.js';
20
- /** The host services a channel composition resolved at construction. */
20
+ /**
21
+ * The host services a channel composition reads, looked up per read: the
22
+ * profile's `tui*` rows can compose after the mount.
23
+ */
21
24
  export interface CoreHost {
22
25
  readonly adapterRuntime: AdapterRuntimeOptions;
23
26
  readonly themeHost: ReturnType<typeof getHostThemes>;
@@ -36,16 +39,19 @@ export interface CoreHost {
36
39
  * is effectful state, so it is owned at acquisition: a later construction
37
40
  * failure rolls it back.
38
41
  */
39
- export declare function resolveCoreHost(ctx: Context, owner: Pick<ChannelOwner, 'own'>): CoreHost;
40
- /** Re-render on settings-section and plugin-scene changes (owner-scoped). */
41
- export declare function startHostSubscriptions(host: Pick<CoreHost, 'settingsSectionsRuntime' | 'sceneRuntime'>, owner: Pick<ChannelOwner, 'own' | 'current'>, state: Pick<ChannelState, 'pluginScene' | 'emit'>): void;
42
+ export declare function resolveCoreHost(ctx: ChannelHost, owner: Pick<ChannelOwner, 'own'>): CoreHost;
43
+ /**
44
+ * Re-render on settings-section and plugin-scene changes (owner-scoped),
45
+ * re-binding when the host reports a service change.
46
+ */
47
+ export declare function startHostSubscriptions(host: Pick<CoreHost, 'settingsSectionsRuntime' | 'sceneRuntime'>, owner: Pick<ChannelOwner, 'own' | 'current'>, state: Pick<ChannelState, 'pluginScene' | 'emit'>, services?: Pick<ChannelHost, 'watchServices'>): void;
42
48
  /**
43
49
  * Statusline breadcrumb: the current git branch of the session cwd
44
50
  * (best-effort, through the host `shell` service). Re-run when an adoption
45
51
  * lands on a different cwd (/resume, /workspace, issue #96) so the
46
52
  * breadcrumb never shows the previous workspace's branch.
47
53
  */
48
- export declare function createGitBranchRefresher(ctx: Context, deps: {
54
+ export declare function createGitBranchRefresher(ctx: ServiceLookup, deps: {
49
55
  owner: Pick<ChannelOwner, 'current'>;
50
56
  state: Pick<ChannelState, 'cwd' | 'gitBranch' | 'emit'>;
51
57
  /** Record the resolved branch against the bound session (the session