@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,408 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Companion 皮肤接口与注册表(设计分文档 §3 + v2.1):皮肤拿到的是
4
+ * CompanionPose(多层语义 + nativeWhalePose)与渲染上下文;皮肤只实现
5
+ * 自己理解的语义子集,未支持的姿态退化而不是报错。
6
+ *
7
+ * 用户的 deepy 是默认皮肤(DEEPY_MOOD_ANIMATION 逐心情整段动画);
8
+ * WhaleGirlSkin 用用户提供的鲸娘素材包(assets/whaleGirl,映射表与 deepy
9
+ * 同源,仅 smile-hearts / thumbs-up 两键独有);WhaleSkin 复用开屏分层
10
+ * 规划器的 nativeWhalePose(与 splash 帧级一致)。
11
+ * 插件皮肤(纯数据帧表,分文档 §6)留到 Phase 7,注册表先把接缝定好:
12
+ * 皮肤 = id + cells + render(pose, ctx),自定义皮肤走同一接口进入。
13
+ */
14
+ import React from 'react';
15
+ import { existsSync, readFileSync } from 'node:fs';
16
+ import { fileURLToPath } from 'node:url';
17
+ import { join } from 'node:path';
18
+ import { Box, Text, Image, useTerminalImages, useTerminalImageProtocol, useTerminalImageCellSize } from '../../../ui.js';
19
+ import { WhaleArt, renderSpriteRows } from '../../Whale.js';
20
+ import { loadSharp } from '../../../dsh-adapter/sharp.js';
21
+ import { DEEPY_CELLS, DEEPY_MOOD_ANIMATION, DEEPY_SEMANTIC_ANIMATION, frameAt, loadDeepyKit, loadWhaleGirlKit, renderedDeepyAnimation, } from './deepy.js';
22
+ /** deepy 小鲸鱼(默认):语义/心情 → 动画,elapsed → frameAt 确定性选帧。 */
23
+ export const DeepySkin = {
24
+ id: 'deepy',
25
+ title: 'Deepy',
26
+ cells: DEEPY_CELLS,
27
+ graphics: 'none',
28
+ render(input) {
29
+ const { pose, moodSince, now, animationSemantic } = input;
30
+ const kit = loadDeepyKit();
31
+ if (kit === undefined)
32
+ return WhaleSkin.render({ pose, moodSince, now, width: DEEPY_CELLS.columns, animationSemantic });
33
+ // animationSemantic 已是 deepy 规范键;无效(皮肤词汇表外)才回 mood 层。
34
+ const animationKey = animationSemantic !== undefined && kit.byKey[animationSemantic] !== undefined
35
+ ? animationSemantic
36
+ : DEEPY_MOOD_ANIMATION[pose.mood] ?? 'idle';
37
+ const rendered = renderedDeepyAnimation(kit, animationKey);
38
+ const animation = kit.byKey[animationKey];
39
+ if (rendered === undefined || animation === undefined)
40
+ return null;
41
+ const frameIndex = frameAt(animation, now - moodSince);
42
+ const rows = rendered[frameIndex] ?? rendered[0] ?? [];
43
+ return (_jsx(Box, { flexDirection: "column", flexShrink: 0, width: DEEPY_CELLS.columns, children: rows.map((row, index) => (_jsx(Text, { wrap: "truncate-end", children: row }, index))) }));
44
+ },
45
+ };
46
+ /** 图像轨的盒宽契约(2026-10 拖动空气墙修复):cells.columns = 8×16 像
47
+ * 件下图像的实际列宽(31)——面板 clamp/点击半区/§16.6 列宽预算全都吃这
48
+ * 个常量,盒贴边即图贴边。其他像元比下图宽漂移(宽 = 15 × cellRatio ×
49
+ * 帧比),钳在本常量内(contain 收行不裁剪),残隙 ≤2 格(常见像元比带
50
+ * 1.75–2.13 内精确或差 1–2 格;字母轨 42 宽帧串的本体 ~21–25 格也装得下,
51
+ * 两侧透明衬垫溢出盒外不可见)。字母轨的 8–11 格固有边距需另产裁边素材
52
+ * 才能治,本轮留档不做。 */
53
+ const WHALE_GIRL_CELLS = Object.freeze({ columns: 31, rows: 15 });
54
+ /** 图像轨单元格盒列数:15 行预算 × 像元比 × 帧宽高比,钳在 cells.columns
55
+ * (超出时调用方按 contain 收行)。导出供回归锁「cells 常量 == 常见像元比
56
+ * 下的实际图宽」(空气墙契约:盒宽=图宽)。 */
57
+ export function whaleGirlImageBoxColumns(cell, frameRatio) {
58
+ const cellRatio = cell.height / cell.width;
59
+ return Math.max(1, Math.min(WHALE_GIRL_CELLS.columns, Math.round(cellRatio * WHALE_GIRL_CELLS.rows * frameRatio)));
60
+ }
61
+ /** 鲸娘心情表:deepy 表同名直通,只有 celebrate 换成鲸娘独有的
62
+ * thumbs-up(happy/庆祝,success 通知反应同源)。 */
63
+ const WHALE_GIRL_MOOD_ANIMATION = {
64
+ ...DEEPY_MOOD_ANIMATION,
65
+ celebrate: 'thumbs-up',
66
+ };
67
+ /** 鲸娘语义表:deepy 的语义/上下文/互动/通知反应表 key 同名直通,仅
68
+ * notice(悬停本体)→ smile-hearts、happy(庆祝)→ thumbs-up 两处覆盖。
69
+ * 回归用它做全语义覆盖检查;运行时 CompanionPanel 把裁决出的
70
+ * animationSemantic 交给每个皮肤的 render(WhaleGirlSkin.semanticMap
71
+ * 即本表),互动/通知反应因此同样能到非 deepy 皮肤。 */
72
+ export const WHALE_GIRL_SEMANTIC_ANIMATION = {
73
+ ...DEEPY_SEMANTIC_ANIMATION,
74
+ notice: 'smile-hearts',
75
+ happy: 'thumbs-up',
76
+ };
77
+ /** pose → 鲸娘动画键(纯函数,回归直接测):亲昵互动(爱心 pass,
78
+ * CompanionPanel 在点击宠物 / Enter 戳一戳时 arm)优先于心情。 */
79
+ export function whaleGirlAnimationKey(mood, heart) {
80
+ if (heart > 0)
81
+ return 'smile-hearts';
82
+ return WHALE_GIRL_MOOD_ANIMATION[mood] ?? 'idle';
83
+ }
84
+ /** 鲸娘(用户提供的表情包,assets/whaleGirl/frames.json):渲染路径照
85
+ * DeepySkin(kit → 动画 → frameAt 选帧 → 半块行)。动画键优先级:
86
+ * animationSemantic(互动/通知反应层,经 semanticMap 落点)> 爱心 pass
87
+ * > 心情层(whaleGirlAnimationKey 原契约不变);缺 kit / 缺帧回退
88
+ * DeepySkin.render(再缺则由它落到 WhaleSkin)。 */
89
+ /** 鲸娘对 deepy 规范键的落点:只声明两处覆盖(悬停碰本体 deepy 会喷水,
90
+ * 鲸娘换成 smile-hearts;庆祝 happy → 独有 thumbs-up),其余 18 键与
91
+ deepy 同名直通(鲸娘 kit 键集同源)。semantic 空间的完整覆盖表见
92
+ WHALE_GIRL_SEMANTIC_ANIMATION(回归用)。 */
93
+ const WHALE_GIRL_KEY_ANIMATION = {
94
+ 'idle-spout': 'smile-hearts',
95
+ 'happy': 'thumbs-up',
96
+ };
97
+ /** 鲸娘动画键裁决(字母格与图像两条路径同一语义):semanticMap 落点
98
+ * > 爱心 pass > 心情层(whaleGirlAnimationKey 原契约不变);落点在
99
+ * 「本路径的素材包」里不存在时退心情层,不报错。 */
100
+ function resolveWhaleGirlAnimationKey(pose, animationSemantic, hasKey) {
101
+ const semanticKey = animationSemantic !== undefined
102
+ ? WHALE_GIRL_KEY_ANIMATION[animationSemantic] ?? animationSemantic
103
+ : undefined;
104
+ if (semanticKey !== undefined && hasKey(semanticKey))
105
+ return semanticKey;
106
+ return whaleGirlAnimationKey(pose.mood, pose.heart);
107
+ }
108
+ /** 字母轨开窗(2026-10 空气墙修复配套):42 格帧串的全部美术落在
109
+ * [5,35] 共 31 列(实测 267 帧,两侧是构建 contain 的透明衬垫 '.')——
110
+ * 与图像轨 31 列盒同宽。开窗后字母轨也装进 cells.columns,盒贴边即
111
+ * (最宽姿势的)美术贴边;各姿势自身更窄的边距是美术固有,同 deepy。
112
+ * 回归锁「全部帧内容 ⊆ [5, 5+31)」防素材更新后悄悄越窗被截。 */
113
+ const WHALE_GIRL_LETTER_WINDOW_START = 5;
114
+ const whaleGirlWindowCache = new Map();
115
+ function renderedWhaleGirlWindowRows(kit, key) {
116
+ const animation = kit.byKey[key];
117
+ if (animation === undefined)
118
+ return undefined;
119
+ const cacheKey = kit.id + ':window:' + key;
120
+ let rendered = whaleGirlWindowCache.get(cacheKey);
121
+ if (rendered === undefined) {
122
+ rendered = Object.freeze(animation.frames.map(frame => renderSpriteRows(frame.rows.map(row => row.slice(WHALE_GIRL_LETTER_WINDOW_START, WHALE_GIRL_LETTER_WINDOW_START + WHALE_GIRL_CELLS.columns)), kit.palette)));
123
+ whaleGirlWindowCache.set(cacheKey, rendered);
124
+ }
125
+ return rendered;
126
+ }
127
+ /** 鲸娘字母格渲染(31 列开窗半块路径,供两条渲染路径复用):
128
+ * 缺 kit / 缺预渲染 → DeepySkin.render(再缺由它落到 WhaleSkin)。 */
129
+ function renderWhaleGirlLetterGrid(input) {
130
+ const { pose, moodSince, now, animationSemantic } = input;
131
+ const kit = loadWhaleGirlKit();
132
+ if (kit === undefined)
133
+ return DeepySkin.render({ ...input, width: WHALE_GIRL_CELLS.columns });
134
+ const animationKey = resolveWhaleGirlAnimationKey(pose, animationSemantic, key => kit.byKey[key] !== undefined);
135
+ const rendered = renderedWhaleGirlWindowRows(kit, animationKey);
136
+ const animation = kit.byKey[animationKey];
137
+ if (rendered === undefined || animation === undefined) {
138
+ return DeepySkin.render({ ...input, width: WHALE_GIRL_CELLS.columns });
139
+ }
140
+ const frameIndex = frameAt(animation, now - moodSince);
141
+ const rows = rendered[frameIndex] ?? rendered[0] ?? [];
142
+ return (_jsx(Box, { flexDirection: "column", flexShrink: 0, width: WHALE_GIRL_CELLS.columns, children: rows.map((row, index) => (_jsx(Text, { wrap: "truncate-end", children: row }, index))) }));
143
+ }
144
+ export const WhaleGirlSkin = {
145
+ id: 'whaleGirl',
146
+ title: '鲸娘',
147
+ cells: WHALE_GIRL_CELLS,
148
+ /** optional:有终端图像协议(kitty/sixel)时用原生像素帧,无协议退
149
+ * 字母格(renderWhaleGirlLetterGrid,老路径原样保留)。 */
150
+ graphics: 'optional',
151
+ semanticMap: WHALE_GIRL_KEY_ANIMATION,
152
+ render(input) {
153
+ // kit 缺失的回退必须发生在 render() 本体(同步),老回归契约如此。
154
+ if (loadWhaleGirlKit() === undefined)
155
+ return DeepySkin.render({ ...input, width: WHALE_GIRL_CELLS.columns });
156
+ // render 是普通函数,hooks 落在真正的组件里(无协议环境 mount 后
157
+ // 立即退回字母格,行为与旧版逐字节一致)。
158
+ return _jsx(WhaleGirlImageSkin, { ...input });
159
+ },
160
+ };
161
+ /** 与 deepy.ts 同一套层级教训:源码层 4 层 + 编译层(lib/types)5 层。 */
162
+ const WHALE_GIRL_IMG_DIR_CANDIDATES = [
163
+ '../../../../assets/whaleGirl/img',
164
+ '../../../../../assets/whaleGirl/img',
165
+ ];
166
+ let whaleGirlImageKitCache;
167
+ /** 校验即拒绝(同 loadSpriteKit 契约):timings.json 形状不对 → 整份
168
+ * 视为不可用,图像路径整体退字母格,不渲染半成品。 */
169
+ function parseWhaleGirlImageKit(raw, dir) {
170
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
171
+ return undefined;
172
+ const byKey = {};
173
+ for (const [key, value] of Object.entries(raw)) {
174
+ if (!Array.isArray(value) || value.length === 0)
175
+ return undefined;
176
+ const frames = [];
177
+ for (const entry of value) {
178
+ if (typeof entry?.dur !== 'number' || !(entry.dur > 0))
179
+ return undefined;
180
+ if (typeof entry.file !== 'string' || !/^[0-9]{2}\.png$/.test(entry.file))
181
+ return undefined;
182
+ frames.push({ dur: entry.dur, file: entry.file });
183
+ }
184
+ byKey[key] = { key, frames, totalMs: frames.reduce((sum, frame) => sum + frame.dur, 0) };
185
+ }
186
+ return { dir, byKey };
187
+ }
188
+ /** 惰性加载 + 缓存图像 timings;缺失/校验失败返回 undefined(退字母格)。 */
189
+ export function loadWhaleGirlImageKit() {
190
+ if (whaleGirlImageKitCache !== undefined)
191
+ return whaleGirlImageKitCache ?? undefined;
192
+ for (const candidate of WHALE_GIRL_IMG_DIR_CANDIDATES) {
193
+ try {
194
+ const dir = fileURLToPath(new URL(candidate, import.meta.url));
195
+ if (!existsSync(join(dir, 'timings.json')))
196
+ continue;
197
+ const kit = parseWhaleGirlImageKit(JSON.parse(readFileSync(join(dir, 'timings.json'), 'utf8')), dir);
198
+ if (kit !== undefined) {
199
+ whaleGirlImageKitCache = kit;
200
+ return kit;
201
+ }
202
+ }
203
+ catch {
204
+ // 下一个候选路径
205
+ }
206
+ }
207
+ whaleGirlImageKitCache = null;
208
+ return undefined;
209
+ }
210
+ /** elapsed 时刻应显示第几帧:dur 累加取模,与 deepy.frameAt 同语义
211
+ * (确定性、可单测;回归里与 frameAt 逐 elapsed 比对)。 */
212
+ export function whaleGirlImageFrameIndexAt(animation, elapsedMs) {
213
+ if (animation.frames.length === 0 || animation.totalMs <= 0)
214
+ return 0;
215
+ let remainder = Math.max(0, elapsedMs) % animation.totalMs;
216
+ for (let index = 0; index < animation.frames.length; index += 1) {
217
+ const frame = animation.frames[index];
218
+ if (remainder < frame.dur)
219
+ return index;
220
+ remainder -= frame.dur;
221
+ }
222
+ return animation.frames.length - 1;
223
+ }
224
+ /** 已解码动画的 LRU(Map 迭代序 = 最近使用序);失败集合防止坏动画
225
+ * 每帧重试。字节上限防 267 帧全量常驻(全解约 60MB RGBA)。 */
226
+ const decodedImageAnimations = new Map();
227
+ const failedImageAnimations = new Set();
228
+ let decodedImageBytes = 0;
229
+ const DECODED_IMAGE_BYTES_CAP = 32 * 1024 * 1024;
230
+ /** 解码一个动画的全部帧(顺序、确定性);任一帧失败 → 整个动画 undefined。 */
231
+ async function decodeWhaleGirlAnimation(dir, animation) {
232
+ try {
233
+ const sharp = await loadSharp();
234
+ if (sharp === undefined)
235
+ return undefined;
236
+ const frames = [];
237
+ for (const frame of animation.frames) {
238
+ const decoded = await sharp(readFileSync(join(dir, animation.key, frame.file)), { failOn: 'error' })
239
+ .ensureAlpha()
240
+ .raw()
241
+ .toBuffer({ resolveWithObject: true });
242
+ if (decoded.info.channels !== 4
243
+ || decoded.data.byteLength !== decoded.info.width * decoded.info.height * 4)
244
+ return undefined;
245
+ frames.push({
246
+ data: new Uint8Array(decoded.data.buffer, decoded.data.byteOffset, decoded.data.byteLength),
247
+ width: decoded.info.width,
248
+ height: decoded.info.height,
249
+ });
250
+ }
251
+ return frames;
252
+ }
253
+ catch {
254
+ return undefined;
255
+ }
256
+ }
257
+ function rememberDecodedAnimation(key, frames) {
258
+ const previous = decodedImageAnimations.get(key);
259
+ if (previous !== undefined) {
260
+ decodedImageAnimations.delete(key);
261
+ decodedImageBytes -= previous.reduce((sum, frame) => sum + frame.data.byteLength, 0);
262
+ }
263
+ decodedImageAnimations.set(key, frames);
264
+ decodedImageBytes += frames.reduce((sum, frame) => sum + frame.data.byteLength, 0);
265
+ while (decodedImageBytes > DECODED_IMAGE_BYTES_CAP && decodedImageAnimations.size > 1) {
266
+ const oldest = decodedImageAnimations.keys().next().value;
267
+ if (oldest === undefined)
268
+ break;
269
+ const evicted = decodedImageAnimations.get(oldest);
270
+ decodedImageAnimations.delete(oldest);
271
+ decodedImageBytes -= evicted?.reduce((sum, frame) => sum + frame.data.byteLength, 0) ?? 0;
272
+ }
273
+ }
274
+ /** 测试观测点:当前进程已解码了哪些动画(惰性解码断言用)。 */
275
+ export function whaleGirlDecodedAnimationKeys() {
276
+ return [...decodedImageAnimations.keys(), ...failedImageAnimations];
277
+ }
278
+ /** 测试接缝:清图像层缓存(timings kit + 已解码动画 + 失败集合 + 字母开窗渲染)。 */
279
+ export function resetWhaleGirlImageCacheForTests() {
280
+ whaleGirlImageKitCache = undefined;
281
+ decodedImageAnimations.clear();
282
+ failedImageAnimations.clear();
283
+ decodedImageBytes = 0;
284
+ whaleGirlWindowCache.clear();
285
+ }
286
+ /** 面板可见性门(visible=false 零工作契约):PanelHost 对非 active 的
287
+ * enabled 面板包 display:none 的 Box——沿 DOM 祖先链查它。初始 false,
288
+ * 布局期更新(不触发额外渲染循环),解码 effect 只在证明可见后开跑。 */
289
+ function useBoxDisplayed() {
290
+ const elementRef = React.useRef(null);
291
+ const [displayed, setDisplayed] = React.useState(false);
292
+ const setElement = React.useCallback((element) => { elementRef.current = element; }, []);
293
+ React.useLayoutEffect(() => {
294
+ let hidden = false;
295
+ let node = elementRef.current?.parentNode;
296
+ while (node !== undefined && !hidden) {
297
+ if (node.style?.display === 'none')
298
+ hidden = true;
299
+ node = node.parentNode;
300
+ }
301
+ setDisplayed(previous => (previous === !hidden ? previous : !hidden));
302
+ });
303
+ return [setElement, displayed];
304
+ }
305
+ /** 鲸娘图像路径的帧缓存 hook:activeKey 为 undefined(面板不可见/无
306
+ * 动画)时不做任何事;命中缓存同步返回,未命中异步解码完成后返回。 */
307
+ function useDecodedWhaleGirlFrames(activeKey, kit) {
308
+ const [settled, setSettled] = React.useState(undefined);
309
+ React.useEffect(() => {
310
+ if (activeKey === undefined || kit === undefined)
311
+ return;
312
+ if (!decodedImageAnimations.has(activeKey) && !failedImageAnimations.has(activeKey)) {
313
+ let live = true;
314
+ const animation = kit.byKey[activeKey];
315
+ void decodeWhaleGirlAnimation(kit.dir, animation).then(frames => {
316
+ if (frames === undefined)
317
+ failedImageAnimations.add(activeKey);
318
+ else {
319
+ rememberDecodedAnimation(activeKey, frames);
320
+ if (live)
321
+ setSettled({ key: activeKey, frames });
322
+ }
323
+ });
324
+ return () => { live = false; };
325
+ }
326
+ return;
327
+ }, [activeKey, kit]);
328
+ const cached = activeKey !== undefined ? decodedImageAnimations.get(activeKey) : undefined;
329
+ if (cached !== undefined)
330
+ return cached;
331
+ return settled !== undefined && settled.key === activeKey ? settled.frames : undefined;
332
+ }
333
+ /** 协议裁决层:render() 只产出本组件,hooks 全部在这里落地。 */
334
+ function WhaleGirlImageSkin(input) {
335
+ // 请求能力探测(无协议终端 probe 一次即回落,不再打扰)。
336
+ useTerminalImages(true);
337
+ const protocol = useTerminalImageProtocol();
338
+ if (protocol !== 'kitty' && protocol !== 'sixel')
339
+ return renderWhaleGirlLetterGrid(input);
340
+ return _jsx(WhaleGirlRasterSkin, { ...input });
341
+ }
342
+ /** 图像渲染层:timings 选帧 + 惰性解码 + 单元格盒(15 行预算、宽按
343
+ * 帧比例钳 42 列)。解码完成前渲染字母格(同一语义同一帧)兜底。 */
344
+ function WhaleGirlRasterSkin(input) {
345
+ const { pose, moodSince, now, animationSemantic } = input;
346
+ const cellSize = useTerminalImageCellSize();
347
+ const imageKit = loadWhaleGirlImageKit();
348
+ const [boxRef, displayed] = useBoxDisplayed();
349
+ const animationKey = imageKit !== undefined
350
+ ? resolveWhaleGirlAnimationKey(pose, animationSemantic, key => imageKit.byKey[key] !== undefined)
351
+ : undefined;
352
+ // visible=false 零工作:display:none 祖先链未排除前不解码、不订阅时钟。
353
+ const frames = useDecodedWhaleGirlFrames(displayed ? animationKey : undefined, imageKit);
354
+ const animation = animationKey !== undefined ? imageKit?.byKey[animationKey] : undefined;
355
+ // 单元格盒:15 行预算 + 帧自身宽高比(source.width/height,与档位
356
+ // 无关)+ 真实像元;宽钳 42 列(§16.6)。8×16 像元下 288px 档
357
+ // (301×288)≈ 31 列,渲染层 fit 只降采样,显示恒 1:1 或更密。
358
+ // 外层盒恒定 42×15:ref 挂在它上面(可见性门要求任何分支都在树里),
359
+ // 字母格→图像切换时面板几何零跳动。
360
+ let image;
361
+ if (imageKit !== undefined && cellSize !== undefined && frames !== undefined && animation !== undefined) {
362
+ const frameIndex = whaleGirlImageFrameIndexAt(animation, now - moodSince);
363
+ const source = frames[frameIndex] ?? frames[0];
364
+ if (source !== undefined) {
365
+ const cellRatio = cellSize.height / cellSize.width;
366
+ const frameRatio = source.width / source.height;
367
+ // 盒宽=图宽(钳在 cells.columns 内;超宽像元比下 contain 收行不裁剪)。
368
+ const rawColumns = Math.max(1, Math.round(cellRatio * WHALE_GIRL_CELLS.rows * frameRatio));
369
+ const columns = whaleGirlImageBoxColumns(cellSize, frameRatio);
370
+ const rows = rawColumns > columns
371
+ ? Math.max(1, Math.round(columns / (cellRatio * frameRatio)))
372
+ : WHALE_GIRL_CELLS.rows;
373
+ image = (_jsx(Image, { transparent: true, source: source, width: columns, height: rows, alt: "", presentation: "transcript", children: _jsx(Text, { children: Array.from({ length: rows }, () => ' '.repeat(columns)).join('\n') }) }));
374
+ }
375
+ }
376
+ return (_jsx(Box, { ref: boxRef, flexDirection: "column", flexShrink: 0, alignItems: "center", justifyContent: "center", width: WHALE_GIRL_CELLS.columns, height: WHALE_GIRL_CELLS.rows, children: image ?? renderWhaleGirlLetterGrid(input) }));
377
+ }
378
+ const WHALE_CELLS = Object.freeze({ columns: 40, rows: 13 });
379
+ /** 现有像素鲸鱼:直接消费 nativeWhalePose(与开屏 splash 同一规划器、
380
+ * 同一帧表、同一 LAYERED_CACHE)。 */
381
+ export const WhaleSkin = {
382
+ id: 'whale',
383
+ title: 'Whale',
384
+ cells: WHALE_CELLS,
385
+ graphics: 'none',
386
+ render({ pose }) {
387
+ return _jsx(WhaleArt, { pose: pose.nativeWhalePose, width: WHALE_CELLS.columns });
388
+ },
389
+ };
390
+ const skins = new Map([
391
+ [DeepySkin.id, DeepySkin],
392
+ [WhaleGirlSkin.id, WhaleGirlSkin],
393
+ [WhaleSkin.id, WhaleSkin],
394
+ ]);
395
+ /** 按 id 取皮肤;未知 id 回退默认(DeepySkin)。 */
396
+ export function resolveCompanionSkin(id) {
397
+ if (id !== undefined) {
398
+ const skin = skins.get(id);
399
+ if (skin !== undefined)
400
+ return skin;
401
+ }
402
+ return DeepySkin;
403
+ }
404
+ /** 自定义皮肤注册接缝(用户自定义 / 插件皮肤的进入点;描述符校验
405
+ * 规则随 Phase 7 的插件皮肤一起落地)。 */
406
+ export function registerCompanionSkin(skin) {
407
+ skins.set(skin.id, skin);
408
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Side-panel geometry: the single source of truth for 'can we split, and
3
+ * if so how wide is each column'. Pure functions only — the verify scripts
4
+ * assert these tables directly at boundary widths.
5
+ *
6
+ * Anchors (side-panel design doc §4.2):
7
+ * - CHAT_MIN_COLUMNS keeps the 2-col transcript gutter
8
+ * (RAIL_MIN_TERMINAL_WIDTH = 60 in ink/timeline-rail.ts) plus tool-card
9
+ * indentation readable;
10
+ * - PANEL_MIN_COLUMNS is the narrowest width at which the Jobs panel
11
+ * variant stays legible;
12
+ * - everything is derived from those minimums — never a hard-coded
13
+ * 'columns < 100' style threshold.
14
+ *
15
+ * Widths are ALWAYS numeric (Math.floor): ink resolves % against the
16
+ * padding-inclusive parent box, so a percentage column would lie (see
17
+ * PageMargin.tsx's content-box comment).
18
+ */
19
+ export declare const CHAT_MIN_COLUMNS = 64;
20
+ export declare const PANEL_MIN_COLUMNS = 28;
21
+ export declare const DIVIDER_COLUMNS = 1;
22
+ /** Chat fraction of the content width when the user has not resized. */
23
+ export declare const DEFAULT_RATIO = 0.68;
24
+ /** What zoom ASKS for (chat fraction); the chat column never goes below
25
+ * CHAT_MIN_COLUMNS, so the achieved ratio is usually larger. */
26
+ export declare const ZOOM_TARGET_RATIO = 0.2;
27
+ /** Keyboard resize step (columns) for the panel-focused +/- bindings. */
28
+ export declare const RESIZE_STEP_COLUMNS = 4;
29
+ /** Smallest content width at which a split keeps both sides usable. */
30
+ export declare function canSplit(columns: number): boolean;
31
+ /** Feasible chat-fraction range for a content width (both ends inclusive). */
32
+ export declare function ratioRange(columns: number): {
33
+ readonly min: number;
34
+ readonly max: number;
35
+ };
36
+ /** Clamp a stored ratio into the feasible range for this width. */
37
+ export declare function clampRatio(columns: number, ratio: number): number;
38
+ export interface SidePanelSplit {
39
+ readonly chat: number;
40
+ readonly panel: number;
41
+ }
42
+ /** Split geometry for a content width and chat fraction. */
43
+ export declare function resolveSplit(columns: number, ratio: number): SidePanelSplit;
44
+ /** Zoom geometry: the panel takes over; chat keeps at least CHAT_MIN_COLUMNS. */
45
+ export declare function resolveZoom(columns: number): SidePanelSplit;
46
+ export interface SidePanelGeometryInput {
47
+ readonly columns: number;
48
+ readonly open: boolean;
49
+ readonly zoom: boolean;
50
+ readonly ratio: number;
51
+ }
52
+ /**
53
+ * Resolve the effective layout. null means 'no split' (chat takes the
54
+ * full content width); callers render exactly as today in that case.
55
+ */
56
+ export declare function resolveSidePanelGeometry(input: SidePanelGeometryInput): SidePanelSplit | null;
57
+ /** Keyboard resize: shift the chat fraction by deltaColumns worth of
58
+ * width, clamped into the feasible range for this terminal. */
59
+ export declare function nudgeRatio(columns: number, ratio: number, deltaColumns: number): number;
60
+ //# sourceMappingURL=dimensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimensions.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/dimensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAClC,eAAO,MAAM,iBAAiB,KAAK,CAAA;AACnC,eAAO,MAAM,eAAe,IAAI,CAAA;AAEhC,wEAAwE;AACxE,eAAO,MAAM,aAAa,OAAO,CAAA;AAEjC;iEACiE;AACjE,eAAO,MAAM,iBAAiB,MAAO,CAAA;AAErC,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjD;AAMD,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAM1F;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAO3E;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAE3D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,sBAAsB,GAC5B,cAAc,GAAG,IAAI,CAIvB;AAED;gEACgE;AAChE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGvF"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Side-panel geometry: the single source of truth for 'can we split, and
3
+ * if so how wide is each column'. Pure functions only — the verify scripts
4
+ * assert these tables directly at boundary widths.
5
+ *
6
+ * Anchors (side-panel design doc §4.2):
7
+ * - CHAT_MIN_COLUMNS keeps the 2-col transcript gutter
8
+ * (RAIL_MIN_TERMINAL_WIDTH = 60 in ink/timeline-rail.ts) plus tool-card
9
+ * indentation readable;
10
+ * - PANEL_MIN_COLUMNS is the narrowest width at which the Jobs panel
11
+ * variant stays legible;
12
+ * - everything is derived from those minimums — never a hard-coded
13
+ * 'columns < 100' style threshold.
14
+ *
15
+ * Widths are ALWAYS numeric (Math.floor): ink resolves % against the
16
+ * padding-inclusive parent box, so a percentage column would lie (see
17
+ * PageMargin.tsx's content-box comment).
18
+ */
19
+ export const CHAT_MIN_COLUMNS = 64;
20
+ export const PANEL_MIN_COLUMNS = 28;
21
+ export const DIVIDER_COLUMNS = 1;
22
+ /** Chat fraction of the content width when the user has not resized. */
23
+ export const DEFAULT_RATIO = 0.68;
24
+ /** What zoom ASKS for (chat fraction); the chat column never goes below
25
+ * CHAT_MIN_COLUMNS, so the achieved ratio is usually larger. */
26
+ export const ZOOM_TARGET_RATIO = 0.20;
27
+ /** Keyboard resize step (columns) for the panel-focused +/- bindings. */
28
+ export const RESIZE_STEP_COLUMNS = 4;
29
+ /** Smallest content width at which a split keeps both sides usable. */
30
+ export function canSplit(columns) {
31
+ return columns >= CHAT_MIN_COLUMNS + PANEL_MIN_COLUMNS + DIVIDER_COLUMNS;
32
+ }
33
+ function clamp(value, min, max) {
34
+ return Math.min(max, Math.max(min, value));
35
+ }
36
+ /** Feasible chat-fraction range for a content width (both ends inclusive). */
37
+ export function ratioRange(columns) {
38
+ if (columns <= 0)
39
+ return { min: 0, max: 1 };
40
+ return {
41
+ min: Math.min(1, CHAT_MIN_COLUMNS / columns),
42
+ max: Math.max(0, (columns - PANEL_MIN_COLUMNS - DIVIDER_COLUMNS) / columns),
43
+ };
44
+ }
45
+ /** Clamp a stored ratio into the feasible range for this width. */
46
+ export function clampRatio(columns, ratio) {
47
+ const range = ratioRange(columns);
48
+ return clamp(ratio, Math.min(range.min, range.max), range.max);
49
+ }
50
+ /** Split geometry for a content width and chat fraction. */
51
+ export function resolveSplit(columns, ratio) {
52
+ const chat = clamp(Math.floor(columns * ratio), CHAT_MIN_COLUMNS, columns - PANEL_MIN_COLUMNS - DIVIDER_COLUMNS);
53
+ return { chat, panel: columns - chat - DIVIDER_COLUMNS };
54
+ }
55
+ /** Zoom geometry: the panel takes over; chat keeps at least CHAT_MIN_COLUMNS. */
56
+ export function resolveZoom(columns) {
57
+ return resolveSplit(columns, ZOOM_TARGET_RATIO);
58
+ }
59
+ /**
60
+ * Resolve the effective layout. null means 'no split' (chat takes the
61
+ * full content width); callers render exactly as today in that case.
62
+ */
63
+ export function resolveSidePanelGeometry(input) {
64
+ const { columns, open, zoom, ratio } = input;
65
+ if (!open || !canSplit(columns))
66
+ return null;
67
+ return zoom ? resolveZoom(columns) : resolveSplit(columns, ratio);
68
+ }
69
+ /** Keyboard resize: shift the chat fraction by deltaColumns worth of
70
+ * width, clamped into the feasible range for this terminal. */
71
+ export function nudgeRatio(columns, ratio, deltaColumns) {
72
+ if (columns <= 0)
73
+ return ratio;
74
+ return clampRatio(columns, ratio + deltaColumns / columns);
75
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * jobsFocusStore:Chat → JobsPanelAdapter 的聚焦请求通道(任务卡片点击
3
+ * 打开面板时要聚焦到对应任务)。刻意做成 module-level 三行 store,而不是
4
+ * 塞进 PanelStore(那是 badge/注册表的家,不背业务状态)或
5
+ * SidePanelRuntimeContext(useSidePanel 不该知道 jobs 的业务)。
6
+ *
7
+ * 写:Chat 在 openPanel('jobs') 前调 request(id);读:Adapter 经
8
+ * useSyncExternalStore 拿 { id, nonce },nonce 保证同一 id 的重复请求
9
+ * (再次点击同一张卡)也能重新触发聚焦。
10
+ */
11
+ export interface JobsFocusRequest {
12
+ readonly id: string | null;
13
+ readonly nonce: number;
14
+ }
15
+ export declare const jobsFocusStore: {
16
+ subscribe(listener: () => void): () => void;
17
+ get(): JobsFocusRequest;
18
+ /** 请求聚焦某个任务(id=null 只推进 nonce,不触发聚焦)。 */
19
+ request(id: string | null): void;
20
+ };
21
+ //# sourceMappingURL=jobsFocusStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobsFocusStore.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/jobsFocusStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACzB;AASD,eAAO,MAAM,cAAc;wBACH,MAAM,IAAI,GAAG,MAAM,IAAI;WAIpC,gBAAgB;IAGvB,yCAAyC;gBAC7B,MAAM,GAAG,IAAI,GAAG,IAAI;CAInC,CAAA"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * jobsFocusStore:Chat → JobsPanelAdapter 的聚焦请求通道(任务卡片点击
3
+ * 打开面板时要聚焦到对应任务)。刻意做成 module-level 三行 store,而不是
4
+ * 塞进 PanelStore(那是 badge/注册表的家,不背业务状态)或
5
+ * SidePanelRuntimeContext(useSidePanel 不该知道 jobs 的业务)。
6
+ *
7
+ * 写:Chat 在 openPanel('jobs') 前调 request(id);读:Adapter 经
8
+ * useSyncExternalStore 拿 { id, nonce },nonce 保证同一 id 的重复请求
9
+ * (再次点击同一张卡)也能重新触发聚焦。
10
+ */
11
+ let snapshot = Object.freeze({ id: null, nonce: 0 });
12
+ const listeners = new Set();
13
+ function emit() {
14
+ for (const listener of [...listeners])
15
+ listener();
16
+ }
17
+ export const jobsFocusStore = {
18
+ subscribe(listener) {
19
+ listeners.add(listener);
20
+ return () => { listeners.delete(listener); };
21
+ },
22
+ get() {
23
+ return snapshot;
24
+ },
25
+ /** 请求聚焦某个任务(id=null 只推进 nonce,不触发聚焦)。 */
26
+ request(id) {
27
+ snapshot = Object.freeze({ id, nonce: snapshot.nonce + 1 });
28
+ emit();
29
+ },
30
+ };
@@ -0,0 +1,44 @@
1
+ /**
2
+ * panelBridge:ctx.tuiPanels 服务(dsh-adapter,Cordis 侧)与 useSidePanel
3
+ * (Chat 侧控制器)之间的小型 module-level 通道(设计文档 §18.2)。
4
+ *
5
+ * 照 jobsFocusStore 的形状刻意做成两个三行 store,而不是塞进 PanelStore
6
+ * (那是注册表/badge 的家)或 SidePanelRuntimeContext(useSidePanel 不该
7
+ * 知道插件业务):
8
+ * - state:Chat 每次渲染后回写 { open, activePanelId, focus },服务侧
9
+ * close()/focus() 据此判断;
10
+ * - requests:服务侧 open/focus/close 的请求队列(nonce 保证同 id 重复
11
+ * 请求也能重新触发),useSidePanel 订阅并在自己的启用集合里裁决。
12
+ *
13
+ * hasConsumer:没有任何 Chat 挂载(无头夹具 / 侧栏永不渲染)时 open()
14
+ * 必须返回 false 而不是假装成功——attach/detach 由 useSidePanel 的
15
+ * mount effect 维护。
16
+ */
17
+ export type PanelBridgeFocus = 'chat' | 'panel';
18
+ export interface PanelBridgeUiState {
19
+ readonly open: boolean;
20
+ readonly activePanelId: string | undefined;
21
+ readonly focus: PanelBridgeFocus;
22
+ }
23
+ export type PanelBridgeRequestKind = 'open' | 'focus' | 'close';
24
+ export interface PanelBridgeRequest {
25
+ readonly kind: PanelBridgeRequestKind;
26
+ readonly id: string;
27
+ readonly nonce: number;
28
+ }
29
+ export declare const panelBridgeRequests: {
30
+ subscribe(listener: (request: PanelBridgeRequest) => void): () => void;
31
+ /** 服务侧入口:无 Chat 消费者时返回 false(调用方据此向插件返回 false)。 */
32
+ request(kind: PanelBridgeRequestKind, id: string): boolean;
33
+ /** useSidePanel mount/unmount 维护;带消费者才允许请求入队。 */
34
+ attach(): void;
35
+ detach(): void;
36
+ hasConsumer(): boolean;
37
+ };
38
+ export declare const panelBridgeState: {
39
+ subscribe(listener: () => void): () => void;
40
+ get(): PanelBridgeUiState;
41
+ /** 只由 useSidePanel 回写。 */
42
+ set(next: PanelBridgeUiState): void;
43
+ };
44
+ //# sourceMappingURL=panelBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panelBridge.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/panelBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAA;AAE/C,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;CACnC;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;AAE/D,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACzB;AAMD,eAAO,MAAM,mBAAmB;wBACR,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,IAAI;IAItE,mDAAmD;kBACrC,sBAAsB,MAAM,MAAM,GAAG,OAAO;IAM1D,iDAAiD;cACvC,IAAI;cACJ,IAAI;mBACC,OAAO;CACzB,CAAA;AAKD,eAAO,MAAM,gBAAgB;wBACL,MAAM,IAAI,GAAG,MAAM,IAAI;WAIpC,kBAAkB;IAGzB,0BAA0B;cAChB,kBAAkB,GAAG,IAAI;CAItC,CAAA"}