@deepseek-harness-tui/dsh-tui 0.11.2 → 0.13.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 (786) hide show
  1. package/README.md +60 -8
  2. package/assets/deepy/README.md +60 -0
  3. package/assets/deepy/frames.json +1 -0
  4. package/assets/whale-girl/whale-girl-happy.png +0 -0
  5. package/assets/whaleGirl/README.md +7 -0
  6. package/assets/whaleGirl/frames.json +1 -0
  7. package/assets/whaleGirl/img/building/00.png +0 -0
  8. package/assets/whaleGirl/img/building/01.png +0 -0
  9. package/assets/whaleGirl/img/building/02.png +0 -0
  10. package/assets/whaleGirl/img/building/03.png +0 -0
  11. package/assets/whaleGirl/img/building/04.png +0 -0
  12. package/assets/whaleGirl/img/building/05.png +0 -0
  13. package/assets/whaleGirl/img/building/06.png +0 -0
  14. package/assets/whaleGirl/img/building/07.png +0 -0
  15. package/assets/whaleGirl/img/building/08.png +0 -0
  16. package/assets/whaleGirl/img/building/09.png +0 -0
  17. package/assets/whaleGirl/img/building/10.png +0 -0
  18. package/assets/whaleGirl/img/building/11.png +0 -0
  19. package/assets/whaleGirl/img/building/12.png +0 -0
  20. package/assets/whaleGirl/img/building/13.png +0 -0
  21. package/assets/whaleGirl/img/building/14.png +0 -0
  22. package/assets/whaleGirl/img/building/15.png +0 -0
  23. package/assets/whaleGirl/img/building/16.png +0 -0
  24. package/assets/whaleGirl/img/building/17.png +0 -0
  25. package/assets/whaleGirl/img/building/18.png +0 -0
  26. package/assets/whaleGirl/img/building/19.png +0 -0
  27. package/assets/whaleGirl/img/building/20.png +0 -0
  28. package/assets/whaleGirl/img/building/21.png +0 -0
  29. package/assets/whaleGirl/img/building/22.png +0 -0
  30. package/assets/whaleGirl/img/building/23.png +0 -0
  31. package/assets/whaleGirl/img/carrying/00.png +0 -0
  32. package/assets/whaleGirl/img/carrying/01.png +0 -0
  33. package/assets/whaleGirl/img/carrying/02.png +0 -0
  34. package/assets/whaleGirl/img/carrying/03.png +0 -0
  35. package/assets/whaleGirl/img/carrying/04.png +0 -0
  36. package/assets/whaleGirl/img/carrying/05.png +0 -0
  37. package/assets/whaleGirl/img/carrying/06.png +0 -0
  38. package/assets/whaleGirl/img/carrying/07.png +0 -0
  39. package/assets/whaleGirl/img/compacting/00.png +0 -0
  40. package/assets/whaleGirl/img/compacting/01.png +0 -0
  41. package/assets/whaleGirl/img/compacting/02.png +0 -0
  42. package/assets/whaleGirl/img/compacting/03.png +0 -0
  43. package/assets/whaleGirl/img/compacting/04.png +0 -0
  44. package/assets/whaleGirl/img/compacting/05.png +0 -0
  45. package/assets/whaleGirl/img/compacting/06.png +0 -0
  46. package/assets/whaleGirl/img/compacting/07.png +0 -0
  47. package/assets/whaleGirl/img/compacting/08.png +0 -0
  48. package/assets/whaleGirl/img/compacting/09.png +0 -0
  49. package/assets/whaleGirl/img/conducting/00.png +0 -0
  50. package/assets/whaleGirl/img/conducting/01.png +0 -0
  51. package/assets/whaleGirl/img/conducting/02.png +0 -0
  52. package/assets/whaleGirl/img/conducting/03.png +0 -0
  53. package/assets/whaleGirl/img/conducting/04.png +0 -0
  54. package/assets/whaleGirl/img/conducting/05.png +0 -0
  55. package/assets/whaleGirl/img/conducting/06.png +0 -0
  56. package/assets/whaleGirl/img/conducting/07.png +0 -0
  57. package/assets/whaleGirl/img/conducting/08.png +0 -0
  58. package/assets/whaleGirl/img/conducting/09.png +0 -0
  59. package/assets/whaleGirl/img/conducting/10.png +0 -0
  60. package/assets/whaleGirl/img/conducting/11.png +0 -0
  61. package/assets/whaleGirl/img/drag/00.png +0 -0
  62. package/assets/whaleGirl/img/drag/01.png +0 -0
  63. package/assets/whaleGirl/img/drag/02.png +0 -0
  64. package/assets/whaleGirl/img/drag/03.png +0 -0
  65. package/assets/whaleGirl/img/drag/04.png +0 -0
  66. package/assets/whaleGirl/img/drag/05.png +0 -0
  67. package/assets/whaleGirl/img/drag/06.png +0 -0
  68. package/assets/whaleGirl/img/drag/07.png +0 -0
  69. package/assets/whaleGirl/img/drag/08.png +0 -0
  70. package/assets/whaleGirl/img/drag/09.png +0 -0
  71. package/assets/whaleGirl/img/error/00.png +0 -0
  72. package/assets/whaleGirl/img/error/01.png +0 -0
  73. package/assets/whaleGirl/img/error/02.png +0 -0
  74. package/assets/whaleGirl/img/error/03.png +0 -0
  75. package/assets/whaleGirl/img/error/04.png +0 -0
  76. package/assets/whaleGirl/img/error/05.png +0 -0
  77. package/assets/whaleGirl/img/error/06.png +0 -0
  78. package/assets/whaleGirl/img/error/07.png +0 -0
  79. package/assets/whaleGirl/img/error/08.png +0 -0
  80. package/assets/whaleGirl/img/error/09.png +0 -0
  81. package/assets/whaleGirl/img/happy/00.png +0 -0
  82. package/assets/whaleGirl/img/happy/01.png +0 -0
  83. package/assets/whaleGirl/img/happy/02.png +0 -0
  84. package/assets/whaleGirl/img/happy/03.png +0 -0
  85. package/assets/whaleGirl/img/happy/04.png +0 -0
  86. package/assets/whaleGirl/img/happy/05.png +0 -0
  87. package/assets/whaleGirl/img/happy/06.png +0 -0
  88. package/assets/whaleGirl/img/happy/07.png +0 -0
  89. package/assets/whaleGirl/img/happy/08.png +0 -0
  90. package/assets/whaleGirl/img/happy/09.png +0 -0
  91. package/assets/whaleGirl/img/happy/10.png +0 -0
  92. package/assets/whaleGirl/img/idle/00.png +0 -0
  93. package/assets/whaleGirl/img/idle/01.png +0 -0
  94. package/assets/whaleGirl/img/idle/02.png +0 -0
  95. package/assets/whaleGirl/img/idle/03.png +0 -0
  96. package/assets/whaleGirl/img/idle/04.png +0 -0
  97. package/assets/whaleGirl/img/idle/05.png +0 -0
  98. package/assets/whaleGirl/img/idle/06.png +0 -0
  99. package/assets/whaleGirl/img/idle/07.png +0 -0
  100. package/assets/whaleGirl/img/idle/08.png +0 -0
  101. package/assets/whaleGirl/img/idle/09.png +0 -0
  102. package/assets/whaleGirl/img/idle/10.png +0 -0
  103. package/assets/whaleGirl/img/idle/11.png +0 -0
  104. package/assets/whaleGirl/img/idle/12.png +0 -0
  105. package/assets/whaleGirl/img/idle/13.png +0 -0
  106. package/assets/whaleGirl/img/idle/14.png +0 -0
  107. package/assets/whaleGirl/img/idle/15.png +0 -0
  108. package/assets/whaleGirl/img/idle/16.png +0 -0
  109. package/assets/whaleGirl/img/idle/17.png +0 -0
  110. package/assets/whaleGirl/img/idle/18.png +0 -0
  111. package/assets/whaleGirl/img/idle/19.png +0 -0
  112. package/assets/whaleGirl/img/idle/20.png +0 -0
  113. package/assets/whaleGirl/img/idle-look/00.png +0 -0
  114. package/assets/whaleGirl/img/idle-look/01.png +0 -0
  115. package/assets/whaleGirl/img/idle-look/02.png +0 -0
  116. package/assets/whaleGirl/img/idle-look/03.png +0 -0
  117. package/assets/whaleGirl/img/idle-look/04.png +0 -0
  118. package/assets/whaleGirl/img/idle-look/05.png +0 -0
  119. package/assets/whaleGirl/img/idle-look/06.png +0 -0
  120. package/assets/whaleGirl/img/idle-look/07.png +0 -0
  121. package/assets/whaleGirl/img/idle-look/08.png +0 -0
  122. package/assets/whaleGirl/img/idle-look/09.png +0 -0
  123. package/assets/whaleGirl/img/idle-look/10.png +0 -0
  124. package/assets/whaleGirl/img/idle-look/11.png +0 -0
  125. package/assets/whaleGirl/img/idle-look/12.png +0 -0
  126. package/assets/whaleGirl/img/idle-spout/00.png +0 -0
  127. package/assets/whaleGirl/img/idle-spout/01.png +0 -0
  128. package/assets/whaleGirl/img/idle-spout/02.png +0 -0
  129. package/assets/whaleGirl/img/idle-spout/03.png +0 -0
  130. package/assets/whaleGirl/img/idle-spout/04.png +0 -0
  131. package/assets/whaleGirl/img/idle-spout/05.png +0 -0
  132. package/assets/whaleGirl/img/idle-spout/06.png +0 -0
  133. package/assets/whaleGirl/img/idle-spout/07.png +0 -0
  134. package/assets/whaleGirl/img/idle-spout/08.png +0 -0
  135. package/assets/whaleGirl/img/idle-spout/09.png +0 -0
  136. package/assets/whaleGirl/img/idle-spout/10.png +0 -0
  137. package/assets/whaleGirl/img/music/00.png +0 -0
  138. package/assets/whaleGirl/img/music/01.png +0 -0
  139. package/assets/whaleGirl/img/music/02.png +0 -0
  140. package/assets/whaleGirl/img/music/03.png +0 -0
  141. package/assets/whaleGirl/img/music/04.png +0 -0
  142. package/assets/whaleGirl/img/music/05.png +0 -0
  143. package/assets/whaleGirl/img/music/06.png +0 -0
  144. package/assets/whaleGirl/img/music/07.png +0 -0
  145. package/assets/whaleGirl/img/notification/00.png +0 -0
  146. package/assets/whaleGirl/img/notification/01.png +0 -0
  147. package/assets/whaleGirl/img/notification/02.png +0 -0
  148. package/assets/whaleGirl/img/notification/03.png +0 -0
  149. package/assets/whaleGirl/img/notification/04.png +0 -0
  150. package/assets/whaleGirl/img/notification/05.png +0 -0
  151. package/assets/whaleGirl/img/notification/06.png +0 -0
  152. package/assets/whaleGirl/img/notification/07.png +0 -0
  153. package/assets/whaleGirl/img/poke-left/00.png +0 -0
  154. package/assets/whaleGirl/img/poke-left/01.png +0 -0
  155. package/assets/whaleGirl/img/poke-left/02.png +0 -0
  156. package/assets/whaleGirl/img/poke-left/03.png +0 -0
  157. package/assets/whaleGirl/img/poke-left/04.png +0 -0
  158. package/assets/whaleGirl/img/poke-left/05.png +0 -0
  159. package/assets/whaleGirl/img/poke-left/06.png +0 -0
  160. package/assets/whaleGirl/img/poke-left/07.png +0 -0
  161. package/assets/whaleGirl/img/poke-left/08.png +0 -0
  162. package/assets/whaleGirl/img/poke-left/09.png +0 -0
  163. package/assets/whaleGirl/img/poke-left/10.png +0 -0
  164. package/assets/whaleGirl/img/poke-right/00.png +0 -0
  165. package/assets/whaleGirl/img/poke-right/01.png +0 -0
  166. package/assets/whaleGirl/img/poke-right/02.png +0 -0
  167. package/assets/whaleGirl/img/poke-right/03.png +0 -0
  168. package/assets/whaleGirl/img/poke-right/04.png +0 -0
  169. package/assets/whaleGirl/img/poke-right/05.png +0 -0
  170. package/assets/whaleGirl/img/poke-right/06.png +0 -0
  171. package/assets/whaleGirl/img/poke-right/07.png +0 -0
  172. package/assets/whaleGirl/img/poke-right/08.png +0 -0
  173. package/assets/whaleGirl/img/poke-right/09.png +0 -0
  174. package/assets/whaleGirl/img/poke-right/10.png +0 -0
  175. package/assets/whaleGirl/img/sleeping/00.png +0 -0
  176. package/assets/whaleGirl/img/sleeping/01.png +0 -0
  177. package/assets/whaleGirl/img/sleeping/02.png +0 -0
  178. package/assets/whaleGirl/img/sleeping/03.png +0 -0
  179. package/assets/whaleGirl/img/sleeping/04.png +0 -0
  180. package/assets/whaleGirl/img/sleeping/05.png +0 -0
  181. package/assets/whaleGirl/img/smile-hearts/00.png +0 -0
  182. package/assets/whaleGirl/img/smile-hearts/01.png +0 -0
  183. package/assets/whaleGirl/img/smile-hearts/02.png +0 -0
  184. package/assets/whaleGirl/img/smile-hearts/03.png +0 -0
  185. package/assets/whaleGirl/img/smile-hearts/04.png +0 -0
  186. package/assets/whaleGirl/img/smile-hearts/05.png +0 -0
  187. package/assets/whaleGirl/img/smile-hearts/06.png +0 -0
  188. package/assets/whaleGirl/img/smile-hearts/07.png +0 -0
  189. package/assets/whaleGirl/img/smile-hearts/08.png +0 -0
  190. package/assets/whaleGirl/img/smile-hearts/09.png +0 -0
  191. package/assets/whaleGirl/img/smile-hearts/10.png +0 -0
  192. package/assets/whaleGirl/img/smile-hearts/11.png +0 -0
  193. package/assets/whaleGirl/img/smile-hearts/12.png +0 -0
  194. package/assets/whaleGirl/img/smile-hearts/13.png +0 -0
  195. package/assets/whaleGirl/img/smile-hearts/14.png +0 -0
  196. package/assets/whaleGirl/img/smile-hearts/15.png +0 -0
  197. package/assets/whaleGirl/img/swim/00.png +0 -0
  198. package/assets/whaleGirl/img/swim/01.png +0 -0
  199. package/assets/whaleGirl/img/swim/02.png +0 -0
  200. package/assets/whaleGirl/img/swim/03.png +0 -0
  201. package/assets/whaleGirl/img/swim/04.png +0 -0
  202. package/assets/whaleGirl/img/swim/05.png +0 -0
  203. package/assets/whaleGirl/img/swim/06.png +0 -0
  204. package/assets/whaleGirl/img/swim/07.png +0 -0
  205. package/assets/whaleGirl/img/thinking/00.png +0 -0
  206. package/assets/whaleGirl/img/thinking/01.png +0 -0
  207. package/assets/whaleGirl/img/thinking/02.png +0 -0
  208. package/assets/whaleGirl/img/thinking/03.png +0 -0
  209. package/assets/whaleGirl/img/thinking/04.png +0 -0
  210. package/assets/whaleGirl/img/thinking/05.png +0 -0
  211. package/assets/whaleGirl/img/thinking/06.png +0 -0
  212. package/assets/whaleGirl/img/thinking/07.png +0 -0
  213. package/assets/whaleGirl/img/thinking/08.png +0 -0
  214. package/assets/whaleGirl/img/thinking/09.png +0 -0
  215. package/assets/whaleGirl/img/thinking/10.png +0 -0
  216. package/assets/whaleGirl/img/thinking/11.png +0 -0
  217. package/assets/whaleGirl/img/thinking/12.png +0 -0
  218. package/assets/whaleGirl/img/thinking/13.png +0 -0
  219. package/assets/whaleGirl/img/thinking/14.png +0 -0
  220. package/assets/whaleGirl/img/thinking/15.png +0 -0
  221. package/assets/whaleGirl/img/thinking/16.png +0 -0
  222. package/assets/whaleGirl/img/thumbs-up/00.png +0 -0
  223. package/assets/whaleGirl/img/thumbs-up/01.png +0 -0
  224. package/assets/whaleGirl/img/thumbs-up/02.png +0 -0
  225. package/assets/whaleGirl/img/thumbs-up/03.png +0 -0
  226. package/assets/whaleGirl/img/thumbs-up/04.png +0 -0
  227. package/assets/whaleGirl/img/thumbs-up/05.png +0 -0
  228. package/assets/whaleGirl/img/thumbs-up/06.png +0 -0
  229. package/assets/whaleGirl/img/thumbs-up/07.png +0 -0
  230. package/assets/whaleGirl/img/thumbs-up/08.png +0 -0
  231. package/assets/whaleGirl/img/thumbs-up/09.png +0 -0
  232. package/assets/whaleGirl/img/thumbs-up/10.png +0 -0
  233. package/assets/whaleGirl/img/thumbs-up/11.png +0 -0
  234. package/assets/whaleGirl/img/thumbs-up/12.png +0 -0
  235. package/assets/whaleGirl/img/tickle/00.png +0 -0
  236. package/assets/whaleGirl/img/tickle/01.png +0 -0
  237. package/assets/whaleGirl/img/tickle/02.png +0 -0
  238. package/assets/whaleGirl/img/tickle/03.png +0 -0
  239. package/assets/whaleGirl/img/tickle/04.png +0 -0
  240. package/assets/whaleGirl/img/tickle/05.png +0 -0
  241. package/assets/whaleGirl/img/tickle/06.png +0 -0
  242. package/assets/whaleGirl/img/tickle/07.png +0 -0
  243. package/assets/whaleGirl/img/tickle/08.png +0 -0
  244. package/assets/whaleGirl/img/tickle/09.png +0 -0
  245. package/assets/whaleGirl/img/tickle/10.png +0 -0
  246. package/assets/whaleGirl/img/tickle/11.png +0 -0
  247. package/assets/whaleGirl/img/tickle/12.png +0 -0
  248. package/assets/whaleGirl/img/tickle/13.png +0 -0
  249. package/assets/whaleGirl/img/timings.json +1 -0
  250. package/assets/whaleGirl/img/typing/00.png +0 -0
  251. package/assets/whaleGirl/img/typing/01.png +0 -0
  252. package/assets/whaleGirl/img/typing/02.png +0 -0
  253. package/assets/whaleGirl/img/typing/03.png +0 -0
  254. package/assets/whaleGirl/img/typing/04.png +0 -0
  255. package/assets/whaleGirl/img/typing/05.png +0 -0
  256. package/assets/whaleGirl/img/typing/06.png +0 -0
  257. package/assets/whaleGirl/img/typing/07.png +0 -0
  258. package/assets/whaleGirl/img/typing/08.png +0 -0
  259. package/assets/whaleGirl/img/typing/09.png +0 -0
  260. package/assets/whaleGirl/img/typing/10.png +0 -0
  261. package/assets/whaleGirl/img/typing/11.png +0 -0
  262. package/assets/whaleGirl/img/typing/12.png +0 -0
  263. package/assets/whaleGirl/img/typing/13.png +0 -0
  264. package/assets/whaleGirl/img/waking/00.png +0 -0
  265. package/assets/whaleGirl/img/waking/01.png +0 -0
  266. package/assets/whaleGirl/img/waking/02.png +0 -0
  267. package/assets/whaleGirl/img/waking/03.png +0 -0
  268. package/assets/whaleGirl/img/waking/04.png +0 -0
  269. package/assets/whaleGirl/img/waking/05.png +0 -0
  270. package/assets/whaleGirl/img/waking/06.png +0 -0
  271. package/assets/whaleGirl/img/waking/07.png +0 -0
  272. package/assets/whaleGirl/img/waking/08.png +0 -0
  273. package/assets/whaleGirl/img/waking/09.png +0 -0
  274. package/assets/whaleGirl/img/waking/10.png +0 -0
  275. package/bin/dsh-tui.js +38 -6
  276. package/cordis.patch.yml +31 -6
  277. package/guide/dsh-tui-guide/SKILL.md +37 -0
  278. package/guide/dsh-tui-guide/configuration.en.md +415 -0
  279. package/guide/dsh-tui-guide/configuration.md +354 -0
  280. package/guide/dsh-tui-guide/getting-started.en.md +401 -0
  281. package/guide/dsh-tui-guide/getting-started.md +399 -0
  282. package/guide/dsh-tui-guide/interaction.en.md +738 -0
  283. package/guide/dsh-tui-guide/interaction.md +793 -0
  284. package/guide/dsh-tui-guide/migrate.en.md +166 -0
  285. package/guide/dsh-tui-guide/migrate.md +132 -0
  286. package/guide/dsh-tui-guide/plugins.en.md +78 -0
  287. package/guide/dsh-tui-guide/plugins.md +64 -0
  288. package/guide/dsh-tui-guide/themes.en.md +197 -0
  289. package/guide/dsh-tui-guide/themes.md +188 -0
  290. package/guide/dsh-tui-guide/user-guide.en.md +711 -0
  291. package/guide/dsh-tui-guide/user-guide.md +666 -0
  292. package/guide/dsh-tui-guide/vscode.en.md +301 -0
  293. package/guide/dsh-tui-guide/vscode.md +272 -0
  294. package/lib/settings.json +219 -5
  295. package/lib/types/adapter/channel/ui-policy.d.ts +7 -2
  296. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  297. package/lib/types/adapter/channel/ui-policy.js +18 -1
  298. package/lib/types/adapter/index.d.ts +1 -1
  299. package/lib/types/adapter/index.js +1 -1
  300. package/lib/types/adapter/kernel/host-facade.d.ts +4 -1
  301. package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -1
  302. package/lib/types/adapter/kernel/host-facade.js +8 -1
  303. package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
  304. package/lib/types/adapter/kernel/runtime.js +13 -0
  305. package/lib/types/adapter/kernel/slices/index.d.ts +1 -0
  306. package/lib/types/adapter/kernel/slices/index.d.ts.map +1 -1
  307. package/lib/types/adapter/kernel/slices/index.js +3 -0
  308. package/lib/types/adapter/kernel/slices/panels.d.ts +3 -0
  309. package/lib/types/adapter/kernel/slices/panels.d.ts.map +1 -0
  310. package/lib/types/adapter/kernel/slices/panels.js +14 -0
  311. package/lib/types/adapter/ports/channel-capabilities.d.ts +48 -0
  312. package/lib/types/adapter/ports/channel-capabilities.d.ts.map +1 -0
  313. package/lib/types/adapter/ports/channel-capabilities.js +2 -0
  314. package/lib/types/adapter/ports/channel-catalog.d.ts +7 -0
  315. package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
  316. package/lib/types/adapter/ports/channel-display.d.ts +10 -0
  317. package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
  318. package/lib/types/adapter/ports/channel-settings.d.ts +2 -1
  319. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  320. package/lib/types/adapter/ports/channel-ui.d.ts +91 -4
  321. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  322. package/lib/types/adapter/ports/channel-view.d.ts +137 -9
  323. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  324. package/lib/types/adapter/ports/channel.d.ts +1 -1
  325. package/lib/types/adapter/ports/channel.js +1 -1
  326. package/lib/types/adapter/ports/descriptor.d.ts +1 -1
  327. package/lib/types/adapter/ports/descriptor.js +1 -1
  328. package/lib/types/adapter/ports/index.d.ts +1 -1
  329. package/lib/types/adapter/ports/index.js +1 -1
  330. package/lib/types/adapter/ports/panels.d.ts +28 -0
  331. package/lib/types/adapter/ports/panels.d.ts.map +1 -0
  332. package/lib/types/adapter/ports/panels.js +8 -0
  333. package/lib/types/adapter/ports/workspace.d.ts +1 -1
  334. package/lib/types/adapter/ports/workspace.js +1 -1
  335. package/lib/types/adapter/spec/index.d.ts +2 -2
  336. package/lib/types/adapter/spec/index.js +2 -2
  337. package/lib/types/adapter/spec/profile.d.ts +6 -6
  338. package/lib/types/adapter/spec/profile.d.ts.map +1 -1
  339. package/lib/types/adapter/spec/profile.js +6 -6
  340. package/lib/types/adapter/spec/protocol-constants.d.ts +3 -3
  341. package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
  342. package/lib/types/adapter/spec/protocol-constants.js +5 -5
  343. package/lib/types/adapter/spec/tui-contributions.d.ts +4 -4
  344. package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
  345. package/lib/types/adapter/spec/tui-contributions.js +5 -5
  346. package/lib/types/adapter/standard/descriptor.js +1 -1
  347. package/lib/types/adapter/standard/index.d.ts +3 -3
  348. package/lib/types/adapter/standard/index.js +3 -3
  349. package/lib/types/adapter/standard/registry.d.ts +3 -2
  350. package/lib/types/adapter/standard/registry.d.ts.map +1 -1
  351. package/lib/types/adapter/standard/registry.js +6 -5
  352. package/lib/types/adapter/standard/tui-extension.d.ts +1 -1
  353. package/lib/types/adapter/standard/tui-extension.js +1 -1
  354. package/lib/types/adapter/upstream/index.d.ts +1 -0
  355. package/lib/types/adapter/upstream/index.d.ts.map +1 -1
  356. package/lib/types/adapter/upstream/index.js +1 -0
  357. package/lib/types/adapter/upstream/panels-driver.d.ts +18 -0
  358. package/lib/types/adapter/upstream/panels-driver.d.ts.map +1 -0
  359. package/lib/types/adapter/upstream/panels-driver.js +159 -0
  360. package/lib/types/api.d.ts +2 -0
  361. package/lib/types/api.d.ts.map +1 -1
  362. package/lib/types/api.js +3 -1
  363. package/lib/types/commands.d.ts.map +1 -1
  364. package/lib/types/commands.js +12 -4
  365. package/lib/types/components/ActivityLine.d.ts +6 -9
  366. package/lib/types/components/ActivityLine.d.ts.map +1 -1
  367. package/lib/types/components/ActivityLine.js +7 -8
  368. package/lib/types/components/Chat/JobCard.d.ts +27 -1
  369. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  370. package/lib/types/components/Chat/JobCard.js +128 -33
  371. package/lib/types/components/Chat/JobGroupHeader.d.ts +27 -0
  372. package/lib/types/components/Chat/JobGroupHeader.d.ts.map +1 -0
  373. package/lib/types/components/Chat/JobGroupHeader.js +62 -0
  374. package/lib/types/components/Chat/SubagentMessage.js +6 -6
  375. package/lib/types/components/GoalTodoPanel.d.ts +13 -1
  376. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  377. package/lib/types/components/GoalTodoPanel.js +55 -14
  378. package/lib/types/components/JobsPanel.d.ts +42 -2
  379. package/lib/types/components/JobsPanel.d.ts.map +1 -1
  380. package/lib/types/components/JobsPanel.js +220 -40
  381. package/lib/types/components/LogoV2.d.ts +43 -3
  382. package/lib/types/components/LogoV2.d.ts.map +1 -1
  383. package/lib/types/components/LogoV2.js +42 -15
  384. package/lib/types/components/MessageList.d.ts +8 -2
  385. package/lib/types/components/MessageList.d.ts.map +1 -1
  386. package/lib/types/components/MessageList.js +215 -21
  387. package/lib/types/components/OverlayAbove.d.ts +11 -1
  388. package/lib/types/components/OverlayAbove.d.ts.map +1 -1
  389. package/lib/types/components/OverlayAbove.js +2 -12
  390. package/lib/types/components/PageMargin.d.ts.map +1 -1
  391. package/lib/types/components/PageMargin.js +3 -1
  392. package/lib/types/components/PluginSceneBoundary.d.ts +1 -1
  393. package/lib/types/components/PluginSceneBoundary.js +1 -1
  394. package/lib/types/components/PresetPicker.d.ts +4 -0
  395. package/lib/types/components/PresetPicker.d.ts.map +1 -1
  396. package/lib/types/components/PresetPicker.js +5 -1
  397. package/lib/types/components/PromptInput.d.ts +20 -22
  398. package/lib/types/components/PromptInput.d.ts.map +1 -1
  399. package/lib/types/components/PromptInput.js +425 -157
  400. package/lib/types/components/SearchBox.d.ts +22 -5
  401. package/lib/types/components/SearchBox.d.ts.map +1 -1
  402. package/lib/types/components/SearchBox.js +17 -13
  403. package/lib/types/components/StarPrompt.d.ts +6 -0
  404. package/lib/types/components/StarPrompt.d.ts.map +1 -1
  405. package/lib/types/components/StarPrompt.js +45 -0
  406. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  407. package/lib/types/components/SubagentCard.js +24 -9
  408. package/lib/types/components/SubagentDashboard.d.ts +18 -3
  409. package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
  410. package/lib/types/components/SubagentDashboard.js +53 -5
  411. package/lib/types/components/SubagentDetailScene.d.ts +7 -1
  412. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
  413. package/lib/types/components/SubagentDetailScene.js +160 -13
  414. package/lib/types/components/SurfaceEdges.d.ts +21 -0
  415. package/lib/types/components/SurfaceEdges.d.ts.map +1 -0
  416. package/lib/types/components/SurfaceEdges.js +7 -0
  417. package/lib/types/components/ThemePicker.d.ts +9 -0
  418. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  419. package/lib/types/components/ThemePicker.js +74 -10
  420. package/lib/types/components/ThemePreviewPane.d.ts +26 -0
  421. package/lib/types/components/ThemePreviewPane.d.ts.map +1 -0
  422. package/lib/types/components/ThemePreviewPane.js +99 -0
  423. package/lib/types/components/WhaleGirl.d.ts +6 -0
  424. package/lib/types/components/WhaleGirl.d.ts.map +1 -1
  425. package/lib/types/components/WhaleGirl.js +18 -0
  426. package/lib/types/components/design-system/Divider.d.ts.map +1 -1
  427. package/lib/types/components/design-system/Divider.js +14 -9
  428. package/lib/types/components/launchpadActions.d.ts +73 -0
  429. package/lib/types/components/launchpadActions.d.ts.map +1 -0
  430. package/lib/types/components/launchpadActions.js +111 -0
  431. package/lib/types/components/launchpadLayout.d.ts +62 -0
  432. package/lib/types/components/launchpadLayout.d.ts.map +1 -0
  433. package/lib/types/components/launchpadLayout.js +176 -0
  434. package/lib/types/components/messages/AssistantThinkingMessage.js +4 -4
  435. package/lib/types/components/onboardingModel.d.ts +83 -0
  436. package/lib/types/components/onboardingModel.d.ts.map +1 -0
  437. package/lib/types/components/onboardingModel.js +128 -0
  438. package/lib/types/components/sidePanel/InfoPanel.d.ts +17 -0
  439. package/lib/types/components/sidePanel/InfoPanel.d.ts.map +1 -0
  440. package/lib/types/components/sidePanel/InfoPanel.js +124 -0
  441. package/lib/types/components/sidePanel/PanelBar.d.ts +45 -0
  442. package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -0
  443. package/lib/types/components/sidePanel/PanelBar.js +104 -0
  444. package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts +21 -0
  445. package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts.map +1 -0
  446. package/lib/types/components/sidePanel/PanelErrorBoundary.js +30 -0
  447. package/lib/types/components/sidePanel/PanelHost.d.ts +36 -0
  448. package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -0
  449. package/lib/types/components/sidePanel/PanelHost.js +81 -0
  450. package/lib/types/components/sidePanel/PanelPicker.d.ts +24 -0
  451. package/lib/types/components/sidePanel/PanelPicker.d.ts.map +1 -0
  452. package/lib/types/components/sidePanel/PanelPicker.js +45 -0
  453. package/lib/types/components/sidePanel/PanelStore.d.ts +55 -0
  454. package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -0
  455. package/lib/types/components/sidePanel/PanelStore.js +109 -0
  456. package/lib/types/components/sidePanel/SidePanelColumn.d.ts +31 -0
  457. package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -0
  458. package/lib/types/components/sidePanel/SidePanelColumn.js +70 -0
  459. package/lib/types/components/sidePanel/SidePanelLayout.d.ts +54 -0
  460. package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -0
  461. package/lib/types/components/sidePanel/SidePanelLayout.js +81 -0
  462. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +43 -0
  463. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -0
  464. package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +26 -0
  465. package/lib/types/components/sidePanel/TrajectoryPanel.d.ts +7 -0
  466. package/lib/types/components/sidePanel/TrajectoryPanel.d.ts.map +1 -0
  467. package/lib/types/components/sidePanel/TrajectoryPanel.js +263 -0
  468. package/lib/types/components/sidePanel/WorkspacePanel.d.ts +4 -0
  469. package/lib/types/components/sidePanel/WorkspacePanel.d.ts.map +1 -0
  470. package/lib/types/components/sidePanel/WorkspacePanel.js +171 -0
  471. package/lib/types/components/sidePanel/builtinPanels.d.ts +3 -0
  472. package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -0
  473. package/lib/types/components/sidePanel/builtinPanels.js +229 -0
  474. package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts +53 -0
  475. package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts.map +1 -0
  476. package/lib/types/components/sidePanel/companion/CompanionPanel.js +528 -0
  477. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +32 -0
  478. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -0
  479. package/lib/types/components/sidePanel/companion/SplashMascot.js +103 -0
  480. package/lib/types/components/sidePanel/companion/deepy.d.ts +75 -0
  481. package/lib/types/components/sidePanel/companion/deepy.d.ts.map +1 -0
  482. package/lib/types/components/sidePanel/companion/deepy.js +222 -0
  483. package/lib/types/components/sidePanel/companion/mood.d.ts +176 -0
  484. package/lib/types/components/sidePanel/companion/mood.d.ts.map +1 -0
  485. package/lib/types/components/sidePanel/companion/mood.js +212 -0
  486. package/lib/types/components/sidePanel/companion/pose.d.ts +43 -0
  487. package/lib/types/components/sidePanel/companion/pose.d.ts.map +1 -0
  488. package/lib/types/components/sidePanel/companion/pose.js +34 -0
  489. package/lib/types/components/sidePanel/companion/skins.d.ts +102 -0
  490. package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -0
  491. package/lib/types/components/sidePanel/companion/skins.js +408 -0
  492. package/lib/types/components/sidePanel/dimensions.d.ts +60 -0
  493. package/lib/types/components/sidePanel/dimensions.d.ts.map +1 -0
  494. package/lib/types/components/sidePanel/dimensions.js +75 -0
  495. package/lib/types/components/sidePanel/jobsFocusStore.d.ts +21 -0
  496. package/lib/types/components/sidePanel/jobsFocusStore.d.ts.map +1 -0
  497. package/lib/types/components/sidePanel/jobsFocusStore.js +30 -0
  498. package/lib/types/components/sidePanel/panelBridge.d.ts +44 -0
  499. package/lib/types/components/sidePanel/panelBridge.d.ts.map +1 -0
  500. package/lib/types/components/sidePanel/panelBridge.js +55 -0
  501. package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts +22 -0
  502. package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts.map +1 -0
  503. package/lib/types/components/sidePanel/pluginPanelAdapter.js +148 -0
  504. package/lib/types/components/sidePanel/types.d.ts +110 -0
  505. package/lib/types/components/sidePanel/types.d.ts.map +1 -0
  506. package/lib/types/components/sidePanel/types.js +1 -0
  507. package/lib/types/components/sidePanel/usePanelInput.d.ts +5 -0
  508. package/lib/types/components/sidePanel/usePanelInput.d.ts.map +1 -0
  509. package/lib/types/components/sidePanel/usePanelInput.js +44 -0
  510. package/lib/types/components/sidePanel/useSidePanel.d.ts +47 -0
  511. package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -0
  512. package/lib/types/components/sidePanel/useSidePanel.js +284 -0
  513. package/lib/types/components/trajectory/MiniWake.d.ts +11 -1
  514. package/lib/types/components/trajectory/MiniWake.d.ts.map +1 -1
  515. package/lib/types/components/trajectory/MiniWake.js +9 -3
  516. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
  517. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
  518. package/lib/types/components/workspaces/HomeWorkspaceRow.js +3 -2
  519. package/lib/types/deepseekPricing.d.ts +10 -9
  520. package/lib/types/deepseekPricing.d.ts.map +1 -1
  521. package/lib/types/deepseekPricing.js +18 -11
  522. package/lib/types/dsh-adapter/channel/attached-context.d.ts +58 -0
  523. package/lib/types/dsh-adapter/channel/attached-context.d.ts.map +1 -0
  524. package/lib/types/dsh-adapter/channel/attached-context.js +109 -0
  525. package/lib/types/dsh-adapter/channel/binding-events.d.ts +6 -0
  526. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  527. package/lib/types/dsh-adapter/channel/binding-events.js +43 -0
  528. package/lib/types/dsh-adapter/channel/capabilities.d.ts +82 -0
  529. package/lib/types/dsh-adapter/channel/capabilities.d.ts.map +1 -0
  530. package/lib/types/dsh-adapter/channel/capabilities.js +165 -0
  531. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
  532. package/lib/types/dsh-adapter/channel/command-completions.js +8 -0
  533. package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +4 -12
  534. package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -1
  535. package/lib/types/dsh-adapter/channel/context-bookkeeping.js +9 -4
  536. package/lib/types/dsh-adapter/channel/external-commands.d.ts.map +1 -1
  537. package/lib/types/dsh-adapter/channel/external-commands.js +8 -2
  538. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +13 -2
  539. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  540. package/lib/types/dsh-adapter/channel/input-delivery.js +18 -1
  541. package/lib/types/dsh-adapter/channel/job-projection.d.ts +1 -0
  542. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
  543. package/lib/types/dsh-adapter/channel/job-projection.js +88 -3
  544. package/lib/types/dsh-adapter/channel/mode-actions.d.ts +13 -3
  545. package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
  546. package/lib/types/dsh-adapter/channel/mode-actions.js +55 -9
  547. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +8 -1
  548. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  549. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +25 -10
  550. package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
  551. package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
  552. package/lib/types/dsh-adapter/channel/preferences.js +26 -8
  553. package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
  554. package/lib/types/dsh-adapter/channel/projection.js +42 -37
  555. package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
  556. package/lib/types/dsh-adapter/channel/reports.js +13 -4
  557. package/lib/types/dsh-adapter/channel/session-reset.d.ts +5 -1
  558. package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
  559. package/lib/types/dsh-adapter/channel/session-reset.js +1 -0
  560. package/lib/types/dsh-adapter/channel/state.d.ts +21 -3
  561. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  562. package/lib/types/dsh-adapter/channel/state.js +3 -2
  563. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  564. package/lib/types/dsh-adapter/channel/subagent-projection.js +5 -0
  565. package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
  566. package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
  567. package/lib/types/dsh-adapter/channel/usage.d.ts +18 -1
  568. package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -1
  569. package/lib/types/dsh-adapter/channel/usage.js +97 -2
  570. package/lib/types/dsh-adapter/channel.d.ts +1 -1
  571. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  572. package/lib/types/dsh-adapter/channel.js +72 -4
  573. package/lib/types/dsh-adapter/context-occupancy.d.ts +204 -0
  574. package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -0
  575. package/lib/types/dsh-adapter/context-occupancy.js +299 -0
  576. package/lib/types/dsh-adapter/contract.d.ts +19 -4
  577. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  578. package/lib/types/dsh-adapter/contract.js +33 -3
  579. package/lib/types/dsh-adapter/index.d.ts +32 -0
  580. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  581. package/lib/types/dsh-adapter/index.js +20 -1
  582. package/lib/types/dsh-adapter/jobs.d.ts +82 -16
  583. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  584. package/lib/types/dsh-adapter/jobs.js +104 -9
  585. package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -1
  586. package/lib/types/dsh-adapter/migrate/sessionize.js +11 -12
  587. package/lib/types/dsh-adapter/oauth/bonus.d.ts +27 -0
  588. package/lib/types/dsh-adapter/oauth/bonus.d.ts.map +1 -0
  589. package/lib/types/dsh-adapter/oauth/bonus.js +69 -0
  590. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.d.ts +2 -1
  591. package/lib/types/dsh-adapter/oauth/command.d.ts.map +1 -0
  592. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.js +7 -4
  593. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.d.ts +13 -10
  594. package/lib/types/dsh-adapter/oauth/credentials.d.ts.map +1 -0
  595. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.js +61 -23
  596. package/lib/types/dsh-adapter/oauth/deepseek.d.ts +39 -0
  597. package/lib/types/dsh-adapter/oauth/deepseek.d.ts.map +1 -0
  598. package/lib/types/dsh-adapter/oauth/deepseek.js +189 -0
  599. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.d.ts +24 -16
  600. package/lib/types/dsh-adapter/oauth/index.d.ts.map +1 -0
  601. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.js +34 -20
  602. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/interaction.d.ts +14 -12
  603. package/lib/types/dsh-adapter/oauth/interaction.d.ts.map +1 -0
  604. package/lib/types/dsh-adapter/oauth/interaction.js +283 -0
  605. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.d.ts +2 -1
  606. package/lib/types/dsh-adapter/oauth/opener.d.ts.map +1 -0
  607. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.js +1 -1
  608. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.d.ts +10 -3
  609. package/lib/types/dsh-adapter/oauth/pi-ai.d.ts.map +1 -0
  610. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.js +8 -3
  611. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.d.ts +6 -3
  612. package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -0
  613. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.js +11 -3
  614. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.d.ts +14 -7
  615. package/lib/types/dsh-adapter/oauth/service.d.ts.map +1 -0
  616. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.js +82 -17
  617. package/lib/types/dsh-adapter/panel-runtime-registry.d.ts +39 -0
  618. package/lib/types/dsh-adapter/panel-runtime-registry.d.ts.map +1 -0
  619. package/lib/types/dsh-adapter/panel-runtime-registry.js +84 -0
  620. package/lib/types/dsh-adapter/panels.d.ts +251 -0
  621. package/lib/types/dsh-adapter/panels.d.ts.map +1 -0
  622. package/lib/types/dsh-adapter/panels.js +407 -0
  623. package/lib/types/dsh-adapter/plugin-host.js +1 -1
  624. package/lib/types/dsh-adapter/plugin.d.ts +25 -2
  625. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  626. package/lib/types/dsh-adapter/plugin.js +241 -44
  627. package/lib/types/dsh-adapter/presets.d.ts +26 -4
  628. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  629. package/lib/types/dsh-adapter/presets.js +29 -5
  630. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  631. package/lib/types/dsh-adapter/providerWizard.js +6 -2
  632. package/lib/types/dsh-adapter/startup-args.d.ts +8 -0
  633. package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -0
  634. package/lib/types/dsh-adapter/startup-args.js +34 -0
  635. package/lib/types/dsh-adapter/subagents.d.ts +1 -0
  636. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  637. package/lib/types/dsh-adapter/subagents.js +10 -1
  638. package/lib/types/history.d.ts +24 -7
  639. package/lib/types/history.d.ts.map +1 -1
  640. package/lib/types/history.js +77 -18
  641. package/lib/types/i18n.d.ts +908 -33
  642. package/lib/types/i18n.d.ts.map +1 -1
  643. package/lib/types/i18n.js +355 -17
  644. package/lib/types/ink/components/App.d.ts +14 -1
  645. package/lib/types/ink/components/App.d.ts.map +1 -1
  646. package/lib/types/ink/components/App.js +71 -61
  647. package/lib/types/ink/components/TerminalSizeContext.d.ts +7 -0
  648. package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -1
  649. package/lib/types/ink/hooks/use-input.d.ts +11 -0
  650. package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
  651. package/lib/types/ink/hooks/use-input.js +8 -2
  652. package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -1
  653. package/lib/types/ink/hooks/use-terminal-viewport.js +3 -1
  654. package/lib/types/ink/ink.d.ts +18 -0
  655. package/lib/types/ink/ink.d.ts.map +1 -1
  656. package/lib/types/ink/ink.js +51 -8
  657. package/lib/types/ink/output.d.ts +10 -1
  658. package/lib/types/ink/output.d.ts.map +1 -1
  659. package/lib/types/ink/output.js +3 -3
  660. package/lib/types/ink/parse-keypress.d.ts +71 -3
  661. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  662. package/lib/types/ink/parse-keypress.js +815 -133
  663. package/lib/types/ink/render-node-to-output.d.ts +1 -1
  664. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  665. package/lib/types/ink/render-node-to-output.js +37 -5
  666. package/lib/types/ink/screen.d.ts +26 -1
  667. package/lib/types/ink/screen.d.ts.map +1 -1
  668. package/lib/types/ink/screen.js +96 -1
  669. package/lib/types/ink/selection.d.ts +23 -1
  670. package/lib/types/ink/selection.d.ts.map +1 -1
  671. package/lib/types/ink/selection.js +102 -26
  672. package/lib/types/ink/sixel-codec.d.ts +11 -0
  673. package/lib/types/ink/sixel-codec.d.ts.map +1 -1
  674. package/lib/types/ink/sixel-codec.js +42 -8
  675. package/lib/types/ink/terminal-querier.d.ts +25 -0
  676. package/lib/types/ink/terminal-querier.d.ts.map +1 -1
  677. package/lib/types/ink/terminal-querier.js +42 -0
  678. package/lib/types/ink/update-overflow-guard.d.ts +24 -0
  679. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  680. package/lib/types/ink/update-overflow-guard.js +25 -3
  681. package/lib/types/math/renderer.d.ts +2 -0
  682. package/lib/types/math/renderer.d.ts.map +1 -1
  683. package/lib/types/math/renderer.js +4 -0
  684. package/lib/types/minimalUiMode.d.ts +19 -0
  685. package/lib/types/minimalUiMode.d.ts.map +1 -0
  686. package/lib/types/minimalUiMode.js +23 -0
  687. package/lib/types/oauth.d.ts +5 -10
  688. package/lib/types/oauth.d.ts.map +1 -1
  689. package/lib/types/oauth.js +5 -10
  690. package/lib/types/onboardingPrefs.d.ts +52 -0
  691. package/lib/types/onboardingPrefs.d.ts.map +1 -0
  692. package/lib/types/onboardingPrefs.js +107 -0
  693. package/lib/types/panels.d.ts +4 -0
  694. package/lib/types/panels.d.ts.map +1 -0
  695. package/lib/types/panels.js +4 -0
  696. package/lib/types/screens/Chat.d.ts +25 -1
  697. package/lib/types/screens/Chat.d.ts.map +1 -1
  698. package/lib/types/screens/Chat.js +1149 -302
  699. package/lib/types/screens/Launchpad.d.ts +194 -0
  700. package/lib/types/screens/Launchpad.d.ts.map +1 -0
  701. package/lib/types/screens/Launchpad.js +607 -0
  702. package/lib/types/screens/Onboarding.d.ts +37 -0
  703. package/lib/types/screens/Onboarding.d.ts.map +1 -0
  704. package/lib/types/screens/Onboarding.js +492 -0
  705. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  706. package/lib/types/screens/SessionSupervisor.js +18 -12
  707. package/lib/types/screens/StatusLine.d.ts +4 -0
  708. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  709. package/lib/types/screens/StatusLine.js +43 -25
  710. package/lib/types/screens/StatusMetrics.d.ts +22 -0
  711. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  712. package/lib/types/screens/StatusMetrics.js +20 -0
  713. package/lib/types/screens/chatOverlay.d.ts +18 -1
  714. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  715. package/lib/types/screens/chatOverlay.js +3 -0
  716. package/lib/types/screens/sessionSupervisor/model.d.ts +1 -2
  717. package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
  718. package/lib/types/screens/sessionSupervisor/model.js +4 -2
  719. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  720. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +7 -3
  721. package/lib/types/settings/definitions.d.ts +93 -0
  722. package/lib/types/settings/definitions.d.ts.map +1 -1
  723. package/lib/types/settings/definitions.js +87 -4
  724. package/lib/types/tips.d.ts.map +1 -1
  725. package/lib/types/tips.js +13 -7
  726. package/lib/types/tuiDisplayPrefs.d.ts +42 -2
  727. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  728. package/lib/types/tuiDisplayPrefs.js +74 -0
  729. package/lib/types/update.d.ts +53 -9
  730. package/lib/types/update.d.ts.map +1 -1
  731. package/lib/types/update.js +103 -46
  732. package/lib/types/utils/bmp.d.ts.map +1 -1
  733. package/lib/types/utils/bmp.js +8 -1
  734. package/lib/types/utils/clipboard.d.ts.map +1 -1
  735. package/lib/types/utils/clipboard.js +25 -6
  736. package/lib/types/utils/credentials.d.ts.map +1 -1
  737. package/lib/types/utils/credentials.js +5 -1
  738. package/lib/types/utils/draftWordBoundary.d.ts +23 -0
  739. package/lib/types/utils/draftWordBoundary.d.ts.map +1 -0
  740. package/lib/types/utils/draftWordBoundary.js +161 -0
  741. package/lib/types/utils/fileTarget.d.ts.map +1 -1
  742. package/lib/types/utils/fileTarget.js +7 -9
  743. package/lib/types/utils/inputPaste.d.ts +62 -0
  744. package/lib/types/utils/inputPaste.d.ts.map +1 -0
  745. package/lib/types/utils/inputPaste.js +111 -0
  746. package/lib/types/utils/intl.d.ts +8 -0
  747. package/lib/types/utils/intl.d.ts.map +1 -1
  748. package/lib/types/utils/intl.js +11 -0
  749. package/lib/types/utils/keymap.d.ts +13 -3
  750. package/lib/types/utils/keymap.d.ts.map +1 -1
  751. package/lib/types/utils/keymap.js +27 -5
  752. package/lib/types/utils/pastedImagePath.d.ts +8 -0
  753. package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
  754. package/lib/types/utils/pastedImagePath.js +29 -5
  755. package/package.json +128 -106
  756. package/presets/liangshen/agent.cordis.yml +4 -1
  757. package/presets/liangshen/preset.yml +1 -1
  758. package/{dsh-ecosystem-spec → tui-profile}/registry/README.md +1 -1
  759. package/{dsh-ecosystem-spec → tui-profile}/registry/registry-0.15.json +1 -1
  760. package/lib/types/minimalMode.d.ts +0 -13
  761. package/lib/types/minimalMode.d.ts.map +0 -1
  762. package/lib/types/minimalMode.js +0 -17
  763. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +0 -21
  764. package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +0 -143
  765. package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +0 -11
  766. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +0 -44
  767. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +0 -193
  768. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +0 -69
  769. /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.d.ts +0 -0
  770. /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.js +0 -0
  771. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.d.ts +0 -0
  772. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.js +0 -0
  773. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.d.ts +0 -0
  774. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.js +0 -0
  775. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.d.ts +0 -0
  776. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.js +0 -0
  777. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/decision-events-v1alpha1.json +0 -0
  778. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/scene-v1alpha1.json +0 -0
  779. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/settings-section-v1alpha1.json +0 -0
  780. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/tui-channel-v1alpha1.json +0 -0
  781. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/workspace-provider-v1alpha1.json +0 -0
  782. /package/{dsh-ecosystem-spec → tui-profile}/registry/host-descriptor.tui.example.json +0 -0
  783. /package/{dsh-ecosystem-spec → tui-profile}/registry/permissions-0.1.json +0 -0
  784. /package/{dsh-ecosystem-spec → tui-profile}/schemas/conformance-claim.schema.json +0 -0
  785. /package/{dsh-ecosystem-spec → tui-profile}/schemas/effect-ledger-record.schema.json +0 -0
  786. /package/{dsh-ecosystem-spec → tui-profile}/schemas/host-descriptor.schema.json +0 -0
@@ -31,11 +31,13 @@ import { ensurePackagedPresets } from './packaged-presets.js';
31
31
  import { registerBundledPresets } from './bundled-presets.js';
32
32
  import { ensureLegacySessionEventTypes, snapshotLiveSessionEvents } from './compat/index.js';
33
33
  import { clearResumeTarget, resumeTargetFromArgv, writeResumeTarget } from '../sessionHistory.js';
34
+ import { initialPromptFromCmdlineArgs } from './startup-args.js';
34
35
  import { readHomePrefs } from '../homePrefs.js';
36
+ import { shouldOfferOnboarding } from '../onboardingPrefs.js';
35
37
  import { resolveSessionCwd } from '../utils/workspaceRoot.js';
36
38
  import { beginRestartAttempt, checkForTuiUpdate, installedTuiVersion, isBootDeadlockTarget, isStandaloneRuntime, isVersionNewer, logRestartEvent, resolveDshProfileName, resolveTuiUpdateTarget, restartTui, updateTuiAndRestart, writeHandoffNotice } from '../update.js';
37
39
  import { getLang, isLang, resolveStartupLang, setLang, t, writeLangPref } from '../i18n.js';
38
- import { DEFAULT_PAGE_MARGIN, DEFAULT_STATUS_BAR, applyImageBacking, applyMathImageBacking, applyMathImageScale, applyMathRendering, applyMermaidDiagrams, applyPageMargin, isPageMarginMode, normalizePageMargin, normalizeScrollGutter, normalizeStatusBar, normalizeToolBackground, parsePageMarginSpec, resolveMathRendering } from '../tuiDisplayPrefs.js';
40
+ import { DEFAULT_PAGE_MARGIN, DEFAULT_SIDE_PANEL_IDS, DEFAULT_STATUS_BAR, SIDE_PANEL_ID_PATTERN, applyCompanionSkin, applyImageBacking, applyMathImageBacking, applyMathImageScale, applyMathRendering, applyMermaidDiagrams, applyPageMargin, applySidePanelOpen, applySidePanelPanels, applySidePanelRatio, applySidePanelSplitEnabled, isPageMarginMode, normalizeJobGroupFold, normalizePageMargin, normalizeScrollGutter, normalizeSidePanelPanels, normalizeStatusBar, normalizeToolBackground, parsePageMarginSpec, resolveMathRendering } from '../tuiDisplayPrefs.js';
39
41
  import { draftComboConflicts, effectiveComboString, parseComboDraft, setKeymapOverrides, SHORTCUT_ACTIONS, } from '../utils/keymap.js';
40
42
  import { attachHerdrIntegration } from '../herdr.js';
41
43
  import { logMouseDebug } from '../utils/debug.js';
@@ -46,6 +48,7 @@ import { reserveMount } from '../sessionMounts.js';
46
48
  import { getHostDialogStore } from './dialogs.js';
47
49
  import { getHostStatusStore } from './status.js';
48
50
  import { createActivityStore } from './activity-store.js';
51
+ import { createContextOccupancyStore } from './context-occupancy.js';
49
52
  import { getHostToastStore } from './toast.js';
50
53
  import { getHostShortcuts } from './shortcuts.js';
51
54
  import { getHostThemes } from './themes.js';
@@ -61,6 +64,7 @@ import instances from '../ink/instances.js';
61
64
  import { cursorMove, DISABLE_KITTY_KEYBOARD, DISABLE_MODIFY_OTHER_KEYS, DISABLE_WIN32_INPUT_MODE } from '../ink/termio/csi.js';
62
65
  import { DBP, DFE, DISABLE_MOUSE_TRACKING, EXIT_ALT_SCREEN, SHOW_CURSOR } from '../ink/termio/dec.js';
63
66
  import { CLEAR_ITERM2_PROGRESS, CLEAR_TAB_STATUS, supportsTabStatus, wrapForMultiplexer } from '../ink/termio/osc.js';
67
+ import { fatalReasonForExit, registerProcessGuardFatalSink } from '../ink/update-overflow-guard.js';
64
68
  /**
65
69
  * Interactive TUI front door for DeepSeek Harness agents.
66
70
  *
@@ -85,39 +89,28 @@ import { CLEAR_ITERM2_PROGRESS, CLEAR_TAB_STATUS, supportsTabStatus, wrapForMult
85
89
  let lastBootedFullscreen;
86
90
  // Image preferences also stay fixed across host recomposes until /restart.
87
91
  let lastBootedTerminalImages;
92
+ // Kept importable from here: the startup parser moved to its own dependency-free
93
+ // module so argv probes can load it without the whole plugin graph.
94
+ export { initialPromptFromCmdlineArgs };
88
95
  /**
89
96
  * Extract the startup prompt from raw app argv, excluding session selectors
90
97
  * and Web startup flag values. `--trusted-host` consumes multiple authorities
91
98
  * up to the next flag; none of them are prompt text (issue #882). An app-level
92
99
  * `--` ends flag parsing; all following tokens are literal prompt text.
93
100
  */
94
- export function initialPromptFromCmdlineArgs(args) {
95
- if (args === undefined)
96
- return '';
97
- const promptArgs = [];
98
- for (let i = 0; i < args.length; i += 1) {
99
- const arg = args[i];
100
- if (arg === '--') {
101
- promptArgs.push(...args.slice(i + 1));
102
- break;
103
- }
104
- if (arg === '--resume' || arg === '--host' || arg === '--port') {
105
- if (args[i + 1] !== undefined && !args[i + 1].startsWith('-'))
106
- i += 1;
107
- continue;
108
- }
109
- if (arg === '--trusted-host') {
110
- while (args[i + 1] !== undefined && !args[i + 1].startsWith('-'))
111
- i += 1;
112
- continue;
113
- }
114
- if (arg.startsWith('--resume='))
115
- continue;
116
- if (arg.startsWith('-'))
117
- continue;
118
- promptArgs.push(arg);
119
- }
120
- return promptArgs.join(' ').trim();
101
+ /**
102
+ * 落地页 / 首启引导该不该在这次启动出现。
103
+ *
104
+ * 只看「用户有没有说要回到哪儿」:`--resume` 目标与首句都算他知道自己要去哪。
105
+ * **工作区目标不算**——`dst` 默认把 cwd 当工作区目标喂进来,算进去就等于在本机
106
+ * 最主流的启动方式下把这两个屏永久关掉(实测事故,见调用点的口径注释)。
107
+ *
108
+ * @param input.launchSessionId - 本次要恢复的会话(--resume / DSH_TUI_RESUME_SESSION)。
109
+ * @param input.initialPrompt - 命令行里带的首句提示词(无则空串)。
110
+ * @returns true 表示这次是「普通启动」。
111
+ */
112
+ export function isLandingLaunch(input) {
113
+ return input.launchSessionId === undefined && input.initialPrompt === '';
121
114
  }
122
115
  export function resolveTuiHostMode(stdoutIsTTY = process.stdout.isTTY === true, env = process.env) {
123
116
  if (stdoutIsTTY) {
@@ -274,10 +267,10 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
274
267
  const userQuestions = ctx.get('userQuestions') ?? new UserQuestionService(ctx);
275
268
  ctx.plugin(toolAskUser);
276
269
  // The host-level tool mount above is intentional for the TUI and for user
277
- // presets, but the official Minimal preset is a strict two-tool trajectory
278
- // (persistent bash + str_replace_editor). Filter only that preset at the
279
- // final assembly boundary. Reading the session on every assembly also makes
280
- // blank-session /preset switches and resumed sessions behave correctly.
270
+ // presets, but the official Minimal preset is a single-tool trajectory (one
271
+ // persistent shell: bash on POSIX, pwsh on Windows). Filter only that preset
272
+ // at the final assembly boundary. Reading the session on every assembly also
273
+ // makes blank-session /preset switches and resumed sessions behave correctly.
281
274
  ctx.on('system-prompt/assemble', async (_assembly, context, next) => {
282
275
  const assembled = await next();
283
276
  const presetId = context.agent === undefined ? undefined : runningPresetOf(context.agent.session);
@@ -383,6 +376,14 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
383
376
  ctx.logger.warn('dsh-tui: tuiScenes service is not mounted; plugin scenes will never open. ' +
384
377
  'The bundle patch is older than the installed dsh-tui package — update the globally installed dsh-tui launcher to match the profile (issue #183).');
385
378
  }
379
+ // Same skew guard for the side-panel registry (dsh-tui-panels row): the
380
+ // tuiPanels runtime is what admits plugin panels into the PanelStore, so
381
+ // register() warns and returns undefined for every plugin when the row is
382
+ // absent — say why on profile launches.
383
+ if (ctx.get('tuiPanels') === undefined && resolveDshProfileName() !== undefined) {
384
+ ctx.logger.warn('dsh-tui: tuiPanels service is not mounted; plugin side panels will never register. ' +
385
+ 'The bundle patch is older than the installed dsh-tui package — update the globally installed dsh-tui launcher to match the profile (issue #183).');
386
+ }
386
387
  // Same skew guard for the plugin-UI services (dsh-tui-extensions row):
387
388
  // managed dialogs park unanswered, status contributions never render,
388
389
  // shortcuts never match, custom-entry renderers stay invisible, and runtime
@@ -431,7 +432,20 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
431
432
  // reads the same records. There is deliberately no rail-side "add a
432
433
  // workspace" control any more: a terminal's launch directory is the whole
433
434
  // registration story.
434
- const attached = await attachSessionToWorkspace(ctx, meta.cwd, agent.session.id);
435
+ //
436
+ // A RESUMED session is accounted where its OWN header cwd lives, never
437
+ // where this terminal was launched. The launch directory can be an
438
+ // ANCESTOR of the resumed session's: launching in `~/projects` and
439
+ // resuming a session recorded in `~/projects/app` accounts the same
440
+ // session in both workspaces, and the next boot dies inside
441
+ // `validateStoredState` ("session ... is accounted by both workspace
442
+ // ..."), which leaves `workspaceRegistry` unactivated and the whole TUI
443
+ // pending forever. Ownership must therefore agree with the `cwd:` handed
444
+ // to `createChannel` below, which already prefers the persisted header.
445
+ // Fresh sessions record `meta.cwd` at creation, so the launch directory
446
+ // still registers through them.
447
+ const ownershipCwd = agent.session.header.cwd ?? meta.cwd;
448
+ const attached = await attachSessionToWorkspace(ctx, ownershipCwd, agent.session.id);
435
449
  if (!attached) {
436
450
  ctx.logger.warn(`dsh-tui: session "${agent.session.id}" has no workspace ownership because workspaceRegistry is not mounted`);
437
451
  }
@@ -457,6 +471,13 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
457
471
  // (the runtime `/activity` command only changes the preset), so a hidden
458
472
  // line attaches nothing at all — no feed, no 500ms tick.
459
473
  const activityStore = createActivityStore(ctx, config.activity !== false);
474
+ // Read side of the token meter's `contextPressure` unit: the ONE occupancy
475
+ // source for the footer, the segmented bar, the status commands and the
476
+ // context-low warning. Created unconditionally (unlike the activity store,
477
+ // there is no config gate: hiding the bar must not make the warning or the
478
+ // footer read a stale sample). A composition without the meter leaves it
479
+ // empty and the channel falls back to the last-request sample.
480
+ const contextOccupancyStore = createContextOccupancyStore(ctx);
460
481
  const rawChannel = createChannel(ctx, agent, {
461
482
  // The namespace this boot actually registered the settings section under
462
483
  // (the Config owner's Loader id; custom ids are supported). Chat and the
@@ -467,6 +488,10 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
467
488
  // soon as this session binds so a resumed or reattached session renders its
468
489
  // line immediately instead of waiting for the next event.
469
490
  seedActivity: session => activityStore.seed(session),
491
+ // Same reason as the activity line: the occupancy projection only pushes on
492
+ // change, so a resumed session reads one baseline at bind time.
493
+ contextPressure: contextOccupancyStore,
494
+ seedContextOccupancy: session => contextOccupancyStore.seed(session),
470
495
  // A RESUMED session keeps its persisted header cwd (issue #96 review):
471
496
  // pre-upgrade sessions recorded the launch directory, and re-resolving
472
497
  // from the current launch directory would split @ expansion / file
@@ -501,6 +526,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
501
526
  // screen edits this key live through the dsh-tui namespace.
502
527
  diffLayout: config.diffLayout,
503
528
  thinkingFold: config.thinkingFold,
529
+ jobGroupFold: config.jobGroupFold,
504
530
  toolBackground: config.toolBackground,
505
531
  scrollGutter: config.scrollGutter,
506
532
  pageMargin: config.pageMargin,
@@ -550,6 +576,15 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
550
576
  // mermaid and LaTeX switches ride the same kind of store (Markdown is
551
577
  // memoized by content, so no prop reaches the diagram/formula nodes).
552
578
  applyPageMargin(config.pageMargin);
579
+ // Side panel (settings `dsh-tui.sidePanel.*`): same reason as pageMargin —
580
+ // the useSidePanel controller reads these module-level stores ABOVE the
581
+ // channel's version bump, so a Ctrl+B toggle re-renders Chat without any
582
+ // session change. applyDisplay below mirrors every settings edit into them.
583
+ applySidePanelSplitEnabled(config.sidePanel?.splitEnabled);
584
+ applySidePanelOpen(config.sidePanel?.open);
585
+ applySidePanelRatio(config.sidePanel?.ratio);
586
+ applySidePanelPanels(config.sidePanel?.panels);
587
+ applyCompanionSkin(config.companion?.skin);
553
588
  applyMermaidDiagrams(config.mermaidDiagrams);
554
589
  applyMathRendering(resolveMathRendering({}, config));
555
590
  applyMathImageScale(config.mathImageScale ?? 'auto');
@@ -599,6 +634,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
599
634
  const scope = createSettingsScope(configOwner, settingsCtx.settings, tuiSettingsNs, Schema.object({
600
635
  diffLayout: Schema.union(['auto', 'split', 'unified']).default('auto'),
601
636
  thinkingFold: Schema.union(['preview', 'full']).default('preview'),
637
+ jobGroupFold: Schema.union(['auto', 'always', 'never']).default('auto'),
602
638
  toolBackground: Schema.union(['none', 'subtle', 'strong']).default('none'),
603
639
  scrollGutter: Schema.union(['timeline', 'scrollbar', 'hidden']).default('timeline'),
604
640
  // Preset names AND custom `NxM` specs (the settings field's parse
@@ -643,6 +679,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
643
679
  contextUsage: Schema.boolean().default(DEFAULT_STATUS_BAR.contextUsage),
644
680
  cache: Schema.boolean().default(DEFAULT_STATUS_BAR.cache),
645
681
  tokens: Schema.boolean().default(DEFAULT_STATUS_BAR.tokens),
682
+ cost: Schema.boolean().default(DEFAULT_STATUS_BAR.cost),
646
683
  tps: Schema.boolean().default(DEFAULT_STATUS_BAR.tps),
647
684
  gitBranch: Schema.boolean().default(DEFAULT_STATUS_BAR.gitBranch),
648
685
  sessionTitle: Schema.boolean().default(DEFAULT_STATUS_BAR.sessionTitle),
@@ -654,6 +691,22 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
654
691
  trajectory: Schema.boolean().default(DEFAULT_STATUS_BAR.trajectory),
655
692
  shortcutHint: Schema.boolean().default(DEFAULT_STATUS_BAR.shortcutHint),
656
693
  }).default({ ...DEFAULT_STATUS_BAR }),
694
+ // Side-panel preferences. No schema defaults on purpose (same rule as
695
+ // foldTerminalCommand/expandEditor above): a default here would come
696
+ // back from scope.get()/watch() and shadow an explicit cordis.yml
697
+ // `sidePanel` block while the user layer is unset. applyDisplay
698
+ // resolves `?? config.sidePanel?.x` and the apply* stores normalize
699
+ // undefined to the documented defaults (true / false / 0.68 / the
700
+ // built-in panel trio).
701
+ sidePanel: Schema.object({
702
+ splitEnabled: Schema.boolean(),
703
+ open: Schema.boolean(),
704
+ ratio: Schema.number(),
705
+ panels: Schema.string(),
706
+ }),
707
+ companion: Schema.object({
708
+ skin: Schema.string(),
709
+ }),
657
710
  // Header pixel whale art; on unless settings.yaml says otherwise.
658
711
  whale: Schema.boolean().default(true),
659
712
  // Idle whale behaviors after the intro settles; on by default —
@@ -670,8 +723,9 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
670
723
  // (undefined → daily), so cordis.yml stays decisive and junk lands on
671
724
  // daily.
672
725
  splashFont: Schema.string(),
673
- // Minimal mode: strips the header splash, emoji glyphs, and
674
- // decorative colors; code highlight and tool colors stay.
726
+ // Minimal UI (极简界面, settings key `minimal` — never renamed): strips
727
+ // the header splash, emoji glyphs, and decorative colors; code highlight
728
+ // and tool colors stay. Unrelated to the kernel agent preset `minimal`.
675
729
  minimal: Schema.boolean().default(false),
676
730
  // No default on purpose: an unset `lang` keeps the field showing
677
731
  // the effective language (see the section's format below) and lets
@@ -714,10 +768,12 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
714
768
  return;
715
769
  channel.setSplashFont(normalizeSplashFont(value.splashFont ?? config.splashFont));
716
770
  };
717
- const applyMinimal = (value) => {
771
+ const applyMinimalUi = (value) => {
718
772
  if (shadow)
719
773
  return;
720
- channel.setMinimal(value.minimal ?? false);
774
+ // `value.minimal` is the persisted settings key (never renamed); the
775
+ // channel member is the minimal-UI flag, NOT the kernel preset.
776
+ channel.setMinimalUi(value.minimal ?? false);
721
777
  };
722
778
  // Renderer settings are resolved before mount; later edits wait for restart.
723
779
  const applyRendererSettings = (value) => {
@@ -745,6 +801,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
745
801
  if (shadow)
746
802
  return;
747
803
  channel.setThinkingFold(value.thinkingFold ?? config.thinkingFold ?? 'preview');
804
+ channel.setJobGroupFold(normalizeJobGroupFold(value.jobGroupFold ?? config.jobGroupFold));
748
805
  channel.setToolBackground(normalizeToolBackground(value.toolBackground ?? config.toolBackground));
749
806
  channel.setScrollGutter(normalizeScrollGutter(value.scrollGutter ?? config.scrollGutter));
750
807
  // Page margin: the channel carries the mode (tests observe it), the
@@ -763,6 +820,15 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
763
820
  applyMathImageBacking(value.mathImageBacking ?? config.mathImageBacking ?? 'transparent');
764
821
  applyImageBacking(value.imageBacking ?? config.imageBacking ?? 'transparent');
765
822
  channel.setStatusBar(normalizeStatusBar(value.statusBar ?? config.statusBar));
823
+ // Side panel: no channel member — the layout owns module-level stores
824
+ // (they sit above the channel's version bump), so /settings writes them
825
+ // directly and useSidePanel's own subscriptions re-lay out at once. An
826
+ // unset user layer falls back to cordis.yml, then to the store default.
827
+ applySidePanelSplitEnabled(value.sidePanel?.splitEnabled ?? config.sidePanel?.splitEnabled);
828
+ applySidePanelOpen(value.sidePanel?.open ?? config.sidePanel?.open);
829
+ applySidePanelRatio(value.sidePanel?.ratio ?? config.sidePanel?.ratio);
830
+ applySidePanelPanels(value.sidePanel?.panels ?? config.sidePanel?.panels);
831
+ applyCompanionSkin(value.companion?.skin ?? config.companion?.skin);
766
832
  };
767
833
  // Legacy user scopes layer over cordis.yml. Modern Config is already
768
834
  // resolved: an unset action must not revive its startup override.
@@ -802,7 +868,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
802
868
  applyWhaleIdle(next);
803
869
  applyWhaleGirl(next);
804
870
  applySplashFont(next);
805
- applyMinimal(next);
871
+ applyMinimalUi(next);
806
872
  applyLang(next);
807
873
  applyDisplay(next);
808
874
  applyEffortDefault(next);
@@ -936,6 +1002,9 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
936
1002
  {
937
1003
  ...settingField('thinkingFold'),
938
1004
  },
1005
+ {
1006
+ ...settingField('jobGroupFold'),
1007
+ },
939
1008
  {
940
1009
  ...settingField('toolBackground'),
941
1010
  },
@@ -1076,6 +1145,66 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
1076
1145
  {
1077
1146
  ...settingField('statusBar.shortcutHint'),
1078
1147
  },
1148
+ {
1149
+ ...settingField('sidePanel.splitEnabled'),
1150
+ format(value) {
1151
+ // Unset in the user layer: the effective default is on.
1152
+ return String(typeof value === 'boolean' ? value : config.sidePanel?.splitEnabled !== false);
1153
+ },
1154
+ },
1155
+ {
1156
+ ...settingField('sidePanel.open'),
1157
+ format(value) {
1158
+ // Unset in the user layer: the effective default is off.
1159
+ return String(typeof value === 'boolean' ? value : config.sidePanel?.open === true);
1160
+ },
1161
+ },
1162
+ {
1163
+ ...settingField('sidePanel.ratio'),
1164
+ placeholder: '0.68',
1165
+ format(value) {
1166
+ // Unset in the user layer: show the effective fraction.
1167
+ const ratio = typeof value === 'number' && Number.isFinite(value) ? value : config.sidePanel?.ratio;
1168
+ return String(ratio ?? 0.68);
1169
+ },
1170
+ parse(text) {
1171
+ const draft = text.trim();
1172
+ if (draft === '')
1173
+ return { kind: 'clear' };
1174
+ const ratio = Number(draft);
1175
+ // Range gate mirrors the geometry contract (0.1–0.95): an
1176
+ // out-of-range draft would be silently clamped by the store, so
1177
+ // refuse it and let the editor keep the error badge instead.
1178
+ if (!Number.isFinite(ratio) || ratio < 0.1 || ratio > 0.95)
1179
+ return undefined;
1180
+ return { kind: 'set', value: ratio };
1181
+ },
1182
+ },
1183
+ {
1184
+ ...settingField('sidePanel.panels'),
1185
+ placeholder: DEFAULT_SIDE_PANEL_IDS,
1186
+ format(value) {
1187
+ // Unset in the user layer: show the effective list.
1188
+ return typeof value === 'string' && value.trim() !== ''
1189
+ ? value
1190
+ : config.sidePanel?.panels ?? DEFAULT_SIDE_PANEL_IDS;
1191
+ },
1192
+ parse(text) {
1193
+ const draft = text.trim();
1194
+ if (draft === '')
1195
+ return { kind: 'clear' };
1196
+ // Strict gate: every token must be a well-formed panel id. The
1197
+ // store would drop a typo silently, so a draft that does not
1198
+ // round-trip is refused instead of saved as something else.
1199
+ const tokens = draft.split(',').map(token => token.trim().toLowerCase()).filter(token => token !== '');
1200
+ if (tokens.length === 0 || tokens.some(token => !SIDE_PANEL_ID_PATTERN.test(token)))
1201
+ return undefined;
1202
+ return { kind: 'set', value: normalizeSidePanelPanels(draft) };
1203
+ },
1204
+ },
1205
+ {
1206
+ ...settingField('companion.skin'),
1207
+ },
1079
1208
  {
1080
1209
  ...settingField('whale'),
1081
1210
  },
@@ -1190,6 +1319,24 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
1190
1319
  if (error !== undefined) {
1191
1320
  const message = error instanceof Error ? error.message : String(error);
1192
1321
  ctx.logger.error(`dsh-tui: exit after error: ${message}`);
1322
+ // A crash must leave the resume marker a clean exit would leave: the
1323
+ // launcher's next start (and its safe-mode retry) then reopens the
1324
+ // session the user was actually in instead of a blank one. Only the
1325
+ // resumable case writes — unlike the clean-exit branch below, a crash
1326
+ // never CLEARS a marker, so a session the user still has cannot be
1327
+ // dropped by a failure that happened before the first message landed.
1328
+ try {
1329
+ if (isExitResumable({
1330
+ pendingCount: channel.pending.length,
1331
+ liveAgent: ctx.agents.get(SessionId(channel.agentId)),
1332
+ startupAgent: agent,
1333
+ })) {
1334
+ writeResumeTarget(channel.agentId);
1335
+ }
1336
+ }
1337
+ catch {
1338
+ // Resume persistence is best effort and must never block the exit.
1339
+ }
1193
1340
  void finishExit(ctx, instance, bootedFullscreen, undefined, `dsh-tui crashed: ${message}`, () => disposeRootAndExit(ctx, 1));
1194
1341
  return;
1195
1342
  }
@@ -1250,6 +1397,25 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
1250
1397
  },
1251
1398
  });
1252
1399
  const handleExit = funnel.handleExit;
1400
+ // Process-level crash backstop (see installNestedUpdateOverflowProcessGuard):
1401
+ // an uncaught exception or unhandled rejection that is NOT the React #185
1402
+ // overflow would otherwise take Node's default path and kill the process
1403
+ // before this funnel runs — no resume marker, no terminal restore, and the
1404
+ // launcher's "entered safe mode" prompt on what looks like a lost session.
1405
+ // Route it through the same teardown a fatal RENDER error uses: unmount,
1406
+ // `dsh-tui crashed: …`, dispose, exit 1. Fail loud stays intact — the funnel
1407
+ // returns false when it has already settled or the tree is being torn down
1408
+ // (host recompose), and the guard then rethrows to Node's default crash.
1409
+ // DSH_TUI_NO_185_PROCESS_GUARD=1 skips the guard entirely, leaving process
1410
+ // error policy to the host exactly as before.
1411
+ registerProcessGuardFatalSink((error, origin) => {
1412
+ // An undefined reason (`Promise.reject()`, `throw undefined`) must not reach
1413
+ // the funnel as-is: `error !== undefined` is what selects the crash path, so
1414
+ // a bare undefined would exit 0 while this sink claims the process.
1415
+ const fatal = fatalReasonForExit(error, origin);
1416
+ ctx.logger.error(`dsh-tui: fatal ${origin}: ${fatal instanceof Error ? fatal.message : String(fatal)}`);
1417
+ return handleExit(fatal);
1418
+ });
1253
1419
  // External injection controller: Chat fills it with `{ append, submit }`
1254
1420
  // every render; the injection socket (opened below) drives it. A ref rather
1255
1421
  // than a prop callback so the socket handler always reaches the live Chat.
@@ -1274,10 +1440,33 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
1274
1440
  * so a process that dies before the first frame does not consume it.
1275
1441
  */
1276
1442
  const homeSeen = readHomePrefs().seen === true;
1277
- const openHomeOnBoot = !homeSeen
1278
- && launchSessionId === undefined
1279
- && requestedWorkspace === undefined
1280
- && initialPrompt === '';
1443
+ /**
1444
+ * 「普通启动」在这里有两档口径,差在**工作区目标算不算**:
1445
+ *
1446
+ * - 落地页与首启引导只认「没说要回到哪儿」:没有 resume 目标、没有首句。
1447
+ * - home(会话与工作区)还多认一条「没说在哪儿干活」——那一屏问的就是这个。
1448
+ *
1449
+ * 工作区目标**不能**进前者的判定:`dst` 那类 launcher 默认把 cwd 当工作区
1450
+ * 目标喂进来(D:/node/dst.cmd 里 set DSH_TUI_WORKSPACE_TARGET=%CD%),一旦
1451
+ * 算进去,落地页在本机最主流的启动方式下**永远不出**——用户实测「既没看到
1452
+ * ob 也没看到 lp」的根因就是这一条。
1453
+ */
1454
+ const noResume = isLandingLaunch({ launchSessionId, initialPrompt });
1455
+ const openHomeOnBoot = !homeSeen && noResume && requestedWorkspace === undefined;
1456
+ /**
1457
+ * The launchpad is NOT one-shot the way the workspace home is: every
1458
+ * ordinary launch starts on it, because it is where the first sentence gets
1459
+ * typed rather than a tutorial that retires itself. `DSH_TUI_NO_LAUNCHPAD=1`
1460
+ * is the escape hatch (an automation that wants the old blank conversation
1461
+ * and no dialog in front of it).
1462
+ */
1463
+ const launchpadOnBoot = noResume && process.env.DSH_TUI_NO_LAUNCHPAD !== '1';
1464
+ /**
1465
+ * The first-run guide. Gated on its own preference (not on `homeSeen`): the
1466
+ * two answer different questions, and an install that already knows its
1467
+ * workspace may still never have configured a key.
1468
+ */
1469
+ const onboardingOnBoot = noResume && shouldOfferOnboarding();
1281
1470
  const chat = React.createElement(Chat, {
1282
1471
  channel,
1283
1472
  renderScene: createChannelSceneOutlet(() => rawChannel.pluginScene),
@@ -1285,10 +1474,13 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
1285
1474
  approvalStore,
1286
1475
  injectControllerRef,
1287
1476
  openHomeOnBoot,
1477
+ launchpadOnBoot,
1478
+ onboardingOnBoot,
1288
1479
  // The dsh-tui-extensions row's services (managed dialogs, status line,
1289
1480
  // shortcuts). Soft-consumed: absent the row (stale patch, bare embed),
1290
1481
  // Chat falls back to inert stores and no shortcut registry.
1291
1482
  extensionDialogs: getHostDialogStore(ctx.get('tuiDialogs')),
1483
+ bonusNotices: ctx.get('dshAuth')?.coupons,
1292
1484
  extensionStatus: getHostStatusStore(ctx.get('tuiStatus')),
1293
1485
  // The working line's semantics belong to the dsh-working-activity plugin's
1294
1486
  // session projection; this store is the read side of that seam, so the TUI
@@ -1445,6 +1637,10 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
1445
1637
  ctx.effect(() => () => {
1446
1638
  logMouseDebug('apply teardown');
1447
1639
  funnel.markTeardown();
1640
+ // Drop the crash backstop with this mount: a torn-down funnel cannot own
1641
+ // the process, so a later fatal error falls back to Node's default crash
1642
+ // instead of reaching a disposed ctx.
1643
+ registerProcessGuardFatalSink(undefined);
1448
1644
  rawChannel.releaseContributions();
1449
1645
  instance?.unmount();
1450
1646
  });
@@ -1648,11 +1844,12 @@ export function createExitFunnel(deps) {
1648
1844
  },
1649
1845
  handleExit: (error) => {
1650
1846
  if (teardown)
1651
- return;
1847
+ return false;
1652
1848
  if (exited)
1653
- return;
1849
+ return false;
1654
1850
  exited = true;
1655
1851
  deps.onUserExit(error);
1852
+ return true;
1656
1853
  },
1657
1854
  };
1658
1855
  }
@@ -79,10 +79,32 @@ export declare function runningPresetOf(session: unknown): string | undefined;
79
79
  */
80
80
  export declare function resolvePersistedRoute(ctx: Context, sessionId: SessionId): Promise<ModelRoute | undefined>;
81
81
  /**
82
- * Keep the official Minimal preset's model-facing contract at exactly two
83
- * tools. The TUI mounts ask_user_question at the host layer so every other
84
- * preset (including user presets) can use its questionnaire UI; host-layer
85
- * tools otherwise merge into Minimal's scoped catalog as a third tool.
82
+ * Whether the host-layer `ask_user_question` tool must stay invisible to one
83
+ * preset's model-facing catalog.
84
+ *
85
+ * The official Minimal preset is a single-persistent-shell trajectory
86
+ * (`@deepseek-ai/dsh-web-app/presets/minimal.patch.yml`: `persona` +
87
+ * `persistent-shell`, i.e. bash on POSIX / pwsh on Windows — `str_replace_editor`
88
+ * has been opt-in since 0.1.3-alpha.2), while the TUI mounts
89
+ * ask_user_question at the HOST layer so every other preset (including user
90
+ * presets) can use its questionnaire UI; that host-layer tool otherwise merges
91
+ * into Minimal's scoped catalog as an extra tool.
92
+ *
93
+ * The recorded preset id is the only signal available at the assembly
94
+ * boundary: the composition exposes no per-tool manifest, and a host tool's
95
+ * presence in the tool registry cannot tell whether a preset declared it. This
96
+ * is therefore the ONE preset-id read in the capability path, shared with
97
+ * `resolveAgentCapabilities` so advertisement and assembly agree, and pinned
98
+ * by `verify:minimal-preset-tools`.
99
+ *
100
+ * @param presetId - Preset recorded for the requesting session.
101
+ * @returns True when the host-layer tool must be filtered out of the assembly.
102
+ */
103
+ export declare function presetHidesHostAskTool(presetId: string | undefined): boolean;
104
+ /**
105
+ * Keep the official Minimal preset's model-facing catalog minimal: it declares
106
+ * exactly one persistent shell tool, and the host-mounted ask_user_question
107
+ * must not become a second one.
86
108
  *
87
109
  * This is a per-assembly filter rather than a startup-time decision because
88
110
  * one TUI process can resume, create, or recompose sessions under different
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAWtE,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBhG;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW5G;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAW/G;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAM/G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAKpG"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAWtE,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBhG;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW5G;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAW/G;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAM/G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAKpG"}
@@ -120,10 +120,34 @@ export async function resolvePersistedRoute(ctx, sessionId) {
120
120
  }
121
121
  }
122
122
  /**
123
- * Keep the official Minimal preset's model-facing contract at exactly two
124
- * tools. The TUI mounts ask_user_question at the host layer so every other
125
- * preset (including user presets) can use its questionnaire UI; host-layer
126
- * tools otherwise merge into Minimal's scoped catalog as a third tool.
123
+ * Whether the host-layer `ask_user_question` tool must stay invisible to one
124
+ * preset's model-facing catalog.
125
+ *
126
+ * The official Minimal preset is a single-persistent-shell trajectory
127
+ * (`@deepseek-ai/dsh-web-app/presets/minimal.patch.yml`: `persona` +
128
+ * `persistent-shell`, i.e. bash on POSIX / pwsh on Windows — `str_replace_editor`
129
+ * has been opt-in since 0.1.3-alpha.2), while the TUI mounts
130
+ * ask_user_question at the HOST layer so every other preset (including user
131
+ * presets) can use its questionnaire UI; that host-layer tool otherwise merges
132
+ * into Minimal's scoped catalog as an extra tool.
133
+ *
134
+ * The recorded preset id is the only signal available at the assembly
135
+ * boundary: the composition exposes no per-tool manifest, and a host tool's
136
+ * presence in the tool registry cannot tell whether a preset declared it. This
137
+ * is therefore the ONE preset-id read in the capability path, shared with
138
+ * `resolveAgentCapabilities` so advertisement and assembly agree, and pinned
139
+ * by `verify:minimal-preset-tools`.
140
+ *
141
+ * @param presetId - Preset recorded for the requesting session.
142
+ * @returns True when the host-layer tool must be filtered out of the assembly.
143
+ */
144
+ export function presetHidesHostAskTool(presetId) {
145
+ return presetId === 'minimal';
146
+ }
147
+ /**
148
+ * Keep the official Minimal preset's model-facing catalog minimal: it declares
149
+ * exactly one persistent shell tool, and the host-mounted ask_user_question
150
+ * must not become a second one.
127
151
  *
128
152
  * This is a per-assembly filter rather than a startup-time decision because
129
153
  * one TUI process can resume, create, or recompose sessions under different
@@ -134,7 +158,7 @@ export async function resolvePersistedRoute(ctx, sessionId) {
134
158
  * @returns The original assembly, except ask_user_question is absent in Minimal.
135
159
  */
136
160
  export function filterMinimalPresetTools(assembly, presetId) {
137
- if (presetId !== 'minimal' || !assembly.tools.some(tool => tool.name === ASK_USER_TOOL))
161
+ if (!presetHidesHostAskTool(presetId) || !assembly.tools.some(tool => tool.name === ASK_USER_TOOL))
138
162
  return assembly;
139
163
  return {
140
164
  ...assembly,
@@ -1 +1 @@
1
- {"version":3,"file":"providerWizard.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/providerWizard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAsH,MAAM,sCAAsC,CAAA;AACjM,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAsBjM,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,QAAoC,CAAA;AAElE,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,2EAIrB,CAAA;AAEV;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,CACZ,OAAO,EAAE,sBAAsB,EAC/B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KACtE,IAAI,CAAA;IACT,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAA;IACrE,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5E;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;AA4D3G;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,qBAAqB,CAAC,CA8BhC;AAo3BD,8DAA8D;AAC9D,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAA;AACrE,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAA;AACxE,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,qBAAqB,GACrB,gBAAgB,CAAA;AAEpB,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B;uEACmE;IACnE,QAAQ,CAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC5C,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAA;CACvC"}
1
+ {"version":3,"file":"providerWizard.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/providerWizard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAsH,MAAM,sCAAsC,CAAA;AACjM,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAsBjM,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,QAAoC,CAAA;AAElE,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,2EAIrB,CAAA;AAEV;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,CACZ,OAAO,EAAE,sBAAsB,EAC/B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KACtE,IAAI,CAAA;IACT,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAA;IACrE,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5E;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;AA4D3G;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,qBAAqB,CAAC,CA8BhC;AAw3BD,8DAA8D;AAC9D,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAA;AACrE,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAA;AACxE,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,qBAAqB,GACrB,gBAAgB,CAAA;AAEpB,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B;uEACmE;IACnE,QAAQ,CAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC5C,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAA;CACvC"}
@@ -817,7 +817,9 @@ function buildDeleteSummary(provider) {
817
817
  /** Masked state line for one provider row in the OAuth pick question. */
818
818
  function oauthStateDescription(status) {
819
819
  if (status.signedIn) {
820
- return t('provider-oauth-state-in', { time: new Date(status.expiresAt ?? 0).toISOString() });
820
+ return status.expiresAt === undefined
821
+ ? t('provider-oauth-state-in-no-expiry')
822
+ : t('provider-oauth-state-in', { time: new Date(status.expiresAt).toISOString() });
821
823
  }
822
824
  return status.expired
823
825
  ? t('provider-oauth-state-expired')
@@ -872,7 +874,9 @@ async function runOAuthWizard(deps, oauth) {
872
874
  pushLocal('/provider', [
873
875
  t('provider-line-oauth-provider', { provider: result.provider }),
874
876
  t('provider-line-oauth-flow', { flow: result.oauthLabel }),
875
- t('provider-line-oauth-expires', { time: new Date(result.expiresAt).toISOString() }),
877
+ ...(result.expiresAt === undefined
878
+ ? []
879
+ : [t('provider-line-oauth-expires', { time: new Date(result.expiresAt).toISOString() })]),
876
880
  t('provider-switch-hint'),
877
881
  ]);
878
882
  notify(t('provider-oauth-login-ok', { provider: result.provider }), { color: 'success' });
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Extract the startup prompt from raw app argv, excluding session selectors
3
+ * and Web startup flag values. `--trusted-host` consumes multiple authorities
4
+ * up to the next flag; none of them are prompt text (issue #882). An app-level
5
+ * `--` ends flag parsing; all following tokens are literal prompt text.
6
+ */
7
+ export declare function initialPromptFromCmdlineArgs(args: readonly string[] | undefined): string;
8
+ //# sourceMappingURL=startup-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-args.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/startup-args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAsBxF"}