@deepseek-harness-tui/dsh-tui 0.11.0 → 0.11.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 (484) hide show
  1. package/README.md +55 -20
  2. package/assets/whale-girl/whale-girl-dark.png +0 -0
  3. package/assets/whale-girl/whale-girl-happy.png +0 -0
  4. package/assets/whale-girl/whale-girl.png +0 -0
  5. package/bin/dsh-tui.js +63 -3
  6. package/cordis.patch.yml +43 -20
  7. package/cordis.yml +6 -4
  8. package/lib/settings.json +1272 -0
  9. package/lib/types/activityPrefs.d.ts +24 -0
  10. package/lib/types/activityPrefs.d.ts.map +1 -1
  11. package/lib/types/activityPrefs.js +50 -1
  12. package/lib/types/adapter/channel/state.d.ts.map +1 -1
  13. package/lib/types/adapter/channel/state.js +3 -1
  14. package/lib/types/adapter/channel/ui-policy.d.ts +9 -2
  15. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  16. package/lib/types/adapter/channel/ui-policy.js +14 -1
  17. package/lib/types/adapter/kernel/replay.d.ts.map +1 -1
  18. package/lib/types/adapter/kernel/replay.js +2 -0
  19. package/lib/types/adapter/ports/channel-display.d.ts +12 -0
  20. package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
  21. package/lib/types/adapter/ports/channel-session.d.ts +38 -0
  22. package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
  23. package/lib/types/adapter/ports/channel-settings.d.ts +12 -0
  24. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  25. package/lib/types/adapter/ports/channel-ui.d.ts +53 -7
  26. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  27. package/lib/types/adapter/ports/channel-view.d.ts +43 -12
  28. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  29. package/lib/types/adapter/ports/channel.d.ts +4 -1
  30. package/lib/types/adapter/ports/channel.d.ts.map +1 -1
  31. package/lib/types/commands.d.ts.map +1 -1
  32. package/lib/types/commands.js +2 -0
  33. package/lib/types/components/ActivityLine.d.ts +7 -2
  34. package/lib/types/components/ActivityLine.d.ts.map +1 -1
  35. package/lib/types/components/ActivityLine.js +0 -8
  36. package/lib/types/components/BalanceReportRow.d.ts +10 -2
  37. package/lib/types/components/BalanceReportRow.d.ts.map +1 -1
  38. package/lib/types/components/BalanceReportRow.js +18 -4
  39. package/lib/types/components/CompactionStatusRow.d.ts +24 -0
  40. package/lib/types/components/CompactionStatusRow.d.ts.map +1 -0
  41. package/lib/types/components/CompactionStatusRow.js +72 -0
  42. package/lib/types/components/GoalTodoPanel.js +2 -2
  43. package/lib/types/components/HelpMenu.d.ts +2 -2
  44. package/lib/types/components/HelpMenu.d.ts.map +1 -1
  45. package/lib/types/components/HelpMenu.js +5 -4
  46. package/lib/types/components/InlineMathParagraph.d.ts +22 -0
  47. package/lib/types/components/InlineMathParagraph.d.ts.map +1 -0
  48. package/lib/types/components/InlineMathParagraph.js +178 -0
  49. package/lib/types/components/LogoV2.d.ts +41 -3
  50. package/lib/types/components/LogoV2.d.ts.map +1 -1
  51. package/lib/types/components/LogoV2.js +148 -24
  52. package/lib/types/components/Markdown.d.ts +10 -3
  53. package/lib/types/components/Markdown.d.ts.map +1 -1
  54. package/lib/types/components/Markdown.js +47 -14
  55. package/lib/types/components/MathBlock.d.ts +13 -0
  56. package/lib/types/components/MathBlock.d.ts.map +1 -0
  57. package/lib/types/components/MathBlock.js +136 -0
  58. package/lib/types/components/MessageList.d.ts +10 -1
  59. package/lib/types/components/MessageList.d.ts.map +1 -1
  60. package/lib/types/components/MessageList.js +15 -5
  61. package/lib/types/components/MigratePicker.d.ts +30 -0
  62. package/lib/types/components/MigratePicker.d.ts.map +1 -0
  63. package/lib/types/components/MigratePicker.js +38 -0
  64. package/lib/types/components/PromptInput.d.ts +17 -0
  65. package/lib/types/components/PromptInput.d.ts.map +1 -1
  66. package/lib/types/components/PromptInput.js +96 -9
  67. package/lib/types/components/SplitDiffView.d.ts.map +1 -1
  68. package/lib/types/components/SplitDiffView.js +3 -1
  69. package/lib/types/components/StarPrompt.d.ts +53 -0
  70. package/lib/types/components/StarPrompt.d.ts.map +1 -0
  71. package/lib/types/components/StarPrompt.js +281 -0
  72. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
  73. package/lib/types/components/StreamingMarkdown.js +20 -3
  74. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  75. package/lib/types/components/SubagentCard.js +12 -6
  76. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
  77. package/lib/types/components/SubagentDetailScene.js +8 -3
  78. package/lib/types/components/TimelineRail.d.ts.map +1 -1
  79. package/lib/types/components/TimelineRail.js +9 -1
  80. package/lib/types/components/Whale.d.ts +17 -8
  81. package/lib/types/components/Whale.d.ts.map +1 -1
  82. package/lib/types/components/Whale.js +25 -15
  83. package/lib/types/components/WhaleGirl.d.ts +29 -0
  84. package/lib/types/components/WhaleGirl.d.ts.map +1 -0
  85. package/lib/types/components/WhaleGirl.js +32 -0
  86. package/lib/types/components/WorkingSpinner.d.ts +4 -1
  87. package/lib/types/components/WorkingSpinner.d.ts.map +1 -1
  88. package/lib/types/components/WorkingSpinner.js +2 -2
  89. package/lib/types/components/bigfont.d.ts +47 -18
  90. package/lib/types/components/bigfont.d.ts.map +1 -1
  91. package/lib/types/components/bigfont.js +55 -40
  92. package/lib/types/components/design-system/HintLine.d.ts +1 -2
  93. package/lib/types/components/design-system/HintLine.d.ts.map +1 -1
  94. package/lib/types/components/design-system/HintLine.js +1 -2
  95. package/lib/types/components/design-system/ThemeProvider.d.ts +6 -0
  96. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  97. package/lib/types/components/design-system/ThemeProvider.js +40 -1
  98. package/lib/types/components/maidPortrait.d.ts +44 -0
  99. package/lib/types/components/maidPortrait.d.ts.map +1 -0
  100. package/lib/types/components/maidPortrait.js +178 -0
  101. package/lib/types/components/mathPreview.d.ts +25 -0
  102. package/lib/types/components/mathPreview.d.ts.map +1 -0
  103. package/lib/types/components/mathPreview.js +48 -0
  104. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +2 -1
  105. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  106. package/lib/types/components/messages/AssistantThinkingMessage.js +4 -2
  107. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +2 -2
  108. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  109. package/lib/types/components/messages/AssistantToolUseMessage.js +31 -26
  110. package/lib/types/components/messages/TranscriptImages.d.ts.map +1 -1
  111. package/lib/types/components/messages/TranscriptImages.js +11 -1
  112. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +14 -2
  113. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  114. package/lib/types/components/questions/AskUserQuestionPanel.js +80 -38
  115. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  116. package/lib/types/components/questions/PlanReviewPanel.js +3 -3
  117. package/lib/types/components/sessions/ForeignSessionRow.d.ts +34 -0
  118. package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -0
  119. package/lib/types/components/sessions/ForeignSessionRow.js +43 -0
  120. package/lib/types/components/sessions/SourceTabs.d.ts +52 -0
  121. package/lib/types/components/sessions/SourceTabs.d.ts.map +1 -0
  122. package/lib/types/components/sessions/SourceTabs.js +70 -0
  123. package/lib/types/components/splashEggs.d.ts +56 -0
  124. package/lib/types/components/splashEggs.d.ts.map +1 -0
  125. package/lib/types/components/splashEggs.js +67 -0
  126. package/lib/types/components/splashFonts.d.ts +119 -0
  127. package/lib/types/components/splashFonts.d.ts.map +1 -0
  128. package/lib/types/components/splashFonts.js +267 -0
  129. package/lib/types/components/splashLayout.d.ts +41 -0
  130. package/lib/types/components/splashLayout.d.ts.map +1 -0
  131. package/lib/types/components/splashLayout.js +40 -0
  132. package/lib/types/components/whaleGirlSprite.d.ts +17 -0
  133. package/lib/types/components/whaleGirlSprite.d.ts.map +1 -0
  134. package/lib/types/components/whaleGirlSprite.js +47 -0
  135. package/lib/types/deepseekPricing.d.ts +74 -0
  136. package/lib/types/deepseekPricing.d.ts.map +1 -1
  137. package/lib/types/deepseekPricing.js +110 -11
  138. package/lib/types/dsh-adapter/activity-store.d.ts +221 -0
  139. package/lib/types/dsh-adapter/activity-store.d.ts.map +1 -0
  140. package/lib/types/dsh-adapter/activity-store.js +359 -0
  141. package/lib/types/dsh-adapter/channel/action-readiness.d.ts +1 -1
  142. package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
  143. package/lib/types/dsh-adapter/channel/action-readiness.js +6 -1
  144. package/lib/types/dsh-adapter/channel/background-action.d.ts +2 -1
  145. package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
  146. package/lib/types/dsh-adapter/channel/background-action.js +2 -0
  147. package/lib/types/dsh-adapter/channel/binding-events.d.ts +15 -14
  148. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  149. package/lib/types/dsh-adapter/channel/binding-events.js +70 -21
  150. package/lib/types/dsh-adapter/channel/compaction.d.ts +2 -2
  151. package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
  152. package/lib/types/dsh-adapter/channel/compaction.js +35 -4
  153. package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
  154. package/lib/types/dsh-adapter/channel/local-actions.js +6 -1
  155. package/lib/types/dsh-adapter/channel/model-switch.d.ts +1 -2
  156. package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
  157. package/lib/types/dsh-adapter/channel/model-switch.js +6 -2
  158. package/lib/types/dsh-adapter/channel/paths.d.ts.map +1 -1
  159. package/lib/types/dsh-adapter/channel/paths.js +7 -1
  160. package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
  161. package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
  162. package/lib/types/dsh-adapter/channel/preferences.js +16 -0
  163. package/lib/types/dsh-adapter/channel/projection.d.ts +1 -2
  164. package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
  165. package/lib/types/dsh-adapter/channel/projection.js +127 -17
  166. package/lib/types/dsh-adapter/channel/question-record.d.ts +76 -0
  167. package/lib/types/dsh-adapter/channel/question-record.d.ts.map +1 -0
  168. package/lib/types/dsh-adapter/channel/question-record.js +107 -0
  169. package/lib/types/dsh-adapter/channel/session-adoption.d.ts +1 -1
  170. package/lib/types/dsh-adapter/channel/session-adoption.d.ts.map +1 -1
  171. package/lib/types/dsh-adapter/channel/session-adoption.js +1 -0
  172. package/lib/types/dsh-adapter/channel/session-lineage.d.ts +42 -0
  173. package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +1 -0
  174. package/lib/types/dsh-adapter/channel/session-lineage.js +51 -0
  175. package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +3 -1
  176. package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -1
  177. package/lib/types/dsh-adapter/channel/session-live-adoption.js +10 -3
  178. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +2 -1
  179. package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
  180. package/lib/types/dsh-adapter/channel/session-metadata.js +43 -9
  181. package/lib/types/dsh-adapter/channel/session-reset.d.ts +1 -1
  182. package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
  183. package/lib/types/dsh-adapter/channel/session-reset.js +7 -1
  184. package/lib/types/dsh-adapter/channel/session-resume.d.ts +2 -1
  185. package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
  186. package/lib/types/dsh-adapter/channel/session-resume.js +5 -2
  187. package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
  188. package/lib/types/dsh-adapter/channel/settings-host.js +8 -0
  189. package/lib/types/dsh-adapter/channel/state.d.ts +19 -1
  190. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  191. package/lib/types/dsh-adapter/channel/state.js +8 -3
  192. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +32 -17
  193. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  194. package/lib/types/dsh-adapter/channel/subagent-projection.js +309 -8
  195. package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
  196. package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
  197. package/lib/types/dsh-adapter/channel.d.ts +1 -1
  198. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  199. package/lib/types/dsh-adapter/channel.js +34 -18
  200. package/lib/types/dsh-adapter/compat/index.d.ts +1 -1
  201. package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
  202. package/lib/types/dsh-adapter/compat/index.js +1 -1
  203. package/lib/types/dsh-adapter/compat/messages.d.ts +6 -0
  204. package/lib/types/dsh-adapter/compat/messages.d.ts.map +1 -1
  205. package/lib/types/dsh-adapter/compat/messages.js +9 -0
  206. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +18 -0
  207. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
  208. package/lib/types/dsh-adapter/compat/sessionLog.js +18 -3
  209. package/lib/types/dsh-adapter/compat/settings.d.ts +2 -0
  210. package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -1
  211. package/lib/types/dsh-adapter/compat/settings.js +14 -0
  212. package/lib/types/dsh-adapter/contract.d.ts +5 -4
  213. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  214. package/lib/types/dsh-adapter/contract.js +9 -5
  215. package/lib/types/dsh-adapter/index.d.ts +36 -1
  216. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  217. package/lib/types/dsh-adapter/index.js +22 -6
  218. package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts +3 -0
  219. package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts.map +1 -0
  220. package/lib/types/dsh-adapter/migrate/adapters/claude-code.js +131 -0
  221. package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts +17 -0
  222. package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts.map +1 -0
  223. package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.js +329 -0
  224. package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts +3 -0
  225. package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts.map +1 -0
  226. package/lib/types/dsh-adapter/migrate/adapters/codex.js +102 -0
  227. package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts +16 -0
  228. package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts.map +1 -0
  229. package/lib/types/dsh-adapter/migrate/adapters/codex.parse.js +289 -0
  230. package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts +3 -0
  231. package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts.map +1 -0
  232. package/lib/types/dsh-adapter/migrate/adapters/grok-build.js +117 -0
  233. package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts +13 -0
  234. package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts.map +1 -0
  235. package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.js +178 -0
  236. package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts +3 -0
  237. package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts.map +1 -0
  238. package/lib/types/dsh-adapter/migrate/adapters/omp.js +133 -0
  239. package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts +60 -0
  240. package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts.map +1 -0
  241. package/lib/types/dsh-adapter/migrate/adapters/scan-fs.js +178 -0
  242. package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts +8 -0
  243. package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts.map +1 -0
  244. package/lib/types/dsh-adapter/migrate/adapters/scan.js +40 -0
  245. package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts +3 -0
  246. package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts.map +1 -0
  247. package/lib/types/dsh-adapter/migrate/adapters/zcode.js +93 -0
  248. package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts +9 -0
  249. package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts.map +1 -0
  250. package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.js +89 -0
  251. package/lib/types/dsh-adapter/migrate/bin-path.d.ts +6 -0
  252. package/lib/types/dsh-adapter/migrate/bin-path.d.ts.map +1 -0
  253. package/lib/types/dsh-adapter/migrate/bin-path.js +30 -0
  254. package/lib/types/dsh-adapter/migrate/browse.d.ts +42 -0
  255. package/lib/types/dsh-adapter/migrate/browse.d.ts.map +1 -0
  256. package/lib/types/dsh-adapter/migrate/browse.js +90 -0
  257. package/lib/types/dsh-adapter/migrate/cli.d.ts +9 -0
  258. package/lib/types/dsh-adapter/migrate/cli.d.ts.map +1 -0
  259. package/lib/types/dsh-adapter/migrate/cli.js +106 -0
  260. package/lib/types/dsh-adapter/migrate/import-one.d.ts +89 -0
  261. package/lib/types/dsh-adapter/migrate/import-one.d.ts.map +1 -0
  262. package/lib/types/dsh-adapter/migrate/import-one.js +133 -0
  263. package/lib/types/dsh-adapter/migrate/index.d.ts +35 -0
  264. package/lib/types/dsh-adapter/migrate/index.d.ts.map +1 -0
  265. package/lib/types/dsh-adapter/migrate/index.js +107 -0
  266. package/lib/types/dsh-adapter/migrate/parse/injection.d.ts +40 -0
  267. package/lib/types/dsh-adapter/migrate/parse/injection.d.ts.map +1 -0
  268. package/lib/types/dsh-adapter/migrate/parse/injection.js +127 -0
  269. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +28 -0
  270. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -0
  271. package/lib/types/dsh-adapter/migrate/parse/jsonl.js +40 -0
  272. package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts +28 -0
  273. package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts.map +1 -0
  274. package/lib/types/dsh-adapter/migrate/parse/role-turns.js +50 -0
  275. package/lib/types/dsh-adapter/migrate/parse/title.d.ts +18 -0
  276. package/lib/types/dsh-adapter/migrate/parse/title.d.ts.map +1 -0
  277. package/lib/types/dsh-adapter/migrate/parse/title.js +29 -0
  278. package/lib/types/dsh-adapter/migrate/parse/tools.d.ts +62 -0
  279. package/lib/types/dsh-adapter/migrate/parse/tools.d.ts.map +1 -0
  280. package/lib/types/dsh-adapter/migrate/parse/tools.js +110 -0
  281. package/lib/types/dsh-adapter/migrate/picker.d.ts +64 -0
  282. package/lib/types/dsh-adapter/migrate/picker.d.ts.map +1 -0
  283. package/lib/types/dsh-adapter/migrate/picker.js +86 -0
  284. package/lib/types/dsh-adapter/migrate/recent-agents.d.ts +40 -0
  285. package/lib/types/dsh-adapter/migrate/recent-agents.d.ts.map +1 -0
  286. package/lib/types/dsh-adapter/migrate/recent-agents.js +100 -0
  287. package/lib/types/dsh-adapter/migrate/sessionize.d.ts +39 -0
  288. package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -0
  289. package/lib/types/dsh-adapter/migrate/sessionize.js +271 -0
  290. package/lib/types/dsh-adapter/migrate/types.d.ts +176 -0
  291. package/lib/types/dsh-adapter/migrate/types.d.ts.map +1 -0
  292. package/lib/types/dsh-adapter/migrate/types.js +11 -0
  293. package/lib/types/dsh-adapter/migrate/uuid.d.ts +7 -0
  294. package/lib/types/dsh-adapter/migrate/uuid.d.ts.map +1 -0
  295. package/lib/types/dsh-adapter/migrate/uuid.js +25 -0
  296. package/lib/types/dsh-adapter/plugin.d.ts +5 -3
  297. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  298. package/lib/types/dsh-adapter/plugin.js +168 -372
  299. package/lib/types/dsh-adapter/providerWizard.d.ts +17 -0
  300. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  301. package/lib/types/dsh-adapter/providerWizard.js +254 -66
  302. package/lib/types/dsh-adapter/questions.d.ts +22 -15
  303. package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
  304. package/lib/types/dsh-adapter/questions.js +47 -45
  305. package/lib/types/dsh-adapter/sessions/digest.d.ts +11 -6
  306. package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
  307. package/lib/types/dsh-adapter/sessions/digest.js +20 -13
  308. package/lib/types/dsh-adapter/sessions/frames.d.ts +3 -1
  309. package/lib/types/dsh-adapter/sessions/frames.d.ts.map +1 -1
  310. package/lib/types/dsh-adapter/sessions/frames.js +5 -4
  311. package/lib/types/dsh-adapter/sessions/list.d.ts +6 -1
  312. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
  313. package/lib/types/dsh-adapter/sessions/list.js +188 -164
  314. package/lib/types/dsh-adapter/sessions/recovery.d.ts +16 -0
  315. package/lib/types/dsh-adapter/sessions/recovery.d.ts.map +1 -0
  316. package/lib/types/dsh-adapter/sessions/recovery.js +108 -0
  317. package/lib/types/dsh-adapter/sessions/snapshot.d.ts +7 -0
  318. package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -0
  319. package/lib/types/dsh-adapter/sessions/snapshot.js +90 -0
  320. package/lib/types/dsh-adapter/sessions/store.d.ts +10 -4
  321. package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
  322. package/lib/types/dsh-adapter/sessions/store.js +62 -25
  323. package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
  324. package/lib/types/dsh-adapter/settings-sections.js +7 -4
  325. package/lib/types/dsh-adapter/sideQuestion.d.ts +41 -2
  326. package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
  327. package/lib/types/dsh-adapter/sideQuestion.js +98 -2
  328. package/lib/types/dsh-adapter/subagents.d.ts +44 -6
  329. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  330. package/lib/types/dsh-adapter/subagents.js +163 -26
  331. package/lib/types/herdr.d.ts +2 -0
  332. package/lib/types/herdr.d.ts.map +1 -1
  333. package/lib/types/herdr.js +9 -3
  334. package/lib/types/history.d.ts +13 -1
  335. package/lib/types/history.d.ts.map +1 -1
  336. package/lib/types/history.js +15 -2
  337. package/lib/types/i18n.d.ts +512 -41
  338. package/lib/types/i18n.d.ts.map +1 -1
  339. package/lib/types/i18n.js +199 -20
  340. package/lib/types/ink/components/App.d.ts +2 -2
  341. package/lib/types/ink/components/App.d.ts.map +1 -1
  342. package/lib/types/ink/components/App.js +5 -1
  343. package/lib/types/ink/components/Image.d.ts +14 -1
  344. package/lib/types/ink/components/Image.d.ts.map +1 -1
  345. package/lib/types/ink/components/Image.js +2 -2
  346. package/lib/types/ink/events/input-event.js +3 -3
  347. package/lib/types/ink/hooks/use-terminal-images.d.ts +12 -0
  348. package/lib/types/ink/hooks/use-terminal-images.d.ts.map +1 -1
  349. package/lib/types/ink/hooks/use-terminal-images.js +13 -0
  350. package/lib/types/ink/ink.d.ts +6 -0
  351. package/lib/types/ink/ink.d.ts.map +1 -1
  352. package/lib/types/ink/ink.js +16 -1
  353. package/lib/types/ink/kitty-graphics.d.ts +44 -3
  354. package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
  355. package/lib/types/ink/kitty-graphics.js +184 -23
  356. package/lib/types/ink/log-update.d.ts.map +1 -1
  357. package/lib/types/ink/log-update.js +19 -1
  358. package/lib/types/ink/output.d.ts +24 -2
  359. package/lib/types/ink/output.d.ts.map +1 -1
  360. package/lib/types/ink/output.js +83 -5
  361. package/lib/types/ink/parse-keypress.d.ts +26 -1
  362. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  363. package/lib/types/ink/parse-keypress.js +156 -13
  364. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  365. package/lib/types/ink/render-node-to-output.js +8 -1
  366. package/lib/types/ink/screen.d.ts +24 -0
  367. package/lib/types/ink/screen.d.ts.map +1 -1
  368. package/lib/types/ink/screen.js +89 -0
  369. package/lib/types/ink/selection.d.ts +68 -18
  370. package/lib/types/ink/selection.d.ts.map +1 -1
  371. package/lib/types/ink/selection.js +178 -31
  372. package/lib/types/ink/sixel-codec.d.ts +12 -1
  373. package/lib/types/ink/sixel-codec.d.ts.map +1 -1
  374. package/lib/types/ink/sixel-codec.js +29 -5
  375. package/lib/types/ink/sixel-graphics.d.ts.map +1 -1
  376. package/lib/types/ink/sixel-graphics.js +5 -3
  377. package/lib/types/ink/styles.d.ts +9 -0
  378. package/lib/types/ink/styles.d.ts.map +1 -1
  379. package/lib/types/ink/terminal-image.d.ts +8 -0
  380. package/lib/types/ink/terminal-image.d.ts.map +1 -1
  381. package/lib/types/ink/terminal-querier.d.ts +7 -1
  382. package/lib/types/ink/terminal-querier.d.ts.map +1 -1
  383. package/lib/types/ink/terminal-querier.js +12 -2
  384. package/lib/types/ink/timeline-rail.d.ts +5 -0
  385. package/lib/types/ink/timeline-rail.d.ts.map +1 -1
  386. package/lib/types/math/inline-layout.d.ts +29 -0
  387. package/lib/types/math/inline-layout.d.ts.map +1 -0
  388. package/lib/types/math/inline-layout.js +106 -0
  389. package/lib/types/math/layout.d.ts +58 -0
  390. package/lib/types/math/layout.d.ts.map +1 -0
  391. package/lib/types/math/layout.js +59 -0
  392. package/lib/types/math/renderer.d.ts +64 -0
  393. package/lib/types/math/renderer.d.ts.map +1 -0
  394. package/lib/types/math/renderer.js +256 -0
  395. package/lib/types/screens/Chat.d.ts +17 -1
  396. package/lib/types/screens/Chat.d.ts.map +1 -1
  397. package/lib/types/screens/Chat.js +618 -57
  398. package/lib/types/screens/SessionSupervisor.d.ts +2 -1
  399. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  400. package/lib/types/screens/SessionSupervisor.js +156 -19
  401. package/lib/types/screens/Settings.d.ts.map +1 -1
  402. package/lib/types/screens/Settings.js +49 -11
  403. package/lib/types/screens/StatusLine.d.ts +5 -1
  404. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  405. package/lib/types/screens/StatusLine.js +47 -17
  406. package/lib/types/screens/chatOverlay.d.ts +5 -0
  407. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  408. package/lib/types/screens/chatOverlay.js +1 -0
  409. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +47 -0
  410. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -0
  411. package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +65 -0
  412. package/lib/types/screens/sessionSupervisor/model.d.ts +12 -0
  413. package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
  414. package/lib/types/screens/sessionSupervisor/model.js +26 -0
  415. package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts +107 -0
  416. package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts.map +1 -0
  417. package/lib/types/screens/sessionSupervisor/useForeignSessions.js +312 -0
  418. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +4 -1
  419. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  420. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +97 -14
  421. package/lib/types/sessionHistory.d.ts +2 -2
  422. package/lib/types/sessionHistory.d.ts.map +1 -1
  423. package/lib/types/sessionHistory.js +31 -5
  424. package/lib/types/settings/definitions.d.ts +681 -0
  425. package/lib/types/settings/definitions.d.ts.map +1 -0
  426. package/lib/types/settings/definitions.js +511 -0
  427. package/lib/types/starAction.d.ts +44 -0
  428. package/lib/types/starAction.d.ts.map +1 -0
  429. package/lib/types/starAction.js +52 -0
  430. package/lib/types/terminal-utils/latex.d.ts +10 -0
  431. package/lib/types/terminal-utils/latex.d.ts.map +1 -0
  432. package/lib/types/terminal-utils/latex.js +1417 -0
  433. package/lib/types/terminal-utils/markdown.d.ts +3 -1
  434. package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
  435. package/lib/types/terminal-utils/markdown.js +26 -1
  436. package/lib/types/terminal-utils/math.d.ts +66 -0
  437. package/lib/types/terminal-utils/math.d.ts.map +1 -0
  438. package/lib/types/terminal-utils/math.js +337 -0
  439. package/lib/types/tips.d.ts.map +1 -1
  440. package/lib/types/tips.js +6 -0
  441. package/lib/types/tuiDisplayPrefs.d.ts +67 -0
  442. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  443. package/lib/types/tuiDisplayPrefs.js +59 -0
  444. package/lib/types/ui.d.ts +1 -1
  445. package/lib/types/ui.d.ts.map +1 -1
  446. package/lib/types/ui.js +1 -1
  447. package/lib/types/usageStats.d.ts +98 -0
  448. package/lib/types/usageStats.d.ts.map +1 -0
  449. package/lib/types/usageStats.js +169 -0
  450. package/lib/types/utils/bmp.d.ts +17 -0
  451. package/lib/types/utils/bmp.d.ts.map +1 -0
  452. package/lib/types/utils/bmp.js +154 -0
  453. package/lib/types/utils/clipboard.d.ts +14 -2
  454. package/lib/types/utils/clipboard.d.ts.map +1 -1
  455. package/lib/types/utils/clipboard.js +143 -8
  456. package/lib/types/utils/fold-long-lines.d.ts +1 -1
  457. package/lib/types/utils/fold-long-lines.d.ts.map +1 -1
  458. package/lib/types/utils/fold-long-lines.js +3 -2
  459. package/lib/types/utils/keymap.d.ts +4 -1
  460. package/lib/types/utils/keymap.d.ts.map +1 -1
  461. package/lib/types/utils/keymap.js +8 -0
  462. package/lib/types/utils/modifiers.d.ts +4 -3
  463. package/lib/types/utils/modifiers.d.ts.map +1 -1
  464. package/lib/types/utils/modifiers.js +4 -3
  465. package/lib/types/working-activity.d.ts +10 -9
  466. package/lib/types/working-activity.d.ts.map +1 -1
  467. package/lib/types/working-activity.js +17 -10
  468. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/LICENSE +202 -0
  469. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/NOTICE +20 -0
  470. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/index.d.ts +16 -0
  471. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/bundled-packages.json +4 -0
  472. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs +20 -0
  473. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs.LEGAL.txt +35 -0
  474. package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/package.json +29 -0
  475. package/package.json +117 -99
  476. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +0 -19
  477. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts.map +0 -1
  478. package/lib/types/components/design-system/KeyboardShortcutHint.js +0 -14
  479. package/lib/types/dsh-adapter/channel/activity.d.ts +0 -20
  480. package/lib/types/dsh-adapter/channel/activity.d.ts.map +0 -1
  481. package/lib/types/dsh-adapter/channel/activity.js +0 -113
  482. package/lib/types/terminal-utils/terminal.d.ts +0 -18
  483. package/lib/types/terminal-utils/terminal.d.ts.map +0 -1
  484. package/lib/types/terminal-utils/terminal.js +0 -96
@@ -1,16 +1,155 @@
1
1
  import { markChannelReadDirty } from '../../adapter/channel/read-view.js';
2
2
  import { SubagentActivityStore } from '../subagents.js';
3
+ import { isSubagentToolName } from './projection-helpers.js';
4
+ /**
5
+ * Keep each parked parent's reducer alive, including session links and the
6
+ * stream attempt/settlement cursor. A display snapshot cannot resume either
7
+ * a run epoch or an in-flight assistant attempt faithfully.
8
+ */
9
+ export function createSubagentProjection(getState, deps) {
10
+ const parked = new Map();
11
+ const hidden = { rows: [], subagents: [], subagentCost: [], emit() { }, emitStream() { } };
12
+ const make = () => {
13
+ const projection = createSessionSubagentProjection(() => active === projection ? getState() : hidden, { ...deps, visible: () => active === projection });
14
+ return projection;
15
+ };
16
+ let active = make();
17
+ let activeParent = deps.agent();
18
+ let restored = false;
19
+ const childProjection = (id, parent) => {
20
+ // A lifecycle carrier names the DIRECT delegating parent. Its visibility
21
+ // filter also admits ancestors, which is not evidence of ownership.
22
+ if (parent != null)
23
+ return parent === activeParent ? active : parked.get(parent);
24
+ for (const projection of parked.values())
25
+ if (projection.store.has(id))
26
+ return projection;
27
+ if (active.store.has(id))
28
+ return active;
29
+ // Legacy unkeyed delivery can still resolve a child through established
30
+ // catalog membership or the registry's durable parent-session lineage.
31
+ let session;
32
+ try {
33
+ session = deps.lookupChild(id)?.session;
34
+ }
35
+ catch { /* discovery may arrive later */ }
36
+ const parentId = session?.header?.parentSession;
37
+ if (typeof parentId === 'string') {
38
+ for (const [parentAgent, projection] of parked)
39
+ if (String(parentAgent.session.id) === parentId)
40
+ return projection;
41
+ return String(activeParent.session.id) === parentId ? active : undefined;
42
+ }
43
+ // Omitted parent is only for direct callers that already scope events.
44
+ // Transport passes null for an unkeyed event; never guess its ownership.
45
+ return parent === undefined ? active : undefined;
46
+ };
47
+ const park = (agent) => {
48
+ active.dropRows();
49
+ parked.set(agent, active);
50
+ };
51
+ const restore = (agent) => {
52
+ const previous = parked.get(agent);
53
+ if (previous === undefined)
54
+ return;
55
+ parked.delete(agent);
56
+ active = previous;
57
+ activeParent = agent;
58
+ restored = true;
59
+ for (const saved of active.store.snapshot()) {
60
+ if (saved.status !== 'running' && saved.status !== 'starting')
61
+ continue;
62
+ let child;
63
+ try {
64
+ child = deps.lookupChild(saved.agentId);
65
+ }
66
+ catch {
67
+ continue;
68
+ }
69
+ if (child !== undefined && child.status !== 'running')
70
+ active.store.patch(saved.agentId, { status: 'unknown' });
71
+ }
72
+ };
73
+ return {
74
+ get store() { return active.store; },
75
+ get pendingTaskDescriptions() { return active.pendingTaskDescriptions; },
76
+ control: { interrupt: (id) => active.control.interrupt(id) },
77
+ onSessionEvent(session, event) {
78
+ let handled = false;
79
+ if (session === activeParent.session) {
80
+ active.onParentEvent(event);
81
+ handled = true;
82
+ }
83
+ for (const [parent, projection] of parked) {
84
+ if (session === parent.session) {
85
+ projection.onParentEvent(event);
86
+ handled = true;
87
+ }
88
+ if (projection.onSessionEvent(session, event))
89
+ handled = true;
90
+ }
91
+ return active.onSessionEvent(session, event) || handled;
92
+ },
93
+ onStreamFrame(agent, frame) {
94
+ for (const projection of parked.values())
95
+ if (projection.onStreamFrame(agent, frame))
96
+ return true;
97
+ return active.onStreamFrame(agent, frame);
98
+ },
99
+ onStart(info, parent) { childProjection(info.id, parent)?.onStart(info); },
100
+ onEnd(info, parent) { childProjection(info.id, parent)?.onEnd(info); },
101
+ onParentEvent: (event) => active.onParentEvent(event),
102
+ bootstrapFromLog(events) {
103
+ // Live parked reducers already consumed this log. Re-folding historical
104
+ // workflow edges would overwrite the current epoch and its settlement.
105
+ if (!restored)
106
+ active.bootstrapFromLog(events);
107
+ else
108
+ active.syncNow();
109
+ },
110
+ syncNow: () => active.syncNow(),
111
+ flush: () => active.flush(),
112
+ dropRows: () => active.dropRows(),
113
+ park, restore,
114
+ forget(agent) { parked.delete(agent); },
115
+ dispose() { parked.clear(); active.store.reset(); active.dropRows(); active.pendingTaskDescriptions.length = 0; },
116
+ reset() { active = make(); activeParent = deps.agent(); restored = false; getState().subagents = []; getState().subagentCost = []; },
117
+ };
118
+ }
3
119
  /** Current-session subagent store, row projection and frame-batched stream
4
120
  * bridge. The owning channel installs transport subscriptions; this module
5
- * only accepts scoped events and never captures a replaceable agent itself. */
6
- export function createSubagentProjection(getState, deps) {
121
+ * only accepts scoped events and never captures a replaceable agent itself.
122
+ *
123
+ * Discovery comes from three seams so the dashboard can mirror EVERY child
124
+ * the session dispatched (issue #966):
125
+ * 1. `subagent/start`/`subagent/end` bus edges — per-run lifecycle of
126
+ * one-shot runs and continuable epochs, paired by `runId`;
127
+ * 2. parent-session durable events — `subagent/catalog` (child creation
128
+ * fact, written for every child) and `tool-workflow/agent-start|end`
129
+ * (workflow/ralph members, which never emit subagent edges) — received
130
+ * live AND folded from the log at bind/resume so a restart no longer
131
+ * blanks the panel;
132
+ * 3. lazy registry back-fill — a child session event or stream frame whose
133
+ * session link was never established is resolved through the agents
134
+ * registry on arrival, healing one-shot `lookupChild` misses.
135
+ * Transcript cards are gated to children discovered while LIVE: a resumed
136
+ * session's historical children appear in the dashboard without flooding the
137
+ * replayed transcript with cards that the durable log never contained. */
138
+ function createSessionSubagentProjection(getState, deps) {
7
139
  const store = new SubagentActivityStore();
8
140
  const rowsByAgentId = new Map();
9
141
  const pendingTaskDescriptions = [];
142
+ /** Workflow member identity: `tool-workflow/agent-end` carries no childId,
143
+ * so member starts remember `runId:seq` → agentId for their settlement. */
144
+ const workflowMembers = new Map();
145
+ /** Children that earned a transcript card (live discovery only). */
146
+ const cardedIds = new Set();
10
147
  let streamDirty = false;
11
148
  const syncRows = (snapshot = store.snapshot()) => {
12
149
  const state = getState();
13
150
  for (const sub of snapshot) {
151
+ if (!cardedIds.has(sub.agentId))
152
+ continue;
14
153
  let row = rowsByAgentId.get(sub.agentId);
15
154
  if (!row) {
16
155
  row = { id: deps.rowIds.value++, kind: 'subagent', text: sub.description, subagent: undefined };
@@ -33,8 +172,15 @@ export function createSubagentProjection(getState, deps) {
33
172
  };
34
173
  const syncNow = () => {
35
174
  streamDirty = false;
175
+ if (!deps.visible())
176
+ return;
36
177
  const snapshot = store.snapshot();
37
- getState().subagents = snapshot;
178
+ const state = getState();
179
+ state.subagents = snapshot;
180
+ // 费用快照随 dashboard 一起镜像:StatusLine/BalanceReportRow 从这里读
181
+ // 子代理按 (provider, model) 的 durable 用量桶。与 subagents 同在 visible
182
+ // 守卫之后——停靠父级的费用留在自己的 store 里,restore 时重新镜像。
183
+ state.subagentCost = store.costSnapshot().entries;
38
184
  syncRows(snapshot);
39
185
  };
40
186
  const flush = () => {
@@ -44,7 +190,9 @@ export function createSubagentProjection(getState, deps) {
44
190
  return true;
45
191
  };
46
192
  const onSessionEvent = (session, event) => {
47
- const id = store.getSubagentIdBySession(session);
193
+ let id = store.getSubagentIdBySession(session);
194
+ if (id === undefined)
195
+ id = backfillSessionLink(session);
48
196
  if (id === undefined)
49
197
  return false;
50
198
  store.onSessionEvent(id, event);
@@ -62,7 +210,9 @@ export function createSubagentProjection(getState, deps) {
62
210
  // (not its session), so resolve the subagent through its bound session.
63
211
  const onStreamFrame = (agent, frame) => {
64
212
  const session = agent?.session;
65
- const id = session !== undefined && session !== null ? store.getSubagentIdBySession(session) : undefined;
213
+ let id = session !== undefined && session !== null ? store.getSubagentIdBySession(session) : undefined;
214
+ if (id === undefined && session !== undefined && session !== null)
215
+ id = backfillSessionLink(session);
66
216
  if (id === undefined)
67
217
  return false;
68
218
  store.onStreamFrame(id, frame);
@@ -76,6 +226,145 @@ export function createSubagentProjection(getState, deps) {
76
226
  }
77
227
  return true;
78
228
  };
229
+ /** Heal a missing session→agent link through the agents registry. The
230
+ * start-time lookup is one-shot; a miss (service not yet mounted, child not
231
+ * yet registered) previously left the child's events permanently
232
+ * unattributed — its row then never left `running`. Only rows the store
233
+ * already tracks are linked: the registry also holds peer top-level
234
+ * sessions (a parked `/bg` agent streams on the same bus) that must never
235
+ * become dashboard rows. */
236
+ const backfillSessionLink = (session) => {
237
+ const sessionId = session?.id;
238
+ if (typeof sessionId !== 'string' || !store.has(sessionId))
239
+ return undefined;
240
+ let child;
241
+ try {
242
+ child = deps.lookupChild(sessionId);
243
+ }
244
+ catch {
245
+ return undefined;
246
+ }
247
+ if (!child || child.session !== session)
248
+ return undefined;
249
+ // Registry presence is not liveness: a continuable child stays
250
+ // registered while idle. Only a running child upgrades a discovered row
251
+ // and earns a transcript card; the session link itself is established
252
+ // regardless so attribution heals the moment it starts streaming.
253
+ const running = child.status === 'running';
254
+ if (running && store.get(sessionId)?.status === 'unknown')
255
+ store.patch(sessionId, { status: 'running' });
256
+ store.linkSession(sessionId, session);
257
+ if (running)
258
+ cardedIds.add(sessionId);
259
+ return sessionId;
260
+ };
261
+ /** Register a discovered child and, when the agents registry currently
262
+ * holds it RUNNING (idle continuable children stay registered without
263
+ * being live), bind its session so streaming state flows. */
264
+ const discover = (childId, info) => {
265
+ let child;
266
+ try {
267
+ child = deps.lookupChild(childId);
268
+ }
269
+ catch {
270
+ child = undefined;
271
+ }
272
+ const running = child?.status === 'running';
273
+ store.onDiscovered(childId, {
274
+ label: info.label,
275
+ childCreatedAt: info.childCreatedAt,
276
+ live: running,
277
+ provider: info.provider ?? child?.options?.provider,
278
+ model: child?.options?.model,
279
+ });
280
+ if (info.runId !== undefined)
281
+ store.patch(childId, { runId: info.runId });
282
+ if (child?.session)
283
+ store.linkSession(childId, child.session);
284
+ if (running)
285
+ cardedIds.add(childId);
286
+ };
287
+ /** Durable session events stamp their own wall time; a fold from the log
288
+ * must not date a historical child at resume time. */
289
+ const eventTime = (event) => {
290
+ const time = event?.time;
291
+ return typeof time === 'number' ? time : undefined;
292
+ };
293
+ /** Parent-session durable discovery events, live or folded from the log. */
294
+ const onParentEvent = (event, historical = false) => {
295
+ if (!event || typeof event !== 'object')
296
+ return;
297
+ const ev = event;
298
+ const data = ev.data ?? {};
299
+ const childId = typeof data.childId === 'string' ? data.childId : undefined;
300
+ if (ev.type === 'tool/call') {
301
+ if (!historical && typeof data.name === 'string' && isSubagentToolName(data.name) && typeof data.arguments === 'string') {
302
+ try {
303
+ const args = JSON.parse(data.arguments);
304
+ if (typeof args.description === 'string' && args.description)
305
+ pendingTaskDescriptions.push(args.description);
306
+ }
307
+ catch { /* malformed arguments do not describe a child */ }
308
+ }
309
+ return;
310
+ }
311
+ else if (ev.type === 'subagent/catalog') {
312
+ if (childId === undefined)
313
+ return;
314
+ discover(childId, {
315
+ label: typeof data.label === 'string' ? data.label : undefined,
316
+ childCreatedAt: typeof data.childCreatedAt === 'number' ? data.childCreatedAt : eventTime(event),
317
+ });
318
+ }
319
+ else if (ev.type === 'tool-workflow/agent-start') {
320
+ if (childId === undefined || typeof data.runId !== 'string' || typeof data.seq !== 'number')
321
+ return;
322
+ const memberKey = `${data.runId}:${data.seq}`;
323
+ workflowMembers.set(memberKey, childId);
324
+ discover(childId, {
325
+ label: typeof data.label === 'string' ? data.label : undefined,
326
+ childCreatedAt: eventTime(event),
327
+ provider: 'workflow',
328
+ runId: memberKey,
329
+ });
330
+ }
331
+ else if (ev.type === 'tool-workflow/agent-end') {
332
+ if (typeof data.runId !== 'string' || typeof data.seq !== 'number')
333
+ return;
334
+ const agentId = workflowMembers.get(`${data.runId}:${data.seq}`);
335
+ if (agentId === undefined)
336
+ return;
337
+ // The durable end event stamps the historical wall time; folding it
338
+ // must close the member at that time, not at fold/resume time.
339
+ const endedAt = eventTime(event);
340
+ if (data.outcome === 'failed')
341
+ store.onFailed(agentId, 'failed', endedAt);
342
+ else if (data.outcome === 'cancelled')
343
+ store.onCancelled(agentId, 'cancelled', undefined, endedAt);
344
+ else
345
+ store.onCompleted(agentId, undefined, undefined, endedAt);
346
+ }
347
+ else {
348
+ return;
349
+ }
350
+ if (!historical) {
351
+ syncNow();
352
+ getState().emit();
353
+ }
354
+ };
355
+ /** Seed the dashboard from the durable parent log at bind/resume: catalog
356
+ * children and workflow members survive a restart. Historical children the
357
+ * registry no longer holds stay card-less (dashboard-only, `unknown`). */
358
+ const bootstrapFromLog = (events) => {
359
+ if (!Array.isArray(events))
360
+ return;
361
+ try {
362
+ for (const event of events)
363
+ onParentEvent(event, true);
364
+ }
365
+ catch { /* bootstrap is best-effort discovery; live events remain authoritative */ }
366
+ syncNow();
367
+ };
79
368
  const onStart = (info) => {
80
369
  if (!info?.id)
81
370
  return;
@@ -84,8 +373,10 @@ export function createSubagentProjection(getState, deps) {
84
373
  store.onSpawned(info.id, info.provider || 'subagent', info.provider, {
85
374
  runId: info.runId ?? info.id,
86
375
  local: info.local,
87
- description: pendingTaskDescriptions.shift() ?? `${info.provider || 'subagent'} task`,
376
+ startedAt: Date.now(),
377
+ description: pendingTaskDescriptions.shift(),
88
378
  });
379
+ cardedIds.add(info.id);
89
380
  try {
90
381
  const child = deps.lookupChild(info.id);
91
382
  if (child?.session) {
@@ -102,6 +393,16 @@ export function createSubagentProjection(getState, deps) {
102
393
  const onEnd = (info) => {
103
394
  if (!info?.id)
104
395
  return;
396
+ // Host ordering guarantee: a continuable epoch's `subagent/end` may be
397
+ // published AFTER the next epoch's `subagent/start` already arrived (the
398
+ // parent delivery runs before the ownership release). An end that names a
399
+ // runId this row no longer holds belongs to that earlier epoch — the new
400
+ // run must keep running.
401
+ if (info.runId !== undefined) {
402
+ const current = store.get(info.id);
403
+ if (current?.runId !== undefined && current.runId !== info.runId)
404
+ return;
405
+ }
105
406
  const output = Array.isArray(info.lastAssistantMessage)
106
407
  ? info.lastAssistantMessage.map(block => typeof block === 'object' && block !== null && 'text' in block ? String(block.text ?? '') : '').filter(Boolean).join('\n')
107
408
  : '';
@@ -135,6 +436,6 @@ export function createSubagentProjection(getState, deps) {
135
436
  },
136
437
  };
137
438
  const dropRows = () => { streamDirty = false; rowsByAgentId.clear(); };
138
- const reset = () => { dropRows(); pendingTaskDescriptions.length = 0; store.reset(); getState().subagents = []; };
139
- return { store, control, pendingTaskDescriptions, onSessionEvent, onStreamFrame, onStart, onEnd, syncNow, flush, dropRows, reset };
439
+ const reset = () => { dropRows(); cardedIds.clear(); workflowMembers.clear(); pendingTaskDescriptions.length = 0; store.reset(); getState().subagents = []; getState().subagentCost = []; };
440
+ return { store, control, pendingTaskDescriptions, onSessionEvent, onStreamFrame, onParentEvent, bootstrapFromLog, onStart, onEnd, syncNow, flush, dropRows, reset };
140
441
  }
@@ -1,6 +1,6 @@
1
1
  import type { ChannelUi } from '../../adapter/ports/channel-ui.js';
2
2
  import type { ChatRow, ToolCallView, ToolResultView, NotificationItem, TodoPanelItem, PendingMessage } from '../../adapter/ports/channel-view.js';
3
- export type { ChatRow, ToolRow, ToolCallView, ToolFileDiff, ToolResultView, SubagentRow, JobRow, TokenUsage, TokenBucket, NotificationItem, ActivityStatus, ChannelGoal, TodoPanelItem, LoadedContext, LoadedContextEntry, LoadedContextFile, LoadedContextSkill, LoadedContextTool, PendingMessage, SubagentControl, JobControl, StagedImageInput, StagedImageAdjustment, StagedImageHandle, ComposerImageRef, ComposerSubmission, ExternalCommandOutcome, TranscriptImage, ResumeResult, EffortOption, PermissionPresetSnapshot, PermissionPresetAvailability, PermissionPresetOption, PermissionPresetCurrent, PresetOption, SkillInfo, CredentialStatus, AgentViewRow, AgentViewStatus, AgentViewDispatchResult, BackgroundResult } from '../../adapter/ports/channel-view.js';
3
+ export type { ChatRow, ToolRow, ToolCallView, ToolFileDiff, ToolResultView, SubagentRow, JobRow, TokenUsage, TokenBucket, CostTokenBuckets, SessionCostByModel, SubagentCostEntry, NotificationItem, ChannelGoal, TodoPanelItem, LoadedContext, LoadedContextEntry, LoadedContextFile, LoadedContextSkill, LoadedContextTool, PendingMessage, SubagentControl, JobControl, StagedImageInput, StagedImageAdjustment, StagedImageHandle, ComposerImageRef, ComposerSubmission, ExternalCommandOutcome, TranscriptImage, ResumeResult, EffortOption, PermissionPresetSnapshot, PermissionPresetAvailability, PermissionPresetOption, PermissionPresetCurrent, PresetOption, SkillInfo, CredentialStatus, AgentViewRow, AgentViewStatus, AgentViewDispatchResult, BackgroundResult } from '../../adapter/ports/channel-view.js';
4
4
  import { type ContentBlock, type StreamChunk } from '@deepseek-ai/dsh-llm';
5
5
  import { type SessionEvent } from '@deepseek-ai/dsh-session';
6
6
  import { type BackgroundJobState } from '../jobs.js';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/types.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,6 @@ export declare function createChannel(ctx: Context, initialAgent: Agent, options
18
18
  export type { ChannelLaunchOptions } from './channel/state.js';
19
19
  export { expandMentions } from './channel/mentions.js';
20
20
  export { sessionCwdMatches } from './channel/paths.js';
21
- export type { ActivityStatus, AgentViewDispatchResult, AgentViewRow, AgentViewStatus, BackgroundResult, Channel, ChannelGoal, ChannelState, ChatRow, ComposerImageRef, ComposerSubmission, CredentialStatus, EffortOption, ExternalCommandOutcome, JobControl, JobRow, LoadedContext, LoadedContextEntry, LoadedContextFile, LoadedContextSkill, LoadedContextTool, MentionAttachments, MentionExpansion, MentionFs, NotificationItem, PendingMessage, PermissionPresetAvailability, PermissionPresetCurrent, PermissionPresetOption, PermissionPresetSnapshot, PresetOption, ResumeResult, SkillInfo, StagedImageHandle, StagedImageInput, SubagentControl, SubagentRow, TodoPanelItem, TokenBucket, TokenUsage, ToolCallView, ToolFileDiff, ToolResultView, ToolRow, ToolViewPresenter, TranscriptImage } from './channel/types.js';
21
+ export type { AgentViewDispatchResult, AgentViewRow, AgentViewStatus, BackgroundResult, Channel, ChannelGoal, ChannelState, ChatRow, ComposerImageRef, ComposerSubmission, CredentialStatus, EffortOption, ExternalCommandOutcome, JobControl, JobRow, LoadedContext, LoadedContextEntry, LoadedContextFile, LoadedContextSkill, LoadedContextTool, MentionAttachments, MentionExpansion, MentionFs, NotificationItem, PendingMessage, PermissionPresetAvailability, PermissionPresetCurrent, PermissionPresetOption, PermissionPresetSnapshot, PresetOption, ResumeResult, SkillInfo, StagedImageHandle, StagedImageInput, SubagentControl, SubagentRow, TodoPanelItem, TokenBucket, TokenUsage, ToolCallView, ToolFileDiff, ToolResultView, ToolRow, ToolViewPresenter, TranscriptImage } from './channel/types.js';
22
22
  export { emptyTokenUsage } from './channel/usage.js';
23
23
  //# sourceMappingURL=channel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/channel.ts"],"names":[],"mappings":"AAUA,OAAO,EAA4B,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AA4BxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,KAAK,KAAK,EAAqE,MAAM,wBAAwB,CAAA;AAyCtH,OAAO,KAAK,EAAyE,YAAY,EAA8T,MAAM,oBAAoB,CAAA;AAgCzb,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAkBnD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,oBAAoB,GAC5B,YAAY,CAUd;AA26BD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACryB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/channel.ts"],"names":[],"mappings":"AASA,OAAO,EAA4B,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AA6BxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,KAAK,KAAK,EAAqE,MAAM,wBAAwB,CAAA;AAyCtH,OAAO,KAAK,EAAyD,YAAY,EAA8T,MAAM,oBAAoB,CAAA;AAgCza,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAkBnD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,oBAAoB,GAC5B,YAAY,CAUd;AA07BD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,YAAY,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACrxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
@@ -1,7 +1,6 @@
1
1
  import { createSessionTreeReader } from './channel/session-tree.js';
2
2
  import { createInputDelivery } from './channel/input-delivery.js';
3
3
  import { createChannelBinding } from './channel/binding.js';
4
- import { createChannelActivity } from './channel/activity.js';
5
4
  import { createCommandCompletions } from './channel/command-completions.js';
6
5
  import { createLocalActions } from './channel/local-actions.js';
7
6
  import { createDetachedHandleFactory } from './channel/lifetime-resources.js';
@@ -24,6 +23,7 @@ import { createModelSwitchAction } from './channel/model-switch.js';
24
23
  import { createFileActions } from './channel/file-actions.js';
25
24
  import { createReportActions } from './channel/reports.js';
26
25
  import { createSessionMetadataActions } from './channel/session-metadata.js';
26
+ import { createForeignBrowser } from './migrate/browse.js';
27
27
  import { createAgentViewProjection } from './channel/agent-view-projection.js';
28
28
  import { createJobProjection } from './channel/job-projection.js';
29
29
  import { createExternalCommandInvoker } from './channel/external-commands.js';
@@ -151,9 +151,8 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
151
151
  return agents?.get(id);
152
152
  },
153
153
  });
154
- const subagentStore = subagentProjection.store;
154
+ owner.own(() => subagentProjection.dispose());
155
155
  const subagentControl = subagentProjection.control;
156
- const pendingTaskDescriptions = subagentProjection.pendingTaskDescriptions;
157
156
  // Job projection owns registry callbacks and transcript rows. The optional
158
157
  // service attachment has no authority after its injected lifetime ends.
159
158
  const jobProjection = createJobProjection(() => state, {
@@ -365,6 +364,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
365
364
  // installed after ChannelState initialization below.
366
365
  let settleManualCompaction;
367
366
  let compactManualSession;
367
+ let cancelManualCompaction;
368
368
  let forkSessionAction;
369
369
  let rewindToAction;
370
370
  let rewindToNodeAction;
@@ -397,15 +397,19 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
397
397
  emitStream: emitter.emitStream,
398
398
  ...createSettingsHosts(ctx, owner.assertActive),
399
399
  ...createPreferences(() => state),
400
+ /** Mount-owned settings namespace: the section registers under it, so this
401
+ * is the only ns whose section carries the TUI's user layer. */
402
+ settingsNamespace: options.settingsNs ?? 'dsh-tui',
400
403
  get autoRecapOnOpen() {
401
404
  const settings = ctx.get('settings');
402
405
  if (settings === undefined)
403
406
  return false;
404
- const ns = settings.describe({ redactSecrets: true }).find(entry => entry.ns === 'dsh-tui');
407
+ const ns = settings.describe({ redactSecrets: true }).find(entry => entry.ns === state.settingsNamespace);
405
408
  return ns?.value?.recapOnOpen !== false;
406
409
  },
407
410
  ...createInitialChannelView(options, {
408
411
  agentId: binding.agent.id,
412
+ sessionId: binding.agent.session.id,
409
413
  mode: sessionModes[0],
410
414
  cwdDescription: workspaceService.describe(options.cwd).description ?? options.cwd,
411
415
  }),
@@ -556,6 +560,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
556
560
  runtime: adapterRuntime,
557
561
  grantStore: currentGrantStore,
558
562
  });
563
+ const foreignBrowser = createForeignBrowser(() => ctx.get('sessionPersistence'), owner.signal);
559
564
  sessionMetadataActions = createSessionMetadataActions(ctx, {
560
565
  owner,
561
566
  binding,
@@ -602,7 +607,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
602
607
  };
603
608
  const bash = ctx.get('shell');
604
609
  const projector = createChannelProjection(state, {
605
- agent: () => binding.agent, rowIds, resetContextWarning, pendingTaskDescriptions, jobs: jobStore, inputConvergence,
610
+ agent: () => binding.agent, rowIds, resetContextWarning, jobs: jobStore, inputConvergence,
606
611
  checkContextWarning, notify: (...args) => notify(...args),
607
612
  tools: ctx.get('tools'), renderer: rendererRuntime,
608
613
  attachments: () => ctx.get('attachments'),
@@ -622,8 +627,15 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
622
627
  shell: bash,
623
628
  notify,
624
629
  });
625
- // Replay the durable transcript first, then follow live events.
626
- projector.replayEvents(snapshotLiveSessionEvents(binding.agent.session));
630
+ // Replay the durable transcript first, then follow live events. The same
631
+ // seed re-populates the subagent dashboard's durable discovery facts
632
+ // (`subagent/catalog`, workflow member edges) so a resumed session keeps
633
+ // its dispatched-children history (issue #966).
634
+ const replaySessionSeed = (events) => {
635
+ projector.replayEvents(events);
636
+ subagentProjection.bootstrapFromLog(events);
637
+ };
638
+ replaySessionSeed(snapshotLiveSessionEvents(binding.agent.session));
627
639
  projector.settleStreaming();
628
640
  // Attached to an idle agent: any replayed turn/start belongs to a previous
629
641
  // session run, so the spinner must not come up on boot.
@@ -631,8 +643,6 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
631
643
  state.cancelPending = false;
632
644
  state.status = binding.agent.status;
633
645
  state.emit();
634
- // The activity sidecar owns its tracker and interval; it never projects transcript facts.
635
- const activity = createChannelActivity(ctx, state, owner, options.activity !== false);
636
646
  modelActions = createModelActions(ctx, state, {
637
647
  owner,
638
648
  binding,
@@ -658,7 +668,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
658
668
  resetProjector: () => projector.reset(),
659
669
  resetSubagents: subagentProjection.reset,
660
670
  resetJobs: resetJobProjection,
661
- replay: events => projector.replayEvents(events),
671
+ replay: replaySessionSeed,
662
672
  settleReplay: projector.settleStreaming,
663
673
  bindAgent: () => bindAgent(),
664
674
  refreshCommands: refreshCommandList,
@@ -666,7 +676,6 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
666
676
  refreshSkillCommands,
667
677
  clearStagedImages,
668
678
  dropModelCompletion: () => modelActions.dropModelNodeCache(),
669
- onModelSwitch: model => activity.onModelSwitch(model),
670
679
  notify,
671
680
  });
672
681
  workspaceActions = createWorkspaceActions(state, {
@@ -695,7 +704,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
695
704
  owner,
696
705
  binding,
697
706
  state,
698
- activity,
707
+ seedActivity: options.seedActivity,
699
708
  inputConvergence,
700
709
  selection,
701
710
  modelActions,
@@ -713,7 +722,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
713
722
  resetProjector: () => projector.reset(),
714
723
  resetSubagents: subagentProjection.reset,
715
724
  resetJobs: resetJobProjection,
716
- replay: events => projector.replayEvents(events),
725
+ replay: replaySessionSeed,
717
726
  settleReplay: projector.settleStreaming,
718
727
  bindAgent,
719
728
  refreshCommands: refreshCommandList,
@@ -729,8 +738,10 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
729
738
  rowIds,
730
739
  resetProjector: () => projector.reset(),
731
740
  resetSubagents: subagentProjection.reset,
741
+ restoreSubagents: subagentProjection.restore,
742
+ parkSubagents: subagentProjection.park,
732
743
  resetJobs: resetJobProjection,
733
- replay: events => projector.replayEvents(events),
744
+ replay: replaySessionSeed,
734
745
  settleReplay: projector.settleStreaming,
735
746
  describeWorkspace: cwd => workspaceService.describe(cwd),
736
747
  refreshGitBranch: () => refreshGitBranch(),
@@ -756,12 +767,13 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
756
767
  // a target already running in this process is re-attached rather than
757
768
  // resumed twice from its log (which would mount one log in two places).
758
769
  adoptLive: target => adoptLiveAgent(target),
770
+ parkSubagents: subagentProjection.park,
759
771
  backgroundHandles,
760
772
  rowIds,
761
773
  resetProjector: () => projector.reset(),
762
774
  resetSubagents: subagentProjection.reset,
763
775
  resetJobs: resetJobProjection,
764
- replay: events => projector.replayEvents(events),
776
+ replay: replaySessionSeed,
765
777
  settleReplay: projector.settleStreaming,
766
778
  describeWorkspace: cwd => workspaceService.describe(cwd),
767
779
  refreshGitBranch: () => refreshGitBranch(),
@@ -808,10 +820,10 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
808
820
  agent: () => binding.agent,
809
821
  withDecisionPending,
810
822
  notify,
811
- onComplete: () => activity.onCompact(),
812
823
  });
813
824
  settleManualCompaction = manualCompaction.settle;
814
825
  compactManualSession = manualCompaction.compact;
826
+ cancelManualCompaction = manualCompaction.cancel;
815
827
  backgroundCurrentAction = createBackgroundCurrentAction(ctx, state, {
816
828
  configuredPreset: options.configuredPreset,
817
829
  configuredProvider: options.configuredProvider,
@@ -825,6 +837,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
825
837
  rowIds,
826
838
  resetProjector: () => projector.reset(),
827
839
  resetSubagents: subagentProjection.reset,
840
+ parkSubagents: subagentProjection.park,
828
841
  resetJobs: resetJobProjection,
829
842
  refreshEffortLevels: () => modelActions.refreshEffortLevels(),
830
843
  bindAgent,
@@ -877,8 +890,12 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
877
890
  sideQuestion: sessionMetadataActions.sideQuestion,
878
891
  listFileCandidates: fileActions.listFileCandidates,
879
892
  listFiles: fileActions.listFiles,
893
+ cachedSessions: sessionMetadataActions.cachedSessions,
880
894
  listSessions: sessionMetadataActions.listSessions,
881
895
  previewSession: sessionMetadataActions.previewSession,
896
+ listForeignSources: foreignBrowser.listSources,
897
+ listForeignSessions: foreignBrowser.listSessions,
898
+ importForeignSession: foreignBrowser.importSession,
882
899
  bindApprovalStore: agentView.bindApprovalStore,
883
900
  agentViewRows: agentView.rows,
884
901
  subscribeAgentView: agentView.subscribe,
@@ -895,6 +912,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
895
912
  deleteSession: sessionMetadataActions.deleteSession,
896
913
  renameSessionTo: sessionMetadataActions.renameSessionTo,
897
914
  compact: compactManualSession,
915
+ cancelCompact: cancelManualCompaction,
898
916
  runExternalCommand: externalCommands.invokeText,
899
917
  runExternalCommandOutcome: externalCommands.invoke,
900
918
  pushLocal: localActions.pushLocal,
@@ -979,8 +997,6 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
979
997
  // only show a branch for sessions this install actually used — which
980
998
  // is exactly what the column claims.
981
999
  noteBranch(binding.agent.session.id, branch);
982
- // Feed the working line so git tools can show ` · git <branch>`.
983
- activity.onGitBranch(branch);
984
1000
  state.emit();
985
1001
  }
986
1002
  })
@@ -25,5 +25,5 @@
25
25
  * @module @deepseek-harness-tui/dsh-tui/compat
26
26
  */
27
27
  export { appendInterruptedTurnEnd, liveSessionCreateOptions, liveSessionListingFields, liveSessionOffset, sliceLiveSessionSeed, snapshotLiveSessionEvents, } from './liveSession.js';
28
- export { appendSessionTitle, defaultMaxScanned, deleteSessionLog, ensureLegacySessionEventTypes, findSessionLogFile, LEGACY_SESSION_EVENT_TYPES, readPhysicalHeaderSeedLength, readPhysicalHeaderSeedLengthForSession, readSessionEventsFromFile, readSessionEventsFromLog, readSessionTitleFromLog, type SessionLogRead, sessionsRoots, } from './sessionLog.js';
28
+ export { appendSessionTitle, defaultMaxScanned, deleteSessionLog, ensureLegacySessionEventTypes, findSessionLogFile, LEGACY_SESSION_EVENT_TYPES, readPhysicalHeaderSeedLength, readPhysicalHeaderSeedLengthForSession, readSessionEventsFromFile, readSessionEventsFromLog, readSessionTitleFromLog, type SessionLogRead, sessionsRoots, userTitleData, } from './sessionLog.js';
29
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/compat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,6BAA6B,EAC7B,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC5B,sCAAsC,EACtC,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,cAAc,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/compat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,6BAA6B,EAC7B,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC5B,sCAAsC,EACtC,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,cAAc,EACnB,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAA"}