@deepseek-harness-tui/dsh-tui 0.10.0 → 0.10.2

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 (705) hide show
  1. package/README.md +5 -2
  2. package/bin/dsh-tui.js +99 -33
  3. package/cordis.patch.yml +25 -5
  4. package/lib/types/adapter/channel/actions.d.ts +17 -0
  5. package/lib/types/adapter/channel/actions.d.ts.map +1 -0
  6. package/lib/types/adapter/channel/actions.js +28 -0
  7. package/lib/types/adapter/channel/consumer.d.ts +34 -0
  8. package/lib/types/adapter/channel/consumer.d.ts.map +1 -0
  9. package/lib/types/adapter/channel/consumer.js +87 -0
  10. package/lib/types/adapter/channel/features.d.ts +12 -0
  11. package/lib/types/adapter/channel/features.d.ts.map +1 -0
  12. package/lib/types/adapter/channel/features.js +41 -0
  13. package/lib/types/adapter/channel/host-registry.d.ts +40 -0
  14. package/lib/types/adapter/channel/host-registry.d.ts.map +1 -0
  15. package/lib/types/adapter/channel/host-registry.js +120 -0
  16. package/lib/types/adapter/channel/index.d.ts +22 -0
  17. package/lib/types/adapter/channel/index.d.ts.map +1 -0
  18. package/lib/types/adapter/channel/index.js +21 -0
  19. package/lib/types/adapter/channel/internal-token.d.ts +12 -0
  20. package/lib/types/adapter/channel/internal-token.d.ts.map +1 -0
  21. package/lib/types/adapter/channel/internal-token.js +11 -0
  22. package/lib/types/adapter/channel/plugins.d.ts +17 -0
  23. package/lib/types/adapter/channel/plugins.d.ts.map +1 -0
  24. package/lib/types/adapter/channel/plugins.js +47 -0
  25. package/lib/types/adapter/channel/projection.d.ts +15 -0
  26. package/lib/types/adapter/channel/projection.d.ts.map +1 -0
  27. package/lib/types/adapter/channel/projection.js +59 -0
  28. package/lib/types/adapter/channel/provider.d.ts +52 -0
  29. package/lib/types/adapter/channel/provider.d.ts.map +1 -0
  30. package/lib/types/adapter/channel/provider.js +231 -0
  31. package/lib/types/adapter/channel/read-view.d.ts +4 -0
  32. package/lib/types/adapter/channel/read-view.d.ts.map +1 -0
  33. package/lib/types/adapter/channel/read-view.js +132 -0
  34. package/lib/types/adapter/channel/session-projection.d.ts +56 -0
  35. package/lib/types/adapter/channel/session-projection.d.ts.map +1 -0
  36. package/lib/types/adapter/channel/session-projection.js +247 -0
  37. package/lib/types/adapter/channel/state.d.ts +11 -0
  38. package/lib/types/adapter/channel/state.d.ts.map +1 -0
  39. package/lib/types/adapter/channel/state.js +55 -0
  40. package/lib/types/adapter/channel/transcript.d.ts +15 -0
  41. package/lib/types/adapter/channel/transcript.d.ts.map +1 -0
  42. package/lib/types/adapter/channel/transcript.js +22 -0
  43. package/lib/types/adapter/channel/ui-policy.d.ts +106 -0
  44. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -0
  45. package/lib/types/adapter/channel/ui-policy.js +166 -0
  46. package/lib/types/adapter/channel/ui.d.ts +16 -0
  47. package/lib/types/adapter/channel/ui.d.ts.map +1 -0
  48. package/lib/types/adapter/channel/ui.js +168 -0
  49. package/lib/types/adapter/index.d.ts +20 -0
  50. package/lib/types/adapter/index.d.ts.map +1 -0
  51. package/lib/types/adapter/index.js +19 -0
  52. package/lib/types/adapter/kernel/contract-catalog.d.ts +12 -0
  53. package/lib/types/adapter/kernel/contract-catalog.d.ts.map +1 -0
  54. package/lib/types/adapter/kernel/contract-catalog.js +11 -0
  55. package/lib/types/adapter/kernel/diagnostics.d.ts +18 -0
  56. package/lib/types/adapter/kernel/diagnostics.d.ts.map +1 -0
  57. package/lib/types/adapter/kernel/diagnostics.js +16 -0
  58. package/lib/types/adapter/kernel/driver-types.d.ts +16 -0
  59. package/lib/types/adapter/kernel/driver-types.d.ts.map +1 -0
  60. package/lib/types/adapter/kernel/driver-types.js +8 -0
  61. package/lib/types/adapter/kernel/host-facade.d.ts +65 -0
  62. package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -0
  63. package/lib/types/adapter/kernel/host-facade.js +215 -0
  64. package/lib/types/adapter/kernel/host-probe-access.d.ts +71 -0
  65. package/lib/types/adapter/kernel/host-probe-access.d.ts.map +1 -0
  66. package/lib/types/adapter/kernel/host-probe-access.js +121 -0
  67. package/lib/types/adapter/kernel/index.d.ts +20 -0
  68. package/lib/types/adapter/kernel/index.d.ts.map +1 -0
  69. package/lib/types/adapter/kernel/index.js +19 -0
  70. package/lib/types/adapter/kernel/kernel-runtime.d.ts +138 -0
  71. package/lib/types/adapter/kernel/kernel-runtime.d.ts.map +1 -0
  72. package/lib/types/adapter/kernel/kernel-runtime.js +572 -0
  73. package/lib/types/adapter/kernel/ledger.d.ts +55 -0
  74. package/lib/types/adapter/kernel/ledger.d.ts.map +1 -0
  75. package/lib/types/adapter/kernel/ledger.js +33 -0
  76. package/lib/types/adapter/kernel/legacy-facade.d.ts +22 -0
  77. package/lib/types/adapter/kernel/legacy-facade.d.ts.map +1 -0
  78. package/lib/types/adapter/kernel/legacy-facade.js +34 -0
  79. package/lib/types/adapter/kernel/lifecycle.d.ts +38 -0
  80. package/lib/types/adapter/kernel/lifecycle.d.ts.map +1 -0
  81. package/lib/types/adapter/kernel/lifecycle.js +53 -0
  82. package/lib/types/adapter/kernel/replay-isolation.d.ts +27 -0
  83. package/lib/types/adapter/kernel/replay-isolation.d.ts.map +1 -0
  84. package/lib/types/adapter/kernel/replay-isolation.js +45 -0
  85. package/lib/types/adapter/kernel/replay.d.ts +132 -0
  86. package/lib/types/adapter/kernel/replay.d.ts.map +1 -0
  87. package/lib/types/adapter/kernel/replay.js +425 -0
  88. package/lib/types/adapter/kernel/runtime-context.d.ts +15 -0
  89. package/lib/types/adapter/kernel/runtime-context.d.ts.map +1 -0
  90. package/lib/types/adapter/kernel/runtime-context.js +24 -0
  91. package/lib/types/adapter/kernel/runtime.d.ts +70 -0
  92. package/lib/types/adapter/kernel/runtime.d.ts.map +1 -0
  93. package/lib/types/adapter/kernel/runtime.js +325 -0
  94. package/lib/types/adapter/kernel/slices/channel.d.ts +3 -0
  95. package/lib/types/adapter/kernel/slices/channel.d.ts.map +1 -0
  96. package/lib/types/adapter/kernel/slices/channel.js +8 -0
  97. package/lib/types/adapter/kernel/slices/decisions.d.ts +3 -0
  98. package/lib/types/adapter/kernel/slices/decisions.d.ts.map +1 -0
  99. package/lib/types/adapter/kernel/slices/decisions.js +10 -0
  100. package/lib/types/adapter/kernel/slices/extensions.d.ts +8 -0
  101. package/lib/types/adapter/kernel/slices/extensions.d.ts.map +1 -0
  102. package/lib/types/adapter/kernel/slices/extensions.js +43 -0
  103. package/lib/types/adapter/kernel/slices/index.d.ts +19 -0
  104. package/lib/types/adapter/kernel/slices/index.d.ts.map +1 -0
  105. package/lib/types/adapter/kernel/slices/index.js +36 -0
  106. package/lib/types/adapter/kernel/slices/presentation.d.ts +3 -0
  107. package/lib/types/adapter/kernel/slices/presentation.d.ts.map +1 -0
  108. package/lib/types/adapter/kernel/slices/presentation.js +14 -0
  109. package/lib/types/adapter/kernel/slices/scenes.d.ts +3 -0
  110. package/lib/types/adapter/kernel/slices/scenes.d.ts.map +1 -0
  111. package/lib/types/adapter/kernel/slices/scenes.js +14 -0
  112. package/lib/types/adapter/kernel/slices/settings.d.ts +3 -0
  113. package/lib/types/adapter/kernel/slices/settings.d.ts.map +1 -0
  114. package/lib/types/adapter/kernel/slices/settings.js +12 -0
  115. package/lib/types/adapter/kernel/slices/types.d.ts +20 -0
  116. package/lib/types/adapter/kernel/slices/types.d.ts.map +1 -0
  117. package/lib/types/adapter/kernel/slices/types.js +12 -0
  118. package/lib/types/adapter/kernel/slices/workspace.d.ts +3 -0
  119. package/lib/types/adapter/kernel/slices/workspace.d.ts.map +1 -0
  120. package/lib/types/adapter/kernel/slices/workspace.js +15 -0
  121. package/lib/types/adapter/ports/channel-catalog.d.ts +90 -0
  122. package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -0
  123. package/lib/types/adapter/ports/channel-catalog.js +2 -0
  124. package/lib/types/adapter/ports/channel-display.d.ts +90 -0
  125. package/lib/types/adapter/ports/channel-display.d.ts.map +1 -0
  126. package/lib/types/adapter/ports/channel-display.js +2 -0
  127. package/lib/types/adapter/ports/channel-session.d.ts +229 -0
  128. package/lib/types/adapter/ports/channel-session.d.ts.map +1 -0
  129. package/lib/types/adapter/ports/channel-session.js +2 -0
  130. package/lib/types/adapter/ports/channel-settings.d.ts +273 -0
  131. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -0
  132. package/lib/types/adapter/ports/channel-settings.js +1 -0
  133. package/lib/types/adapter/ports/channel-ui.d.ts +569 -0
  134. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -0
  135. package/lib/types/adapter/ports/channel-ui.js +1 -0
  136. package/lib/types/adapter/ports/channel-view.d.ts +609 -0
  137. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -0
  138. package/lib/types/adapter/ports/channel-view.js +2 -0
  139. package/lib/types/adapter/ports/channel-workspace.d.ts +45 -0
  140. package/lib/types/adapter/ports/channel-workspace.d.ts.map +1 -0
  141. package/lib/types/adapter/ports/channel-workspace.js +2 -0
  142. package/lib/types/adapter/ports/channel.d.ts +145 -0
  143. package/lib/types/adapter/ports/channel.d.ts.map +1 -0
  144. package/lib/types/adapter/ports/channel.js +22 -0
  145. package/lib/types/adapter/ports/decisions.d.ts +18 -0
  146. package/lib/types/adapter/ports/decisions.d.ts.map +1 -0
  147. package/lib/types/adapter/ports/decisions.js +9 -0
  148. package/lib/types/adapter/ports/descriptor.d.ts +25 -0
  149. package/lib/types/adapter/ports/descriptor.d.ts.map +1 -0
  150. package/lib/types/adapter/ports/descriptor.js +11 -0
  151. package/lib/types/adapter/ports/extensions.d.ts +86 -0
  152. package/lib/types/adapter/ports/extensions.d.ts.map +1 -0
  153. package/lib/types/adapter/ports/extensions.js +9 -0
  154. package/lib/types/adapter/ports/index.d.ts +23 -0
  155. package/lib/types/adapter/ports/index.d.ts.map +1 -0
  156. package/lib/types/adapter/ports/index.js +14 -0
  157. package/lib/types/adapter/ports/owner.d.ts +19 -0
  158. package/lib/types/adapter/ports/owner.d.ts.map +1 -0
  159. package/lib/types/adapter/ports/owner.js +9 -0
  160. package/lib/types/adapter/ports/presentation.d.ts +81 -0
  161. package/lib/types/adapter/ports/presentation.d.ts.map +1 -0
  162. package/lib/types/adapter/ports/presentation.js +10 -0
  163. package/lib/types/adapter/ports/scenes.d.ts +24 -0
  164. package/lib/types/adapter/ports/scenes.d.ts.map +1 -0
  165. package/lib/types/adapter/ports/scenes.js +8 -0
  166. package/lib/types/adapter/ports/settings.d.ts +44 -0
  167. package/lib/types/adapter/ports/settings.d.ts.map +1 -0
  168. package/lib/types/adapter/ports/settings.js +9 -0
  169. package/lib/types/adapter/ports/workspace.d.ts +60 -0
  170. package/lib/types/adapter/ports/workspace.d.ts.map +1 -0
  171. package/lib/types/adapter/ports/workspace.js +8 -0
  172. package/lib/types/adapter/spec/index.d.ts +11 -0
  173. package/lib/types/adapter/spec/index.d.ts.map +1 -0
  174. package/lib/types/adapter/spec/index.js +10 -0
  175. package/lib/types/adapter/spec/profile.d.ts +10 -0
  176. package/lib/types/adapter/spec/profile.d.ts.map +1 -0
  177. package/lib/types/adapter/spec/profile.js +9 -0
  178. package/lib/types/adapter/spec/protocol-constants.d.ts +60 -0
  179. package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -0
  180. package/lib/types/adapter/spec/protocol-constants.js +129 -0
  181. package/lib/types/adapter/spec/tui-contributions.d.ts +18 -0
  182. package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -0
  183. package/lib/types/adapter/spec/tui-contributions.js +19 -0
  184. package/lib/types/adapter/standard/admission.d.ts +11 -0
  185. package/lib/types/adapter/standard/admission.d.ts.map +1 -0
  186. package/lib/types/adapter/standard/admission.js +10 -0
  187. package/lib/types/adapter/standard/descriptor.d.ts +74 -0
  188. package/lib/types/adapter/standard/descriptor.d.ts.map +1 -0
  189. package/lib/types/adapter/standard/descriptor.js +356 -0
  190. package/lib/types/{dsh-adapter → adapter/standard}/grants.d.ts +8 -3
  191. package/lib/types/adapter/standard/grants.d.ts.map +1 -0
  192. package/lib/types/{dsh-adapter → adapter/standard}/grants.js +14 -8
  193. package/lib/types/adapter/standard/index.d.ts +25 -0
  194. package/lib/types/adapter/standard/index.d.ts.map +1 -0
  195. package/lib/types/adapter/standard/index.js +24 -0
  196. package/lib/types/adapter/standard/negotiate.d.ts.map +1 -0
  197. package/lib/types/{plugin-spec → adapter/standard}/permission-scope.d.ts +3 -8
  198. package/lib/types/adapter/standard/permission-scope.d.ts.map +1 -0
  199. package/lib/types/{plugin-spec → adapter/standard}/permission-scope.js +4 -26
  200. package/lib/types/adapter/standard/protocols.d.ts +12 -0
  201. package/lib/types/adapter/standard/protocols.d.ts.map +1 -0
  202. package/lib/types/adapter/standard/protocols.js +11 -0
  203. package/lib/types/adapter/standard/registry.d.ts.map +1 -0
  204. package/lib/types/{plugin-spec → adapter/standard}/registry.js +3 -15
  205. package/lib/types/adapter/standard/schema-check.d.ts.map +1 -0
  206. package/lib/types/{plugin-spec → adapter/standard}/schema-check.js +4 -2
  207. package/lib/types/adapter/standard/tui-extension.d.ts +25 -0
  208. package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -0
  209. package/lib/types/adapter/standard/tui-extension.js +45 -0
  210. package/lib/types/{plugin-spec → adapter/standard}/types.d.ts +3 -9
  211. package/lib/types/adapter/standard/types.d.ts.map +1 -0
  212. package/lib/types/{plugin-spec → adapter/standard}/validate.d.ts +3 -3
  213. package/lib/types/adapter/standard/validate.d.ts.map +1 -0
  214. package/lib/types/{plugin-spec → adapter/standard}/validate.js +14 -13
  215. package/lib/types/adapter/upstream/channel-driver.d.ts +22 -0
  216. package/lib/types/adapter/upstream/channel-driver.d.ts.map +1 -0
  217. package/lib/types/adapter/upstream/channel-driver.js +424 -0
  218. package/lib/types/adapter/upstream/decisions-driver.d.ts +15 -0
  219. package/lib/types/adapter/upstream/decisions-driver.d.ts.map +1 -0
  220. package/lib/types/adapter/upstream/decisions-driver.js +141 -0
  221. package/lib/types/adapter/upstream/detection.d.ts +26 -0
  222. package/lib/types/adapter/upstream/detection.d.ts.map +1 -0
  223. package/lib/types/adapter/upstream/detection.js +9 -0
  224. package/lib/types/adapter/upstream/driver.d.ts +50 -0
  225. package/lib/types/adapter/upstream/driver.d.ts.map +1 -0
  226. package/lib/types/adapter/upstream/driver.js +8 -0
  227. package/lib/types/adapter/upstream/extensions-driver.d.ts +24 -0
  228. package/lib/types/adapter/upstream/extensions-driver.d.ts.map +1 -0
  229. package/lib/types/adapter/upstream/extensions-driver.js +697 -0
  230. package/lib/types/adapter/upstream/host-descriptor-driver.d.ts +45 -0
  231. package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -0
  232. package/lib/types/adapter/upstream/host-descriptor-driver.js +606 -0
  233. package/lib/types/adapter/upstream/index.d.ts +18 -0
  234. package/lib/types/adapter/upstream/index.d.ts.map +1 -0
  235. package/lib/types/adapter/upstream/index.js +15 -0
  236. package/lib/types/adapter/upstream/presentation-driver.d.ts +17 -0
  237. package/lib/types/adapter/upstream/presentation-driver.d.ts.map +1 -0
  238. package/lib/types/adapter/upstream/presentation-driver.js +129 -0
  239. package/lib/types/adapter/upstream/scenes-driver.d.ts +18 -0
  240. package/lib/types/adapter/upstream/scenes-driver.d.ts.map +1 -0
  241. package/lib/types/adapter/upstream/scenes-driver.js +170 -0
  242. package/lib/types/adapter/upstream/settings-driver.d.ts +20 -0
  243. package/lib/types/adapter/upstream/settings-driver.d.ts.map +1 -0
  244. package/lib/types/adapter/upstream/settings-driver.js +173 -0
  245. package/lib/types/adapter/upstream/workspace-driver.d.ts +19 -0
  246. package/lib/types/adapter/upstream/workspace-driver.d.ts.map +1 -0
  247. package/lib/types/adapter/upstream/workspace-driver.js +190 -0
  248. package/lib/types/api.d.ts +1 -1
  249. package/lib/types/api.d.ts.map +1 -1
  250. package/lib/types/commands.d.ts +2 -41
  251. package/lib/types/commands.d.ts.map +1 -1
  252. package/lib/types/commands.js +1 -1
  253. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  254. package/lib/types/components/Chat/JobCard.js +8 -1
  255. package/lib/types/components/GoalTodoPanel.d.ts +2 -1
  256. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  257. package/lib/types/components/HistorySearchDialog.d.ts.map +1 -1
  258. package/lib/types/components/HistorySearchDialog.js +7 -5
  259. package/lib/types/components/Markdown.d.ts +2 -2
  260. package/lib/types/components/Markdown.d.ts.map +1 -1
  261. package/lib/types/components/Markdown.js +28 -3
  262. package/lib/types/components/MessageList.d.ts.map +1 -1
  263. package/lib/types/components/MessageList.js +46 -17
  264. package/lib/types/components/ModelPicker.d.ts +1 -1
  265. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  266. package/lib/types/components/ModelPicker.js +8 -4
  267. package/lib/types/components/OverlayAbove.d.ts +22 -1
  268. package/lib/types/components/OverlayAbove.d.ts.map +1 -1
  269. package/lib/types/components/OverlayAbove.js +74 -5
  270. package/lib/types/components/PromptInput.d.ts +2 -1
  271. package/lib/types/components/PromptInput.d.ts.map +1 -1
  272. package/lib/types/components/RewindPicker.d.ts.map +1 -1
  273. package/lib/types/components/RewindPicker.js +14 -6
  274. package/lib/types/components/SkillsPicker.d.ts.map +1 -1
  275. package/lib/types/components/SkillsPicker.js +6 -4
  276. package/lib/types/components/Spinner/spinnerMode.d.ts +1 -5
  277. package/lib/types/components/Spinner/spinnerMode.d.ts.map +1 -1
  278. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
  279. package/lib/types/components/StreamingMarkdown.js +61 -9
  280. package/lib/types/components/design-system/ThemedBox.d.ts +4 -2
  281. package/lib/types/components/design-system/ThemedBox.d.ts.map +1 -1
  282. package/lib/types/components/design-system/ThemedBox.js +2 -2
  283. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  284. package/lib/types/components/messages/AssistantToolUseMessage.js +69 -25
  285. package/lib/types/components/overlayBudget.d.ts +39 -0
  286. package/lib/types/components/overlayBudget.d.ts.map +1 -0
  287. package/lib/types/components/overlayBudget.js +43 -0
  288. package/lib/types/deepseekBalance.d.ts +2 -36
  289. package/lib/types/deepseekBalance.d.ts.map +1 -1
  290. package/lib/types/deepseekBalance.js +0 -14
  291. package/lib/types/deepseekPricing.d.ts +2 -1
  292. package/lib/types/deepseekPricing.d.ts.map +1 -1
  293. package/lib/types/deepseekPricing.js +8 -1
  294. package/lib/types/dsh-adapter/approvals.d.ts +11 -1
  295. package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
  296. package/lib/types/dsh-adapter/approvals.js +32 -12
  297. package/lib/types/dsh-adapter/channel/action-readiness.d.ts +20 -0
  298. package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -0
  299. package/lib/types/dsh-adapter/channel/action-readiness.js +83 -0
  300. package/lib/types/dsh-adapter/channel/activity.d.ts +20 -0
  301. package/lib/types/dsh-adapter/channel/activity.d.ts.map +1 -0
  302. package/lib/types/dsh-adapter/channel/activity.js +113 -0
  303. package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts +64 -0
  304. package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts.map +1 -0
  305. package/lib/types/dsh-adapter/channel/agent-view-projection.js +295 -0
  306. package/lib/types/dsh-adapter/channel/background-action.d.ts +41 -0
  307. package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -0
  308. package/lib/types/dsh-adapter/channel/background-action.js +86 -0
  309. package/lib/types/dsh-adapter/channel/binding-events.d.ts +65 -0
  310. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -0
  311. package/lib/types/dsh-adapter/channel/binding-events.js +169 -0
  312. package/lib/types/dsh-adapter/channel/binding.d.ts +41 -0
  313. package/lib/types/dsh-adapter/channel/binding.d.ts.map +1 -0
  314. package/lib/types/dsh-adapter/channel/binding.js +227 -0
  315. package/lib/types/dsh-adapter/channel/command-completions.d.ts +29 -0
  316. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -0
  317. package/lib/types/dsh-adapter/channel/command-completions.js +94 -0
  318. package/lib/types/dsh-adapter/channel/commands.d.ts +8 -0
  319. package/lib/types/dsh-adapter/channel/commands.d.ts.map +1 -0
  320. package/lib/types/dsh-adapter/channel/commands.js +9 -0
  321. package/lib/types/dsh-adapter/channel/compaction.d.ts +19 -0
  322. package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -0
  323. package/lib/types/dsh-adapter/channel/compaction.js +116 -0
  324. package/lib/types/dsh-adapter/channel/composer-images.d.ts +57 -0
  325. package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -0
  326. package/lib/types/dsh-adapter/channel/composer-images.js +217 -0
  327. package/lib/types/dsh-adapter/channel/composer-mentions.d.ts +15 -0
  328. package/lib/types/dsh-adapter/channel/composer-mentions.d.ts.map +1 -0
  329. package/lib/types/dsh-adapter/channel/composer-mentions.js +200 -0
  330. package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +26 -0
  331. package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -0
  332. package/lib/types/dsh-adapter/channel/context-bookkeeping.js +30 -0
  333. package/lib/types/dsh-adapter/channel/decisions.d.ts +19 -0
  334. package/lib/types/dsh-adapter/channel/decisions.d.ts.map +1 -0
  335. package/lib/types/dsh-adapter/channel/decisions.js +90 -0
  336. package/lib/types/dsh-adapter/channel/emitter.d.ts +10 -0
  337. package/lib/types/dsh-adapter/channel/emitter.d.ts.map +1 -0
  338. package/lib/types/dsh-adapter/channel/emitter.js +71 -0
  339. package/lib/types/dsh-adapter/channel/external-commands.d.ts +31 -0
  340. package/lib/types/dsh-adapter/channel/external-commands.d.ts.map +1 -0
  341. package/lib/types/dsh-adapter/channel/external-commands.js +187 -0
  342. package/lib/types/dsh-adapter/channel/file-actions.d.ts +20 -0
  343. package/lib/types/dsh-adapter/channel/file-actions.d.ts.map +1 -0
  344. package/lib/types/dsh-adapter/channel/file-actions.js +45 -0
  345. package/lib/types/dsh-adapter/channel/input-actions.d.ts +13 -0
  346. package/lib/types/dsh-adapter/channel/input-actions.d.ts.map +1 -0
  347. package/lib/types/dsh-adapter/channel/input-actions.js +135 -0
  348. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +37 -0
  349. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -0
  350. package/lib/types/dsh-adapter/channel/input-delivery.js +305 -0
  351. package/lib/types/dsh-adapter/channel/job-projection.d.ts +28 -0
  352. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -0
  353. package/lib/types/dsh-adapter/channel/job-projection.js +150 -0
  354. package/lib/types/dsh-adapter/channel/lifetime-resources.d.ts +9 -0
  355. package/lib/types/dsh-adapter/channel/lifetime-resources.d.ts.map +1 -0
  356. package/lib/types/dsh-adapter/channel/lifetime-resources.js +33 -0
  357. package/lib/types/dsh-adapter/channel/loaded-context.d.ts +40 -0
  358. package/lib/types/dsh-adapter/channel/loaded-context.d.ts.map +1 -0
  359. package/lib/types/dsh-adapter/channel/loaded-context.js +62 -0
  360. package/lib/types/dsh-adapter/channel/local-actions.d.ts +70 -0
  361. package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -0
  362. package/lib/types/dsh-adapter/channel/local-actions.js +108 -0
  363. package/lib/types/dsh-adapter/channel/mentions.d.ts +29 -0
  364. package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -0
  365. package/lib/types/dsh-adapter/channel/mentions.js +235 -0
  366. package/lib/types/dsh-adapter/channel/mode-actions.d.ts +30 -0
  367. package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -0
  368. package/lib/types/dsh-adapter/channel/mode-actions.js +247 -0
  369. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +35 -0
  370. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -0
  371. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +199 -0
  372. package/lib/types/dsh-adapter/channel/mode-permission.d.ts +58 -0
  373. package/lib/types/dsh-adapter/channel/mode-permission.d.ts.map +1 -0
  374. package/lib/types/dsh-adapter/channel/mode-permission.js +240 -0
  375. package/lib/types/dsh-adapter/channel/mode-roster.d.ts +51 -0
  376. package/lib/types/dsh-adapter/channel/mode-roster.d.ts.map +1 -0
  377. package/lib/types/dsh-adapter/channel/mode-roster.js +119 -0
  378. package/lib/types/dsh-adapter/channel/model-actions.d.ts +46 -0
  379. package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -0
  380. package/lib/types/dsh-adapter/channel/model-actions.js +275 -0
  381. package/lib/types/dsh-adapter/channel/model-switch.d.ts +32 -0
  382. package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -0
  383. package/lib/types/dsh-adapter/channel/model-switch.js +98 -0
  384. package/lib/types/dsh-adapter/channel/notifications.d.ts +9 -0
  385. package/lib/types/dsh-adapter/channel/notifications.d.ts.map +1 -0
  386. package/lib/types/dsh-adapter/channel/notifications.js +24 -0
  387. package/lib/types/dsh-adapter/channel/owner.d.ts +18 -0
  388. package/lib/types/dsh-adapter/channel/owner.d.ts.map +1 -0
  389. package/lib/types/dsh-adapter/channel/owner.js +73 -0
  390. package/lib/types/dsh-adapter/channel/paths.d.ts +31 -0
  391. package/lib/types/dsh-adapter/channel/paths.d.ts.map +1 -0
  392. package/lib/types/dsh-adapter/channel/paths.js +147 -0
  393. package/lib/types/dsh-adapter/channel/permissions.d.ts +40 -0
  394. package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -0
  395. package/lib/types/dsh-adapter/channel/permissions.js +187 -0
  396. package/lib/types/dsh-adapter/channel/preferences.d.ts +3 -0
  397. package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -0
  398. package/lib/types/dsh-adapter/channel/preferences.js +103 -0
  399. package/lib/types/dsh-adapter/channel/projection-helpers.d.ts +13 -0
  400. package/lib/types/dsh-adapter/channel/projection-helpers.d.ts.map +1 -0
  401. package/lib/types/dsh-adapter/channel/projection-helpers.js +63 -0
  402. package/lib/types/dsh-adapter/channel/projection.d.ts +40 -0
  403. package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -0
  404. package/lib/types/dsh-adapter/channel/projection.js +1021 -0
  405. package/lib/types/dsh-adapter/channel/reports.d.ts +32 -0
  406. package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -0
  407. package/lib/types/dsh-adapter/channel/reports.js +171 -0
  408. package/lib/types/dsh-adapter/channel/session-actions.d.ts +13 -0
  409. package/lib/types/dsh-adapter/channel/session-actions.d.ts.map +1 -0
  410. package/lib/types/dsh-adapter/channel/session-actions.js +29 -0
  411. package/lib/types/dsh-adapter/channel/session-adoption.d.ts +32 -0
  412. package/lib/types/dsh-adapter/channel/session-adoption.d.ts.map +1 -0
  413. package/lib/types/dsh-adapter/channel/session-adoption.js +35 -0
  414. package/lib/types/dsh-adapter/channel/session-fork.d.ts +19 -0
  415. package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -0
  416. package/lib/types/dsh-adapter/channel/session-fork.js +85 -0
  417. package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +32 -0
  418. package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -0
  419. package/lib/types/dsh-adapter/channel/session-live-adoption.js +62 -0
  420. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +81 -0
  421. package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -0
  422. package/lib/types/dsh-adapter/channel/session-metadata.js +209 -0
  423. package/lib/types/dsh-adapter/channel/session-reset.d.ts +11 -0
  424. package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -0
  425. package/lib/types/dsh-adapter/channel/session-reset.js +44 -0
  426. package/lib/types/dsh-adapter/channel/session-resume.d.ts +56 -0
  427. package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -0
  428. package/lib/types/dsh-adapter/channel/session-resume.js +240 -0
  429. package/lib/types/dsh-adapter/channel/session-rewind.d.ts +19 -0
  430. package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -0
  431. package/lib/types/dsh-adapter/channel/session-rewind.js +128 -0
  432. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts +19 -0
  433. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -0
  434. package/lib/types/dsh-adapter/channel/session-tree-actions.js +138 -0
  435. package/lib/types/dsh-adapter/channel/session-tree.d.ts +10 -0
  436. package/lib/types/dsh-adapter/channel/session-tree.d.ts.map +1 -0
  437. package/lib/types/dsh-adapter/channel/session-tree.js +503 -0
  438. package/lib/types/dsh-adapter/channel/settings-host.d.ts +4 -0
  439. package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -0
  440. package/lib/types/dsh-adapter/channel/settings-host.js +256 -0
  441. package/lib/types/dsh-adapter/channel/skill-catalog.d.ts +33 -0
  442. package/lib/types/dsh-adapter/channel/skill-catalog.d.ts.map +1 -0
  443. package/lib/types/dsh-adapter/channel/skill-catalog.js +215 -0
  444. package/lib/types/dsh-adapter/channel/state.d.ts +46 -0
  445. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -0
  446. package/lib/types/dsh-adapter/channel/state.js +31 -0
  447. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +47 -0
  448. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -0
  449. package/lib/types/dsh-adapter/channel/subagent-projection.js +140 -0
  450. package/lib/types/dsh-adapter/channel/transcript.d.ts +73 -0
  451. package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -0
  452. package/lib/types/dsh-adapter/channel/transcript.js +312 -0
  453. package/lib/types/dsh-adapter/channel/types.d.ts +162 -0
  454. package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -0
  455. package/lib/types/dsh-adapter/channel/types.js +1 -0
  456. package/lib/types/dsh-adapter/channel/usage.d.ts +13 -0
  457. package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -0
  458. package/lib/types/dsh-adapter/channel/usage.js +48 -0
  459. package/lib/types/dsh-adapter/channel/workspace-actions.d.ts +20 -0
  460. package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -0
  461. package/lib/types/dsh-adapter/channel/workspace-actions.js +56 -0
  462. package/lib/types/dsh-adapter/channel-facade-actions.d.ts +25 -0
  463. package/lib/types/dsh-adapter/channel-facade-actions.d.ts.map +1 -0
  464. package/lib/types/dsh-adapter/channel-facade-actions.js +55 -0
  465. package/lib/types/dsh-adapter/channel-scene-outlet.d.ts +6 -0
  466. package/lib/types/dsh-adapter/channel-scene-outlet.d.ts.map +1 -0
  467. package/lib/types/dsh-adapter/channel-scene-outlet.js +13 -0
  468. package/lib/types/dsh-adapter/channel-ui.d.ts +9 -0
  469. package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -0
  470. package/lib/types/dsh-adapter/channel-ui.js +128 -0
  471. package/lib/types/dsh-adapter/channel.d.ts +9 -1525
  472. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  473. package/lib/types/dsh-adapter/channel.js +753 -8145
  474. package/lib/types/dsh-adapter/command-trees.d.ts +1 -0
  475. package/lib/types/dsh-adapter/command-trees.d.ts.map +1 -1
  476. package/lib/types/dsh-adapter/command-trees.js +20 -1
  477. package/lib/types/dsh-adapter/compat/liveSession.d.ts +8 -4
  478. package/lib/types/dsh-adapter/compat/liveSession.d.ts.map +1 -1
  479. package/lib/types/dsh-adapter/compat/liveSession.js +28 -3
  480. package/lib/types/dsh-adapter/compat/persistence.d.ts +21 -0
  481. package/lib/types/dsh-adapter/compat/persistence.d.ts.map +1 -0
  482. package/lib/types/dsh-adapter/compat/persistence.js +17 -0
  483. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +50 -11
  484. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
  485. package/lib/types/dsh-adapter/compat/sessionLog.js +325 -36
  486. package/lib/types/dsh-adapter/component-identity.d.ts +1 -1
  487. package/lib/types/dsh-adapter/component-identity.d.ts.map +1 -1
  488. package/lib/types/dsh-adapter/component-identity.js +1 -1
  489. package/lib/types/dsh-adapter/contract.d.ts +11 -9
  490. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  491. package/lib/types/dsh-adapter/contract.js +19 -12
  492. package/lib/types/dsh-adapter/decision-guard.d.ts +56 -12
  493. package/lib/types/dsh-adapter/decision-guard.d.ts.map +1 -1
  494. package/lib/types/dsh-adapter/decision-guard.js +134 -22
  495. package/lib/types/dsh-adapter/dialogs.d.ts.map +1 -1
  496. package/lib/types/dsh-adapter/dialogs.js +13 -0
  497. package/lib/types/dsh-adapter/effect-ledger.d.ts +5 -0
  498. package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
  499. package/lib/types/dsh-adapter/effect-ledger.js +53 -15
  500. package/lib/types/dsh-adapter/extension-events.d.ts +2 -9
  501. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
  502. package/lib/types/dsh-adapter/extension-events.js +0 -20
  503. package/lib/types/dsh-adapter/extensions.d.ts.map +1 -1
  504. package/lib/types/dsh-adapter/extensions.js +3 -2
  505. package/lib/types/dsh-adapter/host-grants.d.ts +23 -0
  506. package/lib/types/dsh-adapter/host-grants.d.ts.map +1 -0
  507. package/lib/types/dsh-adapter/host-grants.js +45 -0
  508. package/lib/types/dsh-adapter/jobs.d.ts +2 -46
  509. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  510. package/lib/types/dsh-adapter/jobs.js +0 -25
  511. package/lib/types/dsh-adapter/message-observer.d.ts +15 -2
  512. package/lib/types/dsh-adapter/message-observer.d.ts.map +1 -1
  513. package/lib/types/dsh-adapter/message-observer.js +157 -28
  514. package/lib/types/dsh-adapter/plugin-host.d.ts +80 -11
  515. package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
  516. package/lib/types/dsh-adapter/plugin-host.js +438 -41
  517. package/lib/types/dsh-adapter/plugin-storage.d.ts +11 -1
  518. package/lib/types/dsh-adapter/plugin-storage.d.ts.map +1 -1
  519. package/lib/types/dsh-adapter/plugin-storage.js +150 -11
  520. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  521. package/lib/types/dsh-adapter/plugin.js +75 -34
  522. package/lib/types/dsh-adapter/plugins-info.d.ts +2 -2
  523. package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
  524. package/lib/types/dsh-adapter/plugins-info.js +11 -6
  525. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  526. package/lib/types/dsh-adapter/presets.js +3 -2
  527. package/lib/types/dsh-adapter/providerWizard.d.ts +2 -159
  528. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  529. package/lib/types/dsh-adapter/questions.d.ts +8 -0
  530. package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
  531. package/lib/types/dsh-adapter/questions.js +18 -0
  532. package/lib/types/dsh-adapter/recap.d.ts +1 -9
  533. package/lib/types/dsh-adapter/recap.d.ts.map +1 -1
  534. package/lib/types/dsh-adapter/recap.js +0 -14
  535. package/lib/types/dsh-adapter/renderers.d.ts +1 -0
  536. package/lib/types/dsh-adapter/renderers.d.ts.map +1 -1
  537. package/lib/types/dsh-adapter/renderers.js +26 -1
  538. package/lib/types/dsh-adapter/scenes.d.ts +3 -1
  539. package/lib/types/dsh-adapter/scenes.d.ts.map +1 -1
  540. package/lib/types/dsh-adapter/scenes.js +31 -0
  541. package/lib/types/dsh-adapter/sessionTree.d.ts +14 -95
  542. package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -1
  543. package/lib/types/dsh-adapter/sessionTree.js +51 -36
  544. package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
  545. package/lib/types/dsh-adapter/sessions/digest.js +40 -19
  546. package/lib/types/dsh-adapter/sessions/frames.js +2 -0
  547. package/lib/types/dsh-adapter/sessions/index.d.ts +1 -1
  548. package/lib/types/dsh-adapter/sessions/index.d.ts.map +1 -1
  549. package/lib/types/dsh-adapter/sessions/index.js +1 -1
  550. package/lib/types/dsh-adapter/sessions/list.d.ts +23 -0
  551. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
  552. package/lib/types/dsh-adapter/sessions/list.js +28 -17
  553. package/lib/types/dsh-adapter/sessions/store.d.ts +2 -2
  554. package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
  555. package/lib/types/dsh-adapter/sessions/store.js +12 -11
  556. package/lib/types/dsh-adapter/sessions/types.d.ts +4 -128
  557. package/lib/types/dsh-adapter/sessions/types.d.ts.map +1 -1
  558. package/lib/types/dsh-adapter/sessions/types.js +0 -13
  559. package/lib/types/dsh-adapter/settings-sections.d.ts +4 -95
  560. package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
  561. package/lib/types/dsh-adapter/settings-sections.js +50 -13
  562. package/lib/types/dsh-adapter/settingsEditor.d.ts +2 -36
  563. package/lib/types/dsh-adapter/settingsEditor.d.ts.map +1 -1
  564. package/lib/types/dsh-adapter/settingsEditor.js +0 -18
  565. package/lib/types/dsh-adapter/shortcuts.d.ts +5 -0
  566. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
  567. package/lib/types/dsh-adapter/shortcuts.js +49 -0
  568. package/lib/types/dsh-adapter/status.d.ts +5 -0
  569. package/lib/types/dsh-adapter/status.d.ts.map +1 -1
  570. package/lib/types/dsh-adapter/status.js +29 -0
  571. package/lib/types/dsh-adapter/subagents.d.ts +9 -49
  572. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  573. package/lib/types/dsh-adapter/subagents.js +92 -1
  574. package/lib/types/dsh-adapter/themes.d.ts +1 -0
  575. package/lib/types/dsh-adapter/themes.d.ts.map +1 -1
  576. package/lib/types/dsh-adapter/themes.js +29 -0
  577. package/lib/types/dsh-adapter/toast.d.ts +13 -0
  578. package/lib/types/dsh-adapter/toast.d.ts.map +1 -1
  579. package/lib/types/dsh-adapter/toast.js +31 -1
  580. package/lib/types/dsh-adapter/trajectory/aggregate.d.ts +2 -1
  581. package/lib/types/dsh-adapter/trajectory/aggregate.d.ts.map +1 -1
  582. package/lib/types/dsh-adapter/trajectory/aggregate.js +2 -1
  583. package/lib/types/dsh-adapter/trajectory/guards.d.ts +37 -18
  584. package/lib/types/dsh-adapter/trajectory/guards.d.ts.map +1 -1
  585. package/lib/types/dsh-adapter/trajectory/guards.js +43 -5
  586. package/lib/types/dsh-adapter/trajectory/inspect.d.ts +2 -2
  587. package/lib/types/dsh-adapter/trajectory/inspect.d.ts.map +1 -1
  588. package/lib/types/dsh-adapter/trajectory/projection.d.ts +31 -13
  589. package/lib/types/dsh-adapter/trajectory/projection.d.ts.map +1 -1
  590. package/lib/types/dsh-adapter/trajectory/projection.js +71 -14
  591. package/lib/types/dsh-adapter/trajectory/types.d.ts +1 -1
  592. package/lib/types/dsh-adapter/trajectory/types.d.ts.map +1 -1
  593. package/lib/types/dsh-adapter/transcript-images.d.ts +2 -19
  594. package/lib/types/dsh-adapter/transcript-images.d.ts.map +1 -1
  595. package/lib/types/dsh-adapter/workspaces.d.ts +2 -49
  596. package/lib/types/dsh-adapter/workspaces.d.ts.map +1 -1
  597. package/lib/types/dsh-adapter/workspaces.js +23 -3
  598. package/lib/types/i18n.d.ts +19 -7
  599. package/lib/types/i18n.d.ts.map +1 -1
  600. package/lib/types/i18n.js +8 -3
  601. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
  602. package/lib/types/ink/components/ScrollBox.js +30 -33
  603. package/lib/types/ink/dom.d.ts.map +1 -1
  604. package/lib/types/ink/dom.js +32 -64
  605. package/lib/types/ink/get-max-width.d.ts +7 -15
  606. package/lib/types/ink/get-max-width.d.ts.map +1 -1
  607. package/lib/types/ink/get-max-width.js +7 -20
  608. package/lib/types/ink/ink.d.ts +1 -0
  609. package/lib/types/ink/ink.d.ts.map +1 -1
  610. package/lib/types/ink/ink.js +22 -3
  611. package/lib/types/ink/layout/node.d.ts +2 -0
  612. package/lib/types/ink/layout/node.d.ts.map +1 -1
  613. package/lib/types/ink/layout/yoga.d.ts +1 -0
  614. package/lib/types/ink/layout/yoga.d.ts.map +1 -1
  615. package/lib/types/ink/layout/yoga.js +3 -0
  616. package/lib/types/ink/node-cache.d.ts +11 -0
  617. package/lib/types/ink/node-cache.d.ts.map +1 -1
  618. package/lib/types/ink/node-cache.js +3 -0
  619. package/lib/types/ink/output.d.ts +6 -1
  620. package/lib/types/ink/output.d.ts.map +1 -1
  621. package/lib/types/ink/output.js +55 -65
  622. package/lib/types/ink/render-node-to-output.d.ts +24 -1
  623. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  624. package/lib/types/ink/render-node-to-output.js +195 -71
  625. package/lib/types/ink/renderer.d.ts.map +1 -1
  626. package/lib/types/ink/renderer.js +14 -2
  627. package/lib/types/ink/styles.d.ts +12 -0
  628. package/lib/types/ink/styles.d.ts.map +1 -1
  629. package/lib/types/ink/tabstops.d.ts +3 -2
  630. package/lib/types/ink/tabstops.d.ts.map +1 -1
  631. package/lib/types/ink/tabstops.js +5 -4
  632. package/lib/types/ink/wrap-text.js +2 -2
  633. package/lib/types/modelGroups.d.ts +1 -1
  634. package/lib/types/modelGroups.d.ts.map +1 -1
  635. package/lib/types/modelRoute.js +1 -1
  636. package/lib/types/native-ts/yoga-layout/index.d.ts +8 -3
  637. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  638. package/lib/types/native-ts/yoga-layout/index.js +23 -8
  639. package/lib/types/plugin-host.d.ts +3 -4
  640. package/lib/types/plugin-host.d.ts.map +1 -1
  641. package/lib/types/plugin-host.js +8 -6
  642. package/lib/types/screens/AgentView.d.ts +1 -1
  643. package/lib/types/screens/AgentView.d.ts.map +1 -1
  644. package/lib/types/screens/Chat.d.ts +3 -2
  645. package/lib/types/screens/Chat.d.ts.map +1 -1
  646. package/lib/types/screens/Chat.js +91 -17
  647. package/lib/types/screens/SessionBrowser.d.ts +1 -1
  648. package/lib/types/screens/SessionBrowser.d.ts.map +1 -1
  649. package/lib/types/screens/SessionTree.d.ts +1 -1
  650. package/lib/types/screens/SessionTree.d.ts.map +1 -1
  651. package/lib/types/screens/Settings.d.ts +1 -1
  652. package/lib/types/screens/Settings.d.ts.map +1 -1
  653. package/lib/types/screens/StatusLine.d.ts +1 -1
  654. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  655. package/lib/types/screens/StatusLine.js +40 -1
  656. package/lib/types/screens/TrajectoryScene.d.ts +1 -1
  657. package/lib/types/screens/TrajectoryScene.d.ts.map +1 -1
  658. package/lib/types/sessionModes.d.ts +11 -15
  659. package/lib/types/sessionModes.d.ts.map +1 -1
  660. package/lib/types/sessionModes.js +11 -0
  661. package/lib/types/tuiDisplayPrefs.d.ts +2 -68
  662. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  663. package/lib/types/tuiDisplayPrefs.js +5 -1
  664. package/lib/types/utils/credentials.d.ts +13 -0
  665. package/lib/types/utils/credentials.d.ts.map +1 -0
  666. package/lib/types/utils/credentials.js +41 -0
  667. package/lib/types/utils/fileSuggestions.d.ts +2 -9
  668. package/lib/types/utils/fileSuggestions.d.ts.map +1 -1
  669. package/lib/types/utils/fold-long-lines.d.ts +38 -0
  670. package/lib/types/utils/fold-long-lines.d.ts.map +1 -0
  671. package/lib/types/utils/fold-long-lines.js +91 -0
  672. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/pi-ai.d.ts +1 -1
  673. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.js +4 -0
  674. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.js +15 -2
  675. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +10 -10
  676. package/package.json +125 -81
  677. package/presets/liangshen/.dsh-tui-managed.json +1 -1
  678. package/presets/liangshen/agent.cordis.yml +20 -4
  679. package/presets/liangshen/compaction-epoch.mjs +3 -1
  680. package/presets/liangshen/instruction-hint.mjs +2 -1
  681. package/presets/liangshen/session-events.mjs +8 -0
  682. package/lib/types/dsh-adapter/grants.d.ts.map +0 -1
  683. package/lib/types/dsh-adapter/host-descriptor.d.ts +0 -24
  684. package/lib/types/dsh-adapter/host-descriptor.d.ts.map +0 -1
  685. package/lib/types/dsh-adapter/host-descriptor.js +0 -169
  686. package/lib/types/dsh-adapter/plugin-test-utils.d.ts +0 -62
  687. package/lib/types/dsh-adapter/plugin-test-utils.d.ts.map +0 -1
  688. package/lib/types/dsh-adapter/plugin-test-utils.js +0 -61
  689. package/lib/types/plugin-spec/negotiate.d.ts.map +0 -1
  690. package/lib/types/plugin-spec/permission-scope.d.ts.map +0 -1
  691. package/lib/types/plugin-spec/registry.d.ts.map +0 -1
  692. package/lib/types/plugin-spec/schema-check.d.ts.map +0 -1
  693. package/lib/types/plugin-spec/tui-extension.d.ts +0 -16
  694. package/lib/types/plugin-spec/tui-extension.d.ts.map +0 -1
  695. package/lib/types/plugin-spec/tui-extension.js +0 -79
  696. package/lib/types/plugin-spec/types.d.ts.map +0 -1
  697. package/lib/types/plugin-spec/validate.d.ts.map +0 -1
  698. package/lib/types/test-utils.d.ts +0 -2
  699. package/lib/types/test-utils.d.ts.map +0 -1
  700. package/lib/types/test-utils.js +0 -8
  701. /package/lib/types/{plugin-spec → adapter/standard}/negotiate.d.ts +0 -0
  702. /package/lib/types/{plugin-spec → adapter/standard}/negotiate.js +0 -0
  703. /package/lib/types/{plugin-spec → adapter/standard}/registry.d.ts +0 -0
  704. /package/lib/types/{plugin-spec → adapter/standard}/schema-check.d.ts +0 -0
  705. /package/lib/types/{plugin-spec → adapter/standard}/types.js +0 -0
@@ -0,0 +1,135 @@
1
+ import { MessageId } from '@deepseek-ai/dsh-llm';
2
+ import { t } from '../../i18n.js';
3
+ import { touchSession } from '../../sessionHistory.js';
4
+ export function createInputActions(getState, getAgent, owner, input, composer, dispatchUserText, runLocalCommand) {
5
+ return {
6
+ submit(text, images = []) {
7
+ owner.assertActive();
8
+ const state = getState();
9
+ const trimmed = text.trim();
10
+ if (!trimmed)
11
+ return;
12
+ const submittedImages = composer.includeLegacyImageRefs(trimmed, images);
13
+ // Non-UI callers do not pass through PromptInput's admission guard.
14
+ // Shell routes have no image grammar: reject loudly before spawning
15
+ // anything rather than silently ignoring the supplied capabilities.
16
+ if (submittedImages.length > 0 && trimmed.startsWith('!')) {
17
+ state.notify(t('shell-images-unsupported'), { color: 'warning', timeoutMs: 4000 });
18
+ return;
19
+ }
20
+ // Local shell mode: `!cmd` runs locally and only shows the output;
21
+ // `!!cmd` additionally sends the output to the model as a user
22
+ // message wrapped in `<bash-stdout>`.
23
+ if (trimmed.startsWith('!!')) {
24
+ void runLocalCommand(trimmed.slice(2).trim(), true);
25
+ return;
26
+ }
27
+ if (trimmed.startsWith('!')) {
28
+ void runLocalCommand(trimmed.slice(1).trim(), false);
29
+ return;
30
+ }
31
+ // The current session is being used — move it to the MRU front
32
+ // (/resume sorts by last-used).
33
+ touchSession(state.agentId);
34
+ dispatchUserText(trimmed, 'followup', submittedImages);
35
+ },
36
+ /** Steer a message into the RUNNING turn (Codex/pi semantics): it is
37
+ * injected at the next step boundary of the current turn and the agent
38
+ * continues without stopping — faster than followup, never an abort. */
39
+ steer(text, images = []) {
40
+ owner.assertActive();
41
+ const state = getState();
42
+ const trimmed = text.trim();
43
+ if (!trimmed)
44
+ return;
45
+ touchSession(state.agentId);
46
+ // Same tui/input decision pass as submit; the delivery re-validates
47
+ // the live agent after the await. Official dsh-agent rc.6: steer() is
48
+ // synchronous void — the message enters the next-step inbox; a
49
+ // rejected step leaves it parked for the next wake, and the inbox
50
+ // events retire the preview (claimed → turn boundary, discarded →
51
+ // cancel).
52
+ dispatchUserText(trimmed, 'steer', images);
53
+ },
54
+ /** Pull a pending message back out of the inbox (Alt+Up): it returns to
55
+ * the input for editing instead of being delivered. */
56
+ removePending(id) {
57
+ owner.assertActive();
58
+ const state = getState();
59
+ const agent = getAgent();
60
+ const index = state.pending.findIndex(item => item.id === id);
61
+ if (index === -1)
62
+ return false;
63
+ // Official dsh-agent rc.6: withdrawal goes through the agent's inbox
64
+ // projection — `Inbox.remove(messageId)` durably records the
65
+ // cancellation (an `agent/inbox/spliced` session event) and publishes
66
+ // `agent/inbox/discarded`, which retires the preview. Refuse when the
67
+ // message was already claimed (remove returns false) so the UI never
68
+ // pretends a ghost send was pulled back.
69
+ if (!agent.inbox.remove(MessageId(id)))
70
+ return false;
71
+ state.pending = state.pending.filter(item => item.id !== id);
72
+ state.emit();
73
+ return true;
74
+ },
75
+ cancel() {
76
+ owner.assertActive();
77
+ const state = getState();
78
+ const agent = getAgent();
79
+ // Keep the staged queue: an interrupt aborts the running turn but the
80
+ // queued/steered messages are delivered as the next turn (web parity).
81
+ // Cancellation converges asynchronously; ignore a repeated Esc/Ctrl+C
82
+ // until the aborted turn has produced its terminal event. `cancelPending`
83
+ // mirrors that window for the UI, where a repeated press force-exits.
84
+ if (input.cancelInFlight)
85
+ return;
86
+ input.cancelInFlight = true;
87
+ state.cancelPending = true;
88
+ agent.cancel({ kind: 'user' }, { keepInbox: true });
89
+ },
90
+ interruptAndDeliver(inputs) {
91
+ owner.assertActive();
92
+ const state = getState();
93
+ const agent = getAgent();
94
+ const queued = inputs
95
+ .map(input => typeof input === 'string'
96
+ ? { text: input.trim(), images: [] }
97
+ : { text: input.text.trim(), images: [...(input.images ?? [])] })
98
+ .filter(input => input.text !== '');
99
+ if (queued.length === 0)
100
+ return 0;
101
+ // No keepInbox: the parked copies are dropped (their discard events
102
+ // retire the preview), then each message is re-queued as a fresh
103
+ // followup. dsh-agent's cancel-convergence wake latch accepts this
104
+ // wake immediately after cancel and starts it once the aborted turn
105
+ // retires; waiting for whenIdle is unsafe because it also follows
106
+ // replacement work and may never settle. If cancellation is already
107
+ // in flight, keep the existing abort and still replace the pending
108
+ // interrupt delivery; fake/embedded agents may not emit turn/end.
109
+ if (!input.cancelInFlight) {
110
+ input.cancelInFlight = true;
111
+ agent.cancel({ kind: 'user' });
112
+ }
113
+ state.cancelPending = true;
114
+ const token = ++input.interruptSeq;
115
+ const deliver = () => {
116
+ // A second interrupt while the abort is still settling must not
117
+ // double-deliver: only the latest request's re-queue runs.
118
+ if (input.interruptSeq !== token)
119
+ return;
120
+ for (const entry of queued) {
121
+ touchSession(state.agentId);
122
+ // Same tui/input decision pass as a typed submit: Ctrl+Enter must
123
+ // not bypass a plugin's cancel/transform policy, and re-queued
124
+ // texts keep submission order through the one FIFO chain.
125
+ dispatchUserText(entry.text, 'followup', entry.images);
126
+ }
127
+ };
128
+ // Let cancel finish its synchronous inbox bookkeeping before waking.
129
+ // A microtask also coalesces two same-tick interrupts: only the latest
130
+ // token survives, so the user's text is never sent twice.
131
+ queueMicrotask(deliver);
132
+ return queued.length;
133
+ }
134
+ };
135
+ }
@@ -0,0 +1,37 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { Agent } from '@deepseek-ai/dsh-agent';
3
+ import { type UserMessage } from '@deepseek-ai/dsh-llm';
4
+ import { type ComposerImages } from './composer-images.js';
5
+ import type { ChannelOwner } from './owner.js';
6
+ import type { ChannelImageBlock, ChannelState, ComposerImageRef, MentionAttachments, MentionFs, PendingMessage, StagedImageInput } from './types.js';
7
+ /** One submission's enqueue-time world: the session it was typed in, the
8
+ * services that resolve its references, and the capabilities live then. */
9
+ interface UserTextOrigin {
10
+ readonly agent: Agent;
11
+ readonly agentId: string;
12
+ readonly generation: number;
13
+ readonly cwd: string;
14
+ readonly fs: MentionFs | undefined;
15
+ readonly attachments: MentionAttachments | undefined;
16
+ readonly stagedImages: ReadonlyMap<string, ChannelImageBlock['attachment']>;
17
+ }
18
+ /** Input FIFO, staged attachments and decision notice timers share one lifetime. */
19
+ export declare function createInputDelivery(ctx: Context, owner: ChannelOwner, binding: {
20
+ readonly agent: Agent;
21
+ }, state: () => Pick<ChannelState, 'cwd' | 'agentId' | 'agentBindingGeneration'>, notify: ChannelState['notify'], trackPending: (message: {
22
+ id: string;
23
+ text: string;
24
+ images?: readonly ComposerImageRef[];
25
+ }, placement: PendingMessage['placement']) => void, untrackPending: (id: string) => void, composer: ComposerImages): {
26
+ dispatchUserText: (text: string, placement: PendingMessage["placement"], images?: readonly ComposerImageRef[], attach?: UserMessage) => void;
27
+ deliverUserText: (text: string, placement: PendingMessage["placement"], images?: readonly ComposerImageRef[], attach?: UserMessage) => void;
28
+ claimAttachments: (messages: readonly UserMessage[]) => UserMessage[];
29
+ retireAttachment: (messageId: string) => void;
30
+ withDecisionPending: <T>(name: string, pending: Promise<T>, origin?: UserTextOrigin) => Promise<T>;
31
+ clearStagedImages: () => void;
32
+ stageImage: (input: StagedImageInput) => Promise<string>;
33
+ stagedImages: () => ReadonlyMap<string, ChannelImageBlock["attachment"]>;
34
+ composer: ComposerImages;
35
+ };
36
+ export {};
37
+ //# sourceMappingURL=input-delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-delivery.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/input-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAI1E,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB;4EAC4E;AAC5E,UAAU,cAAc;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACpD,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;CAC5E;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,EACrE,KAAK,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,wBAAwB,CAAC,EAC7E,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,YAAY,EAAE,CAAC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,EAAE,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,IAAI,EAC3I,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,EACpC,QAAQ,EAAE,cAAc;6BA4Qf,MAAM,aACD,cAAc,CAAC,WAAW,CAAC,WAC9B,SAAS,gBAAgB,EAAE,WAC1B,WAAW,KACnB,IAAI;4BAcC,MAAM,aACD,cAAc,CAAC,WAAW,CAAC,WAC9B,SAAS,gBAAgB,EAAE,WAC1B,WAAW,KACnB,IAAI;iCA5Q6B,SAAS,WAAW,EAAE,KAAG,WAAW,EAAE;kCAarC,MAAM,KAAG,IAAI;0BAiIrB,CAAC,QAAQ,MAAM,WAAW,OAAO,CAAC,CAAC,CAAC,WAAW,cAAc,KAAG,OAAO,CAAC,CAAC,CAAC;6BAkIzE,IAAI;wBAaZ,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAAC;wBACpC,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;;EAGzE"}
@@ -0,0 +1,305 @@
1
+ import { createUserMessage } from '@deepseek-ai/dsh-llm';
2
+ import { t } from '../../i18n.js';
3
+ import { logForDebugging } from '../../utils/debug.js';
4
+ import { dispatchTuiDecision } from '../extension-events.js';
5
+ import { firstStaleComposerToken, formatMissingReference, orderedComposerImages, } from './composer-images.js';
6
+ import { expandComposerMentions } from './composer-mentions.js';
7
+ import { normalizeInputDecision } from './decisions.js';
8
+ import { mentionAttachments, mentionFs } from './mentions.js';
9
+ /** Input FIFO, staged attachments and decision notice timers share one lifetime. */
10
+ export function createInputDelivery(ctx, owner, binding, state, notify, trackPending, untrackPending, composer) {
11
+ /**
12
+ * `@` file mentions (issue #15): expansion reads files asynchronously, so
13
+ * every user-text delivery (submit / steer / interrupt-requeue) funnels
14
+ * through this chain to keep the send order FIFO.
15
+ */
16
+ let inputChain = Promise.resolve();
17
+ /**
18
+ * Attached-context registry (issue #842): `deliverUserText(..., attach)`
19
+ * records the model-facing companion message under the DELIVERED user
20
+ * message's id. The resident `agent/pre-step` listener below claims an entry
21
+ * exactly once — on the step that admits its user message — and appends it
22
+ * AFTER `next()`'s batch, the same shape and order as dsh-tool-skill's
23
+ * gesture boundary. The map is emptied on claim, on inbox discard and on
24
+ * channel release (owner.own below).
25
+ */
26
+ const attachedByMessageId = new Map();
27
+ /** Claim the batch's registered attachments, deleting each entry so a later
28
+ * step can never append it a second time. */
29
+ const claimAttachments = (messages) => {
30
+ if (attachedByMessageId.size === 0)
31
+ return [];
32
+ const attached = [];
33
+ for (const message of messages) {
34
+ const context = attachedByMessageId.get(message.id);
35
+ if (context === undefined)
36
+ continue;
37
+ attachedByMessageId.delete(message.id);
38
+ attached.push(context);
39
+ }
40
+ return attached;
41
+ };
42
+ /** Drop an attachment whose user message will never be claimed (inbox discard). */
43
+ const retireAttachment = (messageId) => {
44
+ attachedByMessageId.delete(messageId);
45
+ };
46
+ /**
47
+ * Resident `agent/pre-step` listener (D3/D4): `await next()` lets every
48
+ * later transform run first; the waterfall applies AFTER-next transforms in
49
+ * registration order, so registering at channel construction keeps this
50
+ * append LAST (范例: presets/liangshen/instruction-hint.mjs). A rejected
51
+ * step never claims — no context message without its admitted user line —
52
+ * and a released owner returns the decision untouched. One `owner.own`
53
+ * lifetime covers both the subscription and the whole registry (D5).
54
+ */
55
+ const disposePreStep = ctx.on('agent/pre-step', async (_payload, next) => {
56
+ const decision = await next();
57
+ if (decision.kind === 'reject')
58
+ return decision;
59
+ if (!owner.current())
60
+ return decision;
61
+ const attached = claimAttachments(decision.messages);
62
+ if (attached.length === 0)
63
+ return decision;
64
+ return { ...decision, messages: [...decision.messages, ...attached] };
65
+ });
66
+ owner.own(() => {
67
+ disposePreStep();
68
+ attachedByMessageId.clear();
69
+ });
70
+ /** D-6 fence: the submission belongs to the session it was typed in. */
71
+ const current = (origin) => owner.current() && binding.agent === origin.agent && state().agentBindingGeneration === origin.generation;
72
+ /** D-6: bind the submission to the session it was typed in AT ENQUEUE
73
+ * TIME. The FIFO chain may park this task behind a slow predecessor
74
+ * while the user /new's away — capturing the agent at run time would
75
+ * adopt the NEW session as this text's origin and deliver the old
76
+ * conversation's words into it. */
77
+ const captureOrigin = () => ({
78
+ agent: binding.agent,
79
+ agentId: state().agentId,
80
+ generation: state().agentBindingGeneration,
81
+ cwd: state().cwd,
82
+ fs: mentionFs(ctx),
83
+ attachments: mentionAttachments(ctx),
84
+ stagedImages: composer.snapshot(),
85
+ });
86
+ /**
87
+ * Expand the text's `@` mentions and deliver ONE user message: the typed
88
+ * text stays the first content block (the transcript bubble renders it —
89
+ * never the file dump) and each resolved reference appends a model-facing
90
+ * attachment block. The pending preview tracks the typed text.
91
+ */
92
+ const deliverUserText = async (text, placement, images, origin, attach) => {
93
+ const orderedImages = orderedComposerImages(text, images, origin.stagedImages);
94
+ // A `[Image #N]` placeholder whose staging was evicted (FIFO cap) or
95
+ // whose draft capability was lost (history/rewind/session switch) would
96
+ // otherwise ship as plain text with no image attached — warn loudly,
97
+ // deliver unchanged (the text is the user's; rewriting is worse).
98
+ const stale = firstStaleComposerToken(text, orderedImages);
99
+ if (stale !== undefined) {
100
+ notify(t('input-image-token-stale', { token: stale }), { color: 'warning', timeoutMs: 5000 });
101
+ }
102
+ const expansion = await expandComposerMentions(origin.fs, origin.cwd, text, origin.attachments, orderedImages);
103
+ // Mention reads can park for arbitrary I/O. A session switch during that
104
+ // await invalidates the whole submission; neither the old nor the new
105
+ // agent may receive a message assembled for a different conversation.
106
+ if (!current(origin)) {
107
+ notify(t('ext-stale-dropped'), { color: 'warning', timeoutMs: 4000 });
108
+ return;
109
+ }
110
+ const message = createUserMessage({
111
+ content: expansion.blocks,
112
+ source: { kind: 'user' },
113
+ });
114
+ // The message is real from here on: remember its attached context BEFORE
115
+ // the agent call so the pre-step listener can find it (D6). A throwing
116
+ // followup/steer rolls both the pending preview and this entry back.
117
+ if (attach !== undefined)
118
+ attachedByMessageId.set(message.id, attach);
119
+ // Track BEFORE the agent call: a synchronous throw inside
120
+ // followup/steer rolls the preview back; otherwise the inbox events
121
+ // retire it once the message is claimed or discarded.
122
+ trackPending({ id: message.id, text, images }, placement);
123
+ try {
124
+ if (placement === 'steer')
125
+ origin.agent.steer(message);
126
+ else
127
+ origin.agent.followup(message);
128
+ }
129
+ catch (error) {
130
+ if (attach !== undefined)
131
+ attachedByMessageId.delete(message.id);
132
+ untrackPending(message.id);
133
+ throw error;
134
+ }
135
+ if (expansion.attached.length > 0) {
136
+ notify(t('mentions-attached', { count: expansion.attached.length }), { timeoutMs: 2500 });
137
+ }
138
+ if (expansion.missing.length > 0) {
139
+ notify(t('mentions-missing', { paths: expansion.missing.map(formatMissingReference).join(' ') }), {
140
+ color: 'warning',
141
+ timeoutMs: 4000,
142
+ });
143
+ }
144
+ };
145
+ /**
146
+ * RFC 0005 D-8: a flow parked on a plugin decision must be user-observable.
147
+ * Decisions normally resolve in milliseconds, so the notice only fires
148
+ * once the wait crosses a threshold — a slow plugin (e.g. one showing a
149
+ * managed dialog) then explains the pause instead of looking like the TUI
150
+ * ate the input.
151
+ */
152
+ const DECISION_PENDING_MS = 400;
153
+ /**
154
+ * Session-scoped ledger of live pending-decision indicators. A session
155
+ * replacement must cancel the notice timer and dismiss an already-visible
156
+ * sticky notice even when the plugin's decision promise never settles; the
157
+ * owner-scoped release alone would keep it up until channel teardown, and a
158
+ * timer firing after the switch would raise the notice into the session that
159
+ * replaced the one which parked the input (review finding: stale decision
160
+ * notices were no longer dismissed or suppressed on session change).
161
+ */
162
+ const pendingDecisionCleanups = new Set();
163
+ const withDecisionPending = (name, pending, origin) => {
164
+ let dismiss;
165
+ let timer;
166
+ const cleanup = () => {
167
+ if (timer !== undefined) {
168
+ clearTimeout(timer);
169
+ timer = undefined;
170
+ }
171
+ const raised = dismiss;
172
+ dismiss = undefined;
173
+ raised?.();
174
+ pendingDecisionCleanups.delete(cleanup);
175
+ };
176
+ timer = setTimeout(() => {
177
+ // Sticky (timeoutMs 0), D-8: the indicator must cover the WHOLE wait —
178
+ // an auto-expiring notice would vanish after ~4s while the decision,
179
+ // the delivery and every queued FIFO task behind them stay parked,
180
+ // leaving the user with no sign the flow is still waiting. It comes
181
+ // down only when the decision settles (finally below); a decision
182
+ // that never settles keeps its indicator up, which is the truthful
183
+ // state.
184
+ // A notice must never be raised for a session that has already been
185
+ // replaced: the switch drains this ledger, and the origin fence covers
186
+ // a timer that fires before that drain lands.
187
+ if (origin !== undefined && !current(origin)) {
188
+ cleanup();
189
+ return;
190
+ }
191
+ if (!owner.current())
192
+ return;
193
+ dismiss = notify(t('ext-decision-pending', { event: name }), { timeoutMs: 0 });
194
+ }, DECISION_PENDING_MS);
195
+ pendingDecisionCleanups.add(cleanup);
196
+ // Both exits are covered: a fast decision clears the timer before it
197
+ // fires; a slow one dismisses the indicator it raised. The owner release
198
+ // keeps the channel-teardown path working on top of the session drain.
199
+ const release = owner.own(cleanup);
200
+ return pending.finally(release);
201
+ };
202
+ /**
203
+ * The `tui/input` decision event (pi's `input` seam): the FIRST plugin
204
+ * returning a valid decision wins — transform the text, mark it handled,
205
+ * or cancel it. No listeners (or only crashing/malformed ones) means
206
+ * delivery proceeds unchanged, so a broken plugin can never wedge the
207
+ * input path — and can never skip a later veto listener either
208
+ * (dispatchTuiDecision isolates crashes and normalizes returns per
209
+ * listener instead of bailing on the first object).
210
+ *
211
+ * Decision AND delivery enter one FIFO chain in submission order: a slow
212
+ * listener on A parks A's delivery AND any later submissions behind it —
213
+ * without the chain, B's decision could resolve first and the model would
214
+ * receive B before A. Each submission binds its origin agent AT ENQUEUE,
215
+ * so a session switch landing before OR during its decision drops the
216
+ * stale text with a notice instead of sending the old conversation's
217
+ * words to the new session.
218
+ */
219
+ const runUserTextDecision = async (text, placement, images, origin, attach) => {
220
+ // Stale detection compares the AGENT REFERENCE, not the id: session ids
221
+ // are reusable (A → /new → /resume A lands back on the same id with a
222
+ // fresh agent), so an id check has an ABA hole. Both origin values are
223
+ // ENQUEUE-time captures (see dispatchUserText): a decision parked behind
224
+ // a slow predecessor must still be judged against the session its text
225
+ // was typed in, not whichever session is live when it finally runs.
226
+ const dropIfStale = () => {
227
+ if (current(origin))
228
+ return false;
229
+ notify(t('ext-stale-dropped'), { color: 'warning', timeoutMs: 4000 });
230
+ return true;
231
+ };
232
+ // A follower can wait behind an older slow decision while /new replaces
233
+ // the session. Do not even expose that stale text to plugins.
234
+ if (dropIfStale())
235
+ return;
236
+ const decision = await withDecisionPending('tui/input', dispatchTuiDecision(ctx, 'tui/input', {
237
+ text,
238
+ delivery: placement === 'steer' ? 'steer' : 'followup',
239
+ sessionId: origin.agentId,
240
+ cwd: origin.cwd,
241
+ }, normalizeInputDecision), origin);
242
+ // Staleness wins over cancel/handled: an old plugin result must neither
243
+ // toast into nor claim input from the replacement session.
244
+ if (dropIfStale())
245
+ return;
246
+ if (decision !== undefined) {
247
+ // Both intercepts toast — a bare {cancel}/{handled} must not make the
248
+ // typed line vanish silently (the host-localized fallback mirrors the
249
+ // other decision events' ext-action-cancelled handling).
250
+ if ('cancel' in decision) {
251
+ notify(decision.reason ?? t('ext-action-cancelled'), { color: 'warning', timeoutMs: 4000 });
252
+ return;
253
+ }
254
+ if ('handled' in decision) {
255
+ notify(decision.notice ?? t('ext-action-handled'), { timeoutMs: 4000 });
256
+ return;
257
+ }
258
+ text = decision.text.trim();
259
+ }
260
+ try {
261
+ await deliverUserText(text, placement, images, origin, attach);
262
+ }
263
+ catch (error) {
264
+ // The FIFO must survive a failed expansion/send: surface it, then let
265
+ // the next input proceed through the settled inputChain.
266
+ const message = error instanceof Error ? error.message : String(error);
267
+ logForDebugging(`submit: delivery failed (${message})`);
268
+ notify(t('send-failed', { err: message }), { color: 'error' });
269
+ }
270
+ };
271
+ const dispatchUserText = (text, placement, images = [], attach) => {
272
+ const origin = captureOrigin();
273
+ const capturedImages = composer.captureDraftImages(text, images);
274
+ inputChain = inputChain.then(() => runUserTextDecision(text, placement, capturedImages, origin, attach)).catch((error) => {
275
+ // The chain must survive a failed decision: log, then continue with
276
+ // the next queued submission.
277
+ ctx.logger.warn('dsh-tui: tui/input dispatch failed: %o', error);
278
+ });
279
+ };
280
+ /** Public companion for callers that own a line but not a draft (skill
281
+ * registrations): same decision pass and FIFO as a typed submit. The
282
+ * optional `attach` is registered by `deliverUserText` only once its user
283
+ * message is real, then appended at the end of that message's step batch. */
284
+ const deliverUserTextNow = (text, placement, images = [], attach) => dispatchUserText(text, placement, images, attach);
285
+ /** Main's `clearStagedImages`: revoke capabilities AND release the FIFO so
286
+ * a task parked on the replaced session cannot wedge the new one, and drop
287
+ * every pending-decision indicator owned by the session being replaced. */
288
+ const clearStagedImages = () => {
289
+ composer.clearStagedImages();
290
+ inputChain = Promise.resolve();
291
+ for (const cleanup of [...pendingDecisionCleanups])
292
+ cleanup();
293
+ };
294
+ return {
295
+ dispatchUserText,
296
+ deliverUserText: deliverUserTextNow,
297
+ claimAttachments,
298
+ retireAttachment,
299
+ withDecisionPending,
300
+ clearStagedImages,
301
+ stageImage: (input) => composer.stageImage(input),
302
+ stagedImages: () => composer.snapshot(),
303
+ composer,
304
+ };
305
+ }
@@ -0,0 +1,28 @@
1
+ import type { Agent } from '@deepseek-ai/dsh-agent';
2
+ import { BackgroundJobStore, type JobsRuntime } from '../jobs.js';
3
+ import type { ChannelOwner } from './owner.js';
4
+ import type { ChannelState, JobControl } from './types.js';
5
+ /**
6
+ * Current-binding background-job projection. The registry can publish every
7
+ * owner's changes, so callbacks must prove their attachment and Channel owner
8
+ * are still current before they read a service or mutate projected rows.
9
+ */
10
+ export declare function createJobProjection(getState: () => Pick<ChannelState, 'backgroundJobs' | 'rows' | 'emit'>, deps: {
11
+ owner: Pick<ChannelOwner, 'current' | 'own'>;
12
+ notify(text: string, options?: {
13
+ color?: 'success' | 'error' | 'warning';
14
+ timeoutMs?: number;
15
+ }): unknown;
16
+ rowIds: {
17
+ value: number;
18
+ };
19
+ agent(): Agent;
20
+ steer(text: string): void;
21
+ }): {
22
+ store: BackgroundJobStore;
23
+ control: JobControl;
24
+ attach: (jobs: JobsRuntime | undefined, ownService?: (dispose: () => void) => void) => void;
25
+ dropRows: () => void;
26
+ reset: () => void;
27
+ };
28
+ //# sourceMappingURL=job-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-projection.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/job-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAGnD,OAAO,EAAE,kBAAkB,EAAqB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAW,UAAU,EAAE,MAAM,YAAY,CAAA;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC,EACtE,IAAI,EAAE;IACJ,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,KAAK,CAAC,CAAA;IAC5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAA;IACxG,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACzB,KAAK,IAAI,KAAK,CAAA;IACd,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;;;mBA4EqB,WAAW,GAAG,SAAS,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,KAAG,IAAI;oBAwD3E,IAAI;iBACP,IAAI;EAGvB"}
@@ -0,0 +1,150 @@
1
+ import { markChannelReadDirty } from '../../adapter/channel/read-view.js';
2
+ import { t } from '../../i18n.js';
3
+ import { BackgroundJobStore, formatJobDuration } from '../jobs.js';
4
+ /**
5
+ * Current-binding background-job projection. The registry can publish every
6
+ * owner's changes, so callbacks must prove their attachment and Channel owner
7
+ * are still current before they read a service or mutate projected rows.
8
+ */
9
+ export function createJobProjection(getState, deps) {
10
+ const jobRowsByJobId = new Map();
11
+ let jobsRuntime;
12
+ let detachActive;
13
+ let attachmentToken;
14
+ let attachmentCurrent = () => false;
15
+ const syncRows = () => {
16
+ if (!attachmentCurrent())
17
+ return;
18
+ const state = getState();
19
+ state.backgroundJobs = store.snapshot();
20
+ for (const job of state.backgroundJobs) {
21
+ let row = jobRowsByJobId.get(job.id);
22
+ if (!row) {
23
+ row = { id: deps.rowIds.value++, kind: 'job', text: job.label, job: undefined };
24
+ jobRowsByJobId.set(job.id, row);
25
+ state.rows.push(row);
26
+ }
27
+ row.job = {
28
+ id: job.id,
29
+ kind: job.kind,
30
+ label: job.label,
31
+ status: job.status,
32
+ ...(job.detail === undefined ? {} : { detail: job.detail }),
33
+ startedAt: job.startedAt,
34
+ ...(job.finishedAt === undefined ? {} : { finishedAt: job.finishedAt }),
35
+ outputLines: job.outputLines,
36
+ };
37
+ row.text = job.label;
38
+ markChannelReadDirty(row);
39
+ markChannelReadDirty(state.rows);
40
+ }
41
+ };
42
+ const store = new BackgroundJobStore({
43
+ onSettled(job) {
44
+ deps.notify(t(job.status === 'completed' ? 'jobs-toast-completed' : job.status === 'failed' ? 'jobs-toast-failed' : 'jobs-toast-killed', {
45
+ id: job.id,
46
+ label: job.label,
47
+ duration: formatJobDuration(job),
48
+ detail: job.detail ?? '',
49
+ }), { color: job.status === 'completed' ? 'success' : job.status === 'failed' ? 'error' : 'warning', timeoutMs: 6000 });
50
+ },
51
+ onChanged() {
52
+ if (!attachmentCurrent())
53
+ return;
54
+ syncRows();
55
+ if (attachmentCurrent())
56
+ getState().emit();
57
+ },
58
+ });
59
+ const control = {
60
+ kill(id) {
61
+ const jobs = jobsRuntime;
62
+ if (!jobs?.kill)
63
+ return false;
64
+ const job = store.get(id);
65
+ try {
66
+ jobs.kill(id, deps.agent(), 'dsh-tui /jobs panel');
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ if (job !== undefined && (job.status === 'running' || job.status === 'stopping')) {
72
+ deps.steer(t('jobs-steer-killed', { id, label: job.label }));
73
+ }
74
+ return true;
75
+ },
76
+ };
77
+ /**
78
+ * Each service attachment has one idempotent disposer, dual-owned by the
79
+ * Channel and (when injected) the service context. Reattachment revokes the
80
+ * prior token before the replacement may synchronously publish.
81
+ */
82
+ const attach = (jobs, ownService) => {
83
+ if (jobs === undefined)
84
+ return;
85
+ detachActive?.();
86
+ jobsRuntime = jobs;
87
+ const token = Symbol('jobs-attachment');
88
+ let detached = false;
89
+ let detach;
90
+ const current = () => !detached && attachmentToken === token && detachActive === detach && jobsRuntime === jobs && deps.owner.current();
91
+ const refresh = () => {
92
+ // Check before list(): retained callbacks must not touch a revoked or
93
+ // replaced service, nor invoke any store/row work after owner disposal.
94
+ if (!current())
95
+ return;
96
+ try {
97
+ const snapshot = jobs.list(deps.agent());
98
+ if (!current())
99
+ return;
100
+ store.replace(snapshot);
101
+ }
102
+ catch { /* optional service is disposing */ }
103
+ };
104
+ // Publish the attachment identity before subscription: registries are
105
+ // allowed to synchronously deliver their current snapshot from on*().
106
+ // Every registration below is transactional because a second on*() can
107
+ // throw after the first one successfully subscribed.
108
+ const disposers = [];
109
+ let releaseOwner;
110
+ detach = () => {
111
+ if (detached)
112
+ return;
113
+ detached = true;
114
+ if (detachActive === detach) {
115
+ detachActive = undefined;
116
+ attachmentToken = undefined;
117
+ attachmentCurrent = () => false;
118
+ }
119
+ if (jobsRuntime === jobs)
120
+ jobsRuntime = undefined;
121
+ for (const dispose of disposers.splice(0))
122
+ dispose?.();
123
+ // A service-context detach happens before channel teardown on remount;
124
+ // release its Channel owner entry now rather than retaining one cleanup
125
+ // per remount until the entire channel exits.
126
+ const release = releaseOwner;
127
+ releaseOwner = undefined;
128
+ release?.();
129
+ };
130
+ detachActive = detach;
131
+ attachmentToken = token;
132
+ attachmentCurrent = current;
133
+ try {
134
+ if (typeof jobs.onJobsChanged === 'function')
135
+ disposers.push(jobs.onJobsChanged(refresh));
136
+ if (typeof jobs.onJobDone === 'function')
137
+ disposers.push(jobs.onJobDone(refresh));
138
+ releaseOwner = deps.owner.own(detach);
139
+ ownService?.(detach);
140
+ refresh();
141
+ }
142
+ catch (error) {
143
+ detach();
144
+ throw error;
145
+ }
146
+ };
147
+ const dropRows = () => { jobRowsByJobId.clear(); };
148
+ const reset = () => { dropRows(); store.reset(); };
149
+ return { store, control, attach, dropRows, reset };
150
+ }