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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1023) hide show
  1. package/README.md +85 -5
  2. package/assets/claude-girl/claude-girl-happy.png +0 -0
  3. package/assets/claude-girl/claude-girl.png +0 -0
  4. package/assets/codex-girl/codex-girl-happy.png +0 -0
  5. package/assets/codex-girl/codex-girl.png +0 -0
  6. package/bin/dsh-tui.js +104 -18
  7. package/cordis.patch.yml +2 -0
  8. package/cordis.yml +2 -0
  9. package/guide/dsh-tui-guide/SKILL.md +4 -2
  10. package/guide/dsh-tui-guide/claude-backend.en.md +203 -0
  11. package/guide/dsh-tui-guide/claude-backend.md +161 -0
  12. package/guide/dsh-tui-guide/codex-backend.en.md +297 -0
  13. package/guide/dsh-tui-guide/codex-backend.md +257 -0
  14. package/guide/dsh-tui-guide/configuration.en.md +9 -2
  15. package/guide/dsh-tui-guide/configuration.md +9 -2
  16. package/guide/dsh-tui-guide/interaction.en.md +169 -27
  17. package/guide/dsh-tui-guide/interaction.md +115 -17
  18. package/guide/dsh-tui-guide/themes.en.md +24 -2
  19. package/guide/dsh-tui-guide/themes.md +21 -2
  20. package/guide/dsh-tui-guide/user-guide.en.md +38 -23
  21. package/guide/dsh-tui-guide/user-guide.md +22 -11
  22. package/guide/dsh-tui-guide/vscode.en.md +1 -0
  23. package/guide/dsh-tui-guide/vscode.md +1 -0
  24. package/lib/settings.json +139 -6
  25. package/lib/types/adapter/channel/state.d.ts.map +1 -1
  26. package/lib/types/adapter/channel/state.js +1 -0
  27. package/lib/types/adapter/channel/ui-policy.d.ts +17 -2
  28. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  29. package/lib/types/adapter/channel/ui-policy.js +29 -0
  30. package/lib/types/adapter/channel/ui.d.ts.map +1 -1
  31. package/lib/types/adapter/channel/ui.js +45 -5
  32. package/lib/types/adapter/ports/channel-catalog.d.ts +7 -0
  33. package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
  34. package/lib/types/adapter/ports/channel-display.d.ts +7 -1
  35. package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
  36. package/lib/types/adapter/ports/channel-session.d.ts +5 -0
  37. package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
  38. package/lib/types/adapter/ports/channel-settings.d.ts +20 -0
  39. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  40. package/lib/types/adapter/ports/channel-ui.d.ts +183 -6
  41. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  42. package/lib/types/adapter/ports/channel-view.d.ts +477 -13
  43. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  44. package/lib/types/agent/backend.d.ts +168 -0
  45. package/lib/types/agent/backend.d.ts.map +1 -0
  46. package/lib/types/agent/backend.js +1 -0
  47. package/lib/types/agent/capabilities.d.ts +461 -0
  48. package/lib/types/agent/capabilities.d.ts.map +1 -0
  49. package/lib/types/agent/capabilities.js +1 -0
  50. package/lib/types/agent/events.d.ts +733 -0
  51. package/lib/types/agent/events.d.ts.map +1 -0
  52. package/lib/types/agent/events.js +2 -0
  53. package/lib/types/agent/index.d.ts +8 -0
  54. package/lib/types/agent/index.d.ts.map +1 -0
  55. package/lib/types/agent/index.js +7 -0
  56. package/lib/types/agent/messages.d.ts +52 -0
  57. package/lib/types/agent/messages.d.ts.map +1 -0
  58. package/lib/types/agent/messages.js +91 -0
  59. package/lib/types/agent/presentation.d.ts +29 -0
  60. package/lib/types/agent/presentation.d.ts.map +1 -0
  61. package/lib/types/agent/presentation.js +4 -0
  62. package/lib/types/agent/refs.d.ts +30 -0
  63. package/lib/types/agent/refs.d.ts.map +1 -0
  64. package/lib/types/agent/refs.js +39 -0
  65. package/lib/types/agent/session.d.ts +78 -0
  66. package/lib/types/agent/session.d.ts.map +1 -0
  67. package/lib/types/agent/session.js +1 -0
  68. package/lib/types/backends/claude/activity.d.ts +53 -0
  69. package/lib/types/backends/claude/activity.d.ts.map +1 -0
  70. package/lib/types/backends/claude/activity.js +103 -0
  71. package/lib/types/backends/claude/auth.d.ts +245 -0
  72. package/lib/types/backends/claude/auth.d.ts.map +1 -0
  73. package/lib/types/backends/claude/auth.js +503 -0
  74. package/lib/types/backends/claude/backend.d.ts +32 -0
  75. package/lib/types/backends/claude/backend.d.ts.map +1 -0
  76. package/lib/types/backends/claude/backend.js +296 -0
  77. package/lib/types/backends/claude/catalog.d.ts +17 -0
  78. package/lib/types/backends/claude/catalog.d.ts.map +1 -0
  79. package/lib/types/backends/claude/catalog.js +94 -0
  80. package/lib/types/backends/claude/channels.d.ts +63 -0
  81. package/lib/types/backends/claude/channels.d.ts.map +1 -0
  82. package/lib/types/backends/claude/channels.js +275 -0
  83. package/lib/types/backends/claude/contract.d.ts +37 -0
  84. package/lib/types/backends/claude/contract.d.ts.map +1 -0
  85. package/lib/types/backends/claude/contract.js +46 -0
  86. package/lib/types/backends/claude/controls.d.ts +134 -0
  87. package/lib/types/backends/claude/controls.d.ts.map +1 -0
  88. package/lib/types/backends/claude/controls.js +425 -0
  89. package/lib/types/backends/claude/dialogs.d.ts +62 -0
  90. package/lib/types/backends/claude/dialogs.d.ts.map +1 -0
  91. package/lib/types/backends/claude/dialogs.js +253 -0
  92. package/lib/types/backends/claude/flag-settings.d.ts +12 -0
  93. package/lib/types/backends/claude/flag-settings.d.ts.map +1 -0
  94. package/lib/types/backends/claude/flag-settings.js +49 -0
  95. package/lib/types/backends/claude/images.d.ts +49 -0
  96. package/lib/types/backends/claude/images.d.ts.map +1 -0
  97. package/lib/types/backends/claude/images.js +94 -0
  98. package/lib/types/backends/claude/index.d.ts +5 -0
  99. package/lib/types/backends/claude/index.d.ts.map +1 -0
  100. package/lib/types/backends/claude/index.js +4 -0
  101. package/lib/types/backends/claude/install.d.ts +15 -0
  102. package/lib/types/backends/claude/install.d.ts.map +1 -0
  103. package/lib/types/backends/claude/install.js +91 -0
  104. package/lib/types/backends/claude/modelEnv.d.ts +64 -0
  105. package/lib/types/backends/claude/modelEnv.d.ts.map +1 -0
  106. package/lib/types/backends/claude/modelEnv.js +199 -0
  107. package/lib/types/backends/claude/narrow.d.ts +10 -0
  108. package/lib/types/backends/claude/narrow.d.ts.map +1 -0
  109. package/lib/types/backends/claude/narrow.js +8 -0
  110. package/lib/types/backends/claude/older-history.d.ts +16 -0
  111. package/lib/types/backends/claude/older-history.d.ts.map +1 -0
  112. package/lib/types/backends/claude/older-history.js +101 -0
  113. package/lib/types/backends/claude/options.d.ts +181 -0
  114. package/lib/types/backends/claude/options.d.ts.map +1 -0
  115. package/lib/types/backends/claude/options.js +208 -0
  116. package/lib/types/backends/claude/permissions.d.ts +83 -0
  117. package/lib/types/backends/claude/permissions.d.ts.map +1 -0
  118. package/lib/types/backends/claude/permissions.js +331 -0
  119. package/lib/types/backends/claude/prefs.d.ts +55 -0
  120. package/lib/types/backends/claude/prefs.d.ts.map +1 -0
  121. package/lib/types/backends/claude/prefs.js +150 -0
  122. package/lib/types/backends/claude/process.d.ts +19 -0
  123. package/lib/types/backends/claude/process.d.ts.map +1 -0
  124. package/lib/types/backends/claude/process.js +156 -0
  125. package/lib/types/backends/claude/replay.d.ts +129 -0
  126. package/lib/types/backends/claude/replay.d.ts.map +1 -0
  127. package/lib/types/backends/claude/replay.js +505 -0
  128. package/lib/types/backends/claude/sdk-warnings.d.ts +23 -0
  129. package/lib/types/backends/claude/sdk-warnings.d.ts.map +1 -0
  130. package/lib/types/backends/claude/sdk-warnings.js +55 -0
  131. package/lib/types/backends/claude/sdk.d.ts +12 -0
  132. package/lib/types/backends/claude/sdk.d.ts.map +1 -0
  133. package/lib/types/backends/claude/sdk.js +34 -0
  134. package/lib/types/backends/claude/send-message.d.ts +54 -0
  135. package/lib/types/backends/claude/send-message.d.ts.map +1 -0
  136. package/lib/types/backends/claude/send-message.js +65 -0
  137. package/lib/types/backends/claude/session/auth.d.ts +47 -0
  138. package/lib/types/backends/claude/session/auth.d.ts.map +1 -0
  139. package/lib/types/backends/claude/session/auth.js +226 -0
  140. package/lib/types/backends/claude/session/channels.d.ts +82 -0
  141. package/lib/types/backends/claude/session/channels.d.ts.map +1 -0
  142. package/lib/types/backends/claude/session/channels.js +45 -0
  143. package/lib/types/backends/claude/session/input.d.ts +16 -0
  144. package/lib/types/backends/claude/session/input.d.ts.map +1 -0
  145. package/lib/types/backends/claude/session/input.js +64 -0
  146. package/lib/types/backends/claude/session/lifecycle.d.ts +6 -0
  147. package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -0
  148. package/lib/types/backends/claude/session/lifecycle.js +852 -0
  149. package/lib/types/backends/claude/session/store.d.ts +17 -0
  150. package/lib/types/backends/claude/session/store.d.ts.map +1 -0
  151. package/lib/types/backends/claude/session/store.js +122 -0
  152. package/lib/types/backends/claude/session/subagents.d.ts +13 -0
  153. package/lib/types/backends/claude/session/subagents.d.ts.map +1 -0
  154. package/lib/types/backends/claude/session/subagents.js +77 -0
  155. package/lib/types/backends/claude/session/types.d.ts +89 -0
  156. package/lib/types/backends/claude/session/types.d.ts.map +1 -0
  157. package/lib/types/backends/claude/session/types.js +1 -0
  158. package/lib/types/backends/claude/session.d.ts +4 -0
  159. package/lib/types/backends/claude/session.d.ts.map +1 -0
  160. package/lib/types/backends/claude/session.js +2 -0
  161. package/lib/types/backends/claude/side-query.d.ts +34 -0
  162. package/lib/types/backends/claude/side-query.d.ts.map +1 -0
  163. package/lib/types/backends/claude/side-query.js +116 -0
  164. package/lib/types/backends/claude/task-output.d.ts +13 -0
  165. package/lib/types/backends/claude/task-output.d.ts.map +1 -0
  166. package/lib/types/backends/claude/task-output.js +101 -0
  167. package/lib/types/backends/claude/tools.d.ts +45 -0
  168. package/lib/types/backends/claude/tools.d.ts.map +1 -0
  169. package/lib/types/backends/claude/tools.js +231 -0
  170. package/lib/types/backends/claude/transcript-file.d.ts +41 -0
  171. package/lib/types/backends/claude/transcript-file.d.ts.map +1 -0
  172. package/lib/types/backends/claude/transcript-file.js +195 -0
  173. package/lib/types/backends/claude/translate/attempts.d.ts +33 -0
  174. package/lib/types/backends/claude/translate/attempts.d.ts.map +1 -0
  175. package/lib/types/backends/claude/translate/attempts.js +243 -0
  176. package/lib/types/backends/claude/translate/content.d.ts +33 -0
  177. package/lib/types/backends/claude/translate/content.d.ts.map +1 -0
  178. package/lib/types/backends/claude/translate/content.js +91 -0
  179. package/lib/types/backends/claude/translate/core.d.ts +76 -0
  180. package/lib/types/backends/claude/translate/core.d.ts.map +1 -0
  181. package/lib/types/backends/claude/translate/core.js +447 -0
  182. package/lib/types/backends/claude/translate/events.d.ts +9 -0
  183. package/lib/types/backends/claude/translate/events.d.ts.map +1 -0
  184. package/lib/types/backends/claude/translate/events.js +77 -0
  185. package/lib/types/backends/claude/translate/lanes.d.ts +31 -0
  186. package/lib/types/backends/claude/translate/lanes.d.ts.map +1 -0
  187. package/lib/types/backends/claude/translate/lanes.js +177 -0
  188. package/lib/types/backends/claude/translate/messages.d.ts +36 -0
  189. package/lib/types/backends/claude/translate/messages.d.ts.map +1 -0
  190. package/lib/types/backends/claude/translate/messages.js +202 -0
  191. package/lib/types/backends/claude/translate/system.d.ts +40 -0
  192. package/lib/types/backends/claude/translate/system.d.ts.map +1 -0
  193. package/lib/types/backends/claude/translate/system.js +399 -0
  194. package/lib/types/backends/claude/translate/tasks.d.ts +19 -0
  195. package/lib/types/backends/claude/translate/tasks.d.ts.map +1 -0
  196. package/lib/types/backends/claude/translate/tasks.js +159 -0
  197. package/lib/types/backends/claude/translate/types.d.ts +114 -0
  198. package/lib/types/backends/claude/translate/types.d.ts.map +1 -0
  199. package/lib/types/backends/claude/translate/types.js +1 -0
  200. package/lib/types/backends/claude/translate.d.ts +9 -0
  201. package/lib/types/backends/claude/translate.d.ts.map +1 -0
  202. package/lib/types/backends/claude/translate.js +6 -0
  203. package/lib/types/backends/codex/auth/external-tokens.d.ts +66 -0
  204. package/lib/types/backends/codex/auth/external-tokens.d.ts.map +1 -0
  205. package/lib/types/backends/codex/auth/external-tokens.js +325 -0
  206. package/lib/types/backends/codex/auth/route.d.ts +14 -0
  207. package/lib/types/backends/codex/auth/route.d.ts.map +1 -0
  208. package/lib/types/backends/codex/auth/route.js +52 -0
  209. package/lib/types/backends/codex/auth/status.d.ts +16 -0
  210. package/lib/types/backends/codex/auth/status.d.ts.map +1 -0
  211. package/lib/types/backends/codex/auth/status.js +115 -0
  212. package/lib/types/backends/codex/backend.d.ts +58 -0
  213. package/lib/types/backends/codex/backend.d.ts.map +1 -0
  214. package/lib/types/backends/codex/backend.js +201 -0
  215. package/lib/types/backends/codex/catalog.d.ts +17 -0
  216. package/lib/types/backends/codex/catalog.d.ts.map +1 -0
  217. package/lib/types/backends/codex/catalog.js +128 -0
  218. package/lib/types/backends/codex/channels.d.ts +59 -0
  219. package/lib/types/backends/codex/channels.d.ts.map +1 -0
  220. package/lib/types/backends/codex/channels.js +274 -0
  221. package/lib/types/backends/codex/contract.d.ts +46 -0
  222. package/lib/types/backends/codex/contract.d.ts.map +1 -0
  223. package/lib/types/backends/codex/contract.js +80 -0
  224. package/lib/types/backends/codex/detect.d.ts +14 -0
  225. package/lib/types/backends/codex/detect.d.ts.map +1 -0
  226. package/lib/types/backends/codex/detect.js +90 -0
  227. package/lib/types/backends/codex/index.d.ts +6 -0
  228. package/lib/types/backends/codex/index.d.ts.map +1 -0
  229. package/lib/types/backends/codex/index.js +5 -0
  230. package/lib/types/backends/codex/modes.d.ts +16 -0
  231. package/lib/types/backends/codex/modes.d.ts.map +1 -0
  232. package/lib/types/backends/codex/modes.js +49 -0
  233. package/lib/types/backends/codex/narrow.d.ts +20 -0
  234. package/lib/types/backends/codex/narrow.d.ts.map +1 -0
  235. package/lib/types/backends/codex/narrow.js +18 -0
  236. package/lib/types/backends/codex/prefs.d.ts +42 -0
  237. package/lib/types/backends/codex/prefs.d.ts.map +1 -0
  238. package/lib/types/backends/codex/prefs.js +124 -0
  239. package/lib/types/backends/codex/protocol/index.d.ts +149 -0
  240. package/lib/types/backends/codex/protocol/index.d.ts.map +1 -0
  241. package/lib/types/backends/codex/protocol/index.js +130 -0
  242. package/lib/types/backends/codex/rpc/binary.d.ts +35 -0
  243. package/lib/types/backends/codex/rpc/binary.d.ts.map +1 -0
  244. package/lib/types/backends/codex/rpc/binary.js +174 -0
  245. package/lib/types/backends/codex/rpc/client.d.ts +72 -0
  246. package/lib/types/backends/codex/rpc/client.d.ts.map +1 -0
  247. package/lib/types/backends/codex/rpc/client.js +214 -0
  248. package/lib/types/backends/codex/rpc/hub.d.ts +105 -0
  249. package/lib/types/backends/codex/rpc/hub.d.ts.map +1 -0
  250. package/lib/types/backends/codex/rpc/hub.js +532 -0
  251. package/lib/types/backends/codex/rpc/transport.d.ts +39 -0
  252. package/lib/types/backends/codex/rpc/transport.d.ts.map +1 -0
  253. package/lib/types/backends/codex/rpc/transport.js +212 -0
  254. package/lib/types/backends/codex/session/activity.d.ts +18 -0
  255. package/lib/types/backends/codex/session/activity.d.ts.map +1 -0
  256. package/lib/types/backends/codex/session/activity.js +108 -0
  257. package/lib/types/backends/codex/session/approvals.d.ts +39 -0
  258. package/lib/types/backends/codex/session/approvals.d.ts.map +1 -0
  259. package/lib/types/backends/codex/session/approvals.js +477 -0
  260. package/lib/types/backends/codex/session/commands.d.ts +37 -0
  261. package/lib/types/backends/codex/session/commands.d.ts.map +1 -0
  262. package/lib/types/backends/codex/session/commands.js +141 -0
  263. package/lib/types/backends/codex/session/controls.d.ts +37 -0
  264. package/lib/types/backends/codex/session/controls.d.ts.map +1 -0
  265. package/lib/types/backends/codex/session/controls.js +303 -0
  266. package/lib/types/backends/codex/session/goals.d.ts +25 -0
  267. package/lib/types/backends/codex/session/goals.d.ts.map +1 -0
  268. package/lib/types/backends/codex/session/goals.js +97 -0
  269. package/lib/types/backends/codex/session/history.d.ts +52 -0
  270. package/lib/types/backends/codex/session/history.d.ts.map +1 -0
  271. package/lib/types/backends/codex/session/history.js +196 -0
  272. package/lib/types/backends/codex/session/images.d.ts +17 -0
  273. package/lib/types/backends/codex/session/images.d.ts.map +1 -0
  274. package/lib/types/backends/codex/session/images.js +138 -0
  275. package/lib/types/backends/codex/session/input.d.ts +75 -0
  276. package/lib/types/backends/codex/session/input.d.ts.map +1 -0
  277. package/lib/types/backends/codex/session/input.js +294 -0
  278. package/lib/types/backends/codex/session/plan-review.d.ts +19 -0
  279. package/lib/types/backends/codex/session/plan-review.d.ts.map +1 -0
  280. package/lib/types/backends/codex/session/plan-review.js +48 -0
  281. package/lib/types/backends/codex/session/prompts.d.ts +7 -0
  282. package/lib/types/backends/codex/session/prompts.d.ts.map +1 -0
  283. package/lib/types/backends/codex/session/prompts.js +47 -0
  284. package/lib/types/backends/codex/session/session.d.ts +12 -0
  285. package/lib/types/backends/codex/session/session.d.ts.map +1 -0
  286. package/lib/types/backends/codex/session/session.js +871 -0
  287. package/lib/types/backends/codex/session/side-query.d.ts +25 -0
  288. package/lib/types/backends/codex/session/side-query.d.ts.map +1 -0
  289. package/lib/types/backends/codex/session/side-query.js +121 -0
  290. package/lib/types/backends/codex/session/state.d.ts +57 -0
  291. package/lib/types/backends/codex/session/state.d.ts.map +1 -0
  292. package/lib/types/backends/codex/session/state.js +1 -0
  293. package/lib/types/backends/codex/session/subagents.d.ts +28 -0
  294. package/lib/types/backends/codex/session/subagents.d.ts.map +1 -0
  295. package/lib/types/backends/codex/session/subagents.js +286 -0
  296. package/lib/types/backends/codex/session/tasks.d.ts +25 -0
  297. package/lib/types/backends/codex/session/tasks.d.ts.map +1 -0
  298. package/lib/types/backends/codex/session/tasks.js +207 -0
  299. package/lib/types/backends/codex/session/tool-output.d.ts +9 -0
  300. package/lib/types/backends/codex/session/tool-output.d.ts.map +1 -0
  301. package/lib/types/backends/codex/session/tool-output.js +29 -0
  302. package/lib/types/backends/codex/translate/commands.d.ts +30 -0
  303. package/lib/types/backends/codex/translate/commands.d.ts.map +1 -0
  304. package/lib/types/backends/codex/translate/commands.js +103 -0
  305. package/lib/types/backends/codex/translate/events.d.ts +9 -0
  306. package/lib/types/backends/codex/translate/events.d.ts.map +1 -0
  307. package/lib/types/backends/codex/translate/events.js +71 -0
  308. package/lib/types/backends/codex/translate/items.d.ts +112 -0
  309. package/lib/types/backends/codex/translate/items.d.ts.map +1 -0
  310. package/lib/types/backends/codex/translate/items.js +375 -0
  311. package/lib/types/backends/codex/translate/live.d.ts +39 -0
  312. package/lib/types/backends/codex/translate/live.d.ts.map +1 -0
  313. package/lib/types/backends/codex/translate/live.js +315 -0
  314. package/lib/types/backends/codex/translate/notices.d.ts +27 -0
  315. package/lib/types/backends/codex/translate/notices.d.ts.map +1 -0
  316. package/lib/types/backends/codex/translate/notices.js +99 -0
  317. package/lib/types/backends/codex/translate/presentation.d.ts +49 -0
  318. package/lib/types/backends/codex/translate/presentation.d.ts.map +1 -0
  319. package/lib/types/backends/codex/translate/presentation.js +237 -0
  320. package/lib/types/backends/codex/translate/replay.d.ts +18 -0
  321. package/lib/types/backends/codex/translate/replay.d.ts.map +1 -0
  322. package/lib/types/backends/codex/translate/replay.js +33 -0
  323. package/lib/types/backends/codex/translate/usage.d.ts +29 -0
  324. package/lib/types/backends/codex/translate/usage.d.ts.map +1 -0
  325. package/lib/types/backends/codex/translate/usage.js +65 -0
  326. package/lib/types/backends/shared/atomic-file.d.ts +4 -0
  327. package/lib/types/backends/shared/atomic-file.d.ts.map +1 -0
  328. package/lib/types/backends/shared/atomic-file.js +52 -0
  329. package/lib/types/backends/shared/channel-tokens.d.ts +29 -0
  330. package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -0
  331. package/lib/types/backends/shared/channel-tokens.js +161 -0
  332. package/lib/types/backends/shared/display-path.d.ts +3 -0
  333. package/lib/types/backends/shared/display-path.d.ts.map +1 -0
  334. package/lib/types/backends/shared/display-path.js +12 -0
  335. package/lib/types/branding.d.ts +92 -0
  336. package/lib/types/branding.d.ts.map +1 -0
  337. package/lib/types/branding.js +117 -0
  338. package/lib/types/channel/activity.d.ts +53 -0
  339. package/lib/types/channel/activity.d.ts.map +1 -0
  340. package/lib/types/channel/activity.js +955 -0
  341. package/lib/types/channel/capabilities.d.ts +24 -0
  342. package/lib/types/channel/capabilities.d.ts.map +1 -0
  343. package/lib/types/channel/capabilities.js +57 -0
  344. package/lib/types/channel/channel-slug.d.ts +9 -0
  345. package/lib/types/channel/channel-slug.d.ts.map +1 -0
  346. package/lib/types/channel/channel-slug.js +15 -0
  347. package/lib/types/channel/channel-wizard.d.ts +30 -0
  348. package/lib/types/channel/channel-wizard.d.ts.map +1 -0
  349. package/lib/types/channel/channel-wizard.js +226 -0
  350. package/lib/types/channel/elicitation.d.ts +135 -0
  351. package/lib/types/channel/elicitation.d.ts.map +1 -0
  352. package/lib/types/channel/elicitation.js +360 -0
  353. package/lib/types/channel/goal-command.d.ts +49 -0
  354. package/lib/types/channel/goal-command.d.ts.map +1 -0
  355. package/lib/types/channel/goal-command.js +72 -0
  356. package/lib/types/channel/history-restore.d.ts +16 -0
  357. package/lib/types/channel/history-restore.d.ts.map +1 -0
  358. package/lib/types/channel/history-restore.js +214 -0
  359. package/lib/types/channel/interaction.d.ts +38 -0
  360. package/lib/types/channel/interaction.d.ts.map +1 -0
  361. package/lib/types/channel/interaction.js +110 -0
  362. package/lib/types/channel/job-format.d.ts +6 -0
  363. package/lib/types/channel/job-format.d.ts.map +1 -0
  364. package/lib/types/channel/job-format.js +12 -0
  365. package/lib/types/channel/live-output.d.ts +35 -0
  366. package/lib/types/channel/live-output.d.ts.map +1 -0
  367. package/lib/types/channel/live-output.js +74 -0
  368. package/lib/types/channel/model-capabilities.d.ts +10 -0
  369. package/lib/types/channel/model-capabilities.d.ts.map +1 -0
  370. package/lib/types/channel/model-capabilities.js +51 -0
  371. package/lib/types/channel/permissions.d.ts +155 -0
  372. package/lib/types/channel/permissions.d.ts.map +1 -0
  373. package/lib/types/channel/permissions.js +188 -0
  374. package/lib/types/channel/projection.d.ts +110 -0
  375. package/lib/types/channel/projection.d.ts.map +1 -0
  376. package/lib/types/channel/projection.js +1521 -0
  377. package/lib/types/channel/question-record.d.ts +76 -0
  378. package/lib/types/channel/question-record.d.ts.map +1 -0
  379. package/lib/types/channel/question-record.js +109 -0
  380. package/lib/types/channel/questions.d.ts +204 -0
  381. package/lib/types/channel/questions.d.ts.map +1 -0
  382. package/lib/types/channel/questions.js +286 -0
  383. package/lib/types/channel/sanitize.d.ts +49 -0
  384. package/lib/types/channel/sanitize.d.ts.map +1 -0
  385. package/lib/types/channel/sanitize.js +88 -0
  386. package/lib/types/channel/selection-record.d.ts +18 -0
  387. package/lib/types/channel/selection-record.d.ts.map +1 -0
  388. package/lib/types/channel/selection-record.js +45 -0
  389. package/lib/types/channel/side-prompts.d.ts +59 -0
  390. package/lib/types/channel/side-prompts.d.ts.map +1 -0
  391. package/lib/types/channel/side-prompts.js +127 -0
  392. package/lib/types/channel/transcript.d.ts +17 -0
  393. package/lib/types/channel/transcript.d.ts.map +1 -0
  394. package/lib/types/channel/transcript.js +19 -0
  395. package/lib/types/channel/usage.d.ts +48 -0
  396. package/lib/types/channel/usage.d.ts.map +1 -0
  397. package/lib/types/channel/usage.js +143 -0
  398. package/lib/types/commands.d.ts +147 -0
  399. package/lib/types/commands.d.ts.map +1 -1
  400. package/lib/types/commands.js +196 -2
  401. package/lib/types/components/AgentMessageComposer.d.ts +50 -0
  402. package/lib/types/components/AgentMessageComposer.d.ts.map +1 -0
  403. package/lib/types/components/AgentMessageComposer.js +159 -0
  404. package/lib/types/components/BtwPanel.d.ts +13 -12
  405. package/lib/types/components/BtwPanel.d.ts.map +1 -1
  406. package/lib/types/components/BtwPanel.js +35 -24
  407. package/lib/types/components/ChannelPicker.d.ts +40 -0
  408. package/lib/types/components/ChannelPicker.d.ts.map +1 -0
  409. package/lib/types/components/ChannelPicker.js +26 -0
  410. package/lib/types/components/Chat/JobCard.d.ts +29 -31
  411. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  412. package/lib/types/components/Chat/JobCard.js +31 -112
  413. package/lib/types/components/Chat/SubagentMessage.d.ts +4 -1
  414. package/lib/types/components/Chat/SubagentMessage.d.ts.map +1 -1
  415. package/lib/types/components/Chat/SubagentMessage.js +10 -3
  416. package/lib/types/components/ClaudeGirl.d.ts +27 -0
  417. package/lib/types/components/ClaudeGirl.d.ts.map +1 -0
  418. package/lib/types/components/ClaudeGirl.js +30 -0
  419. package/lib/types/components/CodeBlockFrame.d.ts +19 -0
  420. package/lib/types/components/CodeBlockFrame.d.ts.map +1 -0
  421. package/lib/types/components/CodeBlockFrame.js +138 -0
  422. package/lib/types/components/CommandSuggestions.d.ts +10 -1
  423. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  424. package/lib/types/components/CommandSuggestions.js +20 -3
  425. package/lib/types/components/ContextBarView.d.ts +2 -2
  426. package/lib/types/components/ContextBarView.d.ts.map +1 -1
  427. package/lib/types/components/ContextBarView.js +18 -8
  428. package/lib/types/components/EffortChargeGlyph.d.ts +1 -1
  429. package/lib/types/components/EffortChargeGlyph.d.ts.map +1 -1
  430. package/lib/types/components/EffortChargeGlyph.js +3 -4
  431. package/lib/types/components/EffortInputBorder.d.ts +1 -2
  432. package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
  433. package/lib/types/components/EffortInputBorder.js +7 -4
  434. package/lib/types/components/EffortSlider.d.ts +5 -1
  435. package/lib/types/components/EffortSlider.d.ts.map +1 -1
  436. package/lib/types/components/EffortSlider.js +2 -2
  437. package/lib/types/components/EffortTierBadge.d.ts +1 -2
  438. package/lib/types/components/EffortTierBadge.d.ts.map +1 -1
  439. package/lib/types/components/EffortTierBadge.js +8 -5
  440. package/lib/types/components/GoalTodoPanel.d.ts +2 -1
  441. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  442. package/lib/types/components/GoalTodoPanel.js +11 -5
  443. package/lib/types/components/InlineMathParagraph.js +1 -1
  444. package/lib/types/components/JobsPanel.d.ts +8 -9
  445. package/lib/types/components/JobsPanel.d.ts.map +1 -1
  446. package/lib/types/components/JobsPanel.js +72 -13
  447. package/lib/types/components/KernelPicker.d.ts +28 -0
  448. package/lib/types/components/KernelPicker.d.ts.map +1 -0
  449. package/lib/types/components/KernelPicker.js +37 -0
  450. package/lib/types/components/LogoV2.d.ts +7 -1
  451. package/lib/types/components/LogoV2.d.ts.map +1 -1
  452. package/lib/types/components/LogoV2.js +120 -24
  453. package/lib/types/components/Markdown.d.ts +2 -1
  454. package/lib/types/components/Markdown.d.ts.map +1 -1
  455. package/lib/types/components/Markdown.js +37 -8
  456. package/lib/types/components/MathBlock.d.ts.map +1 -1
  457. package/lib/types/components/MathBlock.js +3 -1
  458. package/lib/types/components/MermaidDiagram.d.ts.map +1 -1
  459. package/lib/types/components/MermaidDiagram.js +7 -5
  460. package/lib/types/components/MessageList.d.ts +21 -3
  461. package/lib/types/components/MessageList.d.ts.map +1 -1
  462. package/lib/types/components/MessageList.js +62 -42
  463. package/lib/types/components/ModePicker.d.ts +20 -0
  464. package/lib/types/components/ModePicker.d.ts.map +1 -0
  465. package/lib/types/components/ModePicker.js +17 -0
  466. package/lib/types/components/PromptInput.d.ts +2 -2
  467. package/lib/types/components/PromptInput.d.ts.map +1 -1
  468. package/lib/types/components/PromptInput.js +308 -55
  469. package/lib/types/components/SdkInstallWizard.d.ts +44 -0
  470. package/lib/types/components/SdkInstallWizard.d.ts.map +1 -0
  471. package/lib/types/components/SdkInstallWizard.js +18 -0
  472. package/lib/types/components/SearchBox.d.ts +7 -8
  473. package/lib/types/components/SearchBox.d.ts.map +1 -1
  474. package/lib/types/components/SearchBox.js +18 -9
  475. package/lib/types/components/SplitDiffView.d.ts.map +1 -1
  476. package/lib/types/components/SplitDiffView.js +113 -6
  477. package/lib/types/components/StarPrompt.d.ts.map +1 -1
  478. package/lib/types/components/StarPrompt.js +5 -3
  479. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
  480. package/lib/types/components/StreamingMarkdown.js +6 -4
  481. package/lib/types/components/SubagentCard.d.ts +2 -1
  482. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  483. package/lib/types/components/SubagentCard.js +25 -18
  484. package/lib/types/components/SubagentDashboard.d.ts +10 -6
  485. package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
  486. package/lib/types/components/SubagentDashboard.js +32 -21
  487. package/lib/types/components/SubagentDetailScene.d.ts +16 -1
  488. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
  489. package/lib/types/components/SubagentDetailScene.js +196 -45
  490. package/lib/types/components/SyntaxText.d.ts.map +1 -1
  491. package/lib/types/components/SyntaxText.js +4 -1
  492. package/lib/types/components/TurnInterruptedRow.d.ts +3 -1
  493. package/lib/types/components/TurnInterruptedRow.d.ts.map +1 -1
  494. package/lib/types/components/TurnInterruptedRow.js +6 -3
  495. package/lib/types/components/TurnUsageRow.d.ts +24 -0
  496. package/lib/types/components/TurnUsageRow.d.ts.map +1 -0
  497. package/lib/types/components/TurnUsageRow.js +46 -0
  498. package/lib/types/components/WorkingSpinner.d.ts +2 -1
  499. package/lib/types/components/WorkingSpinner.d.ts.map +1 -1
  500. package/lib/types/components/WorkingSpinner.js +21 -4
  501. package/lib/types/components/approvals/ApprovalPanel.d.ts +36 -13
  502. package/lib/types/components/approvals/ApprovalPanel.d.ts.map +1 -1
  503. package/lib/types/components/approvals/ApprovalPanel.js +173 -25
  504. package/lib/types/components/claudeGirlSprite.d.ts +18 -0
  505. package/lib/types/components/claudeGirlSprite.d.ts.map +1 -0
  506. package/lib/types/components/claudeGirlSprite.js +48 -0
  507. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  508. package/lib/types/components/design-system/ThemeProvider.js +46 -13
  509. package/lib/types/components/design-system/ThemedText.d.ts +3 -1
  510. package/lib/types/components/design-system/ThemedText.d.ts.map +1 -1
  511. package/lib/types/components/design-system/ThemedText.js +2 -2
  512. package/lib/types/components/diffPatch.d.ts +55 -0
  513. package/lib/types/components/diffPatch.d.ts.map +1 -0
  514. package/lib/types/components/diffPatch.js +142 -0
  515. package/lib/types/components/kernelCatalog.d.ts +48 -0
  516. package/lib/types/components/kernelCatalog.d.ts.map +1 -0
  517. package/lib/types/components/kernelCatalog.js +53 -0
  518. package/lib/types/components/launchpadActions.d.ts +13 -6
  519. package/lib/types/components/launchpadActions.d.ts.map +1 -1
  520. package/lib/types/components/launchpadActions.js +26 -4
  521. package/lib/types/components/launchpadParams.d.ts +101 -0
  522. package/lib/types/components/launchpadParams.d.ts.map +1 -0
  523. package/lib/types/components/launchpadParams.js +171 -0
  524. package/lib/types/components/maidPortrait.d.ts +37 -5
  525. package/lib/types/components/maidPortrait.d.ts.map +1 -1
  526. package/lib/types/components/maidPortrait.js +73 -54
  527. package/lib/types/components/messages/AgentMessageFlow.d.ts +20 -0
  528. package/lib/types/components/messages/AgentMessageFlow.d.ts.map +1 -0
  529. package/lib/types/components/messages/AgentMessageFlow.js +37 -0
  530. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +6 -1
  531. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  532. package/lib/types/components/messages/AssistantThinkingMessage.js +29 -5
  533. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +11 -2
  534. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  535. package/lib/types/components/messages/AssistantToolUseMessage.js +289 -36
  536. package/lib/types/components/messages/TranscriptLeaves.d.ts +85 -0
  537. package/lib/types/components/messages/TranscriptLeaves.d.ts.map +1 -0
  538. package/lib/types/components/messages/TranscriptLeaves.js +74 -0
  539. package/lib/types/components/messages/agentTeam.d.ts +69 -0
  540. package/lib/types/components/messages/agentTeam.d.ts.map +1 -0
  541. package/lib/types/components/messages/agentTeam.js +53 -0
  542. package/lib/types/components/messages/liveOutputLines.d.ts +33 -0
  543. package/lib/types/components/messages/liveOutputLines.d.ts.map +1 -0
  544. package/lib/types/components/messages/liveOutputLines.js +100 -0
  545. package/lib/types/components/messages/subagentTranscript.d.ts +146 -0
  546. package/lib/types/components/messages/subagentTranscript.d.ts.map +1 -0
  547. package/lib/types/components/messages/subagentTranscript.js +304 -0
  548. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +16 -1
  549. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  550. package/lib/types/components/questions/AskUserQuestionPanel.js +76 -6
  551. package/lib/types/components/questions/PlanReviewPanel.d.ts +8 -3
  552. package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
  553. package/lib/types/components/questions/PlanReviewPanel.js +11 -6
  554. package/lib/types/components/questions/ProviderModelEditor.d.ts +12 -0
  555. package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -0
  556. package/lib/types/components/questions/ProviderModelEditor.js +266 -0
  557. package/lib/types/components/shimmer.d.ts +26 -0
  558. package/lib/types/components/shimmer.d.ts.map +1 -1
  559. package/lib/types/components/shimmer.js +26 -0
  560. package/lib/types/components/sidePanel/InfoPanel.d.ts.map +1 -1
  561. package/lib/types/components/sidePanel/InfoPanel.js +13 -8
  562. package/lib/types/components/sidePanel/PanelBar.d.ts +0 -24
  563. package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
  564. package/lib/types/components/sidePanel/PanelBar.js +55 -77
  565. package/lib/types/components/sidePanel/PanelStore.d.ts +3 -1
  566. package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -1
  567. package/lib/types/components/sidePanel/PanelStore.js +8 -4
  568. package/lib/types/components/sidePanel/SidePanelColumn.d.ts +3 -10
  569. package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
  570. package/lib/types/components/sidePanel/SidePanelColumn.js +9 -12
  571. package/lib/types/components/sidePanel/TrajectoryPanel.d.ts.map +1 -1
  572. package/lib/types/components/sidePanel/TrajectoryPanel.js +78 -14
  573. package/lib/types/components/sidePanel/agentViewStore.d.ts +20 -0
  574. package/lib/types/components/sidePanel/agentViewStore.d.ts.map +1 -0
  575. package/lib/types/components/sidePanel/agentViewStore.js +26 -0
  576. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +50 -0
  577. package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -0
  578. package/lib/types/components/sidePanel/btw/BtwComposer.js +45 -0
  579. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts +13 -0
  580. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -0
  581. package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +147 -0
  582. package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts +14 -0
  583. package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -0
  584. package/lib/types/components/sidePanel/btw/BtwThreadScene.js +131 -0
  585. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +30 -0
  586. package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -0
  587. package/lib/types/components/sidePanel/btw/BtwThreadView.js +87 -0
  588. package/lib/types/components/sidePanel/btw/threads.d.ts +111 -0
  589. package/lib/types/components/sidePanel/btw/threads.d.ts.map +1 -0
  590. package/lib/types/components/sidePanel/btw/threads.js +302 -0
  591. package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -1
  592. package/lib/types/components/sidePanel/builtinPanels.js +70 -30
  593. package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts +4 -46
  594. package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts.map +1 -1
  595. package/lib/types/components/sidePanel/companion/CompanionPanel.js +19 -55
  596. package/lib/types/components/sidePanel/companion/mood.d.ts +32 -0
  597. package/lib/types/components/sidePanel/companion/mood.d.ts.map +1 -1
  598. package/lib/types/components/sidePanel/companion/mood.js +44 -0
  599. package/lib/types/components/sidePanel/companion/skins.d.ts +34 -0
  600. package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -1
  601. package/lib/types/components/sidePanel/companion/skins.js +203 -29
  602. package/lib/types/components/splashFonts.d.ts +17 -9
  603. package/lib/types/components/splashFonts.d.ts.map +1 -1
  604. package/lib/types/components/splashFonts.js +119 -15
  605. package/lib/types/components/splashLayout.d.ts.map +1 -1
  606. package/lib/types/components/splashLayout.js +3 -1
  607. package/lib/types/components/subagentDetailMemory.d.ts +17 -0
  608. package/lib/types/components/subagentDetailMemory.d.ts.map +1 -0
  609. package/lib/types/components/subagentDetailMemory.js +28 -0
  610. package/lib/types/components/trajectory/Inspector.d.ts.map +1 -1
  611. package/lib/types/components/trajectory/Inspector.js +9 -0
  612. package/lib/types/components/trajectory/Ledger.d.ts.map +1 -1
  613. package/lib/types/components/trajectory/Ledger.js +7 -1
  614. package/lib/types/components/trajectory/scope.d.ts +64 -0
  615. package/lib/types/components/trajectory/scope.d.ts.map +1 -0
  616. package/lib/types/components/trajectory/scope.js +88 -0
  617. package/lib/types/components/trajectory/useTrajectoryScope.d.ts +42 -0
  618. package/lib/types/components/trajectory/useTrajectoryScope.d.ts.map +1 -0
  619. package/lib/types/components/trajectory/useTrajectoryScope.js +86 -0
  620. package/lib/types/customTheme.d.ts +4 -6
  621. package/lib/types/customTheme.d.ts.map +1 -1
  622. package/lib/types/customTheme.js +6 -8
  623. package/lib/types/dsh-adapter/approvals.d.ts +18 -5
  624. package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
  625. package/lib/types/dsh-adapter/approvals.js +17 -4
  626. package/lib/types/dsh-adapter/backend/session.d.ts +64 -0
  627. package/lib/types/dsh-adapter/backend/session.d.ts.map +1 -0
  628. package/lib/types/dsh-adapter/backend/session.js +291 -0
  629. package/lib/types/dsh-adapter/backend/translate.d.ts +58 -0
  630. package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -0
  631. package/lib/types/dsh-adapter/backend/translate.js +467 -0
  632. package/lib/types/dsh-adapter/backends.d.ts +49 -0
  633. package/lib/types/dsh-adapter/backends.d.ts.map +1 -0
  634. package/lib/types/dsh-adapter/backends.js +124 -0
  635. package/lib/types/dsh-adapter/channel/action-readiness.d.ts +16 -0
  636. package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
  637. package/lib/types/dsh-adapter/channel/action-readiness.js +109 -0
  638. package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts +2 -2
  639. package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts.map +1 -1
  640. package/lib/types/dsh-adapter/channel/background-action.d.ts +2 -2
  641. package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
  642. package/lib/types/dsh-adapter/channel/background-action.js +7 -5
  643. package/lib/types/dsh-adapter/channel/binding-events.d.ts +19 -9
  644. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  645. package/lib/types/dsh-adapter/channel/binding-events.js +58 -135
  646. package/lib/types/dsh-adapter/channel/binding.d.ts +61 -14
  647. package/lib/types/dsh-adapter/channel/binding.d.ts.map +1 -1
  648. package/lib/types/dsh-adapter/channel/binding.js +102 -35
  649. package/lib/types/dsh-adapter/channel/command-completions.d.ts +3 -0
  650. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
  651. package/lib/types/dsh-adapter/channel/command-completions.js +33 -4
  652. package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
  653. package/lib/types/dsh-adapter/channel/compaction.js +3 -2
  654. package/lib/types/dsh-adapter/channel/composer-images.d.ts +5 -0
  655. package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
  656. package/lib/types/dsh-adapter/channel/composer-images.js +4 -3
  657. package/lib/types/dsh-adapter/channel/core/actions.d.ts +39 -0
  658. package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -0
  659. package/lib/types/dsh-adapter/channel/core/actions.js +152 -0
  660. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +145 -0
  661. package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -0
  662. package/lib/types/dsh-adapter/channel/core/binding-feed.js +289 -0
  663. package/lib/types/dsh-adapter/channel/core/compose.d.ts +217 -0
  664. package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -0
  665. package/lib/types/dsh-adapter/channel/core/compose.js +938 -0
  666. package/lib/types/dsh-adapter/channel/core/files.d.ts +57 -0
  667. package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -0
  668. package/lib/types/dsh-adapter/channel/core/files.js +45 -0
  669. package/lib/types/dsh-adapter/channel/core/host.d.ts +55 -0
  670. package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -0
  671. package/lib/types/dsh-adapter/channel/core/host.js +116 -0
  672. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +46 -0
  673. package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -0
  674. package/lib/types/dsh-adapter/channel/core/local-actions.js +117 -0
  675. package/lib/types/dsh-adapter/channel/core/local-images.d.ts +20 -0
  676. package/lib/types/dsh-adapter/channel/core/local-images.d.ts.map +1 -0
  677. package/lib/types/dsh-adapter/channel/core/local-images.js +147 -0
  678. package/lib/types/dsh-adapter/channel/core/reports.d.ts +12 -0
  679. package/lib/types/dsh-adapter/channel/core/reports.d.ts.map +1 -0
  680. package/lib/types/dsh-adapter/channel/core/reports.js +77 -0
  681. package/lib/types/dsh-adapter/channel/core/session-controls.d.ts +39 -0
  682. package/lib/types/dsh-adapter/channel/core/session-controls.d.ts.map +1 -0
  683. package/lib/types/dsh-adapter/channel/core/session-controls.js +219 -0
  684. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +174 -0
  685. package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -0
  686. package/lib/types/dsh-adapter/channel/core/session-switch.js +390 -0
  687. package/lib/types/dsh-adapter/channel/core/sessions.d.ts +40 -0
  688. package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -0
  689. package/lib/types/dsh-adapter/channel/core/sessions.js +268 -0
  690. package/lib/types/dsh-adapter/channel/decisions.d.ts +4 -3
  691. package/lib/types/dsh-adapter/channel/decisions.d.ts.map +1 -1
  692. package/lib/types/dsh-adapter/channel/decisions.js +4 -4
  693. package/lib/types/dsh-adapter/channel/emitter.d.ts +15 -2
  694. package/lib/types/dsh-adapter/channel/emitter.d.ts.map +1 -1
  695. package/lib/types/dsh-adapter/channel/emitter.js +5 -3
  696. package/lib/types/dsh-adapter/channel/extensions.d.ts +36 -0
  697. package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -0
  698. package/lib/types/dsh-adapter/channel/extensions.js +714 -0
  699. package/lib/types/dsh-adapter/channel/ide-selection.d.ts +1 -10
  700. package/lib/types/dsh-adapter/channel/ide-selection.d.ts.map +1 -1
  701. package/lib/types/dsh-adapter/channel/ide-selection.js +4 -46
  702. package/lib/types/dsh-adapter/channel/input-actions.d.ts +27 -4
  703. package/lib/types/dsh-adapter/channel/input-actions.d.ts.map +1 -1
  704. package/lib/types/dsh-adapter/channel/input-actions.js +240 -21
  705. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +21 -5
  706. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  707. package/lib/types/dsh-adapter/channel/input-delivery.js +65 -27
  708. package/lib/types/dsh-adapter/channel/local-actions.d.ts +10 -32
  709. package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
  710. package/lib/types/dsh-adapter/channel/local-actions.js +10 -78
  711. package/lib/types/dsh-adapter/channel/local-fs.d.ts +3 -0
  712. package/lib/types/dsh-adapter/channel/local-fs.d.ts.map +1 -0
  713. package/lib/types/dsh-adapter/channel/local-fs.js +46 -0
  714. package/lib/types/dsh-adapter/channel/mode-actions.d.ts +3 -3
  715. package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
  716. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +2 -2
  717. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  718. package/lib/types/dsh-adapter/channel/model-actions.d.ts +3 -3
  719. package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
  720. package/lib/types/dsh-adapter/channel/model-actions.js +38 -5
  721. package/lib/types/dsh-adapter/channel/model-switch.d.ts +2 -2
  722. package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
  723. package/lib/types/dsh-adapter/channel/model-switch.js +9 -6
  724. package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
  725. package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
  726. package/lib/types/dsh-adapter/channel/preferences.js +16 -0
  727. package/lib/types/dsh-adapter/channel/projection.d.ts +16 -13
  728. package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
  729. package/lib/types/dsh-adapter/channel/projection.js +38 -1143
  730. package/lib/types/dsh-adapter/channel/question-record.d.ts +3 -75
  731. package/lib/types/dsh-adapter/channel/question-record.d.ts.map +1 -1
  732. package/lib/types/dsh-adapter/channel/question-record.js +3 -107
  733. package/lib/types/dsh-adapter/channel/session-activity.d.ts +9 -0
  734. package/lib/types/dsh-adapter/channel/session-activity.d.ts.map +1 -0
  735. package/lib/types/dsh-adapter/channel/session-activity.js +42 -0
  736. package/lib/types/dsh-adapter/channel/session-adoption.d.ts +4 -4
  737. package/lib/types/dsh-adapter/channel/session-adoption.d.ts.map +1 -1
  738. package/lib/types/dsh-adapter/channel/session-adoption.js +3 -1
  739. package/lib/types/dsh-adapter/channel/session-fork.d.ts +1 -1
  740. package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
  741. package/lib/types/dsh-adapter/channel/session-fork.js +2 -1
  742. package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +7 -3
  743. package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -1
  744. package/lib/types/dsh-adapter/channel/session-live-adoption.js +1 -1
  745. package/lib/types/dsh-adapter/channel/session-metadata.d.ts +2 -9
  746. package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
  747. package/lib/types/dsh-adapter/channel/session-reset.d.ts +1 -1
  748. package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
  749. package/lib/types/dsh-adapter/channel/session-reset.js +4 -0
  750. package/lib/types/dsh-adapter/channel/session-resume.d.ts +5 -10
  751. package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
  752. package/lib/types/dsh-adapter/channel/session-resume.js +74 -113
  753. package/lib/types/dsh-adapter/channel/session-rewind.d.ts +4 -4
  754. package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
  755. package/lib/types/dsh-adapter/channel/session-rewind.js +7 -6
  756. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts +4 -4
  757. package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
  758. package/lib/types/dsh-adapter/channel/session-tree-actions.js +8 -7
  759. package/lib/types/dsh-adapter/channel/settings-host.d.ts +1 -1
  760. package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
  761. package/lib/types/dsh-adapter/channel/settings-host.js +8 -0
  762. package/lib/types/dsh-adapter/channel/skill-catalog.d.ts +5 -1
  763. package/lib/types/dsh-adapter/channel/skill-catalog.d.ts.map +1 -1
  764. package/lib/types/dsh-adapter/channel/skill-catalog.js +2 -2
  765. package/lib/types/dsh-adapter/channel/state.d.ts +72 -1
  766. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  767. package/lib/types/dsh-adapter/channel/state.js +7 -3
  768. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +58 -3
  769. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  770. package/lib/types/dsh-adapter/channel/subagent-projection.js +153 -9
  771. package/lib/types/dsh-adapter/channel/subagent-transcript.d.ts +114 -0
  772. package/lib/types/dsh-adapter/channel/subagent-transcript.d.ts.map +1 -0
  773. package/lib/types/dsh-adapter/channel/subagent-transcript.js +279 -0
  774. package/lib/types/dsh-adapter/channel/transcript.d.ts +7 -15
  775. package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
  776. package/lib/types/dsh-adapter/channel/transcript.js +17 -21
  777. package/lib/types/dsh-adapter/channel/types.d.ts +16 -7
  778. package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
  779. package/lib/types/dsh-adapter/channel/usage.d.ts +3 -23
  780. package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -1
  781. package/lib/types/dsh-adapter/channel/usage.js +5 -111
  782. package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
  783. package/lib/types/dsh-adapter/channel/workspace-actions.js +2 -1
  784. package/lib/types/dsh-adapter/channel.d.ts +17 -8
  785. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  786. package/lib/types/dsh-adapter/channel.js +24 -1059
  787. package/lib/types/dsh-adapter/context-occupancy.d.ts +6 -1
  788. package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
  789. package/lib/types/dsh-adapter/context-occupancy.js +6 -1
  790. package/lib/types/dsh-adapter/decision-guard.d.ts +24 -0
  791. package/lib/types/dsh-adapter/decision-guard.d.ts.map +1 -1
  792. package/lib/types/dsh-adapter/decision-guard.js +44 -0
  793. package/lib/types/dsh-adapter/extension-events.d.ts +4 -1
  794. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
  795. package/lib/types/dsh-adapter/extension-events.js +22 -10
  796. package/lib/types/dsh-adapter/index.d.ts +41 -3
  797. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  798. package/lib/types/dsh-adapter/index.js +28 -1
  799. package/lib/types/dsh-adapter/jobs.d.ts +5 -3
  800. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  801. package/lib/types/dsh-adapter/jobs.js +53 -14
  802. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -16
  803. package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
  804. package/lib/types/dsh-adapter/migrate/parse/jsonl.js +3 -29
  805. package/lib/types/dsh-adapter/oauth-credential-source.d.ts +34 -0
  806. package/lib/types/dsh-adapter/oauth-credential-source.d.ts.map +1 -0
  807. package/lib/types/dsh-adapter/oauth-credential-source.js +66 -0
  808. package/lib/types/dsh-adapter/plugin.d.ts +38 -2
  809. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  810. package/lib/types/dsh-adapter/plugin.js +546 -110
  811. package/lib/types/dsh-adapter/provider-model-capabilities.d.ts +10 -0
  812. package/lib/types/dsh-adapter/provider-model-capabilities.d.ts.map +1 -0
  813. package/lib/types/dsh-adapter/provider-model-capabilities.js +80 -0
  814. package/lib/types/dsh-adapter/providerWizard.d.ts +8 -2
  815. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  816. package/lib/types/dsh-adapter/providerWizard.js +118 -52
  817. package/lib/types/dsh-adapter/questions.d.ts +29 -124
  818. package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
  819. package/lib/types/dsh-adapter/questions.js +33 -267
  820. package/lib/types/dsh-adapter/recap.d.ts +3 -15
  821. package/lib/types/dsh-adapter/recap.d.ts.map +1 -1
  822. package/lib/types/dsh-adapter/recap.js +3 -46
  823. package/lib/types/dsh-adapter/sanitize.d.ts +4 -44
  824. package/lib/types/dsh-adapter/sanitize.d.ts.map +1 -1
  825. package/lib/types/dsh-adapter/sanitize.js +4 -84
  826. package/lib/types/dsh-adapter/session-mount-heartbeat.d.ts +3 -1
  827. package/lib/types/dsh-adapter/session-mount-heartbeat.d.ts.map +1 -1
  828. package/lib/types/dsh-adapter/session-mount-heartbeat.js +4 -2
  829. package/lib/types/dsh-adapter/sessions/digest.d.ts +18 -3
  830. package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
  831. package/lib/types/dsh-adapter/sessions/digest.js +60 -27
  832. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
  833. package/lib/types/dsh-adapter/sessions/list.js +6 -4
  834. package/lib/types/dsh-adapter/sessions/recovery.d.ts +2 -2
  835. package/lib/types/dsh-adapter/sessions/recovery.d.ts.map +1 -1
  836. package/lib/types/dsh-adapter/sessions/recovery.js +23 -14
  837. package/lib/types/dsh-adapter/sessions/store.d.ts +2 -0
  838. package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
  839. package/lib/types/dsh-adapter/sessions/store.js +1 -0
  840. package/lib/types/dsh-adapter/sessions/types.d.ts +2 -0
  841. package/lib/types/dsh-adapter/sessions/types.d.ts.map +1 -1
  842. package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
  843. package/lib/types/dsh-adapter/sideQuestion.js +3 -13
  844. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  845. package/lib/types/dsh-adapter/subagents.js +7 -0
  846. package/lib/types/dsh-adapter/themes.d.ts +1 -1
  847. package/lib/types/dsh-adapter/themes.d.ts.map +1 -1
  848. package/lib/types/dsh-adapter/trajectory/agent-source.d.ts +84 -0
  849. package/lib/types/dsh-adapter/trajectory/agent-source.d.ts.map +1 -0
  850. package/lib/types/dsh-adapter/trajectory/agent-source.js +601 -0
  851. package/lib/types/dsh-adapter/trajectory/guards.d.ts +31 -1
  852. package/lib/types/dsh-adapter/trajectory/guards.d.ts.map +1 -1
  853. package/lib/types/dsh-adapter/trajectory/guards.js +28 -0
  854. package/lib/types/dsh-adapter/trajectory/index.d.ts +3 -1
  855. package/lib/types/dsh-adapter/trajectory/index.d.ts.map +1 -1
  856. package/lib/types/dsh-adapter/trajectory/index.js +1 -0
  857. package/lib/types/dsh-adapter/trajectory/inspect.d.ts +7 -0
  858. package/lib/types/dsh-adapter/trajectory/inspect.d.ts.map +1 -1
  859. package/lib/types/dsh-adapter/trajectory/inspect.js +70 -2
  860. package/lib/types/dsh-adapter/trajectory/projection.d.ts +4 -0
  861. package/lib/types/dsh-adapter/trajectory/projection.d.ts.map +1 -1
  862. package/lib/types/dsh-adapter/trajectory/projection.js +36 -0
  863. package/lib/types/dsh-adapter/trajectory/types.d.ts +13 -0
  864. package/lib/types/dsh-adapter/trajectory/types.d.ts.map +1 -1
  865. package/lib/types/effortPrefs.d.ts +7 -0
  866. package/lib/types/effortPrefs.d.ts.map +1 -1
  867. package/lib/types/effortPrefs.js +11 -2
  868. package/lib/types/handoffAck.d.ts +57 -0
  869. package/lib/types/handoffAck.d.ts.map +1 -0
  870. package/lib/types/handoffAck.js +154 -0
  871. package/lib/types/handoffEvents.d.ts +52 -0
  872. package/lib/types/handoffEvents.d.ts.map +1 -0
  873. package/lib/types/handoffEvents.js +128 -0
  874. package/lib/types/i18n.d.ts +3189 -68
  875. package/lib/types/i18n.d.ts.map +1 -1
  876. package/lib/types/i18n.js +855 -9
  877. package/lib/types/ink/colorize.d.ts.map +1 -1
  878. package/lib/types/ink/colorize.js +8 -2
  879. package/lib/types/ink/components/AlternateScreen.d.ts +12 -1
  880. package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -1
  881. package/lib/types/ink/components/AlternateScreen.js +25 -4
  882. package/lib/types/ink/components/App.d.ts +5 -1
  883. package/lib/types/ink/components/App.d.ts.map +1 -1
  884. package/lib/types/ink/components/App.js +52 -5
  885. package/lib/types/ink/components/Image.d.ts +8 -1
  886. package/lib/types/ink/components/Image.d.ts.map +1 -1
  887. package/lib/types/ink/components/Image.js +2 -2
  888. package/lib/types/ink/components/Text.d.ts +8 -1
  889. package/lib/types/ink/components/Text.d.ts.map +1 -1
  890. package/lib/types/ink/components/Text.js +11 -1
  891. package/lib/types/ink/dom.d.ts.map +1 -1
  892. package/lib/types/ink/dom.js +75 -3
  893. package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
  894. package/lib/types/ink/hooks/use-input.js +9 -4
  895. package/lib/types/ink/ink.d.ts.map +1 -1
  896. package/lib/types/ink/ink.js +8 -2
  897. package/lib/types/ink/kitty-graphics.d.ts +7 -2
  898. package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
  899. package/lib/types/ink/kitty-graphics.js +15 -7
  900. package/lib/types/ink/node-cache.d.ts +15 -1
  901. package/lib/types/ink/node-cache.d.ts.map +1 -1
  902. package/lib/types/ink/node-cache.js +4 -1
  903. package/lib/types/ink/output.d.ts.map +1 -1
  904. package/lib/types/ink/output.js +2 -0
  905. package/lib/types/ink/parse-keypress.d.ts +13 -0
  906. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  907. package/lib/types/ink/parse-keypress.js +438 -19
  908. package/lib/types/ink/reconciler.d.ts.map +1 -1
  909. package/lib/types/ink/reconciler.js +9 -0
  910. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  911. package/lib/types/ink/render-node-to-output.js +200 -4
  912. package/lib/types/ink/render-stats.d.ts +35 -0
  913. package/lib/types/ink/render-stats.d.ts.map +1 -0
  914. package/lib/types/ink/render-stats.js +53 -0
  915. package/lib/types/ink/sixel-codec.d.ts +11 -1
  916. package/lib/types/ink/sixel-codec.d.ts.map +1 -1
  917. package/lib/types/ink/sixel-codec.js +10 -3
  918. package/lib/types/ink/sixel-graphics.js +2 -2
  919. package/lib/types/ink/styles.d.ts +46 -0
  920. package/lib/types/ink/styles.d.ts.map +1 -1
  921. package/lib/types/ink/terminal-image.d.ts +7 -0
  922. package/lib/types/ink/terminal-image.d.ts.map +1 -1
  923. package/lib/types/ink/terminal-querier.d.ts +1 -1
  924. package/lib/types/ink/terminal-querier.js +4 -4
  925. package/lib/types/ink/text-decoration.d.ts +49 -0
  926. package/lib/types/ink/text-decoration.d.ts.map +1 -0
  927. package/lib/types/ink/text-decoration.js +235 -0
  928. package/lib/types/ink/update-overflow-guard.d.ts +9 -0
  929. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  930. package/lib/types/ink/update-overflow-guard.js +41 -0
  931. package/lib/types/ink/wrap-text.d.ts.map +1 -1
  932. package/lib/types/ink/wrap-text.js +5 -1
  933. package/lib/types/kernelPrefs.d.ts +51 -0
  934. package/lib/types/kernelPrefs.d.ts.map +1 -0
  935. package/lib/types/kernelPrefs.js +126 -0
  936. package/lib/types/modelRecents.d.ts +10 -2
  937. package/lib/types/modelRecents.d.ts.map +1 -1
  938. package/lib/types/modelRecents.js +20 -7
  939. package/lib/types/screens/AgentTranscriptScene.d.ts +42 -0
  940. package/lib/types/screens/AgentTranscriptScene.d.ts.map +1 -0
  941. package/lib/types/screens/AgentTranscriptScene.js +269 -0
  942. package/lib/types/screens/Chat.d.ts +45 -7
  943. package/lib/types/screens/Chat.d.ts.map +1 -1
  944. package/lib/types/screens/Chat.js +625 -113
  945. package/lib/types/screens/Launchpad.d.ts +24 -7
  946. package/lib/types/screens/Launchpad.d.ts.map +1 -1
  947. package/lib/types/screens/Launchpad.js +147 -28
  948. package/lib/types/screens/SessionSupervisor.d.ts +3 -3
  949. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  950. package/lib/types/screens/SessionSupervisor.js +69 -5
  951. package/lib/types/screens/Settings.d.ts.map +1 -1
  952. package/lib/types/screens/Settings.js +211 -7
  953. package/lib/types/screens/StatusLine.d.ts +40 -1
  954. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  955. package/lib/types/screens/StatusLine.js +131 -19
  956. package/lib/types/screens/StatusMetrics.d.ts +53 -17
  957. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  958. package/lib/types/screens/StatusMetrics.js +141 -30
  959. package/lib/types/screens/TrajectoryScene.d.ts.map +1 -1
  960. package/lib/types/screens/TrajectoryScene.js +74 -12
  961. package/lib/types/screens/chat/backendCommands.d.ts +37 -0
  962. package/lib/types/screens/chat/backendCommands.d.ts.map +1 -0
  963. package/lib/types/screens/chat/backendCommands.js +51 -0
  964. package/lib/types/screens/chat/useBackendChannels.d.ts +20 -0
  965. package/lib/types/screens/chat/useBackendChannels.d.ts.map +1 -0
  966. package/lib/types/screens/chat/useBackendChannels.js +117 -0
  967. package/lib/types/screens/chat/useKernelPicker.d.ts +23 -0
  968. package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -0
  969. package/lib/types/screens/chat/useKernelPicker.js +72 -0
  970. package/lib/types/screens/chatOverlay.d.ts +32 -2
  971. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  972. package/lib/types/screens/chatOverlay.js +9 -0
  973. package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts.map +1 -1
  974. package/lib/types/screens/sessionSupervisor/useForeignSessions.js +5 -1
  975. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +14 -0
  976. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  977. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +97 -22
  978. package/lib/types/sessionHistory.d.ts +18 -1
  979. package/lib/types/sessionHistory.d.ts.map +1 -1
  980. package/lib/types/sessionHistory.js +46 -4
  981. package/lib/types/sessionPins.d.ts +7 -0
  982. package/lib/types/sessionPins.d.ts.map +1 -1
  983. package/lib/types/sessionPins.js +9 -0
  984. package/lib/types/sessions/resumeFailure.d.ts.map +1 -1
  985. package/lib/types/sessions/resumeFailure.js +2 -1
  986. package/lib/types/settings/definitions.d.ts +74 -0
  987. package/lib/types/settings/definitions.d.ts.map +1 -1
  988. package/lib/types/settings/definitions.js +50 -4
  989. package/lib/types/terminal-utils/hyperlink.d.ts +2 -2
  990. package/lib/types/terminal-utils/hyperlink.d.ts.map +1 -1
  991. package/lib/types/terminal-utils/hyperlink.js +21 -4
  992. package/lib/types/terminal-utils/markdown.d.ts +34 -6
  993. package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
  994. package/lib/types/terminal-utils/markdown.js +257 -66
  995. package/lib/types/theme.d.ts +49 -8
  996. package/lib/types/theme.d.ts.map +1 -1
  997. package/lib/types/theme.js +514 -18
  998. package/lib/types/tips.js +2 -2
  999. package/lib/types/trajectory/effortIgnition.d.ts +25 -7
  1000. package/lib/types/trajectory/effortIgnition.d.ts.map +1 -1
  1001. package/lib/types/trajectory/effortIgnition.js +106 -34
  1002. package/lib/types/trajectory/window.d.ts +26 -0
  1003. package/lib/types/trajectory/window.d.ts.map +1 -0
  1004. package/lib/types/trajectory/window.js +27 -0
  1005. package/lib/types/tuiDisplayPrefs.d.ts +38 -1
  1006. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  1007. package/lib/types/tuiDisplayPrefs.js +45 -1
  1008. package/lib/types/update.d.ts +88 -3
  1009. package/lib/types/update.d.ts.map +1 -1
  1010. package/lib/types/update.js +285 -18
  1011. package/lib/types/utils/crashDetail.d.ts +56 -0
  1012. package/lib/types/utils/crashDetail.d.ts.map +1 -0
  1013. package/lib/types/utils/crashDetail.js +175 -0
  1014. package/lib/types/utils/imageResize.d.ts +9 -23
  1015. package/lib/types/utils/imageResize.d.ts.map +1 -1
  1016. package/lib/types/utils/imageResize.js +24 -20
  1017. package/lib/types/utils/inputPaste.d.ts +9 -8
  1018. package/lib/types/utils/inputPaste.d.ts.map +1 -1
  1019. package/lib/types/utils/inputPaste.js +53 -16
  1020. package/lib/types/utils/jsonl.d.ts +24 -0
  1021. package/lib/types/utils/jsonl.d.ts.map +1 -0
  1022. package/lib/types/utils/jsonl.js +36 -0
  1023. package/package.json +18 -2
@@ -1,1146 +1,41 @@
1
- import { replaySelectionAttachment } from './ide-selection.js';
2
- import { isSubagentToolName, parseJobOutputId, toolCommandOf, BACKGROUND_START_ACK, todoPanelItems } from './projection-helpers.js';
3
- import { ARGS_PREVIEW_LIMIT, harnessToolResultView, LOCAL_OUTPUT_LIMIT, prepareReplayEvents, preview, RESULT_PREVIEW_LIMIT, toolErrorText } from './transcript.js';
4
- import { estimateTokens, isTokenDelta, tokenDeltaChars, usageOutputTokens } from './usage.js';
5
- import { transcriptImagesOf } from '../transcript-images.js';
6
- import { isCompactionCheckpointSource, toolResultPayload } from '../compat/messages.js';
7
- import { addUsageToCostBuckets, emptyCostBuckets, isPeakHour } from '../../deepseekPricing.js';
8
- import { t } from '../../i18n.js';
9
- import { logForDebugging } from '../../utils/debug.js';
10
- import { cleanRenderText } from '../sanitize.js';
11
- import { NOTICE_CELLS } from './decisions.js';
12
- import { markChannelReadDirty } from '../../adapter/channel/read-view.js';
13
- import { buildQuestionRecord, parseQuestionRecordAnswers, parseQuestionRecordQuestions, } from './question-record.js';
14
- /** One authoritative reducer for both durable replay and live session events. */
1
+ import { createChannelProjection as createSharedProjection } from '../../channel/projection.js';
2
+ import { createDshTranslator, dshPricingWindow } from '../backend/translate.js';
3
+ const LIVE = { replay: false };
4
+ const REPLAY = { replay: true };
5
+ /** One reducer for both durable replay and live session events. */
15
6
  export function createChannelProjection(state, deps) {
16
- /** The in-progress assistant text row; `undefined` when no step is streaming. */
17
- let streaming;
18
- /** The in-progress reasoning row; `undefined` when no reasoning is streaming. */
19
- let reasoning;
20
- /** Reasoning rows sealed this turn. Full mode keeps them expanded until
21
- * turn/end without leaving their streaming spinner active. */
22
- const sealedReasoning = [];
23
- /** Wall-clock start of the current reasoning row (durationMs on settle). */
24
- let reasoningStart = 0;
25
- /** Decode-throughput fold for the current turn. DSH defines one step as
26
- * one model call plus its tools; summing only first-token → message spans
27
- * excludes tool execution and per-request TTFT from generation speed. */
28
- let tpsTurn;
29
- let tpsBeforeTurn;
30
- let tpsTurnDecodeMs = 0;
31
- let tpsTurnDecodeTokens = 0;
32
- let tpsTurnSampled = false;
33
- let tpsStep;
34
- /** Tool cards by callId, so tool/result can settle the running card. */
35
- const toolCards = new Map();
36
- /**
37
- * `ask_user_question` calls by callId, holding their raw arguments. The ask
38
- * renders as the interactive panel rather than a tool card, so its result
39
- * has no card to settle — but the answered record is still a transcript
40
- * fact and must come from the durable log (issue #1009), never from the
41
- * view. Remembering the call lets `tool/result` derive that record on the
42
- * live stream AND on every replay (`/resume`, rewind, model switch).
43
- */
44
- const askCalls = new Map();
45
- /**
46
- * Session events are delivered live and can also be replayed around a
47
- * reconnect. A repeated sealed message must not create a second assistant
48
- * row for the same durable sequence number.
49
- */
50
- const handledAssistantMessages = new Set();
51
- const handledAssistantChunks = new Set();
52
- /** One Agent runs one request at a time. Durable step boundaries also let
53
- * a freshly attached projector accept chunks whose start it missed. */
54
- let openStep;
55
- let activeAttempt;
56
- let lastStreamRevision = -1;
57
- /** 最近一次 request/header 的模型:durable usage 的模型归属真源。replay
58
- * 会按历史请求逐个还原,因此 /model 切换(reset + replay 整个 seed)
59
- * 不会把换模型前的用量重估到新模型;旧日志没有 header 时回退
60
- * 事件发生时的 state.model(AC-A4)。 */
61
- let eventModel;
62
- const assistantRowsByStep = new Map();
63
- const lastTextDelta = new Map();
64
- const stepKey = (turn, step) => `${turn}:${step}`;
65
- const touchRow = (row) => { markChannelReadDirty(row); markChannelReadDirty(state.rows); };
66
- const appendRow = (row) => { state.rows.push(row); markChannelReadDirty(state.rows); };
67
- const removeRow = (row) => {
68
- const index = state.rows.indexOf(row);
69
- if (index !== -1) {
70
- state.rows.splice(index, 1);
71
- markChannelReadDirty(state.rows);
72
- }
73
- if (streaming === row)
74
- streaming = undefined;
75
- if (reasoning === row)
76
- reasoning = undefined;
77
- if (lastReasoningRow?.row === row)
78
- lastReasoningRow = undefined;
79
- const sealedIndex = sealedReasoning.indexOf(row);
80
- if (sealedIndex !== -1)
81
- sealedReasoning.splice(sealedIndex, 1);
82
- lastTextDelta.delete(row);
7
+ const translator = createDshTranslator({
8
+ tools: () => deps.tools,
9
+ scope: () => deps.agent(),
10
+ attachments: () => deps.attachments(),
11
+ });
12
+ const projector = createSharedProjection(state, {
13
+ rowIds: deps.rowIds,
14
+ resetContextWarning: () => deps.resetContextWarning(),
15
+ checkContextWarning: () => deps.checkContextWarning(),
16
+ notify: (...args) => deps.notify(...args),
17
+ jobs: deps.jobs,
18
+ inputConvergence: deps.inputConvergence,
19
+ renderer: deps.renderer,
20
+ selectionAttached: messageId => deps.selectionAttached(messageId),
21
+ pricingWindow: dshPricingWindow,
22
+ });
23
+ return {
24
+ /** Forget every per-session ledger on both halves. */
25
+ reset() {
26
+ translator.reset();
27
+ projector.reset();
28
+ },
29
+ replayEvents(events) {
30
+ projector.apply(translator.translateReplay(events), REPLAY);
31
+ },
32
+ renderEvent(event) {
33
+ projector.apply(translator.translateEvent(event), LIVE);
34
+ },
35
+ renderStreamFrame(frame) {
36
+ projector.apply(translator.translateFrame(frame), LIVE);
37
+ },
38
+ settleStreaming: projector.settleStreaming,
39
+ updateSpinnerMode: projector.updateSpinnerMode,
83
40
  };
84
- const discardAttempt = (turn, step) => {
85
- const key = stepKey(turn, step);
86
- const row = assistantRowsByStep.get(key);
87
- if (row !== undefined && row.seq === undefined) {
88
- state.responseChars = Math.max(0, state.responseChars - row.text.length);
89
- removeRow(row);
90
- assistantRowsByStep.delete(key);
91
- }
92
- if (lastReasoningRow !== undefined && lastReasoningRow.turn === turn && lastReasoningRow.step === step && lastReasoningRow.row.seq === undefined) {
93
- removeRow(lastReasoningRow.row);
94
- }
95
- if (activeAttempt !== undefined && activeAttempt.turn === turn && activeAttempt.step === step)
96
- activeAttempt = undefined;
97
- if (tpsStep !== undefined && tpsStep.turn === turn && tpsStep.step === step) {
98
- tpsStep.firstTokenTime = undefined;
99
- tpsStep.outputChars = 0;
100
- }
101
- updateSpinnerMode();
102
- };
103
- /** Durable session image blocks, loaded lazily through the attachment
104
- * store. Projection never reads pixels; the UI decodes on demand. */
105
- const transcriptImages = (content) => transcriptImagesOf(content, deps.attachments);
106
- /** V3 deltas are ordered by frame revision and must stay byte-exact.
107
- * Legacy reconnect/proxy events may instead repeat a cumulative prefix. */
108
- const appendTextDelta = (row, delta, legacy) => {
109
- if (delta === '')
110
- return;
111
- if (!legacy) {
112
- row.text += delta;
113
- touchRow(row);
114
- return;
115
- }
116
- if (lastTextDelta.get(row) === delta)
117
- return;
118
- lastTextDelta.set(row, delta);
119
- if (delta.startsWith(row.text)) {
120
- row.text = delta;
121
- touchRow(row);
122
- return;
123
- }
124
- const maxOverlap = Math.min(row.text.length, delta.length, 4096);
125
- for (let size = maxOverlap; size > 0; size--) {
126
- if (row.text.endsWith(delta.slice(0, size))) {
127
- row.text += delta.slice(size);
128
- touchRow(row);
129
- return;
130
- }
131
- }
132
- row.text += delta;
133
- touchRow(row);
134
- };
135
- /** The host-plane tools registry (dsh-tools). Resolved once; absent in
136
- * bare embedders — every presenter call soft-fails to undefined and the
137
- * card falls back to raw text. */
138
- const toolsRegistry = deps.tools;
139
- /** Ask the producing tool how its call should render (diff/terminal/…).
140
- * Scoped to the live agent so preset-owned tool definitions resolve —
141
- * the dsh-host-apiproxy presenter pattern. Unknown tool, unparseable
142
- * args, or a throwing presenter all degrade to the plain text card. */
143
- const presentCallView = (name, rawArgs) => {
144
- try {
145
- const tool = toolsRegistry?.get(name, deps.agent());
146
- if (tool?.presentCall === undefined)
147
- return undefined;
148
- return tool.presentCall(JSON.parse(rawArgs));
149
- }
150
- catch {
151
- return undefined;
152
- }
153
- };
154
- /** Same for the settled result; `meta` is the tool-private presentation
155
- * payload the tool attached to its tool/result event (dsh-tool-fs reads
156
- * its result-time contextual diff back from here). */
157
- const presentResultView = (name, rawArgs, data) => {
158
- try {
159
- // Harness goal/todo tools first: their raw JSON reads as noise in the
160
- // transcript — fold recognizable shapes into a summary card before the
161
- // registry gets a chance to (not) know them.
162
- const local = harnessToolResultView(name, data);
163
- if (local !== undefined)
164
- return local;
165
- const tool = toolsRegistry?.get(name, deps.agent());
166
- if (tool?.presentResult === undefined)
167
- return undefined;
168
- return tool.presentResult(JSON.parse(rawArgs), {
169
- ...toolResultPayload(data.message),
170
- ...(data.meta !== undefined ? { meta: data.meta } : {}),
171
- });
172
- }
173
- catch {
174
- return undefined;
175
- }
176
- };
177
- // ContentBlockMap is merge-extensible: plugin-added block types are
178
- // silently skipped (v1 renders text blocks only) — never crashes.
179
- const textOf = (content) => (content ?? []).map(block => (block.type === 'text' ? block.text : '')).join('').trim();
180
- /**
181
- * Transcript-facing text of a user message: the FIRST text block only.
182
- * `@`-mention attachments (issue #15) ride as later blocks — model-facing
183
- * only — so joining every block would dump file contents into the bubble,
184
- * the sticky header, and session titles.
185
- */
186
- const firstTextOf = (content) => (content ?? []).find(block => block.type === 'text')?.text.trim() ?? '';
187
- const ensureStreaming = (seq) => {
188
- if (streaming !== undefined)
189
- return streaming;
190
- // A reconnect can replay the first delta after the sealed message was
191
- // already observed. Reuse that durable row instead of opening a second
192
- // assistant bubble for the same event sequence.
193
- const existing = seq === undefined
194
- ? undefined
195
- : [...state.rows].reverse().find(row => row.kind === 'assistant' && row.seq === seq);
196
- if (existing !== undefined) {
197
- existing.streaming = true;
198
- touchRow(existing);
199
- streaming = existing;
200
- return existing;
201
- }
202
- streaming = { id: deps.rowIds.value, kind: 'assistant', text: '', streaming: true, fresh: true, ...seq !== undefined ? { seq } : {} };
203
- deps.rowIds.value += 1;
204
- appendRow(streaming);
205
- return streaming;
206
- };
207
- /** Latest reasoning row keyed by its (turn, step) — lets a resumed
208
- * mid-step stream REVIVE the row the replay sealed (crash-orphan tail:
209
- * replay folds the partial row, live continuation chunks would
210
- * otherwise open a SECOND row for the same step, splitting one
211
- * thinking block in two). */
212
- let lastReasoningRow;
213
- const ensureReasoning = (seq, turn, step) => {
214
- if (reasoning === undefined) {
215
- // Same-step revive: the sealed row is this step's thinking — continue
216
- // it (durationMs carried over via reasoningStart back-dating).
217
- if (lastReasoningRow !== undefined &&
218
- turn !== undefined &&
219
- lastReasoningRow.turn === turn &&
220
- lastReasoningRow.step === step) {
221
- reasoning = lastReasoningRow.row;
222
- reasoning.streaming = true;
223
- reasoning.thinkingOpen = false;
224
- touchRow(reasoning);
225
- const sealedIdx = sealedReasoning.indexOf(reasoning);
226
- if (sealedIdx !== -1)
227
- sealedReasoning.splice(sealedIdx, 1);
228
- reasoningStart = Date.now() - (reasoning.durationMs ?? 0);
229
- logForDebugging('thinking: revived sealed reasoning row for same step');
230
- return reasoning;
231
- }
232
- reasoningStart = Date.now();
233
- reasoning = { id: deps.rowIds.value, kind: 'reasoning', text: '', streaming: true, ...seq !== undefined ? { seq } : {} };
234
- deps.rowIds.value += 1;
235
- appendRow(reasoning);
236
- logForDebugging('thinking: reasoning row open (expanded)');
237
- }
238
- if (turn !== undefined && step !== undefined) {
239
- lastReasoningRow = { row: reasoning, turn, step };
240
- }
241
- return reasoning;
242
- };
243
- /** Settle live reasoning the moment the model moves PAST
244
- * thinking — the answer's first text token or a tool call — not at
245
- * `assistant/message` (end of step). A long reply pushes the thinking
246
- * block into terminal scrollback long before the message seals, and
247
- * scrollback rows cannot be repainted (the cursor cannot reach them),
248
- * so a late fold leaves a stale unfolded preview frozen above the
249
- * window — the user scrolls up and the thinking looks "not folded".
250
- * Folding while the block still sits in the live window keeps the
251
- * shrink inside the diff engine's reachable region. Full mode keeps the
252
- * settled block open separately, so its spinner can stop immediately. */
253
- const settleLiveReasoning = (where) => {
254
- if (reasoning === undefined)
255
- return;
256
- const duration = Math.max(0, Date.now() - reasoningStart);
257
- reasoning.durationMs = duration;
258
- reasoning.streaming = false;
259
- reasoning.thinkingOpen = state.thinkingFold === 'full';
260
- touchRow(reasoning);
261
- sealedReasoning.push(reasoning);
262
- reasoning = undefined;
263
- logForDebugging(`thinking: folded at ${where} (${duration}ms)`);
264
- };
265
- const settleStreaming = () => {
266
- if (streaming !== undefined) {
267
- streaming.streaming = false;
268
- touchRow(streaming);
269
- }
270
- streaming = undefined;
271
- const folded = sealedReasoning.length + (reasoning !== undefined ? 1 : 0);
272
- for (const row of sealedReasoning) {
273
- row.streaming = false;
274
- row.thinkingOpen = false;
275
- touchRow(row);
276
- }
277
- sealedReasoning.length = 0;
278
- if (reasoning !== undefined) {
279
- reasoning.streaming = false;
280
- reasoning.thinkingOpen = false;
281
- reasoning.durationMs = Math.max(0, Date.now() - reasoningStart);
282
- touchRow(reasoning);
283
- }
284
- reasoning = undefined;
285
- if (folded > 0)
286
- logForDebugging(`thinking: folded ${folded} reasoning row(s) at turn settle`);
287
- };
288
- /**
289
- * Project one answered `ask_user_question` result into the transcript.
290
- *
291
- * The row shape reuses what `pushLocal` emits (`local` title + one
292
- * `local-output` per line), so rendering, preview clipping and the local
293
- * rows' fold exemption all keep their existing behavior. A failed ask
294
- * renders the log's own error text — never a fabricated answer (the ask
295
- * was cancelled/aborted, so no human ever chose anything).
296
- */
297
- const projectAskResult = (event, rawArguments) => {
298
- const append = (record) => {
299
- appendRow({ id: deps.rowIds.value, kind: 'local', text: record.title, seq: event.seq });
300
- deps.rowIds.value += 1;
301
- for (const line of record.lines) {
302
- appendRow({
303
- id: deps.rowIds.value,
304
- kind: 'local-output',
305
- text: preview(line, LOCAL_OUTPUT_LIMIT),
306
- seq: event.seq,
307
- });
308
- deps.rowIds.value += 1;
309
- }
310
- };
311
- if (event.data.error !== undefined || toolResultPayload(event.data.message).isError) {
312
- const errorText = toolErrorText(event);
313
- append({ title: errorText, lines: [] });
314
- return;
315
- }
316
- const answers = parseQuestionRecordAnswers(textOf(toolResultPayload(event.data.message).content));
317
- // No parseable answers (unparseable durable payload, or an older host):
318
- // `answers: []` still yields the title, so the transcript shows that a
319
- // questionnaire happened instead of dropping the fact silently.
320
- append(buildQuestionRecord(parseQuestionRecordQuestions(rawArguments), answers ?? []));
321
- };
322
- /** Recompute the spinner phase from live row/tool state. */
323
- const updateSpinnerMode = () => {
324
- if (state.activeToolCount > 0) {
325
- state.spinnerMode = 'tool-use';
326
- }
327
- else if (reasoning !== undefined) {
328
- // Only LIVE reasoning counts — sealed rows stay streaming=true for
329
- // transcript expansion until turn/end but the model is past thinking.
330
- state.spinnerMode = 'thinking';
331
- }
332
- else if (streaming !== undefined) {
333
- state.spinnerMode = 'responding';
334
- }
335
- else {
336
- state.spinnerMode = 'requesting';
337
- }
338
- };
339
- /** Fold one goal mutation into the channel's goal projection. */
340
- const applyGoalChange = (change) => {
341
- if (change.operation === 'clear') {
342
- state.goal = undefined;
343
- }
344
- else if (change.goal !== undefined) {
345
- state.goal = {
346
- ...change.goal,
347
- roundsStarted: change.roundsStarted ?? state.goal?.roundsStarted ?? 0,
348
- };
349
- }
350
- };
351
- /**
352
- * Fold one goal-sourced message into the channel's goal projection.
353
- * Round-zero goal messages may carry the full durable snapshot (or a clear
354
- * tombstone) in their source; positive-round messages are admitted
355
- * continuation prompts that only advance the rounds counter.
356
- */
357
- const applyGoalEvent = (event) => {
358
- const source = event.data.source;
359
- if (source.round > 0) {
360
- // Admitted continuation round — the snapshot itself is unchanged.
361
- if (state.goal !== undefined) {
362
- state.goal = {
363
- ...state.goal,
364
- roundsStarted: Math.max(state.goal.roundsStarted, source.round),
365
- };
366
- }
367
- return;
368
- }
369
- const change = source.change;
370
- // oxlint-disable-next-line typescript/no-unnecessary-condition -- durable replay data may not match the static type
371
- if (change === undefined || change.kind !== 'goal/change')
372
- return;
373
- applyGoalChange(change);
374
- };
375
- /** Replay paints settled history without the live smooth-reveal animation. */
376
- let replaying = false;
377
- const replayEvents = (events) => {
378
- // Event sequence numbers restart with a replacement session; reset the
379
- // idempotency ledger before replay so an old session cannot suppress a
380
- // legitimate message in the new transcript.
381
- handledAssistantMessages.clear();
382
- handledAssistantChunks.clear();
383
- openStep = undefined;
384
- activeAttempt = undefined;
385
- lastStreamRevision = -1;
386
- eventModel = undefined;
387
- assistantRowsByStep.clear();
388
- lastTextDelta.clear();
389
- replaying = true;
390
- try {
391
- for (const event of prepareReplayEvents(events))
392
- renderEvent(event);
393
- }
394
- finally {
395
- replaying = false;
396
- }
397
- };
398
- /**
399
- * One live stream delta, from a 0.1.5 `agent/assistant-stream` chunk frame
400
- * or a legacy `assistant/chunk` session event (pre-0.1.5 hosts and raw
401
- * pre-V3 logs). `seq` exists only on the durable-event path.
402
- */
403
- const renderStreamChunk = (turn, step, chunk, time, seq) => {
404
- if (chunk.type === 'text-delta') {
405
- if (chunk.text) {
406
- // Fold the thinking preview while it is still in the live
407
- // window (see settleLiveReasoning) — before this text grows the
408
- // transcript and pushes the block into scrollback.
409
- settleLiveReasoning('first text token');
410
- const key = stepKey(turn, step);
411
- const row = assistantRowsByStep.get(key) ?? ensureStreaming(seq);
412
- assistantRowsByStep.set(key, row);
413
- streaming = row;
414
- row.streaming = true;
415
- touchRow(row);
416
- const before = row.text.length;
417
- appendTextDelta(row, chunk.text, seq !== undefined);
418
- state.responseChars += Math.max(0, row.text.length - before);
419
- }
420
- }
421
- else if (chunk.type === 'reasoning-delta') {
422
- if (chunk.text) {
423
- const row = ensureReasoning(seq, turn, step);
424
- appendTextDelta(row, chunk.text, seq !== undefined);
425
- }
426
- }
427
- const tps = tpsStep;
428
- if (tps !== undefined &&
429
- tps.turn === turn &&
430
- tps.step === step &&
431
- isTokenDelta(chunk)) {
432
- tps.firstTokenTime ??= time;
433
- tps.outputChars += tokenDeltaChars(chunk);
434
- const elapsedMs = Math.max(0, time - tps.firstTokenTime);
435
- if (elapsedMs > 500) {
436
- const decodeMs = tpsTurnDecodeMs + elapsedMs;
437
- const outputTokens = tpsTurnDecodeTokens + Math.ceil(tps.outputChars / 4);
438
- state.tps = outputTokens / (decodeMs / 1000);
439
- }
440
- }
441
- updateSpinnerMode();
442
- };
443
- /**
444
- * Live assistant stream frame (0.1.5+): the transient per-token counterpart
445
- * of the durable `assistant/message`/`assistant/attempt` settlement. Start
446
- * frames own the attempt's (turn, step); a reattach rebuilds that pair
447
- * from the open durable step. Settlement owns the text; an abandoned end
448
- * must discard provisional rows even when no durable event was written.
449
- */
450
- const renderStreamFrame = (frame) => {
451
- if (frame.revision <= lastStreamRevision)
452
- return;
453
- lastStreamRevision = frame.revision;
454
- if (frame.type === 'start') {
455
- if (activeAttempt !== undefined)
456
- discardAttempt(activeAttempt.turn, activeAttempt.step);
457
- activeAttempt = { attemptId: frame.attemptId, turn: frame.turn, step: frame.step };
458
- return;
459
- }
460
- if (frame.type === 'end') {
461
- if (activeAttempt?.attemptId !== frame.attemptId)
462
- return;
463
- if (frame.outcome.kind === 'abandoned' || frame.outcome.eventType === 'assistant/attempt') {
464
- discardAttempt(activeAttempt.turn, activeAttempt.step);
465
- }
466
- activeAttempt = undefined;
467
- return;
468
- }
469
- if (activeAttempt === undefined && openStep !== undefined) {
470
- activeAttempt = { attemptId: frame.attemptId, ...openStep };
471
- }
472
- const where = activeAttempt?.attemptId === frame.attemptId ? activeAttempt : undefined;
473
- if (where === undefined)
474
- return;
475
- renderStreamChunk(where.turn, where.step, frame.chunk, frame.time);
476
- };
477
- const renderEvent = (event) => {
478
- // Top-level `goal/change` events are how the goal service actually
479
- // records durable goal mutations (create/edit/pause/resume/complete/
480
- // block/clear) — confirmed in production logs. The pinned peer's
481
- // SessionEvent union predates the type, so admit it structurally: the
482
- // goal chip and panel stay dark without this fold.
483
- if (event.type === 'goal/change') {
484
- applyGoalChange(event.data);
485
- return;
486
- }
487
- switch (event.type) {
488
- case 'user/message': {
489
- // Both legacy and V4 checkpoints render as a folded summary rather
490
- // than disappearing with the other injected context.
491
- if (isCompactionCheckpointSource(event.data.source)) {
492
- const summary = textOf(event.data.content);
493
- appendRow({ id: deps.rowIds.value, kind: 'notice', text: t('compact-done') });
494
- deps.rowIds.value += 1;
495
- if (summary) {
496
- appendRow({ id: deps.rowIds.value, kind: 'compact', text: summary });
497
- deps.rowIds.value += 1;
498
- }
499
- // The checkpoint replaces the whole pre-compact surface. Occupancy
500
- // needs no rewriting here: the official token meter folds this same
501
- // event and reprices the surface by its logged shadow price, so the
502
- // channel's `contextOccupancy` drops the moment the checkpoint lands
503
- // (the projection's change feed republishes the footer). The old
504
- // chars/4 rewrite below was a worse estimate of a number the host
505
- // already knows: it ignored the retained tail the official
506
- // `compaction-basic` keeps (default `retainRatio` 0.16), ignored the
507
- // tool catalog, and could not see the summary's real size.
508
- //
509
- // The SEGMENTED bar keeps its own heuristic composition (system +
510
- // the summary prompt): it describes what the surface is made of,
511
- // never the occupancy total.
512
- state.contextSegments = {
513
- system: state.contextSegments.system,
514
- prompt: estimateTokens(summary),
515
- assistant: 0,
516
- thinking: 0,
517
- tools: 0,
518
- };
519
- // The latch must release: compaction is the remediation for a low
520
- // context, so the warning has to be able to fire again afterwards.
521
- deps.resetContextWarning();
522
- break;
523
- }
524
- // Same-session goal domain: goal-sourced messages are the round
525
- // driver's continuation prompts (positive rounds advance the
526
- // counter); some hosts also inline the durable snapshot in a
527
- // round-zero source. They are not transcript bubbles — they drive
528
- // the goal panel's live projection (replayed on resume/rewind like
529
- // every other event; the snapshot itself arrives as the top-level
530
- // `goal/change` event admitted above).
531
- if (event.data.source.kind === 'goal') {
532
- applyGoalEvent(event);
533
- break;
534
- }
535
- // Injected context (plugin/skill source) is not a human bubble; v1
536
- // renders direct human prompts only.
537
- if (event.data.source.kind !== 'user')
538
- break;
539
- const text = firstTextOf(event.data.content);
540
- const images = transcriptImages(event.data.content);
541
- if (text || images.length > 0) {
542
- // IDE selection indicator: the delivery path remembered what this
543
- // message attached; the durable event carries the same message id.
544
- // On replay (session resumed in a NEW process) the in-memory map
545
- // starts empty, so the indicator falls back to the durable content
546
- // itself — the `<attached-file … selection>` block IS part of the
547
- // persisted event, and the session log is the source of truth
548
- // (maintainer review round 3: the indicator used to vanish after a
549
- // restart because nothing re-derived it from the event).
550
- const selectionAttached = deps.selectionAttached(event.data.id)
551
- ?? replaySelectionAttachment(event.data.content);
552
- appendRow({
553
- id: deps.rowIds.value,
554
- kind: 'user',
555
- text,
556
- ...(images.length === 0 ? {} : { images }),
557
- ...(selectionAttached === undefined ? {} : { selectionAttached }),
558
- seq: event.seq,
559
- });
560
- state.lastUserText = text || t('transcript-image-message', { count: images.length });
561
- // The context estimate counts everything sent to the model —
562
- // typed text AND the `@`-mention attachment blocks.
563
- state.contextSegments.prompt += estimateTokens(textOf(event.data.content));
564
- deps.rowIds.value += 1;
565
- }
566
- break;
567
- }
568
- case 'step/start': {
569
- openStep = { turn: event.data.turn, step: event.data.step };
570
- if (tpsTurn === event.data.turn) {
571
- tpsStep = {
572
- turn: event.data.turn,
573
- step: event.data.step,
574
- firstTokenTime: undefined,
575
- outputChars: 0,
576
- };
577
- }
578
- break;
579
- }
580
- case 'assistant/attempt': {
581
- discardAttempt(event.data.turn, event.data.step);
582
- break;
583
- }
584
- case 'assistant/message': {
585
- if (handledAssistantMessages.has(event.seq))
586
- break;
587
- handledAssistantMessages.add(event.seq);
588
- // V3 embeds its complete attempt stream; older settlements may omit
589
- // reasoning that is still durably recorded in assistant/chunk events.
590
- const canonical = Array.isArray(event.data.stream);
591
- const text = textOf(event.data.message.content);
592
- const images = transcriptImages(event.data.message.content);
593
- const reasoningText = event.data.message.content
594
- .map(block => (block.type === 'reasoning' ? block.text : ''))
595
- .join('');
596
- const settledReasoning = lastReasoningRow !== undefined && lastReasoningRow.turn === event.data.turn && lastReasoningRow.step === event.data.step
597
- ? lastReasoningRow.row : reasoning;
598
- if (settledReasoning !== undefined) {
599
- if (reasoningText === '') {
600
- if (canonical)
601
- removeRow(settledReasoning);
602
- }
603
- else {
604
- settledReasoning.text = reasoningText;
605
- settledReasoning.seq ??= event.seq;
606
- touchRow(settledReasoning);
607
- }
608
- }
609
- else if (reasoningText !== '') {
610
- // Replays and reattachments may not have seen any reasoning delta.
611
- // Insert before a live text row to preserve message block order.
612
- const rebuilt = {
613
- id: deps.rowIds.value,
614
- kind: 'reasoning',
615
- text: reasoningText,
616
- seq: event.seq,
617
- };
618
- deps.rowIds.value += 1;
619
- const textRow = assistantRowsByStep.get(stepKey(event.data.turn, event.data.step));
620
- const textIndex = textRow === undefined ? -1 : state.rows.indexOf(textRow);
621
- if (textIndex === -1)
622
- appendRow(rebuilt);
623
- else {
624
- state.rows.splice(textIndex, 0, rebuilt);
625
- markChannelReadDirty(state.rows);
626
- }
627
- }
628
- // Reasoning/tool-only steps emit no text: creating an assistant row
629
- // anyway leaves an empty `●` bullet in the transcript. A pre-existing
630
- // streaming row always has text (ensureStreaming is only reached on
631
- // non-empty text deltas), so only create one when text arrives.
632
- // Key the step→row ledger only when the event carries a durable
633
- // turn/step; a message without them must never collide onto a
634
- // previous step's row (a bare `undefined:undefined` key would make
635
- // every turn/step-less message reuse the FIRST one's assistant row).
636
- const msgTurn = event.data.turn;
637
- const msgStep = event.data.step;
638
- const msgKey = msgTurn !== undefined && msgStep !== undefined
639
- ? stepKey(msgTurn, msgStep)
640
- : undefined;
641
- const row = (msgKey !== undefined ? assistantRowsByStep.get(msgKey) : undefined) ?? streaming ??
642
- (text || images.length > 0
643
- ? ([...state.rows].reverse().find(candidate => candidate.kind === 'assistant' && candidate.seq === event.seq) ?? ensureStreaming(event.seq))
644
- : undefined);
645
- if (row !== undefined && canonical && !text && images.length === 0) {
646
- removeRow(row);
647
- if (msgKey !== undefined)
648
- assistantRowsByStep.delete(msgKey);
649
- }
650
- else if (row !== undefined) {
651
- if (msgKey !== undefined)
652
- assistantRowsByStep.set(msgKey, row);
653
- row.seq ??= event.seq;
654
- row.time = event.time;
655
- if (text || canonical)
656
- row.text = text;
657
- row.images = images.length === 0 ? undefined : images;
658
- row.streaming = false;
659
- // Live settles keep the smooth-reveal cursor alive (a one-shot
660
- // non-streaming delivery still paints as a flow); replayed
661
- // settles must not — the transcript would typewrite on open.
662
- if (!replaying && text)
663
- row.fresh = true;
664
- touchRow(row);
665
- }
666
- streaming = undefined;
667
- if (reasoning !== undefined) {
668
- // Backstop fold: reasoning whose step ended with no text token
669
- // and no tool call (settleLiveReasoning handles those earlier —
670
- // while the block is still in the repaintable live window;
671
- // here a long reply may already have pushed it into scrollback,
672
- // where the shrink cannot be repainted). `full` mode
673
- // (/settings opt-in) keeps the block expanded until turn settle
674
- // — settleStreaming folds the sealed rows then.
675
- reasoning.durationMs = Math.max(0, Date.now() - reasoningStart);
676
- reasoning.streaming = false;
677
- reasoning.thinkingOpen = state.thinkingFold === 'full';
678
- touchRow(reasoning);
679
- sealedReasoning.push(reasoning);
680
- logForDebugging(`thinking: step sealed (${reasoning.durationMs}ms), expanded until turn/end`);
681
- }
682
- reasoning = undefined;
683
- if (activeAttempt !== undefined && activeAttempt.turn === event.data.turn && activeAttempt.step === event.data.step)
684
- activeAttempt = undefined;
685
- updateSpinnerMode();
686
- const usage = event.data.usage;
687
- if (usage !== undefined) {
688
- // oxlint-disable-next-line typescript/no-unnecessary-condition -- durable replay data may lack tokens
689
- state.tokens.input += usage.inputTokens ?? 0;
690
- // oxlint-disable-next-line typescript/no-unnecessary-condition -- durable replay data may lack tokens
691
- state.tokens.output += usage.outputTokens ?? 0;
692
- // Cache split totals feed the session cost estimate (hit-priced
693
- // input vs. uncached input) — the durable replay may lack them.
694
- state.tokens.cacheRead += usage.cacheReadTokens ?? 0;
695
- state.tokens.cacheWrite += usage.cacheWriteTokens ?? 0;
696
- // Peak/idle bucketing by the request's own time (the durable replay
697
- // replays historical events, so a resumed session prices each
698
- // request at the rate window it actually ran in — the session cost
699
- // estimate never prices the whole session at the current window).
700
- const peak = isPeakHour(new Date(event.time));
701
- {
702
- const bucket = peak
703
- ? state.tokens.peak
704
- : state.tokens.idle;
705
- bucket.input += usage.inputTokens ?? 0;
706
- bucket.output += usage.outputTokens ?? 0;
707
- bucket.cacheRead += usage.cacheReadTokens ?? 0;
708
- bucket.cacheWrite += usage.cacheWriteTokens ?? 0;
709
- }
710
- // 主会话费用分桶(DESIGN D2):与 tokens 同口径,但按事件发生时
711
- // 的模型归属——replay 用 request/header 还原历史请求模型,旧日志
712
- // 回退 channel 模型;换模型不会把历史 token 重估到新模型。
713
- const costInput = usage.inputTokens ?? 0;
714
- const costOutput = usage.outputTokens ?? 0;
715
- const costCacheRead = usage.cacheReadTokens ?? 0;
716
- const costCacheWrite = usage.cacheWriteTokens ?? 0;
717
- if (costInput !== 0 || costOutput !== 0 || costCacheRead !== 0 || costCacheWrite !== 0) {
718
- const model = eventModel ?? state.model;
719
- const cost = state.mainCost[model] ?? emptyCostBuckets();
720
- addUsageToCostBuckets(cost, {
721
- input: costInput,
722
- output: costOutput,
723
- cacheRead: costCacheRead,
724
- cacheWrite: costCacheWrite,
725
- }, peak);
726
- state.mainCost[model] = cost;
727
- }
728
- // The most recent request's usage describes the CURRENT context:
729
- // input (uncached) + cache hits all occupy the window. Cache hits
730
- // also drive the status-line `cache N` readout.
731
- state.lastUsage = {
732
- // oxlint-disable-next-line typescript/no-unnecessary-condition -- durable replay data may lack tokens
733
- input: usage.inputTokens ?? 0,
734
- // oxlint-disable-next-line typescript/no-unnecessary-condition -- durable replay data may lack tokens
735
- output: usage.outputTokens ?? 0,
736
- cacheRead: usage.cacheReadTokens ?? 0,
737
- cacheWrite: usage.cacheWriteTokens ?? 0,
738
- };
739
- }
740
- const tpsMessageStep = tpsStep;
741
- if (tpsTurn === event.data.turn &&
742
- tpsMessageStep !== undefined &&
743
- tpsMessageStep.turn === event.data.turn &&
744
- tpsMessageStep.step === event.data.step &&
745
- tpsMessageStep.firstTokenTime !== undefined) {
746
- const outputTokens = usageOutputTokens(usage)
747
- ?? (tpsMessageStep.outputChars > 0
748
- ? Math.ceil(tpsMessageStep.outputChars / 4)
749
- : undefined);
750
- if (outputTokens !== undefined) {
751
- tpsTurnDecodeMs += Math.max(0, event.time - tpsMessageStep.firstTokenTime);
752
- tpsTurnDecodeTokens += outputTokens;
753
- tpsTurnSampled = true;
754
- if (tpsTurnDecodeMs > 0) {
755
- state.tps = tpsTurnDecodeTokens / (tpsTurnDecodeMs / 1000);
756
- }
757
- }
758
- }
759
- if (tpsMessageStep !== undefined &&
760
- tpsMessageStep.turn === event.data.turn &&
761
- tpsMessageStep.step === event.data.step) {
762
- tpsStep = undefined;
763
- }
764
- // Context-bar segmentation (pi-nano-context style): assistant text
765
- // and tool calls in the assistant segment, thinking separately.
766
- for (const block of event.data.message.content) {
767
- if (block.type === 'text' && block.text) {
768
- state.contextSegments.assistant += estimateTokens(block.text);
769
- }
770
- else if (block.type === 'reasoning' && block.text) {
771
- state.contextSegments.thinking += estimateTokens(block.text);
772
- }
773
- }
774
- break;
775
- }
776
- case 'tool/call': {
777
- // The ask-user-question tool renders as the interactive questionnaire
778
- // panel (DSH user-interaction seam), not as a tool card: the model is
779
- // parked waiting for the human, so no running card, no active-tool
780
- // spinner, no args noise in the transcript. Only the ARGUMENTS are
781
- // remembered: the paired tool/result below projects the answered
782
- // record from them (issue #1009), so `/resume`, rewind and replay
783
- // rebuild it from the persisted log like every other transcript row.
784
- if (event.data.name === 'ask_user_question') {
785
- askCalls.set(event.data.callId, event.data.arguments);
786
- break;
787
- }
788
- // The Task tool's plain card is replaced by the live subagent card
789
- // (Kimi Code semantics): the delegation itself renders as a subagent
790
- // row, so the raw args/result card would only duplicate it. The call
791
- // still runs - only its transcript rendering is suppressed.
792
- if (isSubagentToolName(event.data.name)) {
793
- // The parent-scoped subagent reducer owns pending descriptions,
794
- // including delegations made while this transcript is parked.
795
- break;
796
- }
797
- // Reasoning that led to a tool call is done thinking — fold the
798
- // preview now, before the tool card grows the transcript past it
799
- // (see settleLiveReasoning).
800
- settleLiveReasoning('tool call');
801
- const card = {
802
- id: deps.rowIds.value,
803
- kind: 'tool',
804
- text: '',
805
- seq: event.seq,
806
- // Smooth-reveal participation flag: live cards animate their body
807
- // in; replayed cards (resume/rewind) paint complete.
808
- fresh: !replaying,
809
- tool: {
810
- callId: event.data.callId,
811
- name: event.data.name,
812
- argsText: preview(event.data.arguments, ARGS_PREVIEW_LIMIT),
813
- argsFull: event.data.arguments,
814
- status: 'running',
815
- callView: presentCallView(event.data.name, event.data.arguments),
816
- startedAt: Date.now(),
817
- },
818
- };
819
- deps.rowIds.value += 1;
820
- toolCards.set(event.data.callId, card);
821
- appendRow(card);
822
- state.activeToolCount += 1;
823
- state.contextSegments.assistant += estimateTokens(`${event.data.name}${event.data.arguments}`);
824
- updateSpinnerMode();
825
- break;
826
- }
827
- case 'tool/result': {
828
- const callId = event.data.message.source.callId;
829
- const card = toolCards.get(callId);
830
- const askArguments = askCalls.get(callId);
831
- // A call with no card is usually an ask_user_question (above) — its
832
- // interaction lives in the panel, but its OUTCOME still belongs in
833
- // the transcript. Project it from the durable log here: consumed
834
- // before the card branch so the two can never both fire, and deleted
835
- // so a repeated replay of the same result cannot double the record.
836
- if (card === undefined && askArguments !== undefined) {
837
- projectAskResult(event, askArguments);
838
- askCalls.delete(callId);
839
- break;
840
- }
841
- if (card !== undefined && card.tool !== undefined) {
842
- const images = transcriptImages(event.data.message.content);
843
- card.images = images.length === 0 ? undefined : images;
844
- card.tool.durationMs = Math.max(0, Date.now() - card.tool.startedAt);
845
- const payload = toolResultPayload(event.data.message);
846
- if (event.data.error !== undefined || payload.isError) {
847
- card.tool.status = 'error';
848
- const errorText = toolErrorText(event);
849
- card.tool.errorText = errorText;
850
- state.contextSegments.tools += estimateTokens(errorText);
851
- }
852
- else {
853
- card.tool.status = 'ok';
854
- const result = textOf(payload.content);
855
- card.tool.resultFull = result || undefined;
856
- card.tool.resultText = result ? preview(result, RESULT_PREVIEW_LIMIT) : undefined;
857
- // The tool's own settled-state view (applied diff, terminal
858
- // output, read content…) wins over the raw text body. argsFull
859
- // pairs the args: live cards are never folded, so it is intact.
860
- card.tool.resultView = presentResultView(card.tool.name, card.tool.argsFull ?? '', event.data);
861
- state.contextSegments.tools += estimateTokens(result);
862
- // A job_output result doubles as the job card's output feed:
863
- // the registry's read() is consuming and reserved for the
864
- // owning agent, so the UI mirrors the tail that already streams
865
- // through the transcript instead of polling the job itself.
866
- if (card.tool.name === 'job_output' && result !== '') {
867
- const id = parseJobOutputId(card.tool.argsFull);
868
- if (id !== undefined)
869
- deps.jobs.onOutputSeen(id, result, event.time ?? Date.now());
870
- }
871
- // A `started background job <id>` ack pairs the job with its
872
- // tool call: capture the FULL command from the args (the
873
- // registry label is the friendly description) for the panel.
874
- const startAck = BACKGROUND_START_ACK.exec(result);
875
- if (startAck !== null) {
876
- const command = toolCommandOf(card.tool.argsFull);
877
- if (command !== undefined)
878
- deps.jobs.onStarted(startAck[1], command);
879
- }
880
- }
881
- state.activeToolCount = Math.max(0, state.activeToolCount - 1);
882
- // The card is settled: no later event looks it up by callId, so
883
- // drop the index entry. The card itself stays in state.rows
884
- // (bounded by MAX_ROWS + foldRows, which also drops the full
885
- // args/result payloads of folded cards).
886
- toolCards.delete(event.data.message.source.callId);
887
- touchRow(card);
888
- updateSpinnerMode();
889
- }
890
- break;
891
- }
892
- case 'step/end': {
893
- if (openStep !== undefined && openStep.turn === event.data.turn && openStep.step === event.data.step)
894
- openStep = undefined;
895
- if (tpsStep !== undefined &&
896
- tpsStep.turn === event.data.turn &&
897
- tpsStep.step === event.data.step) {
898
- tpsStep = undefined;
899
- }
900
- break;
901
- }
902
- case 'turn/start': {
903
- deps.inputConvergence.cancelInFlight = false;
904
- state.cancelPending = false;
905
- state.working = true;
906
- state.turnStart = Date.now();
907
- state.responseChars = 0;
908
- state.spinnerMode = 'requesting';
909
- // Keep the prior turn visible until this turn produces a measurable
910
- // decode span, while starting a fresh weighted step fold.
911
- tpsBeforeTurn = state.tps;
912
- tpsTurn = event.data.turn;
913
- tpsTurnDecodeMs = 0;
914
- tpsTurnDecodeTokens = 0;
915
- tpsTurnSampled = false;
916
- tpsStep = undefined;
917
- break;
918
- }
919
- case 'turn/end': {
920
- if (activeAttempt !== undefined)
921
- discardAttempt(activeAttempt.turn, activeAttempt.step);
922
- openStep = undefined;
923
- deps.inputConvergence.cancelInFlight = false;
924
- state.cancelPending = false;
925
- settleStreaming();
926
- state.working = false;
927
- state.activeToolCount = 0;
928
- if (tpsTurn !== undefined && tpsTurn === event.data.turn) {
929
- if (tpsTurnSampled && tpsTurnDecodeMs > 0) {
930
- const turnTps = tpsTurnDecodeTokens / (tpsTurnDecodeMs / 1000);
931
- state.tps = turnTps;
932
- state.tpsSamples.push({ tps: turnTps, at: event.time });
933
- if (state.tpsSamples.length > 500)
934
- state.tpsSamples.shift();
935
- }
936
- else {
937
- // Do not leave a chars/4 live estimate behind when no completed
938
- // decode sample exists for this turn.
939
- state.tps = tpsBeforeTurn;
940
- }
941
- tpsTurn = undefined;
942
- tpsStep = undefined;
943
- tpsTurnDecodeMs = 0;
944
- tpsTurnDecodeTokens = 0;
945
- tpsTurnSampled = false;
946
- }
947
- // Occupancy is evaluated on EVERY turn end, not only a completed one:
948
- // the request that overflowed the window is exactly the one whose turn
949
- // ends as an error (it writes no successful usage sample at all), and
950
- // an aborted turn has still grown the surface. Replay drains a resumed
951
- // session's history through the projector; its totals describe the
952
- // past, not a live context-low state.
953
- if (!replaying)
954
- deps.checkContextWarning();
955
- const reason = event.data.reason;
956
- if (reason.kind === 'completed') {
957
- break;
958
- }
959
- if (reason.kind === 'aborted' || reason.kind === 'interrupted') {
960
- // `Agent.cancel()` closes the turn as `aborted`; `interrupted`
961
- // only appears for crash-orphaned turns. Both user-interruption
962
- // paths render as a distinct dim row.
963
- appendRow({
964
- id: deps.rowIds.value,
965
- kind: 'interrupt',
966
- text: t('interrupted-by-user') + t('interrupted-ask-next'),
967
- });
968
- deps.rowIds.value += 1;
969
- break;
970
- }
971
- // The notice renders as a single-line Divider title: error.message
972
- // can carry newlines/control chars, and an embedded \n splits the
973
- // rule across rows. cleanRenderText is the render-path single-line
974
- // contract (sessionTree's preview() folds likewise for the tree).
975
- const detail = reason.kind === 'error' ? cleanRenderText(reason.error.message, NOTICE_CELLS) : '';
976
- appendRow({ id: deps.rowIds.value, kind: 'notice', text: `turn ${reason.kind}${detail ? ` · ${detail}` : ''}` });
977
- deps.rowIds.value += 1;
978
- // Historical failure notices belong to the transcript row above;
979
- // re-raising them as a live toast on every /resume re-alarmes the
980
- // user over a turn that already ended.
981
- if (!replaying)
982
- deps.notify(t('turn-failed', { detail: detail ? ` · ${detail}` : '' }), { color: 'error', timeoutMs: 8000 });
983
- break;
984
- }
985
- case 'request/context':
986
- // Adapter-advertised context capacity; drives the context-low
987
- // warning when the route reports one.
988
- if (event.data.contextWindow !== undefined) {
989
- state.contextWindow = event.data.contextWindow;
990
- }
991
- break;
992
- case 'system/message': {
993
- // V3 system prompts are surface nodes, not header fields: the latest
994
- // node holds the active instructions (an empty render clears them).
995
- // The context bar's system segment tracks that live text.
996
- state.contextSegments.system = estimateTokens(textOf(event.data.message.content));
997
- break;
998
- }
999
- case 'request/header': {
1000
- // Reasoning effort readout (status line): the header carries the
1001
- // conversation's call config (provider/model/effort/sampling). The
1002
- // system prompt moved out of the header at V3 (see system/message);
1003
- // pre-V3 logs still carry it, admitted structurally below.
1004
- // oxlint-disable-next-line typescript/no-unnecessary-condition -- durable session data may lack header config
1005
- const effort = event.data.header.config?.reasoningEffort;
1006
- if (typeof effort === 'string') {
1007
- state.reasoningEffort = effort;
1008
- }
1009
- // 模型归属真源:该请求的 usage 按这里的 model 计价(replay 时逐请求
1010
- // 还原;live 时与 state.model 同步更新,AC-A4)。header 缺/空 model
1011
- // 必须清掉上一条 header 的值——否则后续 usage 会沿用旧模型进错桶;
1012
- // 归属时再回退 state.model(旧日志没有 header 的既有语义)。
1013
- const headerModel = event.data.header.config?.model;
1014
- eventModel = typeof headerModel === 'string' && headerModel !== '' ? headerModel : undefined;
1015
- const legacySystem = event.data.header.system;
1016
- if (typeof legacySystem === 'string') {
1017
- state.contextSegments.system = estimateTokens(legacySystem);
1018
- }
1019
- break;
1020
- }
1021
- case 'session/title':
1022
- state.sessionTitle = event.data.title;
1023
- break;
1024
- default:
1025
- // Pre-0.1.5 live streams and raw pre-V3 logs carry per-token chunks
1026
- // as durable session events; 0.1.5 moved live chunks to transient
1027
- // `agent/assistant-stream` frames (renderStreamFrame) and compacts the
1028
- // durable record into `assistant/message.stream`. Match by name so the
1029
- // current union (which no longer lists the type) stays compile-clean.
1030
- if (event.type === 'assistant/chunk') {
1031
- if (handledAssistantChunks.has(event.seq))
1032
- break;
1033
- handledAssistantChunks.add(event.seq);
1034
- const data = event.data;
1035
- renderStreamChunk(data.turn, data.step, data.chunk, event.time, event.seq);
1036
- break;
1037
- }
1038
- // dsh-tool-todo owns this optional module augmentation in alpha.2.
1039
- // Match by name so the TUI remains loadable without that plugin.
1040
- if (event.type === 'todo/write') {
1041
- const todos = todoPanelItems(event.data);
1042
- if (todos !== undefined)
1043
- state.todos = todos;
1044
- break;
1045
- }
1046
- // Logged preset switch (blank sessions only, issue #8): a transcript
1047
- // marker so a replayed log shows which composition produced the
1048
- // turns after it. Not in dsh-session's typed union — matched here by
1049
- // name, like the other plugin-defined events above.
1050
- if (event.type === 'agent-preset/selected') {
1051
- const data = event.data;
1052
- const recordedPreset = typeof data.agentPreset === 'string' ? data.agentPreset : undefined;
1053
- const renamedOfficialPreset = (recordedPreset === 'code' && state.agentPreset === 'ptc') ||
1054
- (recordedPreset === 'ptc' && state.agentPreset === 'code');
1055
- const preset = renamedOfficialPreset && state.agentPreset !== undefined
1056
- ? state.agentPreset
1057
- : recordedPreset ?? 'unknown';
1058
- appendRow({
1059
- id: deps.rowIds.value,
1060
- kind: 'notice',
1061
- text: t('agent-preset-switched', { preset }),
1062
- });
1063
- deps.rowIds.value += 1;
1064
- break;
1065
- }
1066
- // `/color` accent (dsh-tui plugin event, replayed on resume/rewind
1067
- // like session/title): last write wins, '' clears to the default.
1068
- if (event.type === 'session/color') {
1069
- const data = event.data;
1070
- state.sessionColor = typeof data.color === 'string' ? data.color : '';
1071
- break;
1072
- }
1073
- // The compaction bracket is a plugin-appended event pair (not part of
1074
- // dsh-session's typed map). Opening it here rather than in the manual
1075
- // path is what makes an AUTOMATIC pressure compaction visible too: the
1076
- // host writes `compaction/start` before the summarizer runs and
1077
- // `compaction/end` once the checkpoint is committed or abandoned.
1078
- // A manual request already installed its own cancellable row, so this
1079
- // only fills the gap for one this process did not start.
1080
- if (event.type === 'compaction/start') {
1081
- // Replay is settled history, and a process killed between start and
1082
- // end leaves an unmatched start in the log: painting a row for it
1083
- // would show a compaction that nothing will ever clear.
1084
- if (!replaying && state.compaction === undefined) {
1085
- state.compaction = {
1086
- startedAt: typeof event.time === 'number' ? event.time : Date.now(),
1087
- phase: 'prefill',
1088
- outputChars: 0,
1089
- cancellable: false,
1090
- };
1091
- }
1092
- break;
1093
- }
1094
- if (event.type === 'compaction/end') {
1095
- state.compaction = undefined;
1096
- break;
1097
- }
1098
- // Custom plugin events (tuiRenderers seam): a registered renderer
1099
- // maps the payload to text rows — title as a local row, body as
1100
- // preview-clipped local-output rows, same shape pushLocal uses.
1101
- // Runs on the live stream AND on replay (resume/rewind), so the
1102
- // projection must stay total; the runtime isolates renderer
1103
- // crashes per type.
1104
- if (deps.renderer !== undefined) {
1105
- const rendered = deps.renderer.render(event.type, event.data);
1106
- if (rendered !== undefined) {
1107
- if (rendered.title !== undefined && rendered.title !== '') {
1108
- appendRow({ id: deps.rowIds.value, kind: 'local', text: rendered.title });
1109
- deps.rowIds.value += 1;
1110
- }
1111
- for (const line of rendered.lines) {
1112
- appendRow({
1113
- id: deps.rowIds.value,
1114
- kind: 'local-output',
1115
- text: preview(String(line), LOCAL_OUTPUT_LIMIT),
1116
- });
1117
- deps.rowIds.value += 1;
1118
- }
1119
- }
1120
- }
1121
- break;
1122
- }
1123
- };
1124
- function reset() {
1125
- streaming = undefined;
1126
- reasoning = undefined;
1127
- sealedReasoning.length = 0;
1128
- lastReasoningRow = undefined;
1129
- toolCards.clear();
1130
- askCalls.clear();
1131
- handledAssistantMessages.clear();
1132
- handledAssistantChunks.clear();
1133
- openStep = undefined;
1134
- activeAttempt = undefined;
1135
- lastStreamRevision = -1;
1136
- eventModel = undefined;
1137
- assistantRowsByStep.clear();
1138
- lastTextDelta.clear();
1139
- tpsTurn = undefined;
1140
- tpsStep = undefined;
1141
- tpsTurnDecodeMs = 0;
1142
- tpsTurnDecodeTokens = 0;
1143
- tpsTurnSampled = false;
1144
- }
1145
- return { reset, replayEvents, renderEvent, renderStreamFrame, settleStreaming, updateSpinnerMode, presentCallView, presentResultView, textOf, firstTextOf };
1146
41
  }