@deepseek-harness-tui/dsh-tui 0.12.0 → 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 (692) hide show
  1. package/README.md +41 -5
  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 +8 -3
  276. package/cordis.patch.yml +7 -1
  277. package/guide/dsh-tui-guide/configuration.en.md +6 -1
  278. package/guide/dsh-tui-guide/configuration.md +6 -1
  279. package/guide/dsh-tui-guide/getting-started.en.md +6 -3
  280. package/guide/dsh-tui-guide/getting-started.md +4 -2
  281. package/guide/dsh-tui-guide/interaction.en.md +68 -4
  282. package/guide/dsh-tui-guide/interaction.md +49 -3
  283. package/guide/dsh-tui-guide/plugins.en.md +16 -6
  284. package/guide/dsh-tui-guide/plugins.md +14 -6
  285. package/guide/dsh-tui-guide/themes.en.md +7 -2
  286. package/guide/dsh-tui-guide/themes.md +5 -2
  287. package/guide/dsh-tui-guide/user-guide.en.md +124 -21
  288. package/guide/dsh-tui-guide/user-guide.md +96 -16
  289. package/lib/settings.json +215 -1
  290. package/lib/types/adapter/channel/ui-policy.d.ts +6 -2
  291. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  292. package/lib/types/adapter/channel/ui-policy.js +14 -1
  293. package/lib/types/adapter/index.d.ts +1 -1
  294. package/lib/types/adapter/index.js +1 -1
  295. package/lib/types/adapter/kernel/host-facade.d.ts +4 -1
  296. package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -1
  297. package/lib/types/adapter/kernel/host-facade.js +8 -1
  298. package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
  299. package/lib/types/adapter/kernel/runtime.js +13 -0
  300. package/lib/types/adapter/kernel/slices/index.d.ts +1 -0
  301. package/lib/types/adapter/kernel/slices/index.d.ts.map +1 -1
  302. package/lib/types/adapter/kernel/slices/index.js +3 -0
  303. package/lib/types/adapter/kernel/slices/panels.d.ts +3 -0
  304. package/lib/types/adapter/kernel/slices/panels.d.ts.map +1 -0
  305. package/lib/types/adapter/kernel/slices/panels.js +14 -0
  306. package/lib/types/adapter/ports/channel-capabilities.d.ts +48 -0
  307. package/lib/types/adapter/ports/channel-capabilities.d.ts.map +1 -0
  308. package/lib/types/adapter/ports/channel-capabilities.js +2 -0
  309. package/lib/types/adapter/ports/channel-catalog.d.ts +7 -0
  310. package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
  311. package/lib/types/adapter/ports/channel-display.d.ts +10 -0
  312. package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
  313. package/lib/types/adapter/ports/channel-ui.d.ts +62 -2
  314. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  315. package/lib/types/adapter/ports/channel-view.d.ts +94 -0
  316. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  317. package/lib/types/adapter/ports/channel.d.ts +1 -1
  318. package/lib/types/adapter/ports/channel.js +1 -1
  319. package/lib/types/adapter/ports/descriptor.d.ts +1 -1
  320. package/lib/types/adapter/ports/descriptor.js +1 -1
  321. package/lib/types/adapter/ports/index.d.ts +1 -1
  322. package/lib/types/adapter/ports/index.js +1 -1
  323. package/lib/types/adapter/ports/panels.d.ts +28 -0
  324. package/lib/types/adapter/ports/panels.d.ts.map +1 -0
  325. package/lib/types/adapter/ports/panels.js +8 -0
  326. package/lib/types/adapter/ports/workspace.d.ts +1 -1
  327. package/lib/types/adapter/ports/workspace.js +1 -1
  328. package/lib/types/adapter/spec/index.d.ts +2 -2
  329. package/lib/types/adapter/spec/index.js +2 -2
  330. package/lib/types/adapter/spec/profile.d.ts +6 -6
  331. package/lib/types/adapter/spec/profile.d.ts.map +1 -1
  332. package/lib/types/adapter/spec/profile.js +6 -6
  333. package/lib/types/adapter/spec/protocol-constants.d.ts +3 -3
  334. package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
  335. package/lib/types/adapter/spec/protocol-constants.js +5 -5
  336. package/lib/types/adapter/spec/tui-contributions.d.ts +4 -4
  337. package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
  338. package/lib/types/adapter/spec/tui-contributions.js +5 -5
  339. package/lib/types/adapter/standard/descriptor.js +1 -1
  340. package/lib/types/adapter/standard/index.d.ts +3 -3
  341. package/lib/types/adapter/standard/index.js +3 -3
  342. package/lib/types/adapter/standard/registry.d.ts +3 -2
  343. package/lib/types/adapter/standard/registry.d.ts.map +1 -1
  344. package/lib/types/adapter/standard/registry.js +6 -5
  345. package/lib/types/adapter/standard/tui-extension.d.ts +1 -1
  346. package/lib/types/adapter/standard/tui-extension.js +1 -1
  347. package/lib/types/adapter/upstream/index.d.ts +1 -0
  348. package/lib/types/adapter/upstream/index.d.ts.map +1 -1
  349. package/lib/types/adapter/upstream/index.js +1 -0
  350. package/lib/types/adapter/upstream/panels-driver.d.ts +18 -0
  351. package/lib/types/adapter/upstream/panels-driver.d.ts.map +1 -0
  352. package/lib/types/adapter/upstream/panels-driver.js +159 -0
  353. package/lib/types/api.d.ts +2 -0
  354. package/lib/types/api.d.ts.map +1 -1
  355. package/lib/types/api.js +3 -1
  356. package/lib/types/commands.d.ts.map +1 -1
  357. package/lib/types/commands.js +12 -4
  358. package/lib/types/components/ActivityLine.d.ts +6 -9
  359. package/lib/types/components/ActivityLine.d.ts.map +1 -1
  360. package/lib/types/components/ActivityLine.js +7 -8
  361. package/lib/types/components/Chat/JobCard.d.ts +18 -1
  362. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  363. package/lib/types/components/Chat/JobCard.js +90 -22
  364. package/lib/types/components/Chat/JobGroupHeader.d.ts +27 -0
  365. package/lib/types/components/Chat/JobGroupHeader.d.ts.map +1 -0
  366. package/lib/types/components/Chat/JobGroupHeader.js +62 -0
  367. package/lib/types/components/GoalTodoPanel.d.ts +13 -1
  368. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  369. package/lib/types/components/GoalTodoPanel.js +55 -14
  370. package/lib/types/components/JobsPanel.d.ts +42 -2
  371. package/lib/types/components/JobsPanel.d.ts.map +1 -1
  372. package/lib/types/components/JobsPanel.js +147 -14
  373. package/lib/types/components/LogoV2.d.ts +43 -3
  374. package/lib/types/components/LogoV2.d.ts.map +1 -1
  375. package/lib/types/components/LogoV2.js +42 -15
  376. package/lib/types/components/MessageList.d.ts +8 -2
  377. package/lib/types/components/MessageList.d.ts.map +1 -1
  378. package/lib/types/components/MessageList.js +212 -18
  379. package/lib/types/components/OverlayAbove.d.ts +11 -1
  380. package/lib/types/components/OverlayAbove.d.ts.map +1 -1
  381. package/lib/types/components/OverlayAbove.js +2 -12
  382. package/lib/types/components/PageMargin.d.ts.map +1 -1
  383. package/lib/types/components/PageMargin.js +3 -1
  384. package/lib/types/components/PluginSceneBoundary.d.ts +1 -1
  385. package/lib/types/components/PluginSceneBoundary.js +1 -1
  386. package/lib/types/components/PromptInput.d.ts +20 -22
  387. package/lib/types/components/PromptInput.d.ts.map +1 -1
  388. package/lib/types/components/PromptInput.js +413 -156
  389. package/lib/types/components/SearchBox.d.ts +22 -5
  390. package/lib/types/components/SearchBox.d.ts.map +1 -1
  391. package/lib/types/components/SearchBox.js +17 -13
  392. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  393. package/lib/types/components/SubagentCard.js +17 -2
  394. package/lib/types/components/SubagentDashboard.d.ts +18 -3
  395. package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
  396. package/lib/types/components/SubagentDashboard.js +53 -5
  397. package/lib/types/components/SubagentDetailScene.d.ts +7 -1
  398. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
  399. package/lib/types/components/SubagentDetailScene.js +54 -5
  400. package/lib/types/components/SurfaceEdges.d.ts +21 -0
  401. package/lib/types/components/SurfaceEdges.d.ts.map +1 -0
  402. package/lib/types/components/SurfaceEdges.js +7 -0
  403. package/lib/types/components/ThemePicker.d.ts +9 -0
  404. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  405. package/lib/types/components/ThemePicker.js +74 -10
  406. package/lib/types/components/ThemePreviewPane.d.ts +26 -0
  407. package/lib/types/components/ThemePreviewPane.d.ts.map +1 -0
  408. package/lib/types/components/ThemePreviewPane.js +99 -0
  409. package/lib/types/components/design-system/Divider.d.ts.map +1 -1
  410. package/lib/types/components/design-system/Divider.js +14 -9
  411. package/lib/types/components/launchpadActions.d.ts +73 -0
  412. package/lib/types/components/launchpadActions.d.ts.map +1 -0
  413. package/lib/types/components/launchpadActions.js +111 -0
  414. package/lib/types/components/launchpadLayout.d.ts +62 -0
  415. package/lib/types/components/launchpadLayout.d.ts.map +1 -0
  416. package/lib/types/components/launchpadLayout.js +176 -0
  417. package/lib/types/components/onboardingModel.d.ts +83 -0
  418. package/lib/types/components/onboardingModel.d.ts.map +1 -0
  419. package/lib/types/components/onboardingModel.js +128 -0
  420. package/lib/types/components/sidePanel/InfoPanel.d.ts +17 -0
  421. package/lib/types/components/sidePanel/InfoPanel.d.ts.map +1 -0
  422. package/lib/types/components/sidePanel/InfoPanel.js +124 -0
  423. package/lib/types/components/sidePanel/PanelBar.d.ts +45 -0
  424. package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -0
  425. package/lib/types/components/sidePanel/PanelBar.js +104 -0
  426. package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts +21 -0
  427. package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts.map +1 -0
  428. package/lib/types/components/sidePanel/PanelErrorBoundary.js +30 -0
  429. package/lib/types/components/sidePanel/PanelHost.d.ts +36 -0
  430. package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -0
  431. package/lib/types/components/sidePanel/PanelHost.js +81 -0
  432. package/lib/types/components/sidePanel/PanelPicker.d.ts +24 -0
  433. package/lib/types/components/sidePanel/PanelPicker.d.ts.map +1 -0
  434. package/lib/types/components/sidePanel/PanelPicker.js +45 -0
  435. package/lib/types/components/sidePanel/PanelStore.d.ts +55 -0
  436. package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -0
  437. package/lib/types/components/sidePanel/PanelStore.js +109 -0
  438. package/lib/types/components/sidePanel/SidePanelColumn.d.ts +31 -0
  439. package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -0
  440. package/lib/types/components/sidePanel/SidePanelColumn.js +70 -0
  441. package/lib/types/components/sidePanel/SidePanelLayout.d.ts +54 -0
  442. package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -0
  443. package/lib/types/components/sidePanel/SidePanelLayout.js +81 -0
  444. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +43 -0
  445. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -0
  446. package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +26 -0
  447. package/lib/types/components/sidePanel/TrajectoryPanel.d.ts +7 -0
  448. package/lib/types/components/sidePanel/TrajectoryPanel.d.ts.map +1 -0
  449. package/lib/types/components/sidePanel/TrajectoryPanel.js +263 -0
  450. package/lib/types/components/sidePanel/WorkspacePanel.d.ts +4 -0
  451. package/lib/types/components/sidePanel/WorkspacePanel.d.ts.map +1 -0
  452. package/lib/types/components/sidePanel/WorkspacePanel.js +171 -0
  453. package/lib/types/components/sidePanel/builtinPanels.d.ts +3 -0
  454. package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -0
  455. package/lib/types/components/sidePanel/builtinPanels.js +229 -0
  456. package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts +53 -0
  457. package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts.map +1 -0
  458. package/lib/types/components/sidePanel/companion/CompanionPanel.js +528 -0
  459. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +32 -0
  460. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -0
  461. package/lib/types/components/sidePanel/companion/SplashMascot.js +103 -0
  462. package/lib/types/components/sidePanel/companion/deepy.d.ts +75 -0
  463. package/lib/types/components/sidePanel/companion/deepy.d.ts.map +1 -0
  464. package/lib/types/components/sidePanel/companion/deepy.js +222 -0
  465. package/lib/types/components/sidePanel/companion/mood.d.ts +176 -0
  466. package/lib/types/components/sidePanel/companion/mood.d.ts.map +1 -0
  467. package/lib/types/components/sidePanel/companion/mood.js +212 -0
  468. package/lib/types/components/sidePanel/companion/pose.d.ts +43 -0
  469. package/lib/types/components/sidePanel/companion/pose.d.ts.map +1 -0
  470. package/lib/types/components/sidePanel/companion/pose.js +34 -0
  471. package/lib/types/components/sidePanel/companion/skins.d.ts +102 -0
  472. package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -0
  473. package/lib/types/components/sidePanel/companion/skins.js +408 -0
  474. package/lib/types/components/sidePanel/dimensions.d.ts +60 -0
  475. package/lib/types/components/sidePanel/dimensions.d.ts.map +1 -0
  476. package/lib/types/components/sidePanel/dimensions.js +75 -0
  477. package/lib/types/components/sidePanel/jobsFocusStore.d.ts +21 -0
  478. package/lib/types/components/sidePanel/jobsFocusStore.d.ts.map +1 -0
  479. package/lib/types/components/sidePanel/jobsFocusStore.js +30 -0
  480. package/lib/types/components/sidePanel/panelBridge.d.ts +44 -0
  481. package/lib/types/components/sidePanel/panelBridge.d.ts.map +1 -0
  482. package/lib/types/components/sidePanel/panelBridge.js +55 -0
  483. package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts +22 -0
  484. package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts.map +1 -0
  485. package/lib/types/components/sidePanel/pluginPanelAdapter.js +148 -0
  486. package/lib/types/components/sidePanel/types.d.ts +110 -0
  487. package/lib/types/components/sidePanel/types.d.ts.map +1 -0
  488. package/lib/types/components/sidePanel/types.js +1 -0
  489. package/lib/types/components/sidePanel/usePanelInput.d.ts +5 -0
  490. package/lib/types/components/sidePanel/usePanelInput.d.ts.map +1 -0
  491. package/lib/types/components/sidePanel/usePanelInput.js +44 -0
  492. package/lib/types/components/sidePanel/useSidePanel.d.ts +47 -0
  493. package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -0
  494. package/lib/types/components/sidePanel/useSidePanel.js +284 -0
  495. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
  496. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
  497. package/lib/types/components/workspaces/HomeWorkspaceRow.js +3 -2
  498. package/lib/types/deepseekPricing.d.ts +10 -9
  499. package/lib/types/deepseekPricing.d.ts.map +1 -1
  500. package/lib/types/deepseekPricing.js +18 -11
  501. package/lib/types/dsh-adapter/channel/attached-context.d.ts +58 -0
  502. package/lib/types/dsh-adapter/channel/attached-context.d.ts.map +1 -0
  503. package/lib/types/dsh-adapter/channel/attached-context.js +109 -0
  504. package/lib/types/dsh-adapter/channel/binding-events.d.ts +6 -0
  505. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  506. package/lib/types/dsh-adapter/channel/binding-events.js +43 -0
  507. package/lib/types/dsh-adapter/channel/capabilities.d.ts +82 -0
  508. package/lib/types/dsh-adapter/channel/capabilities.d.ts.map +1 -0
  509. package/lib/types/dsh-adapter/channel/capabilities.js +165 -0
  510. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
  511. package/lib/types/dsh-adapter/channel/command-completions.js +8 -0
  512. package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +4 -12
  513. package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -1
  514. package/lib/types/dsh-adapter/channel/context-bookkeeping.js +9 -4
  515. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +13 -2
  516. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  517. package/lib/types/dsh-adapter/channel/input-delivery.js +18 -1
  518. package/lib/types/dsh-adapter/channel/mode-actions.d.ts +0 -3
  519. package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
  520. package/lib/types/dsh-adapter/channel/mode-actions.js +7 -2
  521. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +8 -1
  522. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  523. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +0 -1
  524. package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
  525. package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
  526. package/lib/types/dsh-adapter/channel/preferences.js +9 -1
  527. package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
  528. package/lib/types/dsh-adapter/channel/projection.js +42 -37
  529. package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
  530. package/lib/types/dsh-adapter/channel/reports.js +13 -4
  531. package/lib/types/dsh-adapter/channel/session-reset.d.ts +5 -1
  532. package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
  533. package/lib/types/dsh-adapter/channel/session-reset.js +1 -0
  534. package/lib/types/dsh-adapter/channel/state.d.ts +18 -2
  535. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  536. package/lib/types/dsh-adapter/channel/state.js +2 -1
  537. package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
  538. package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
  539. package/lib/types/dsh-adapter/channel/usage.d.ts +18 -1
  540. package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -1
  541. package/lib/types/dsh-adapter/channel/usage.js +97 -2
  542. package/lib/types/dsh-adapter/channel.d.ts +1 -1
  543. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  544. package/lib/types/dsh-adapter/channel.js +56 -3
  545. package/lib/types/dsh-adapter/context-occupancy.d.ts +204 -0
  546. package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -0
  547. package/lib/types/dsh-adapter/context-occupancy.js +299 -0
  548. package/lib/types/dsh-adapter/contract.d.ts +14 -0
  549. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  550. package/lib/types/dsh-adapter/contract.js +24 -0
  551. package/lib/types/dsh-adapter/index.d.ts +32 -0
  552. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  553. package/lib/types/dsh-adapter/index.js +20 -1
  554. package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -1
  555. package/lib/types/dsh-adapter/migrate/sessionize.js +11 -12
  556. package/lib/types/dsh-adapter/panel-runtime-registry.d.ts +39 -0
  557. package/lib/types/dsh-adapter/panel-runtime-registry.d.ts.map +1 -0
  558. package/lib/types/dsh-adapter/panel-runtime-registry.js +84 -0
  559. package/lib/types/dsh-adapter/panels.d.ts +251 -0
  560. package/lib/types/dsh-adapter/panels.d.ts.map +1 -0
  561. package/lib/types/dsh-adapter/panels.js +407 -0
  562. package/lib/types/dsh-adapter/plugin-host.js +1 -1
  563. package/lib/types/dsh-adapter/plugin.d.ts +17 -1
  564. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  565. package/lib/types/dsh-adapter/plugin.js +169 -32
  566. package/lib/types/dsh-adapter/presets.d.ts +26 -6
  567. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  568. package/lib/types/dsh-adapter/presets.js +29 -7
  569. package/lib/types/dsh-adapter/startup-args.d.ts +8 -0
  570. package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -0
  571. package/lib/types/dsh-adapter/startup-args.js +34 -0
  572. package/lib/types/history.d.ts +24 -7
  573. package/lib/types/history.d.ts.map +1 -1
  574. package/lib/types/history.js +77 -18
  575. package/lib/types/i18n.d.ts +734 -15
  576. package/lib/types/i18n.d.ts.map +1 -1
  577. package/lib/types/i18n.js +302 -6
  578. package/lib/types/ink/components/App.d.ts +14 -1
  579. package/lib/types/ink/components/App.d.ts.map +1 -1
  580. package/lib/types/ink/components/App.js +62 -61
  581. package/lib/types/ink/components/TerminalSizeContext.d.ts +7 -0
  582. package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -1
  583. package/lib/types/ink/hooks/use-input.d.ts +11 -0
  584. package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
  585. package/lib/types/ink/hooks/use-input.js +8 -2
  586. package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -1
  587. package/lib/types/ink/hooks/use-terminal-viewport.js +3 -1
  588. package/lib/types/ink/ink.d.ts +18 -0
  589. package/lib/types/ink/ink.d.ts.map +1 -1
  590. package/lib/types/ink/ink.js +51 -8
  591. package/lib/types/ink/output.d.ts +10 -1
  592. package/lib/types/ink/output.d.ts.map +1 -1
  593. package/lib/types/ink/output.js +3 -3
  594. package/lib/types/ink/parse-keypress.d.ts +36 -3
  595. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  596. package/lib/types/ink/parse-keypress.js +262 -108
  597. package/lib/types/ink/render-node-to-output.d.ts +1 -1
  598. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  599. package/lib/types/ink/render-node-to-output.js +37 -5
  600. package/lib/types/ink/screen.d.ts +26 -1
  601. package/lib/types/ink/screen.d.ts.map +1 -1
  602. package/lib/types/ink/screen.js +96 -1
  603. package/lib/types/ink/selection.d.ts +23 -1
  604. package/lib/types/ink/selection.d.ts.map +1 -1
  605. package/lib/types/ink/selection.js +102 -26
  606. package/lib/types/ink/sixel-codec.d.ts +11 -0
  607. package/lib/types/ink/sixel-codec.d.ts.map +1 -1
  608. package/lib/types/ink/sixel-codec.js +42 -8
  609. package/lib/types/math/renderer.d.ts +2 -0
  610. package/lib/types/math/renderer.d.ts.map +1 -1
  611. package/lib/types/math/renderer.js +4 -0
  612. package/lib/types/onboardingPrefs.d.ts +52 -0
  613. package/lib/types/onboardingPrefs.d.ts.map +1 -0
  614. package/lib/types/onboardingPrefs.js +107 -0
  615. package/lib/types/panels.d.ts +4 -0
  616. package/lib/types/panels.d.ts.map +1 -0
  617. package/lib/types/panels.js +4 -0
  618. package/lib/types/screens/Chat.d.ts +22 -1
  619. package/lib/types/screens/Chat.d.ts.map +1 -1
  620. package/lib/types/screens/Chat.js +1126 -299
  621. package/lib/types/screens/Launchpad.d.ts +194 -0
  622. package/lib/types/screens/Launchpad.d.ts.map +1 -0
  623. package/lib/types/screens/Launchpad.js +607 -0
  624. package/lib/types/screens/Onboarding.d.ts +37 -0
  625. package/lib/types/screens/Onboarding.d.ts.map +1 -0
  626. package/lib/types/screens/Onboarding.js +492 -0
  627. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  628. package/lib/types/screens/SessionSupervisor.js +18 -12
  629. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  630. package/lib/types/screens/StatusLine.js +32 -14
  631. package/lib/types/screens/StatusMetrics.d.ts +22 -0
  632. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  633. package/lib/types/screens/StatusMetrics.js +20 -0
  634. package/lib/types/screens/chatOverlay.d.ts +18 -1
  635. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  636. package/lib/types/screens/chatOverlay.js +3 -0
  637. package/lib/types/screens/sessionSupervisor/model.d.ts +1 -2
  638. package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
  639. package/lib/types/screens/sessionSupervisor/model.js +4 -2
  640. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  641. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +7 -3
  642. package/lib/types/settings/definitions.d.ts +93 -0
  643. package/lib/types/settings/definitions.d.ts.map +1 -1
  644. package/lib/types/settings/definitions.js +83 -0
  645. package/lib/types/tips.js +5 -5
  646. package/lib/types/tuiDisplayPrefs.d.ts +42 -2
  647. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  648. package/lib/types/tuiDisplayPrefs.js +74 -0
  649. package/lib/types/update.d.ts +53 -9
  650. package/lib/types/update.d.ts.map +1 -1
  651. package/lib/types/update.js +101 -44
  652. package/lib/types/utils/bmp.d.ts.map +1 -1
  653. package/lib/types/utils/bmp.js +8 -1
  654. package/lib/types/utils/clipboard.d.ts.map +1 -1
  655. package/lib/types/utils/clipboard.js +25 -6
  656. package/lib/types/utils/credentials.d.ts.map +1 -1
  657. package/lib/types/utils/credentials.js +5 -1
  658. package/lib/types/utils/draftWordBoundary.d.ts +23 -0
  659. package/lib/types/utils/draftWordBoundary.d.ts.map +1 -0
  660. package/lib/types/utils/draftWordBoundary.js +161 -0
  661. package/lib/types/utils/fileTarget.d.ts.map +1 -1
  662. package/lib/types/utils/fileTarget.js +7 -9
  663. package/lib/types/utils/inputPaste.d.ts +62 -0
  664. package/lib/types/utils/inputPaste.d.ts.map +1 -0
  665. package/lib/types/utils/inputPaste.js +111 -0
  666. package/lib/types/utils/intl.d.ts +8 -0
  667. package/lib/types/utils/intl.d.ts.map +1 -1
  668. package/lib/types/utils/intl.js +11 -0
  669. package/lib/types/utils/keymap.d.ts +13 -3
  670. package/lib/types/utils/keymap.d.ts.map +1 -1
  671. package/lib/types/utils/keymap.js +27 -5
  672. package/package.json +19 -8
  673. package/{dsh-ecosystem-spec → tui-profile}/registry/README.md +1 -1
  674. package/{dsh-ecosystem-spec → tui-profile}/registry/registry-0.15.json +1 -1
  675. /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.d.ts +0 -0
  676. /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.js +0 -0
  677. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.d.ts +0 -0
  678. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.js +0 -0
  679. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.d.ts +0 -0
  680. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.js +0 -0
  681. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.d.ts +0 -0
  682. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.js +0 -0
  683. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/decision-events-v1alpha1.json +0 -0
  684. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/scene-v1alpha1.json +0 -0
  685. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/settings-section-v1alpha1.json +0 -0
  686. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/tui-channel-v1alpha1.json +0 -0
  687. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/workspace-provider-v1alpha1.json +0 -0
  688. /package/{dsh-ecosystem-spec → tui-profile}/registry/host-descriptor.tui.example.json +0 -0
  689. /package/{dsh-ecosystem-spec → tui-profile}/registry/permissions-0.1.json +0 -0
  690. /package/{dsh-ecosystem-spec → tui-profile}/schemas/conformance-claim.schema.json +0 -0
  691. /package/{dsh-ecosystem-spec → tui-profile}/schemas/effect-ledger-record.schema.json +0 -0
  692. /package/{dsh-ecosystem-spec → tui-profile}/schemas/host-descriptor.schema.json +0 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 侧栏 context 两件套:
3
+ * - SidePanelRuntimeContext:useSidePanel 创建的运行时(键盘分发)+
4
+ * 当前 channel(内置 Adapter 的数据源;插件 Panel 不经过这里,它们
5
+ * 在 Phase 6 拿策展快照)。
6
+ * - PanelContext:PanelHost 为每个 Panel 子树提供的身份(panelId),
7
+ * usePanelInput 据此把业务键注册进分发器;不在 Panel 里(整屏
8
+ * 形态)时为 null,usePanelInput 退化为普通 useInput。
9
+ */
10
+ import React from 'react';
11
+ export const SidePanelRuntimeContext = React.createContext(null);
12
+ export function useSidePanelChannel() {
13
+ const ctx = React.useContext(SidePanelRuntimeContext);
14
+ if (ctx === null)
15
+ throw new Error('useSidePanelChannel must be used under PanelHost');
16
+ return ctx.channel;
17
+ }
18
+ /** 会话轨迹投影;Chat 还没折叠出来(或不在 PanelHost 下)时 undefined。 */
19
+ export function useSidePanelTrajectory() {
20
+ return React.useContext(SidePanelRuntimeContext)?.trajectory;
21
+ }
22
+ /** 「全屏」出口:宿主没接时返回 undefined(按钮点击静默无效)。 */
23
+ export function useSidePanelFullscreen() {
24
+ return React.useContext(SidePanelRuntimeContext)?.openFullscreen;
25
+ }
26
+ export const PanelContext = React.createContext(null);
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { PanelProps } from './types.js';
3
+ type TrajectoryView = 'timeline' | 'hotspot';
4
+ export declare function TrajectoryPanel({ width, height, focused, visible }: PanelProps): React.ReactNode;
5
+ /** Re-exported for the host/verify fixtures (same union the scene exports). */
6
+ export type { TrajectoryView };
7
+ //# sourceMappingURL=TrajectoryPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrajectoryPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/TrajectoryPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AA0BzB,OAAO,KAAK,EAAmB,UAAU,EAAE,MAAM,YAAY,CAAA;AAwB7D,KAAK,cAAc,GAAG,UAAU,GAAG,SAAS,CAAA;AAE5C,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,KAAK,CAAC,SAAS,CAuYhG;AAED,+EAA+E;AAC/E,YAAY,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,263 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Box, Text } from '../../ui.js';
4
+ import { useAnimationFrame } from '../../ink/hooks/use-animation-frame.js';
5
+ import { WaveBand } from '../trajectory/WaveBand.js';
6
+ import { Ledger } from '../trajectory/Ledger.js';
7
+ import { Inspector } from '../trajectory/Inspector.js';
8
+ import { HotspotView, hotspotRows } from '../trajectory/HotspotView.js';
9
+ import { Divider } from '../design-system/Divider.js';
10
+ import { MOTION_TICK_MS } from '../../trajectory/motion.js';
11
+ import { truncateWidth } from '../../trajectory/format.js';
12
+ import { stringWidth } from '../../ink/stringWidth.js';
13
+ import { t } from '../../i18n.js';
14
+ import { aggregate, columnOfIndex, emptyTrajectory, inspectNode, projectWave, HOTSPOT_SORTS, WAVE_PROJECTIONS, } from '../../dsh-adapter/trajectory/index.js';
15
+ import { SidePanelRuntimeContext, useSidePanelTrajectory } from './SidePanelRuntimeContext.js';
16
+ import { usePanelInput } from './usePanelInput.js';
17
+ /**
18
+ * The trajectory as a side-panel form of the fullscreen TrajectoryScene.
19
+ *
20
+ * This is deliberately a THIN ADAPTER, not a variant of the scene: the scene
21
+ * is tuned end-to-end for owning the whole alternate screen (its own query
22
+ * editor, exit chrome, page-sized chrome math against the terminal size), and
23
+ * re-parameterizing every one of those decisions would risk drifting the
24
+ * fullscreen behavior. Instead the panel composes the very same leaf regions
25
+ * — WaveBand / Ledger / Inspector / HotspotView — over the same projection
26
+ * utilities (aggregate / projectWave / inspectNode / columnOfIndex), so the
27
+ * two forms can never disagree about what a session looks like.
28
+ *
29
+ * What changes for the narrow column: no query line, no exit chrome (the host
30
+ * PanelBar owns ⤢ / Esc), Enter expands the inspector in place, and every
31
+ * line is clipped to the panel width via truncateWidth — never bare slice.
32
+ */
33
+ /** Inspector rows in the collapsed layout (header + 3 body lines). */
34
+ const INSPECTOR_ROWS = 4;
35
+ /** Tabs row, the wake's two rows, the ledger/inspector divider, the hint. */
36
+ const CHROME_ROWS = 5;
37
+ export function TrajectoryPanel({ width, height, focused, visible }) {
38
+ // The channel comes from the same runtime context the trajectory build
39
+ // does. Reading it tolerantly (rather than via useSidePanelChannel, which
40
+ // throws) keeps the component mountable in headless fallback probes.
41
+ const channel = React.useContext(SidePanelRuntimeContext)?.channel;
42
+ const build = useSidePanelTrajectory();
43
+ const nodes = build?.nodes;
44
+ const empty = nodes === undefined || nodes.length === 0;
45
+ // visible=false (inactive tab / collapsed sidebar) stops the motion clock:
46
+ // zero animation-frame subscriptions, the store keeps folding underneath.
47
+ const [ref, time] = useAnimationFrame(visible && !empty ? MOTION_TICK_MS : null);
48
+ const tick = Math.floor(time / MOTION_TICK_MS);
49
+ const [view, setView] = React.useState('timeline');
50
+ const [cursor, setCursor] = React.useState(0);
51
+ const [hotCursor, setHotCursor] = React.useState(0);
52
+ const [projection, setProjection] = React.useState('compressed');
53
+ const [sort, setSort] = React.useState('duration');
54
+ const [expanded, setExpanded] = React.useState(false);
55
+ const [inspectScroll, setInspectScroll] = React.useState(0);
56
+ const [switchTick, setSwitchTick] = React.useState(0);
57
+ const [alertTick, setAlertTick] = React.useState(0);
58
+ const [arrivalTick, setArrivalTick] = React.useState(0);
59
+ const [arrivalFrom, setArrivalFrom] = React.useState(Number.MAX_SAFE_INTEGER);
60
+ /** Cursor pinned to the tail until the user scrolls away from it. */
61
+ const [follow, setFollow] = React.useState(true);
62
+ const [hoverTab, setHoverTab] = React.useState(null);
63
+ const [hoverAxis, setHoverAxis] = React.useState(false);
64
+ // ── projection (no query in the panel form: the filtered list is the
65
+ // ledger itself, and the column index map is the identity) ─────────────
66
+ const filtered = nodes ?? [];
67
+ const indexes = React.useMemo(() => filtered.map((_, index) => index), [filtered.length]);
68
+ // `emptyTrajectory()` keeps the memo body total: hooks run before the
69
+ // empty-state early return, so the aggregators must tolerate a missing
70
+ // build rather than throwing on first paint.
71
+ const agg = React.useMemo(
72
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
73
+ () => aggregate(build ?? emptyTrajectory(), sort), [build, filtered.length, sort]);
74
+ // ── arrival + alert detection (same contract as the scene) ───────────────
75
+ const seenRef = React.useRef(0);
76
+ const errorsRef = React.useRef(0);
77
+ React.useEffect(() => {
78
+ if (empty)
79
+ return;
80
+ if (filtered.length > seenRef.current) {
81
+ setArrivalFrom(seenRef.current);
82
+ setArrivalTick(tick);
83
+ seenRef.current = filtered.length;
84
+ if (follow)
85
+ setCursor(Math.max(0, filtered.length - 1));
86
+ }
87
+ if (agg.totals.errors > errorsRef.current) {
88
+ errorsRef.current = agg.totals.errors;
89
+ setAlertTick(tick);
90
+ }
91
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
92
+ }, [filtered.length, agg.totals.errors, tick, follow]);
93
+ // ── geometry (all against the panel's own width/height, never the screen)
94
+ const contentWidth = Math.max(1, width - 2);
95
+ const bandWidth = contentWidth;
96
+ const inspectorRows = expanded
97
+ ? Math.max(4, height - CHROME_ROWS - 1)
98
+ : Math.max(3, Math.min(INSPECTOR_ROWS, height - CHROME_ROWS - 2));
99
+ const ledgerRows = Math.max(1, height - CHROME_ROWS - inspectorRows);
100
+ const clampedCursor = filtered.length === 0 ? 0 : Math.min(cursor, filtered.length - 1);
101
+ const windowStart = Math.max(0, Math.min(clampedCursor - Math.floor(ledgerRows / 2), filtered.length - ledgerRows));
102
+ const band = React.useMemo(
103
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
104
+ () => projectWave(nodes ?? emptyTrajectory().nodes, bandWidth, projection), [nodes, filtered.length, bandWidth, projection]);
105
+ const focusedNode = filtered[clampedCursor];
106
+ const detail = React.useMemo(() => focusedNode === undefined || channel === undefined
107
+ ? undefined
108
+ : inspectNode(focusedNode, channel.traceEvents()), [focusedNode, channel]);
109
+ // ── navigation helpers (mirroring the scene's semantics) ─────────────────
110
+ const move = React.useCallback((delta) => {
111
+ setExpanded(false);
112
+ setInspectScroll(0);
113
+ setCursor(previous => {
114
+ const next = Math.max(0, Math.min(filtered.length - 1, previous + delta));
115
+ setFollow(next >= filtered.length - 1);
116
+ return next;
117
+ });
118
+ }, [filtered.length]);
119
+ const switchView = React.useCallback((next) => {
120
+ setView(next);
121
+ setSwitchTick(tick);
122
+ setExpanded(false);
123
+ setInspectScroll(0);
124
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
125
+ }, [tick]);
126
+ /** Jump back to the timeline positioned on a hotspot group's first member. */
127
+ const jumpFromHotspot = React.useCallback((row) => {
128
+ switchView('timeline');
129
+ if (row !== undefined) {
130
+ const target = indexes.indexOf(row.firstIndex);
131
+ setCursor(target >= 0 ? target : 0);
132
+ setFollow(false);
133
+ }
134
+ }, [indexes, switchView]);
135
+ const jumpTo = React.useCallback((index) => {
136
+ setInspectScroll(0);
137
+ setCursor(index);
138
+ setFollow(index >= filtered.length - 1);
139
+ }, [filtered.length]);
140
+ const handleWheel = React.useCallback((event) => {
141
+ if (view === 'hotspot') {
142
+ const total = hotspotRows(agg).length;
143
+ const direction = event.deltaY >= 0 ? 1 : -1;
144
+ setHotCursor(previous => Math.max(0, Math.min(total - 1, previous + direction)));
145
+ return;
146
+ }
147
+ if (expanded) {
148
+ const direction = event.deltaY >= 0 ? 1 : -1;
149
+ setInspectScroll(previous => Math.max(0, previous + direction * Math.max(1, inspectorRows - 2)));
150
+ return;
151
+ }
152
+ move(event.deltaY);
153
+ }, [view, agg, expanded, inspectorRows, move]);
154
+ // ── keys (v2.1 panel contract: true = consumed; Esc is NEVER consumed —
155
+ // the host owns the return-to-chat key) ────────────────────────────────
156
+ const onKey = React.useCallback((input, key) => {
157
+ if (key.escape)
158
+ return false;
159
+ // Tab toggles the two views. ←/→ are deliberately NOT consumed: the
160
+ // host owns them for cycling the ACTIVE PANEL (v2.1 contract — the
161
+ // user expects ←/→ to switch panels everywhere in the column, and the
162
+ // tabs above are already the mouse path). ink delivers Tab as
163
+ // input='' + key.tab (no '\t' character) and the host's
164
+ // SidePanelKeyFlags does not carry a tab field, so both shapes count.
165
+ const tabKey = key.tab === true || input === '\t';
166
+ if (tabKey) {
167
+ switchView(view === 'timeline' ? 'hotspot' : 'timeline');
168
+ return true;
169
+ }
170
+ if (view === 'hotspot') {
171
+ const total = hotspotRows(agg).length;
172
+ if (key.upArrow) {
173
+ setHotCursor(previous => Math.max(0, previous - 1));
174
+ return true;
175
+ }
176
+ if (key.downArrow) {
177
+ setHotCursor(previous => Math.min(total - 1, previous + 1));
178
+ return true;
179
+ }
180
+ if (input === 't' && !key.ctrl && !key.meta) {
181
+ setSort(previous => HOTSPOT_SORTS[(HOTSPOT_SORTS.indexOf(previous) + 1) % HOTSPOT_SORTS.length]);
182
+ setSwitchTick(tick);
183
+ return true;
184
+ }
185
+ if (key.return_) {
186
+ jumpFromHotspot(hotspotRows(agg)[hotCursor]);
187
+ return true;
188
+ }
189
+ return false;
190
+ }
191
+ if (key.upArrow) {
192
+ move(-1);
193
+ return true;
194
+ }
195
+ if (key.downArrow) {
196
+ move(1);
197
+ return true;
198
+ }
199
+ if (key.pageUp) {
200
+ move(-ledgerRows);
201
+ return true;
202
+ }
203
+ if (key.pageDown) {
204
+ move(ledgerRows);
205
+ return true;
206
+ }
207
+ if (input === 'm' && !key.ctrl && !key.meta) {
208
+ setProjection(previous => WAVE_PROJECTIONS[(WAVE_PROJECTIONS.indexOf(previous) + 1) % WAVE_PROJECTIONS.length]);
209
+ setSwitchTick(tick);
210
+ return true;
211
+ }
212
+ if (key.return_) {
213
+ setExpanded(previous => !previous);
214
+ setInspectScroll(0);
215
+ return true;
216
+ }
217
+ if (expanded && (input === 'j' || input === 'k')) {
218
+ setInspectScroll(previous => Math.max(0, previous + (input === 'j' ? inspectorRows - 2 : -(inspectorRows - 2))));
219
+ return true;
220
+ }
221
+ return false;
222
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
223
+ }, [view, agg, hotCursor, expanded, inspectorRows, ledgerRows, move, switchView, jumpFromHotspot, tick]);
224
+ usePanelInput(onKey, { active: focused && visible });
225
+ // ── empty state ───────────────────────────────────────────────────────────
226
+ if (empty) {
227
+ return (_jsxs(Box, { ref: ref, flexDirection: "column", width: "100%", paddingX: 1, children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "subtle", wrap: "truncate", children: t('panel-trajectory-empty') }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: truncateWidth(t('panel-trajectory-hint'), contentWidth) }) })] }));
228
+ }
229
+ // ── tabs row: two clickable segments + the axis label (cycle on click) ───
230
+ const tabTimelineText = `${view === 'timeline' ? '●' : '○'} ${t('traj-tab-timeline')}`;
231
+ const tabHotspotText = `${view === 'hotspot' ? '●' : '○'} ${t('traj-tab-hotspot')}`;
232
+ const axisText = view === 'hotspot' ? t(`traj-sort-${sort}`) : t(`traj-proj-${projection}`);
233
+ const axisRoom = contentWidth - stringWidth(tabTimelineText) - stringWidth(tabHotspotText) - 3;
234
+ const axisShown = axisRoom >= stringWidth(axisText) ? axisText : '';
235
+ const tabs = (_jsxs(Box, { width: "100%", height: 1, flexShrink: 0, children: [_jsx(Box, { flexShrink: 0, width: stringWidth(tabTimelineText), onClick: (event) => {
236
+ event.stopImmediatePropagation();
237
+ switchView('timeline');
238
+ }, onMouseEnter: () => setHoverTab('timeline'), onMouseLeave: () => setHoverTab(previous => (previous === 'timeline' ? null : previous)), children: _jsx(Text, { color: view === 'timeline' ? 'permission' : hoverTab === 'timeline' ? 'text' : 'subtle', bold: view === 'timeline', children: tabTimelineText }) }), _jsx(Box, { flexShrink: 0, width: stringWidth(tabHotspotText), onClick: (event) => {
239
+ event.stopImmediatePropagation();
240
+ switchView('hotspot');
241
+ }, onMouseEnter: () => setHoverTab('hotspot'), onMouseLeave: () => setHoverTab(previous => (previous === 'hotspot' ? null : previous)), children: _jsx(Text, { color: view === 'hotspot' ? 'permission' : hoverTab === 'hotspot' ? 'text' : 'subtle', bold: view === 'hotspot', children: tabHotspotText }) }), _jsx(Box, { flexGrow: 1, flexShrink: 1, children: _jsx(Text, { children: " " }) }), axisShown !== '' && (_jsx(Box, { flexShrink: 0, width: stringWidth(axisShown) + 1, onClick: (event) => {
242
+ event.stopImmediatePropagation();
243
+ if (view === 'hotspot') {
244
+ setSort(previous => HOTSPOT_SORTS[(HOTSPOT_SORTS.indexOf(previous) + 1) % HOTSPOT_SORTS.length]);
245
+ }
246
+ else {
247
+ setProjection(previous => WAVE_PROJECTIONS[(WAVE_PROJECTIONS.indexOf(previous) + 1) % WAVE_PROJECTIONS.length]);
248
+ }
249
+ setSwitchTick(tick);
250
+ }, onMouseEnter: () => setHoverAxis(true), onMouseLeave: () => setHoverAxis(false), children: _jsx(Text, { color: hoverAxis ? 'text' : 'subtle', children: axisShown }) }))] }));
251
+ return (_jsxs(Box, { ref: ref, flexDirection: "column", width: "100%", height: height, paddingX: 1, overflow: "hidden", children: [tabs, _jsx(WaveBand, { band: band, width: bandWidth, cursorColumn: columnOfIndex(band, clampedCursor), viewportStart: columnOfIndex(band, windowStart), viewportEnd: columnOfIndex(band, Math.min(filtered.length - 1, windowStart + ledgerRows - 1)), tick: tick, alertTick: alertTick, onColumnClick: (column, event) => {
252
+ event.stopImmediatePropagation();
253
+ const nodeIndex = band.buckets[column]?.firstIndex ?? -1;
254
+ if (nodeIndex < 0)
255
+ return;
256
+ const target = indexes.indexOf(nodeIndex);
257
+ if (target >= 0)
258
+ jumpTo(target);
259
+ } }), _jsx("ink-box", { style: { flexDirection: 'column', flexGrow: 1, flexShrink: 1, overflow: 'hidden', width: '100%' }, onWheel: handleWheel, children: view === 'timeline' ? (_jsxs(_Fragment, { children: [_jsx(Ledger, { rows: filtered, start: windowStart, height: ledgerRows, cursor: clampedCursor, width: contentWidth, tick: tick, arrivalTick: arrivalTick, arrivalFrom: arrivalFrom, onRowClick: (index, event) => {
260
+ event.stopImmediatePropagation();
261
+ jumpTo(index);
262
+ } }), _jsx(Divider, { color: "permission", width: bandWidth }), _jsx(Inspector, { node: focusedNode, detail: detail, height: inspectorRows, width: contentWidth, expanded: expanded, scroll: inspectScroll })] })) : (_jsx(HotspotView, { agg: agg, sort: sort, width: contentWidth, height: ledgerRows + inspectorRows + 1, cursor: hotCursor, tick: tick, switchTick: switchTick, onRowClick: index => jumpFromHotspot(hotspotRows(agg)[index]) })) }), _jsx(Box, { width: "100%", height: 1, flexShrink: 0, children: _jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: truncateWidth(t('panel-trajectory-hint'), contentWidth) }) })] }));
263
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { PanelProps } from './types.js';
3
+ export declare function WorkspacePanel({ width, height, focused, visible }: PanelProps): React.ReactNode;
4
+ //# sourceMappingURL=WorkspacePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspacePanel.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/WorkspacePanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAgD5C,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,KAAK,CAAC,SAAS,CAgK/F"}
@@ -0,0 +1,171 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Box, Text } from '../../ui.js';
4
+ import { t } from '../../i18n.js';
5
+ import { truncateWidth, spreadRow } from '../../sessions/format.js';
6
+ import { stringWidth } from '../../ink/stringWidth.js';
7
+ import { normalizeWorkspaceCwd } from '../../sessions/view.js';
8
+ import { useSidePanelChannel, useSidePanelFullscreen } from './SidePanelRuntimeContext.js';
9
+ import { usePanelInput } from './usePanelInput.js';
10
+ /**
11
+ * 工作目录(工作区)面板:侧栏里的当前 cwd 概览 + 持久工作区账本
12
+ * (channel.listWorkspaceRegistry()——整屏工作区主页左栏用的同一份数据,
13
+ * 见 SessionSupervisor),同时是进入整屏「工作区主页」的入口
14
+ * (Enter → openFullscreen('workspace');⬢ 按钮由宿主 PanelBar 画)。
15
+ *
16
+ * 行契约:每行恒定 2 行(标题+会话数 / 路径+缺失标记),所有文本经
17
+ * truncateWidth / spreadRow / elideMiddle 按列宽裁剪——28 列也不折行、
18
+ * 不裸 slice。当前工作区行用 normalizeWorkspaceCwd 归一化后比较(与
19
+ * /resume 的工作区分组同一口径,不自己写路径比较)。
20
+ */
21
+ /** Each ledger row is exactly two terminal lines (selection math depends on it). */
22
+ const ROW_LINES = 2;
23
+ /** Middle elision for one unbreakable path line: keep both ends, drop the
24
+ * middle. Cheaper to scan than a two-line hanging indent and keeps the
25
+ * drive prefix and the leaf directory visible at once. CJK-aware via
26
+ * stringWidth; never a bare slice. */
27
+ function elideMiddle(text, maxWidth) {
28
+ if (maxWidth <= 1)
29
+ return maxWidth <= 0 ? '' : '…';
30
+ if (stringWidth(text) <= maxWidth)
31
+ return text;
32
+ const chars = [...text];
33
+ // Keep roughly 40% head / 60% tail (the leaf matters more than the root).
34
+ const headRoom = Math.max(1, Math.floor((maxWidth - 1) * 0.4));
35
+ let head = '';
36
+ let headWidth = 0;
37
+ for (const char of chars) {
38
+ const w = stringWidth(char);
39
+ if (headWidth + w > headRoom)
40
+ break;
41
+ head += char;
42
+ headWidth += w;
43
+ }
44
+ let tail = '';
45
+ let tailWidth = 0;
46
+ const tailRoom = maxWidth - 1 - headWidth;
47
+ for (let at = chars.length - 1; at >= 0; at -= 1) {
48
+ const char = chars[at];
49
+ const w = stringWidth(char);
50
+ if (tailWidth + w > tailRoom)
51
+ break;
52
+ tail = char + tail;
53
+ tailWidth += w;
54
+ }
55
+ return head + '…' + tail;
56
+ }
57
+ export function WorkspacePanel({ width, height, focused, visible }) {
58
+ const channel = useSidePanelChannel();
59
+ const openFullscreen = useSidePanelFullscreen();
60
+ // ── 数据:只在首次 visible 时起第一次拉取(visible=false 不发请求);
61
+ // 'r' 手动重拉;nonce 过期或卸载后不落 state。 ───────────────────────
62
+ const [entries, setEntries] = React.useState(null);
63
+ const [loadError, setLoadError] = React.useState(null);
64
+ const [fetchTick, setFetchTick] = React.useState(0);
65
+ const startedRef = React.useRef(false);
66
+ const nonceRef = React.useRef(0);
67
+ React.useEffect(() => {
68
+ if (visible === false || startedRef.current)
69
+ return;
70
+ startedRef.current = true;
71
+ setFetchTick(tick => tick + 1);
72
+ }, [visible]);
73
+ React.useEffect(() => {
74
+ if (fetchTick === 0)
75
+ return;
76
+ const nonce = nonceRef.current + 1;
77
+ nonceRef.current = nonce;
78
+ let live = true;
79
+ setLoadError(null);
80
+ channel.listWorkspaceRegistry()
81
+ .then(list => {
82
+ if (!live || nonce !== nonceRef.current)
83
+ return;
84
+ setEntries(list);
85
+ })
86
+ .catch((error) => {
87
+ if (!live || nonceRef.current !== nonce)
88
+ return;
89
+ setLoadError(error instanceof Error ? error.message : String(error));
90
+ });
91
+ return () => { live = false; };
92
+ }, [channel, fetchTick]);
93
+ // ── 选中 / hover / 自管窗口滚动 ──────────────────────────────────────────
94
+ // 不用 ScrollBox:它的内容平移/裁剪会让滚动后的指针事件错位
95
+ // (TrajectoryPanel 的 ledger 同样自己管窗口)。行恒定 2 行,
96
+ // 窗口按面板高度算出,滚轮/↑↓/点击都在同一个 scrollTop 上收口。
97
+ const [selected, setSelected] = React.useState(0);
98
+ const [hovered, setHovered] = React.useState(null);
99
+ const [scrollTop, setScrollTop] = React.useState(0);
100
+ const list = entries ?? [];
101
+ const listEmpty = entries !== null && entries.length === 0;
102
+ const currentKey = normalizeWorkspaceCwd(channel.cwd);
103
+ const focus = list.length === 0 ? 0 : Math.min(selected, list.length - 1);
104
+ const contentWidth = Math.max(4, width - 2);
105
+ const branch = channel.gitBranch;
106
+ // header(1) + cwd(1) + branch(0/1) + margin(1) + list title(1) + hint(1)
107
+ const chromeRows = 5 + (branch !== undefined && branch !== '' ? 1 : 0);
108
+ const visibleRows = Math.max(1, Math.floor(Math.max(4, height - chromeRows) / ROW_LINES));
109
+ const maxScroll = Math.max(0, list.length - visibleRows);
110
+ const top = Math.min(scrollTop, maxScroll);
111
+ const clampScroll = (next) => Math.max(0, Math.min(maxScroll, next));
112
+ // 选中跟随:↑/↓ 把窗口带过去。
113
+ const bringIntoView = (index) => {
114
+ setScrollTop(current => {
115
+ const base = Math.min(current, maxScroll);
116
+ if (index < base)
117
+ return index;
118
+ if (index >= base + visibleRows)
119
+ return index - visibleRows + 1;
120
+ return current;
121
+ });
122
+ };
123
+ React.useEffect(() => { bringIntoView(focus); }, [focus]); // eslint-disable-line react-hooks/exhaustive-deps -- 窗口跟随只看选中位
124
+ // ── 键盘(v2.1 分发器):↑/↓ 移动选中、Enter 开整屏主页、r 重拉;
125
+ // Esc 返回 false 让宿主把焦点还回聊天。 ─────────────────────────────────────
126
+ usePanelInput((input, key) => {
127
+ if (key.escape === true)
128
+ return false;
129
+ if (key.upArrow === true) {
130
+ setSelected(i => Math.max(0, (list.length === 0 ? 0 : Math.min(i, list.length - 1)) - 1));
131
+ return true;
132
+ }
133
+ if (key.downArrow === true) {
134
+ setSelected(i => list.length === 0 ? 0 : Math.min(list.length - 1, Math.min(i, list.length - 1) + 1));
135
+ return true;
136
+ }
137
+ if (key.return_ === true) {
138
+ openFullscreen?.('workspace');
139
+ return true;
140
+ }
141
+ // ctrl/meta 修饰时不认(Ctrl+R 是输入历史搜索,落到面板会变成误重拉)。
142
+ if (input === 'r' && !key.ctrl && !key.meta) {
143
+ setFetchTick(tick => tick + 1);
144
+ return true;
145
+ }
146
+ return false;
147
+ }, { active: focused && visible });
148
+ // ── 几何:只按面板自身的 width/height,不读终端尺寸 ─────────────────────────────
149
+ const cwd = channel.displayCwd !== '' ? channel.displayCwd : channel.cwd;
150
+ const branchLabel = t('info-row-branch');
151
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, width: width, height: height, overflow: "hidden", children: [_jsxs(Box, { flexDirection: "column", flexShrink: 0, marginBottom: 1, children: [_jsx(Text, { color: "accent", bold: true, children: t('panel-workspace-current') }), _jsx(Box, { paddingLeft: 1, children: _jsx(Text, { color: "inactive", wrap: "truncate", children: elideMiddle(cwd, contentWidth - 1) }) }), branch !== undefined && branch !== '' && (_jsxs(Box, { paddingLeft: 1, flexDirection: "row", gap: 1, children: [_jsx(Text, { color: "inactive", children: branchLabel }), _jsx(Text, { wrap: "truncate", children: truncateWidth(branch, Math.max(1, contentWidth - stringWidth(branchLabel) - 3)) })] }))] }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: truncateWidth(t('panel-workspace-list', { n: list.length }), contentWidth) }) }), loadError !== null ? (_jsx(Box, { paddingLeft: 1, marginTop: 1, children: _jsx(Text, { color: "error", wrap: "truncate", children: truncateWidth(t('panel-workspace-failed', { err: loadError }), contentWidth - 1) }) })) : entries === null ? (_jsx(Box, { paddingLeft: 1, marginTop: 1, children: _jsx(Text, { dimColor: true, children: truncateWidth(t('panel-workspace-loading'), contentWidth - 1) }) })) : listEmpty ? (_jsx(Box, { paddingLeft: 1, marginTop: 1, children: _jsx(Text, { dimColor: true, wrap: "truncate", children: truncateWidth(t('panel-workspace-empty'), contentWidth - 1) }) })) : (_jsx(Box, { flexDirection: "column", flexGrow: 1, flexShrink: 1, overflow: "hidden", onWheel: (event) => {
152
+ setScrollTop(current => clampScroll(Math.min(current, maxScroll) + (event.deltaY > 0 ? 1 : event.deltaY < 0 ? -1 : 0)));
153
+ }, children: list.slice(top, top + visibleRows).map((entry, offset) => {
154
+ const index = top + offset;
155
+ return (_jsx(WorkspaceRow, { index: index, entry: entry, current: normalizeWorkspaceCwd(entry.path) === currentKey, selected: index === focus, hovered: hovered === index, width: contentWidth, onSelect: () => { setSelected(index); setScrollTop(clampScroll(Math.min(top, maxScroll))); setHovered(index); }, onHoverChange: setHovered }, entry.id));
156
+ }) })), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: truncateWidth(t('panel-workspace-hint'), contentWidth) }) })] }));
157
+ }
158
+ /** One registered-workspace ledger row: title + session count on line 1,
159
+ * directory (dim) + missing marker on line 2. Exactly two lines, always —
160
+ * spreadRow/truncateWidth everywhere, never a bare slice, never a fold. */
161
+ function WorkspaceRow({ entry, index, current, selected, hovered, width, onSelect, onHoverChange }) {
162
+ const body = Math.max(4, width - 2);
163
+ const countLabel = t('panel-workspace-sessions', { n: entry.sessionCount });
164
+ const head = spreadRow(entry.title, countLabel, body);
165
+ const missingLabel = entry.present === false ? t('panel-workspace-missing') : '';
166
+ const tail = spreadRow(entry.path, missingLabel, body);
167
+ return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, onClick: (event) => {
168
+ event.stopImmediatePropagation();
169
+ onSelect();
170
+ }, onMouseEnter: () => onHoverChange(index), onMouseLeave: () => onHoverChange(prev => (prev === index ? null : prev)), children: [_jsxs(Box, { height: 1, flexShrink: 0, overflow: "hidden", children: [_jsx(Box, { width: 2, flexShrink: 0, children: _jsxs(Text, { color: selected || hovered ? 'accent' : undefined, children: [selected || hovered ? '❯' : ' ', current ? '●' : ' '] }) }), _jsx(Text, { bold: selected, color: selected || hovered ? 'accent' : undefined, wrap: "truncate-end", children: head.left + ' '.repeat(head.gap) + head.right })] }), _jsxs(Box, { height: 1, paddingLeft: 2, flexShrink: 0, overflow: "hidden", children: [_jsx(Text, { dimColor: true, wrap: "truncate-end", children: tail.left + ' '.repeat(tail.gap) }), tail.right !== '' && _jsx(Text, { color: "warning", children: tail.right })] })] }));
171
+ }
@@ -0,0 +1,3 @@
1
+ /** 幂等:重复调用(夹具多次挂载)不再注册。 */
2
+ export declare function registerBuiltinPanels(): void;
3
+ //# sourceMappingURL=builtinPanels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtinPanels.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/builtinPanels.tsx"],"names":[],"mappings":"AAsLA,2BAA2B;AAC3B,wBAAgB,qBAAqB,IAAI,IAAI,CAwF5C"}