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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (786) hide show
  1. package/README.md +60 -8
  2. package/assets/deepy/README.md +60 -0
  3. package/assets/deepy/frames.json +1 -0
  4. package/assets/whale-girl/whale-girl-happy.png +0 -0
  5. package/assets/whaleGirl/README.md +7 -0
  6. package/assets/whaleGirl/frames.json +1 -0
  7. package/assets/whaleGirl/img/building/00.png +0 -0
  8. package/assets/whaleGirl/img/building/01.png +0 -0
  9. package/assets/whaleGirl/img/building/02.png +0 -0
  10. package/assets/whaleGirl/img/building/03.png +0 -0
  11. package/assets/whaleGirl/img/building/04.png +0 -0
  12. package/assets/whaleGirl/img/building/05.png +0 -0
  13. package/assets/whaleGirl/img/building/06.png +0 -0
  14. package/assets/whaleGirl/img/building/07.png +0 -0
  15. package/assets/whaleGirl/img/building/08.png +0 -0
  16. package/assets/whaleGirl/img/building/09.png +0 -0
  17. package/assets/whaleGirl/img/building/10.png +0 -0
  18. package/assets/whaleGirl/img/building/11.png +0 -0
  19. package/assets/whaleGirl/img/building/12.png +0 -0
  20. package/assets/whaleGirl/img/building/13.png +0 -0
  21. package/assets/whaleGirl/img/building/14.png +0 -0
  22. package/assets/whaleGirl/img/building/15.png +0 -0
  23. package/assets/whaleGirl/img/building/16.png +0 -0
  24. package/assets/whaleGirl/img/building/17.png +0 -0
  25. package/assets/whaleGirl/img/building/18.png +0 -0
  26. package/assets/whaleGirl/img/building/19.png +0 -0
  27. package/assets/whaleGirl/img/building/20.png +0 -0
  28. package/assets/whaleGirl/img/building/21.png +0 -0
  29. package/assets/whaleGirl/img/building/22.png +0 -0
  30. package/assets/whaleGirl/img/building/23.png +0 -0
  31. package/assets/whaleGirl/img/carrying/00.png +0 -0
  32. package/assets/whaleGirl/img/carrying/01.png +0 -0
  33. package/assets/whaleGirl/img/carrying/02.png +0 -0
  34. package/assets/whaleGirl/img/carrying/03.png +0 -0
  35. package/assets/whaleGirl/img/carrying/04.png +0 -0
  36. package/assets/whaleGirl/img/carrying/05.png +0 -0
  37. package/assets/whaleGirl/img/carrying/06.png +0 -0
  38. package/assets/whaleGirl/img/carrying/07.png +0 -0
  39. package/assets/whaleGirl/img/compacting/00.png +0 -0
  40. package/assets/whaleGirl/img/compacting/01.png +0 -0
  41. package/assets/whaleGirl/img/compacting/02.png +0 -0
  42. package/assets/whaleGirl/img/compacting/03.png +0 -0
  43. package/assets/whaleGirl/img/compacting/04.png +0 -0
  44. package/assets/whaleGirl/img/compacting/05.png +0 -0
  45. package/assets/whaleGirl/img/compacting/06.png +0 -0
  46. package/assets/whaleGirl/img/compacting/07.png +0 -0
  47. package/assets/whaleGirl/img/compacting/08.png +0 -0
  48. package/assets/whaleGirl/img/compacting/09.png +0 -0
  49. package/assets/whaleGirl/img/conducting/00.png +0 -0
  50. package/assets/whaleGirl/img/conducting/01.png +0 -0
  51. package/assets/whaleGirl/img/conducting/02.png +0 -0
  52. package/assets/whaleGirl/img/conducting/03.png +0 -0
  53. package/assets/whaleGirl/img/conducting/04.png +0 -0
  54. package/assets/whaleGirl/img/conducting/05.png +0 -0
  55. package/assets/whaleGirl/img/conducting/06.png +0 -0
  56. package/assets/whaleGirl/img/conducting/07.png +0 -0
  57. package/assets/whaleGirl/img/conducting/08.png +0 -0
  58. package/assets/whaleGirl/img/conducting/09.png +0 -0
  59. package/assets/whaleGirl/img/conducting/10.png +0 -0
  60. package/assets/whaleGirl/img/conducting/11.png +0 -0
  61. package/assets/whaleGirl/img/drag/00.png +0 -0
  62. package/assets/whaleGirl/img/drag/01.png +0 -0
  63. package/assets/whaleGirl/img/drag/02.png +0 -0
  64. package/assets/whaleGirl/img/drag/03.png +0 -0
  65. package/assets/whaleGirl/img/drag/04.png +0 -0
  66. package/assets/whaleGirl/img/drag/05.png +0 -0
  67. package/assets/whaleGirl/img/drag/06.png +0 -0
  68. package/assets/whaleGirl/img/drag/07.png +0 -0
  69. package/assets/whaleGirl/img/drag/08.png +0 -0
  70. package/assets/whaleGirl/img/drag/09.png +0 -0
  71. package/assets/whaleGirl/img/error/00.png +0 -0
  72. package/assets/whaleGirl/img/error/01.png +0 -0
  73. package/assets/whaleGirl/img/error/02.png +0 -0
  74. package/assets/whaleGirl/img/error/03.png +0 -0
  75. package/assets/whaleGirl/img/error/04.png +0 -0
  76. package/assets/whaleGirl/img/error/05.png +0 -0
  77. package/assets/whaleGirl/img/error/06.png +0 -0
  78. package/assets/whaleGirl/img/error/07.png +0 -0
  79. package/assets/whaleGirl/img/error/08.png +0 -0
  80. package/assets/whaleGirl/img/error/09.png +0 -0
  81. package/assets/whaleGirl/img/happy/00.png +0 -0
  82. package/assets/whaleGirl/img/happy/01.png +0 -0
  83. package/assets/whaleGirl/img/happy/02.png +0 -0
  84. package/assets/whaleGirl/img/happy/03.png +0 -0
  85. package/assets/whaleGirl/img/happy/04.png +0 -0
  86. package/assets/whaleGirl/img/happy/05.png +0 -0
  87. package/assets/whaleGirl/img/happy/06.png +0 -0
  88. package/assets/whaleGirl/img/happy/07.png +0 -0
  89. package/assets/whaleGirl/img/happy/08.png +0 -0
  90. package/assets/whaleGirl/img/happy/09.png +0 -0
  91. package/assets/whaleGirl/img/happy/10.png +0 -0
  92. package/assets/whaleGirl/img/idle/00.png +0 -0
  93. package/assets/whaleGirl/img/idle/01.png +0 -0
  94. package/assets/whaleGirl/img/idle/02.png +0 -0
  95. package/assets/whaleGirl/img/idle/03.png +0 -0
  96. package/assets/whaleGirl/img/idle/04.png +0 -0
  97. package/assets/whaleGirl/img/idle/05.png +0 -0
  98. package/assets/whaleGirl/img/idle/06.png +0 -0
  99. package/assets/whaleGirl/img/idle/07.png +0 -0
  100. package/assets/whaleGirl/img/idle/08.png +0 -0
  101. package/assets/whaleGirl/img/idle/09.png +0 -0
  102. package/assets/whaleGirl/img/idle/10.png +0 -0
  103. package/assets/whaleGirl/img/idle/11.png +0 -0
  104. package/assets/whaleGirl/img/idle/12.png +0 -0
  105. package/assets/whaleGirl/img/idle/13.png +0 -0
  106. package/assets/whaleGirl/img/idle/14.png +0 -0
  107. package/assets/whaleGirl/img/idle/15.png +0 -0
  108. package/assets/whaleGirl/img/idle/16.png +0 -0
  109. package/assets/whaleGirl/img/idle/17.png +0 -0
  110. package/assets/whaleGirl/img/idle/18.png +0 -0
  111. package/assets/whaleGirl/img/idle/19.png +0 -0
  112. package/assets/whaleGirl/img/idle/20.png +0 -0
  113. package/assets/whaleGirl/img/idle-look/00.png +0 -0
  114. package/assets/whaleGirl/img/idle-look/01.png +0 -0
  115. package/assets/whaleGirl/img/idle-look/02.png +0 -0
  116. package/assets/whaleGirl/img/idle-look/03.png +0 -0
  117. package/assets/whaleGirl/img/idle-look/04.png +0 -0
  118. package/assets/whaleGirl/img/idle-look/05.png +0 -0
  119. package/assets/whaleGirl/img/idle-look/06.png +0 -0
  120. package/assets/whaleGirl/img/idle-look/07.png +0 -0
  121. package/assets/whaleGirl/img/idle-look/08.png +0 -0
  122. package/assets/whaleGirl/img/idle-look/09.png +0 -0
  123. package/assets/whaleGirl/img/idle-look/10.png +0 -0
  124. package/assets/whaleGirl/img/idle-look/11.png +0 -0
  125. package/assets/whaleGirl/img/idle-look/12.png +0 -0
  126. package/assets/whaleGirl/img/idle-spout/00.png +0 -0
  127. package/assets/whaleGirl/img/idle-spout/01.png +0 -0
  128. package/assets/whaleGirl/img/idle-spout/02.png +0 -0
  129. package/assets/whaleGirl/img/idle-spout/03.png +0 -0
  130. package/assets/whaleGirl/img/idle-spout/04.png +0 -0
  131. package/assets/whaleGirl/img/idle-spout/05.png +0 -0
  132. package/assets/whaleGirl/img/idle-spout/06.png +0 -0
  133. package/assets/whaleGirl/img/idle-spout/07.png +0 -0
  134. package/assets/whaleGirl/img/idle-spout/08.png +0 -0
  135. package/assets/whaleGirl/img/idle-spout/09.png +0 -0
  136. package/assets/whaleGirl/img/idle-spout/10.png +0 -0
  137. package/assets/whaleGirl/img/music/00.png +0 -0
  138. package/assets/whaleGirl/img/music/01.png +0 -0
  139. package/assets/whaleGirl/img/music/02.png +0 -0
  140. package/assets/whaleGirl/img/music/03.png +0 -0
  141. package/assets/whaleGirl/img/music/04.png +0 -0
  142. package/assets/whaleGirl/img/music/05.png +0 -0
  143. package/assets/whaleGirl/img/music/06.png +0 -0
  144. package/assets/whaleGirl/img/music/07.png +0 -0
  145. package/assets/whaleGirl/img/notification/00.png +0 -0
  146. package/assets/whaleGirl/img/notification/01.png +0 -0
  147. package/assets/whaleGirl/img/notification/02.png +0 -0
  148. package/assets/whaleGirl/img/notification/03.png +0 -0
  149. package/assets/whaleGirl/img/notification/04.png +0 -0
  150. package/assets/whaleGirl/img/notification/05.png +0 -0
  151. package/assets/whaleGirl/img/notification/06.png +0 -0
  152. package/assets/whaleGirl/img/notification/07.png +0 -0
  153. package/assets/whaleGirl/img/poke-left/00.png +0 -0
  154. package/assets/whaleGirl/img/poke-left/01.png +0 -0
  155. package/assets/whaleGirl/img/poke-left/02.png +0 -0
  156. package/assets/whaleGirl/img/poke-left/03.png +0 -0
  157. package/assets/whaleGirl/img/poke-left/04.png +0 -0
  158. package/assets/whaleGirl/img/poke-left/05.png +0 -0
  159. package/assets/whaleGirl/img/poke-left/06.png +0 -0
  160. package/assets/whaleGirl/img/poke-left/07.png +0 -0
  161. package/assets/whaleGirl/img/poke-left/08.png +0 -0
  162. package/assets/whaleGirl/img/poke-left/09.png +0 -0
  163. package/assets/whaleGirl/img/poke-left/10.png +0 -0
  164. package/assets/whaleGirl/img/poke-right/00.png +0 -0
  165. package/assets/whaleGirl/img/poke-right/01.png +0 -0
  166. package/assets/whaleGirl/img/poke-right/02.png +0 -0
  167. package/assets/whaleGirl/img/poke-right/03.png +0 -0
  168. package/assets/whaleGirl/img/poke-right/04.png +0 -0
  169. package/assets/whaleGirl/img/poke-right/05.png +0 -0
  170. package/assets/whaleGirl/img/poke-right/06.png +0 -0
  171. package/assets/whaleGirl/img/poke-right/07.png +0 -0
  172. package/assets/whaleGirl/img/poke-right/08.png +0 -0
  173. package/assets/whaleGirl/img/poke-right/09.png +0 -0
  174. package/assets/whaleGirl/img/poke-right/10.png +0 -0
  175. package/assets/whaleGirl/img/sleeping/00.png +0 -0
  176. package/assets/whaleGirl/img/sleeping/01.png +0 -0
  177. package/assets/whaleGirl/img/sleeping/02.png +0 -0
  178. package/assets/whaleGirl/img/sleeping/03.png +0 -0
  179. package/assets/whaleGirl/img/sleeping/04.png +0 -0
  180. package/assets/whaleGirl/img/sleeping/05.png +0 -0
  181. package/assets/whaleGirl/img/smile-hearts/00.png +0 -0
  182. package/assets/whaleGirl/img/smile-hearts/01.png +0 -0
  183. package/assets/whaleGirl/img/smile-hearts/02.png +0 -0
  184. package/assets/whaleGirl/img/smile-hearts/03.png +0 -0
  185. package/assets/whaleGirl/img/smile-hearts/04.png +0 -0
  186. package/assets/whaleGirl/img/smile-hearts/05.png +0 -0
  187. package/assets/whaleGirl/img/smile-hearts/06.png +0 -0
  188. package/assets/whaleGirl/img/smile-hearts/07.png +0 -0
  189. package/assets/whaleGirl/img/smile-hearts/08.png +0 -0
  190. package/assets/whaleGirl/img/smile-hearts/09.png +0 -0
  191. package/assets/whaleGirl/img/smile-hearts/10.png +0 -0
  192. package/assets/whaleGirl/img/smile-hearts/11.png +0 -0
  193. package/assets/whaleGirl/img/smile-hearts/12.png +0 -0
  194. package/assets/whaleGirl/img/smile-hearts/13.png +0 -0
  195. package/assets/whaleGirl/img/smile-hearts/14.png +0 -0
  196. package/assets/whaleGirl/img/smile-hearts/15.png +0 -0
  197. package/assets/whaleGirl/img/swim/00.png +0 -0
  198. package/assets/whaleGirl/img/swim/01.png +0 -0
  199. package/assets/whaleGirl/img/swim/02.png +0 -0
  200. package/assets/whaleGirl/img/swim/03.png +0 -0
  201. package/assets/whaleGirl/img/swim/04.png +0 -0
  202. package/assets/whaleGirl/img/swim/05.png +0 -0
  203. package/assets/whaleGirl/img/swim/06.png +0 -0
  204. package/assets/whaleGirl/img/swim/07.png +0 -0
  205. package/assets/whaleGirl/img/thinking/00.png +0 -0
  206. package/assets/whaleGirl/img/thinking/01.png +0 -0
  207. package/assets/whaleGirl/img/thinking/02.png +0 -0
  208. package/assets/whaleGirl/img/thinking/03.png +0 -0
  209. package/assets/whaleGirl/img/thinking/04.png +0 -0
  210. package/assets/whaleGirl/img/thinking/05.png +0 -0
  211. package/assets/whaleGirl/img/thinking/06.png +0 -0
  212. package/assets/whaleGirl/img/thinking/07.png +0 -0
  213. package/assets/whaleGirl/img/thinking/08.png +0 -0
  214. package/assets/whaleGirl/img/thinking/09.png +0 -0
  215. package/assets/whaleGirl/img/thinking/10.png +0 -0
  216. package/assets/whaleGirl/img/thinking/11.png +0 -0
  217. package/assets/whaleGirl/img/thinking/12.png +0 -0
  218. package/assets/whaleGirl/img/thinking/13.png +0 -0
  219. package/assets/whaleGirl/img/thinking/14.png +0 -0
  220. package/assets/whaleGirl/img/thinking/15.png +0 -0
  221. package/assets/whaleGirl/img/thinking/16.png +0 -0
  222. package/assets/whaleGirl/img/thumbs-up/00.png +0 -0
  223. package/assets/whaleGirl/img/thumbs-up/01.png +0 -0
  224. package/assets/whaleGirl/img/thumbs-up/02.png +0 -0
  225. package/assets/whaleGirl/img/thumbs-up/03.png +0 -0
  226. package/assets/whaleGirl/img/thumbs-up/04.png +0 -0
  227. package/assets/whaleGirl/img/thumbs-up/05.png +0 -0
  228. package/assets/whaleGirl/img/thumbs-up/06.png +0 -0
  229. package/assets/whaleGirl/img/thumbs-up/07.png +0 -0
  230. package/assets/whaleGirl/img/thumbs-up/08.png +0 -0
  231. package/assets/whaleGirl/img/thumbs-up/09.png +0 -0
  232. package/assets/whaleGirl/img/thumbs-up/10.png +0 -0
  233. package/assets/whaleGirl/img/thumbs-up/11.png +0 -0
  234. package/assets/whaleGirl/img/thumbs-up/12.png +0 -0
  235. package/assets/whaleGirl/img/tickle/00.png +0 -0
  236. package/assets/whaleGirl/img/tickle/01.png +0 -0
  237. package/assets/whaleGirl/img/tickle/02.png +0 -0
  238. package/assets/whaleGirl/img/tickle/03.png +0 -0
  239. package/assets/whaleGirl/img/tickle/04.png +0 -0
  240. package/assets/whaleGirl/img/tickle/05.png +0 -0
  241. package/assets/whaleGirl/img/tickle/06.png +0 -0
  242. package/assets/whaleGirl/img/tickle/07.png +0 -0
  243. package/assets/whaleGirl/img/tickle/08.png +0 -0
  244. package/assets/whaleGirl/img/tickle/09.png +0 -0
  245. package/assets/whaleGirl/img/tickle/10.png +0 -0
  246. package/assets/whaleGirl/img/tickle/11.png +0 -0
  247. package/assets/whaleGirl/img/tickle/12.png +0 -0
  248. package/assets/whaleGirl/img/tickle/13.png +0 -0
  249. package/assets/whaleGirl/img/timings.json +1 -0
  250. package/assets/whaleGirl/img/typing/00.png +0 -0
  251. package/assets/whaleGirl/img/typing/01.png +0 -0
  252. package/assets/whaleGirl/img/typing/02.png +0 -0
  253. package/assets/whaleGirl/img/typing/03.png +0 -0
  254. package/assets/whaleGirl/img/typing/04.png +0 -0
  255. package/assets/whaleGirl/img/typing/05.png +0 -0
  256. package/assets/whaleGirl/img/typing/06.png +0 -0
  257. package/assets/whaleGirl/img/typing/07.png +0 -0
  258. package/assets/whaleGirl/img/typing/08.png +0 -0
  259. package/assets/whaleGirl/img/typing/09.png +0 -0
  260. package/assets/whaleGirl/img/typing/10.png +0 -0
  261. package/assets/whaleGirl/img/typing/11.png +0 -0
  262. package/assets/whaleGirl/img/typing/12.png +0 -0
  263. package/assets/whaleGirl/img/typing/13.png +0 -0
  264. package/assets/whaleGirl/img/waking/00.png +0 -0
  265. package/assets/whaleGirl/img/waking/01.png +0 -0
  266. package/assets/whaleGirl/img/waking/02.png +0 -0
  267. package/assets/whaleGirl/img/waking/03.png +0 -0
  268. package/assets/whaleGirl/img/waking/04.png +0 -0
  269. package/assets/whaleGirl/img/waking/05.png +0 -0
  270. package/assets/whaleGirl/img/waking/06.png +0 -0
  271. package/assets/whaleGirl/img/waking/07.png +0 -0
  272. package/assets/whaleGirl/img/waking/08.png +0 -0
  273. package/assets/whaleGirl/img/waking/09.png +0 -0
  274. package/assets/whaleGirl/img/waking/10.png +0 -0
  275. package/bin/dsh-tui.js +38 -6
  276. package/cordis.patch.yml +31 -6
  277. package/guide/dsh-tui-guide/SKILL.md +37 -0
  278. package/guide/dsh-tui-guide/configuration.en.md +415 -0
  279. package/guide/dsh-tui-guide/configuration.md +354 -0
  280. package/guide/dsh-tui-guide/getting-started.en.md +401 -0
  281. package/guide/dsh-tui-guide/getting-started.md +399 -0
  282. package/guide/dsh-tui-guide/interaction.en.md +738 -0
  283. package/guide/dsh-tui-guide/interaction.md +793 -0
  284. package/guide/dsh-tui-guide/migrate.en.md +166 -0
  285. package/guide/dsh-tui-guide/migrate.md +132 -0
  286. package/guide/dsh-tui-guide/plugins.en.md +78 -0
  287. package/guide/dsh-tui-guide/plugins.md +64 -0
  288. package/guide/dsh-tui-guide/themes.en.md +197 -0
  289. package/guide/dsh-tui-guide/themes.md +188 -0
  290. package/guide/dsh-tui-guide/user-guide.en.md +711 -0
  291. package/guide/dsh-tui-guide/user-guide.md +666 -0
  292. package/guide/dsh-tui-guide/vscode.en.md +301 -0
  293. package/guide/dsh-tui-guide/vscode.md +272 -0
  294. package/lib/settings.json +219 -5
  295. package/lib/types/adapter/channel/ui-policy.d.ts +7 -2
  296. package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
  297. package/lib/types/adapter/channel/ui-policy.js +18 -1
  298. package/lib/types/adapter/index.d.ts +1 -1
  299. package/lib/types/adapter/index.js +1 -1
  300. package/lib/types/adapter/kernel/host-facade.d.ts +4 -1
  301. package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -1
  302. package/lib/types/adapter/kernel/host-facade.js +8 -1
  303. package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
  304. package/lib/types/adapter/kernel/runtime.js +13 -0
  305. package/lib/types/adapter/kernel/slices/index.d.ts +1 -0
  306. package/lib/types/adapter/kernel/slices/index.d.ts.map +1 -1
  307. package/lib/types/adapter/kernel/slices/index.js +3 -0
  308. package/lib/types/adapter/kernel/slices/panels.d.ts +3 -0
  309. package/lib/types/adapter/kernel/slices/panels.d.ts.map +1 -0
  310. package/lib/types/adapter/kernel/slices/panels.js +14 -0
  311. package/lib/types/adapter/ports/channel-capabilities.d.ts +48 -0
  312. package/lib/types/adapter/ports/channel-capabilities.d.ts.map +1 -0
  313. package/lib/types/adapter/ports/channel-capabilities.js +2 -0
  314. package/lib/types/adapter/ports/channel-catalog.d.ts +7 -0
  315. package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
  316. package/lib/types/adapter/ports/channel-display.d.ts +10 -0
  317. package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
  318. package/lib/types/adapter/ports/channel-settings.d.ts +2 -1
  319. package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
  320. package/lib/types/adapter/ports/channel-ui.d.ts +91 -4
  321. package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
  322. package/lib/types/adapter/ports/channel-view.d.ts +137 -9
  323. package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
  324. package/lib/types/adapter/ports/channel.d.ts +1 -1
  325. package/lib/types/adapter/ports/channel.js +1 -1
  326. package/lib/types/adapter/ports/descriptor.d.ts +1 -1
  327. package/lib/types/adapter/ports/descriptor.js +1 -1
  328. package/lib/types/adapter/ports/index.d.ts +1 -1
  329. package/lib/types/adapter/ports/index.js +1 -1
  330. package/lib/types/adapter/ports/panels.d.ts +28 -0
  331. package/lib/types/adapter/ports/panels.d.ts.map +1 -0
  332. package/lib/types/adapter/ports/panels.js +8 -0
  333. package/lib/types/adapter/ports/workspace.d.ts +1 -1
  334. package/lib/types/adapter/ports/workspace.js +1 -1
  335. package/lib/types/adapter/spec/index.d.ts +2 -2
  336. package/lib/types/adapter/spec/index.js +2 -2
  337. package/lib/types/adapter/spec/profile.d.ts +6 -6
  338. package/lib/types/adapter/spec/profile.d.ts.map +1 -1
  339. package/lib/types/adapter/spec/profile.js +6 -6
  340. package/lib/types/adapter/spec/protocol-constants.d.ts +3 -3
  341. package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
  342. package/lib/types/adapter/spec/protocol-constants.js +5 -5
  343. package/lib/types/adapter/spec/tui-contributions.d.ts +4 -4
  344. package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
  345. package/lib/types/adapter/spec/tui-contributions.js +5 -5
  346. package/lib/types/adapter/standard/descriptor.js +1 -1
  347. package/lib/types/adapter/standard/index.d.ts +3 -3
  348. package/lib/types/adapter/standard/index.js +3 -3
  349. package/lib/types/adapter/standard/registry.d.ts +3 -2
  350. package/lib/types/adapter/standard/registry.d.ts.map +1 -1
  351. package/lib/types/adapter/standard/registry.js +6 -5
  352. package/lib/types/adapter/standard/tui-extension.d.ts +1 -1
  353. package/lib/types/adapter/standard/tui-extension.js +1 -1
  354. package/lib/types/adapter/upstream/index.d.ts +1 -0
  355. package/lib/types/adapter/upstream/index.d.ts.map +1 -1
  356. package/lib/types/adapter/upstream/index.js +1 -0
  357. package/lib/types/adapter/upstream/panels-driver.d.ts +18 -0
  358. package/lib/types/adapter/upstream/panels-driver.d.ts.map +1 -0
  359. package/lib/types/adapter/upstream/panels-driver.js +159 -0
  360. package/lib/types/api.d.ts +2 -0
  361. package/lib/types/api.d.ts.map +1 -1
  362. package/lib/types/api.js +3 -1
  363. package/lib/types/commands.d.ts.map +1 -1
  364. package/lib/types/commands.js +12 -4
  365. package/lib/types/components/ActivityLine.d.ts +6 -9
  366. package/lib/types/components/ActivityLine.d.ts.map +1 -1
  367. package/lib/types/components/ActivityLine.js +7 -8
  368. package/lib/types/components/Chat/JobCard.d.ts +27 -1
  369. package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
  370. package/lib/types/components/Chat/JobCard.js +128 -33
  371. package/lib/types/components/Chat/JobGroupHeader.d.ts +27 -0
  372. package/lib/types/components/Chat/JobGroupHeader.d.ts.map +1 -0
  373. package/lib/types/components/Chat/JobGroupHeader.js +62 -0
  374. package/lib/types/components/Chat/SubagentMessage.js +6 -6
  375. package/lib/types/components/GoalTodoPanel.d.ts +13 -1
  376. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
  377. package/lib/types/components/GoalTodoPanel.js +55 -14
  378. package/lib/types/components/JobsPanel.d.ts +42 -2
  379. package/lib/types/components/JobsPanel.d.ts.map +1 -1
  380. package/lib/types/components/JobsPanel.js +220 -40
  381. package/lib/types/components/LogoV2.d.ts +43 -3
  382. package/lib/types/components/LogoV2.d.ts.map +1 -1
  383. package/lib/types/components/LogoV2.js +42 -15
  384. package/lib/types/components/MessageList.d.ts +8 -2
  385. package/lib/types/components/MessageList.d.ts.map +1 -1
  386. package/lib/types/components/MessageList.js +215 -21
  387. package/lib/types/components/OverlayAbove.d.ts +11 -1
  388. package/lib/types/components/OverlayAbove.d.ts.map +1 -1
  389. package/lib/types/components/OverlayAbove.js +2 -12
  390. package/lib/types/components/PageMargin.d.ts.map +1 -1
  391. package/lib/types/components/PageMargin.js +3 -1
  392. package/lib/types/components/PluginSceneBoundary.d.ts +1 -1
  393. package/lib/types/components/PluginSceneBoundary.js +1 -1
  394. package/lib/types/components/PresetPicker.d.ts +4 -0
  395. package/lib/types/components/PresetPicker.d.ts.map +1 -1
  396. package/lib/types/components/PresetPicker.js +5 -1
  397. package/lib/types/components/PromptInput.d.ts +20 -22
  398. package/lib/types/components/PromptInput.d.ts.map +1 -1
  399. package/lib/types/components/PromptInput.js +425 -157
  400. package/lib/types/components/SearchBox.d.ts +22 -5
  401. package/lib/types/components/SearchBox.d.ts.map +1 -1
  402. package/lib/types/components/SearchBox.js +17 -13
  403. package/lib/types/components/StarPrompt.d.ts +6 -0
  404. package/lib/types/components/StarPrompt.d.ts.map +1 -1
  405. package/lib/types/components/StarPrompt.js +45 -0
  406. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  407. package/lib/types/components/SubagentCard.js +24 -9
  408. package/lib/types/components/SubagentDashboard.d.ts +18 -3
  409. package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
  410. package/lib/types/components/SubagentDashboard.js +53 -5
  411. package/lib/types/components/SubagentDetailScene.d.ts +7 -1
  412. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
  413. package/lib/types/components/SubagentDetailScene.js +160 -13
  414. package/lib/types/components/SurfaceEdges.d.ts +21 -0
  415. package/lib/types/components/SurfaceEdges.d.ts.map +1 -0
  416. package/lib/types/components/SurfaceEdges.js +7 -0
  417. package/lib/types/components/ThemePicker.d.ts +9 -0
  418. package/lib/types/components/ThemePicker.d.ts.map +1 -1
  419. package/lib/types/components/ThemePicker.js +74 -10
  420. package/lib/types/components/ThemePreviewPane.d.ts +26 -0
  421. package/lib/types/components/ThemePreviewPane.d.ts.map +1 -0
  422. package/lib/types/components/ThemePreviewPane.js +99 -0
  423. package/lib/types/components/WhaleGirl.d.ts +6 -0
  424. package/lib/types/components/WhaleGirl.d.ts.map +1 -1
  425. package/lib/types/components/WhaleGirl.js +18 -0
  426. package/lib/types/components/design-system/Divider.d.ts.map +1 -1
  427. package/lib/types/components/design-system/Divider.js +14 -9
  428. package/lib/types/components/launchpadActions.d.ts +73 -0
  429. package/lib/types/components/launchpadActions.d.ts.map +1 -0
  430. package/lib/types/components/launchpadActions.js +111 -0
  431. package/lib/types/components/launchpadLayout.d.ts +62 -0
  432. package/lib/types/components/launchpadLayout.d.ts.map +1 -0
  433. package/lib/types/components/launchpadLayout.js +176 -0
  434. package/lib/types/components/messages/AssistantThinkingMessage.js +4 -4
  435. package/lib/types/components/onboardingModel.d.ts +83 -0
  436. package/lib/types/components/onboardingModel.d.ts.map +1 -0
  437. package/lib/types/components/onboardingModel.js +128 -0
  438. package/lib/types/components/sidePanel/InfoPanel.d.ts +17 -0
  439. package/lib/types/components/sidePanel/InfoPanel.d.ts.map +1 -0
  440. package/lib/types/components/sidePanel/InfoPanel.js +124 -0
  441. package/lib/types/components/sidePanel/PanelBar.d.ts +45 -0
  442. package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -0
  443. package/lib/types/components/sidePanel/PanelBar.js +104 -0
  444. package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts +21 -0
  445. package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts.map +1 -0
  446. package/lib/types/components/sidePanel/PanelErrorBoundary.js +30 -0
  447. package/lib/types/components/sidePanel/PanelHost.d.ts +36 -0
  448. package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -0
  449. package/lib/types/components/sidePanel/PanelHost.js +81 -0
  450. package/lib/types/components/sidePanel/PanelPicker.d.ts +24 -0
  451. package/lib/types/components/sidePanel/PanelPicker.d.ts.map +1 -0
  452. package/lib/types/components/sidePanel/PanelPicker.js +45 -0
  453. package/lib/types/components/sidePanel/PanelStore.d.ts +55 -0
  454. package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -0
  455. package/lib/types/components/sidePanel/PanelStore.js +109 -0
  456. package/lib/types/components/sidePanel/SidePanelColumn.d.ts +31 -0
  457. package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -0
  458. package/lib/types/components/sidePanel/SidePanelColumn.js +70 -0
  459. package/lib/types/components/sidePanel/SidePanelLayout.d.ts +54 -0
  460. package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -0
  461. package/lib/types/components/sidePanel/SidePanelLayout.js +81 -0
  462. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +43 -0
  463. package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -0
  464. package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +26 -0
  465. package/lib/types/components/sidePanel/TrajectoryPanel.d.ts +7 -0
  466. package/lib/types/components/sidePanel/TrajectoryPanel.d.ts.map +1 -0
  467. package/lib/types/components/sidePanel/TrajectoryPanel.js +263 -0
  468. package/lib/types/components/sidePanel/WorkspacePanel.d.ts +4 -0
  469. package/lib/types/components/sidePanel/WorkspacePanel.d.ts.map +1 -0
  470. package/lib/types/components/sidePanel/WorkspacePanel.js +171 -0
  471. package/lib/types/components/sidePanel/builtinPanels.d.ts +3 -0
  472. package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -0
  473. package/lib/types/components/sidePanel/builtinPanels.js +229 -0
  474. package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts +53 -0
  475. package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts.map +1 -0
  476. package/lib/types/components/sidePanel/companion/CompanionPanel.js +528 -0
  477. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +32 -0
  478. package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -0
  479. package/lib/types/components/sidePanel/companion/SplashMascot.js +103 -0
  480. package/lib/types/components/sidePanel/companion/deepy.d.ts +75 -0
  481. package/lib/types/components/sidePanel/companion/deepy.d.ts.map +1 -0
  482. package/lib/types/components/sidePanel/companion/deepy.js +222 -0
  483. package/lib/types/components/sidePanel/companion/mood.d.ts +176 -0
  484. package/lib/types/components/sidePanel/companion/mood.d.ts.map +1 -0
  485. package/lib/types/components/sidePanel/companion/mood.js +212 -0
  486. package/lib/types/components/sidePanel/companion/pose.d.ts +43 -0
  487. package/lib/types/components/sidePanel/companion/pose.d.ts.map +1 -0
  488. package/lib/types/components/sidePanel/companion/pose.js +34 -0
  489. package/lib/types/components/sidePanel/companion/skins.d.ts +102 -0
  490. package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -0
  491. package/lib/types/components/sidePanel/companion/skins.js +408 -0
  492. package/lib/types/components/sidePanel/dimensions.d.ts +60 -0
  493. package/lib/types/components/sidePanel/dimensions.d.ts.map +1 -0
  494. package/lib/types/components/sidePanel/dimensions.js +75 -0
  495. package/lib/types/components/sidePanel/jobsFocusStore.d.ts +21 -0
  496. package/lib/types/components/sidePanel/jobsFocusStore.d.ts.map +1 -0
  497. package/lib/types/components/sidePanel/jobsFocusStore.js +30 -0
  498. package/lib/types/components/sidePanel/panelBridge.d.ts +44 -0
  499. package/lib/types/components/sidePanel/panelBridge.d.ts.map +1 -0
  500. package/lib/types/components/sidePanel/panelBridge.js +55 -0
  501. package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts +22 -0
  502. package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts.map +1 -0
  503. package/lib/types/components/sidePanel/pluginPanelAdapter.js +148 -0
  504. package/lib/types/components/sidePanel/types.d.ts +110 -0
  505. package/lib/types/components/sidePanel/types.d.ts.map +1 -0
  506. package/lib/types/components/sidePanel/types.js +1 -0
  507. package/lib/types/components/sidePanel/usePanelInput.d.ts +5 -0
  508. package/lib/types/components/sidePanel/usePanelInput.d.ts.map +1 -0
  509. package/lib/types/components/sidePanel/usePanelInput.js +44 -0
  510. package/lib/types/components/sidePanel/useSidePanel.d.ts +47 -0
  511. package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -0
  512. package/lib/types/components/sidePanel/useSidePanel.js +284 -0
  513. package/lib/types/components/trajectory/MiniWake.d.ts +11 -1
  514. package/lib/types/components/trajectory/MiniWake.d.ts.map +1 -1
  515. package/lib/types/components/trajectory/MiniWake.js +9 -3
  516. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
  517. package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
  518. package/lib/types/components/workspaces/HomeWorkspaceRow.js +3 -2
  519. package/lib/types/deepseekPricing.d.ts +10 -9
  520. package/lib/types/deepseekPricing.d.ts.map +1 -1
  521. package/lib/types/deepseekPricing.js +18 -11
  522. package/lib/types/dsh-adapter/channel/attached-context.d.ts +58 -0
  523. package/lib/types/dsh-adapter/channel/attached-context.d.ts.map +1 -0
  524. package/lib/types/dsh-adapter/channel/attached-context.js +109 -0
  525. package/lib/types/dsh-adapter/channel/binding-events.d.ts +6 -0
  526. package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
  527. package/lib/types/dsh-adapter/channel/binding-events.js +43 -0
  528. package/lib/types/dsh-adapter/channel/capabilities.d.ts +82 -0
  529. package/lib/types/dsh-adapter/channel/capabilities.d.ts.map +1 -0
  530. package/lib/types/dsh-adapter/channel/capabilities.js +165 -0
  531. package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
  532. package/lib/types/dsh-adapter/channel/command-completions.js +8 -0
  533. package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +4 -12
  534. package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -1
  535. package/lib/types/dsh-adapter/channel/context-bookkeeping.js +9 -4
  536. package/lib/types/dsh-adapter/channel/external-commands.d.ts.map +1 -1
  537. package/lib/types/dsh-adapter/channel/external-commands.js +8 -2
  538. package/lib/types/dsh-adapter/channel/input-delivery.d.ts +13 -2
  539. package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
  540. package/lib/types/dsh-adapter/channel/input-delivery.js +18 -1
  541. package/lib/types/dsh-adapter/channel/job-projection.d.ts +1 -0
  542. package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
  543. package/lib/types/dsh-adapter/channel/job-projection.js +88 -3
  544. package/lib/types/dsh-adapter/channel/mode-actions.d.ts +13 -3
  545. package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
  546. package/lib/types/dsh-adapter/channel/mode-actions.js +55 -9
  547. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +8 -1
  548. package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
  549. package/lib/types/dsh-adapter/channel/mode-permission-actions.js +25 -10
  550. package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
  551. package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
  552. package/lib/types/dsh-adapter/channel/preferences.js +26 -8
  553. package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
  554. package/lib/types/dsh-adapter/channel/projection.js +42 -37
  555. package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
  556. package/lib/types/dsh-adapter/channel/reports.js +13 -4
  557. package/lib/types/dsh-adapter/channel/session-reset.d.ts +5 -1
  558. package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
  559. package/lib/types/dsh-adapter/channel/session-reset.js +1 -0
  560. package/lib/types/dsh-adapter/channel/state.d.ts +21 -3
  561. package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
  562. package/lib/types/dsh-adapter/channel/state.js +3 -2
  563. package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
  564. package/lib/types/dsh-adapter/channel/subagent-projection.js +5 -0
  565. package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
  566. package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
  567. package/lib/types/dsh-adapter/channel/usage.d.ts +18 -1
  568. package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -1
  569. package/lib/types/dsh-adapter/channel/usage.js +97 -2
  570. package/lib/types/dsh-adapter/channel.d.ts +1 -1
  571. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  572. package/lib/types/dsh-adapter/channel.js +72 -4
  573. package/lib/types/dsh-adapter/context-occupancy.d.ts +204 -0
  574. package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -0
  575. package/lib/types/dsh-adapter/context-occupancy.js +299 -0
  576. package/lib/types/dsh-adapter/contract.d.ts +19 -4
  577. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  578. package/lib/types/dsh-adapter/contract.js +33 -3
  579. package/lib/types/dsh-adapter/index.d.ts +32 -0
  580. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  581. package/lib/types/dsh-adapter/index.js +20 -1
  582. package/lib/types/dsh-adapter/jobs.d.ts +82 -16
  583. package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
  584. package/lib/types/dsh-adapter/jobs.js +104 -9
  585. package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -1
  586. package/lib/types/dsh-adapter/migrate/sessionize.js +11 -12
  587. package/lib/types/dsh-adapter/oauth/bonus.d.ts +27 -0
  588. package/lib/types/dsh-adapter/oauth/bonus.d.ts.map +1 -0
  589. package/lib/types/dsh-adapter/oauth/bonus.js +69 -0
  590. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.d.ts +2 -1
  591. package/lib/types/dsh-adapter/oauth/command.d.ts.map +1 -0
  592. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.js +7 -4
  593. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.d.ts +13 -10
  594. package/lib/types/dsh-adapter/oauth/credentials.d.ts.map +1 -0
  595. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.js +61 -23
  596. package/lib/types/dsh-adapter/oauth/deepseek.d.ts +39 -0
  597. package/lib/types/dsh-adapter/oauth/deepseek.d.ts.map +1 -0
  598. package/lib/types/dsh-adapter/oauth/deepseek.js +189 -0
  599. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.d.ts +24 -16
  600. package/lib/types/dsh-adapter/oauth/index.d.ts.map +1 -0
  601. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.js +34 -20
  602. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/interaction.d.ts +14 -12
  603. package/lib/types/dsh-adapter/oauth/interaction.d.ts.map +1 -0
  604. package/lib/types/dsh-adapter/oauth/interaction.js +283 -0
  605. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.d.ts +2 -1
  606. package/lib/types/dsh-adapter/oauth/opener.d.ts.map +1 -0
  607. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.js +1 -1
  608. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.d.ts +10 -3
  609. package/lib/types/dsh-adapter/oauth/pi-ai.d.ts.map +1 -0
  610. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.js +8 -3
  611. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.d.ts +6 -3
  612. package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -0
  613. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.js +11 -3
  614. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.d.ts +14 -7
  615. package/lib/types/dsh-adapter/oauth/service.d.ts.map +1 -0
  616. package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.js +82 -17
  617. package/lib/types/dsh-adapter/panel-runtime-registry.d.ts +39 -0
  618. package/lib/types/dsh-adapter/panel-runtime-registry.d.ts.map +1 -0
  619. package/lib/types/dsh-adapter/panel-runtime-registry.js +84 -0
  620. package/lib/types/dsh-adapter/panels.d.ts +251 -0
  621. package/lib/types/dsh-adapter/panels.d.ts.map +1 -0
  622. package/lib/types/dsh-adapter/panels.js +407 -0
  623. package/lib/types/dsh-adapter/plugin-host.js +1 -1
  624. package/lib/types/dsh-adapter/plugin.d.ts +25 -2
  625. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  626. package/lib/types/dsh-adapter/plugin.js +241 -44
  627. package/lib/types/dsh-adapter/presets.d.ts +26 -4
  628. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  629. package/lib/types/dsh-adapter/presets.js +29 -5
  630. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  631. package/lib/types/dsh-adapter/providerWizard.js +6 -2
  632. package/lib/types/dsh-adapter/startup-args.d.ts +8 -0
  633. package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -0
  634. package/lib/types/dsh-adapter/startup-args.js +34 -0
  635. package/lib/types/dsh-adapter/subagents.d.ts +1 -0
  636. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
  637. package/lib/types/dsh-adapter/subagents.js +10 -1
  638. package/lib/types/history.d.ts +24 -7
  639. package/lib/types/history.d.ts.map +1 -1
  640. package/lib/types/history.js +77 -18
  641. package/lib/types/i18n.d.ts +908 -33
  642. package/lib/types/i18n.d.ts.map +1 -1
  643. package/lib/types/i18n.js +355 -17
  644. package/lib/types/ink/components/App.d.ts +14 -1
  645. package/lib/types/ink/components/App.d.ts.map +1 -1
  646. package/lib/types/ink/components/App.js +71 -61
  647. package/lib/types/ink/components/TerminalSizeContext.d.ts +7 -0
  648. package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -1
  649. package/lib/types/ink/hooks/use-input.d.ts +11 -0
  650. package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
  651. package/lib/types/ink/hooks/use-input.js +8 -2
  652. package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -1
  653. package/lib/types/ink/hooks/use-terminal-viewport.js +3 -1
  654. package/lib/types/ink/ink.d.ts +18 -0
  655. package/lib/types/ink/ink.d.ts.map +1 -1
  656. package/lib/types/ink/ink.js +51 -8
  657. package/lib/types/ink/output.d.ts +10 -1
  658. package/lib/types/ink/output.d.ts.map +1 -1
  659. package/lib/types/ink/output.js +3 -3
  660. package/lib/types/ink/parse-keypress.d.ts +71 -3
  661. package/lib/types/ink/parse-keypress.d.ts.map +1 -1
  662. package/lib/types/ink/parse-keypress.js +815 -133
  663. package/lib/types/ink/render-node-to-output.d.ts +1 -1
  664. package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
  665. package/lib/types/ink/render-node-to-output.js +37 -5
  666. package/lib/types/ink/screen.d.ts +26 -1
  667. package/lib/types/ink/screen.d.ts.map +1 -1
  668. package/lib/types/ink/screen.js +96 -1
  669. package/lib/types/ink/selection.d.ts +23 -1
  670. package/lib/types/ink/selection.d.ts.map +1 -1
  671. package/lib/types/ink/selection.js +102 -26
  672. package/lib/types/ink/sixel-codec.d.ts +11 -0
  673. package/lib/types/ink/sixel-codec.d.ts.map +1 -1
  674. package/lib/types/ink/sixel-codec.js +42 -8
  675. package/lib/types/ink/terminal-querier.d.ts +25 -0
  676. package/lib/types/ink/terminal-querier.d.ts.map +1 -1
  677. package/lib/types/ink/terminal-querier.js +42 -0
  678. package/lib/types/ink/update-overflow-guard.d.ts +24 -0
  679. package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
  680. package/lib/types/ink/update-overflow-guard.js +25 -3
  681. package/lib/types/math/renderer.d.ts +2 -0
  682. package/lib/types/math/renderer.d.ts.map +1 -1
  683. package/lib/types/math/renderer.js +4 -0
  684. package/lib/types/minimalUiMode.d.ts +19 -0
  685. package/lib/types/minimalUiMode.d.ts.map +1 -0
  686. package/lib/types/minimalUiMode.js +23 -0
  687. package/lib/types/oauth.d.ts +5 -10
  688. package/lib/types/oauth.d.ts.map +1 -1
  689. package/lib/types/oauth.js +5 -10
  690. package/lib/types/onboardingPrefs.d.ts +52 -0
  691. package/lib/types/onboardingPrefs.d.ts.map +1 -0
  692. package/lib/types/onboardingPrefs.js +107 -0
  693. package/lib/types/panels.d.ts +4 -0
  694. package/lib/types/panels.d.ts.map +1 -0
  695. package/lib/types/panels.js +4 -0
  696. package/lib/types/screens/Chat.d.ts +25 -1
  697. package/lib/types/screens/Chat.d.ts.map +1 -1
  698. package/lib/types/screens/Chat.js +1149 -302
  699. package/lib/types/screens/Launchpad.d.ts +194 -0
  700. package/lib/types/screens/Launchpad.d.ts.map +1 -0
  701. package/lib/types/screens/Launchpad.js +607 -0
  702. package/lib/types/screens/Onboarding.d.ts +37 -0
  703. package/lib/types/screens/Onboarding.d.ts.map +1 -0
  704. package/lib/types/screens/Onboarding.js +492 -0
  705. package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
  706. package/lib/types/screens/SessionSupervisor.js +18 -12
  707. package/lib/types/screens/StatusLine.d.ts +4 -0
  708. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  709. package/lib/types/screens/StatusLine.js +43 -25
  710. package/lib/types/screens/StatusMetrics.d.ts +22 -0
  711. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  712. package/lib/types/screens/StatusMetrics.js +20 -0
  713. package/lib/types/screens/chatOverlay.d.ts +18 -1
  714. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  715. package/lib/types/screens/chatOverlay.js +3 -0
  716. package/lib/types/screens/sessionSupervisor/model.d.ts +1 -2
  717. package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
  718. package/lib/types/screens/sessionSupervisor/model.js +4 -2
  719. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
  720. package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +7 -3
  721. package/lib/types/settings/definitions.d.ts +93 -0
  722. package/lib/types/settings/definitions.d.ts.map +1 -1
  723. package/lib/types/settings/definitions.js +87 -4
  724. package/lib/types/tips.d.ts.map +1 -1
  725. package/lib/types/tips.js +13 -7
  726. package/lib/types/tuiDisplayPrefs.d.ts +42 -2
  727. package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
  728. package/lib/types/tuiDisplayPrefs.js +74 -0
  729. package/lib/types/update.d.ts +53 -9
  730. package/lib/types/update.d.ts.map +1 -1
  731. package/lib/types/update.js +103 -46
  732. package/lib/types/utils/bmp.d.ts.map +1 -1
  733. package/lib/types/utils/bmp.js +8 -1
  734. package/lib/types/utils/clipboard.d.ts.map +1 -1
  735. package/lib/types/utils/clipboard.js +25 -6
  736. package/lib/types/utils/credentials.d.ts.map +1 -1
  737. package/lib/types/utils/credentials.js +5 -1
  738. package/lib/types/utils/draftWordBoundary.d.ts +23 -0
  739. package/lib/types/utils/draftWordBoundary.d.ts.map +1 -0
  740. package/lib/types/utils/draftWordBoundary.js +161 -0
  741. package/lib/types/utils/fileTarget.d.ts.map +1 -1
  742. package/lib/types/utils/fileTarget.js +7 -9
  743. package/lib/types/utils/inputPaste.d.ts +62 -0
  744. package/lib/types/utils/inputPaste.d.ts.map +1 -0
  745. package/lib/types/utils/inputPaste.js +111 -0
  746. package/lib/types/utils/intl.d.ts +8 -0
  747. package/lib/types/utils/intl.d.ts.map +1 -1
  748. package/lib/types/utils/intl.js +11 -0
  749. package/lib/types/utils/keymap.d.ts +13 -3
  750. package/lib/types/utils/keymap.d.ts.map +1 -1
  751. package/lib/types/utils/keymap.js +27 -5
  752. package/lib/types/utils/pastedImagePath.d.ts +8 -0
  753. package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
  754. package/lib/types/utils/pastedImagePath.js +29 -5
  755. package/package.json +128 -106
  756. package/presets/liangshen/agent.cordis.yml +4 -1
  757. package/presets/liangshen/preset.yml +1 -1
  758. package/{dsh-ecosystem-spec → tui-profile}/registry/README.md +1 -1
  759. package/{dsh-ecosystem-spec → tui-profile}/registry/registry-0.15.json +1 -1
  760. package/lib/types/minimalMode.d.ts +0 -13
  761. package/lib/types/minimalMode.d.ts.map +0 -1
  762. package/lib/types/minimalMode.js +0 -17
  763. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +0 -21
  764. package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +0 -143
  765. package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +0 -11
  766. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +0 -44
  767. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +0 -193
  768. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +0 -69
  769. /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.d.ts +0 -0
  770. /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.js +0 -0
  771. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.d.ts +0 -0
  772. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.js +0 -0
  773. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.d.ts +0 -0
  774. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.js +0 -0
  775. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.d.ts +0 -0
  776. /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.js +0 -0
  777. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/decision-events-v1alpha1.json +0 -0
  778. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/scene-v1alpha1.json +0 -0
  779. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/settings-section-v1alpha1.json +0 -0
  780. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/tui-channel-v1alpha1.json +0 -0
  781. /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/workspace-provider-v1alpha1.json +0 -0
  782. /package/{dsh-ecosystem-spec → tui-profile}/registry/host-descriptor.tui.example.json +0 -0
  783. /package/{dsh-ecosystem-spec → tui-profile}/registry/permissions-0.1.json +0 -0
  784. /package/{dsh-ecosystem-spec → tui-profile}/schemas/conformance-claim.schema.json +0 -0
  785. /package/{dsh-ecosystem-spec → tui-profile}/schemas/effect-ledger-record.schema.json +0 -0
  786. /package/{dsh-ecosystem-spec → tui-profile}/schemas/host-descriptor.schema.json +0 -0
@@ -0,0 +1,528 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * CompanionPanel(设计分文档 §4 + v2.1 + 2026-10 沉底/互动/气泡改造):
4
+ *
5
+ * 信号 ─▶ mood.ts 的派生 + 平滑层(防闪烁五规则)─▶ 显示语义
6
+ * ─▶ deepy 动画键(20 个全接上)─▶ 半块渲染(42×15)
7
+ *
8
+ * 布局(沉底):宠物锚定在面板最底部(贴着 SidePanelColumn 底部 hint 行
9
+ * 上方),腾出的上方空间放一个克制的状态区:心情 + 会话/工具统计行、
10
+ * 「当前动作」行(kit 自带中文 title,不走 i18n)、互动提示行。
11
+ * 宽度分三档:<44 列紧凑(不画皮肤,只留紧凑行);连紧凑形态都摆不下
12
+ * (< PANEL_MIN_COLUMNS,分栏几何的列宽下限)只留一条居中的「好挤呀,
13
+ * 暂时躲起来了」标语(companion-cramped,{{name}}=皮肤 title;皮肤无关,
14
+ * 判定在面板层)。
15
+ *
16
+ * 互动(鼠标):
17
+ * - 点击宠物左半/右半 → poke-left / poke-right(ClickEvent.localCol),
18
+ * 保留爱心 pass(whale 回退皮肤的 pose.heart);
19
+ * - TICKLE_WINDOW_MS 内 ≥3 次点击 → tickle,窗口结束回平滑情绪;
20
+ * - 按住拖动(onDragStart/Move/End)→ drag 动画 + **真拖动**:本体跟着
21
+ * 指针在面板内容区内移动(clamp 在面板盒内,可以窜到状态区文字上面
22
+ * ——调皮是特性),松手后 PET_REBOUND_MS 内插值弹回底部 home。位移是
23
+ * 面板层状态(两套皮肤共用),皮肤输出不动:水平=行内定宽 spacer
24
+ * (左 spacer + 宠物 + 右 spacer 恒等于面板宽,§16.6 列宽不变式天然
25
+ * 成立),垂直=定高 home 槽行内负 marginTop(溢出可见)——刻意不用
26
+ * position:absolute:图像版皮肤的可见性门与渲染路径要求宠物留在流内;
27
+ * - 指针进面板(near/左/右)→ idle-look(东张西望);碰到宠物本体 →
28
+ * idle-spout(开心喷水);睡眠中被碰到 → waking(官方 trigger)。
29
+ * 鼠标契约:点击/拖拽 stopImmediatePropagation,hover 离开面板即复原。
30
+ *
31
+ * 通知气泡:channel.notifications(最新在最后)的新条目由宠物用圆角对话
32
+ * 气泡说出来(面板内的**加一层**表达;输入框上方的 toast 照旧,不动)。
33
+ * 颜色配反应动画:error→error、success→happy、warning→notification、
34
+ * 无色→idle-look。visible=false 期间清空队列,切回来不弹旧账。
35
+ *
36
+ * 活动自述气泡:working 回合里聊天区 ⏵ 工作行(ActivityLine)的那句
37
+ * 模型自述,由头顶气泡**逐字同步转述**(同一数据源 runtimeCtx.activity
38
+ * 的 line 字段,不自行派生;判定条件与 Chat 相同:working 且 line 非空
39
+ * 且 phase≠idle)。派生值、随渲染实时换词,无进出场可重触发;瞬态气泡
40
+ * (通知/戳一戳)有效期内盖过它,到期仍在 working 则回落。回合结束
41
+ * (working=false)即收起——庆祝动画走 mood 层,与此无关。拖动会话
42
+ * (含回弹)期间两层气泡都抑制,落定后恢复(气泡不跟宠物走:孤零零
43
+ * 留在 home 上方出戏,选抑制)。
44
+ *
45
+ * 时钟:visible=false 零订阅(useAnimationFrame 传 null)+ 零自有定时器;
46
+ * 可见时由 160ms(睡眠 1000ms)的本地 tick 驱动动画帧与气泡/互动过期——
47
+ * PanelHost 内 useAnimationFrame 因视口测量问题不订阅(见
48
+ * verify-companion-panel.tsx 文件头的既有 finding),本地 tick 是等价替代。
49
+ */
50
+ import React from 'react';
51
+ import { Box, Text, useAnimationFrame } from '../../../ui.js';
52
+ import instances from '../../../ink/instances.js';
53
+ import { t } from '../../../i18n.js';
54
+ import wrapText from '../../../ink/wrap-text.js';
55
+ import { truncateWidth } from '../../../trajectory/format.js';
56
+ import { panelStore } from '../PanelStore.js';
57
+ import { PANEL_MIN_COLUMNS } from '../dimensions.js';
58
+ import { getCompanionSkin, subscribeCompanionSkin } from '../../../tuiDisplayPrefs.js';
59
+ import { useSidePanelChannel, SidePanelRuntimeContext } from '../SidePanelRuntimeContext.js';
60
+ import { usePanelInput } from '../usePanelInput.js';
61
+ import { CARRYING_FLASH_MS, CELEBRATE_DWELL_MS, IDLE_ROTATE_MS, NOTIFICATION_BUBBLE_MS, POKE_MS, TICKLE_MIN_CLICKS, TICKLE_WINDOW_MS, WAKING_FLASH_MS, countRunningJobs, countRunningSubagents, countSessionsRunning, createNotificationTracker, deriveCompanionContext, deriveCompanionMood, idleRotationIndex, initialCompanionDisplayState, notificationReactionKind, resolveTargetSemantic, stepCompanionDisplay, stepNotificationTracker, } from './mood.js';
62
+ import { initialCompanionPoseState, nextCompanionPoseStep } from './pose.js';
63
+ import { DeepySkin, resolveCompanionSkin } from './skins.js';
64
+ import { DEEPY_IDLE_ROTATION, DEEPY_NOTIFICATION_REACTION, deepyAnimationFor, frameAt, loadDeepyKit, renderedDeepyAnimation, } from './deepy.js';
65
+ /** 入睡延迟:Panel 常驻,沿用分文档的 60s(开屏 splash 保持 10s)。 */
66
+ const SLEEP_AFTER_MS = 60_000;
67
+ /** 单次 poke 反应的展示时长(poke-left/poke-right 帧表一轮 2100ms,取一轮多的头段)。 */
68
+ const POKE_REACTION_MS = 1400;
69
+ /** Enter 键戳一戳用的反应档。 */
70
+ const ENTER_POKE_SIDE = 'poke-right';
71
+ /** 气泡最多展示的文本行数(超出按 truncateWidth 截断)。 */
72
+ const BUBBLE_MAX_LINES = 3;
73
+ /** 松手弹回的插值时长(约两个动画 tick;无弹簧物理,克制优先)。 */
74
+ const PET_REBOUND_MS = 360;
75
+ /** 本地动画 tick:PanelHost 内 useAnimationFrame 不订阅(既有 finding),由它代位。 */
76
+ const TICK_MS = 160;
77
+ const TICK_MS_SLEEPING = 1000;
78
+ const MOOD_LABEL_KEY = {
79
+ sleeping: 'companion-mood-sleeping',
80
+ idle: 'companion-mood-idle',
81
+ waiting: 'companion-mood-waiting',
82
+ thinking: 'companion-mood-thinking',
83
+ working: 'companion-mood-working',
84
+ responding: 'companion-mood-responding',
85
+ attention: 'companion-mood-attention',
86
+ celebrate: 'companion-mood-celebrate',
87
+ error: 'companion-mood-error',
88
+ };
89
+ /** 显示语义 → 心情(pose/标签用;whale 皮肤的分层姿态与心情标签同源)。 */
90
+ const SEMANTIC_MOOD = {
91
+ thinking: 'thinking',
92
+ typing: 'working',
93
+ notification: 'attention',
94
+ error: 'error',
95
+ happy: 'celebrate',
96
+ sleeping: 'sleeping',
97
+ idle: 'idle',
98
+ music: 'working',
99
+ conducting: 'working',
100
+ building: 'working',
101
+ compacting: 'working',
102
+ };
103
+ const MOOD_COLOR = {
104
+ sleeping: 'inactive',
105
+ idle: 'accent',
106
+ waiting: 'accent',
107
+ thinking: 'accent',
108
+ working: 'accent',
109
+ responding: 'accent',
110
+ attention: 'warning',
111
+ celebrate: 'success',
112
+ error: 'error',
113
+ };
114
+ const BUBBLE_COLOR = {
115
+ error: 'error',
116
+ warning: 'warning',
117
+ success: 'success',
118
+ };
119
+ function formatElapsed(ms) {
120
+ const seconds = Math.max(0, Math.floor(ms / 1000));
121
+ if (seconds < 60)
122
+ return seconds + 's';
123
+ return Math.floor(seconds / 60) + 'm' + (seconds % 60) + 's';
124
+ }
125
+ function hoverSemantic(zone) {
126
+ if (zone === 'pet')
127
+ return 'notice';
128
+ if (zone === 'near' || zone === 'left' || zone === 'right')
129
+ return 'look';
130
+ return undefined;
131
+ }
132
+ export function CompanionPanel({ width, height, focused, visible }) {
133
+ const channel = useSidePanelChannel();
134
+ const runtimeCtx = React.useContext(SidePanelRuntimeContext);
135
+ const activity = runtimeCtx?.activity;
136
+ const attentionCtx = runtimeCtx?.attention;
137
+ const jobsBadge = React.useSyncExternalStore(panelStore.subscribe, () => panelStore.get('jobs')?.badge ?? null);
138
+ const jobsFailedUnread = jobsBadge !== null && jobsBadge.level === 'error' ? jobsBadge.unread : 0;
139
+ const subagents = channel.subagents ?? [];
140
+ const backgroundJobs = channel.backgroundJobs ?? [];
141
+ const failedSubagents = subagents.filter(s => s.status === 'failed').length;
142
+ // 本地重渲染驱动(互动/气泡/动画帧都要在事件之外推进)。
143
+ const [, setBump] = React.useState(0);
144
+ const bump = React.useCallback(() => { setBump(n => n + 1); }, []);
145
+ // 活动 = 任何会话动静 + 面板交互;睡眠由这个时钟驱动(60s 无活动)。
146
+ const lastInputAtRef = React.useRef(Date.now());
147
+ React.useEffect(() => {
148
+ lastInputAtRef.current = Date.now();
149
+ }, [channel.version]);
150
+ // 回合完成(working true→false)触发一次庆祝(happy 只在边沿 armed)。
151
+ const [celebrateUntil, setCelebrateUntil] = React.useState(0);
152
+ const prevWorkingRef = React.useRef(channel.working);
153
+ React.useEffect(() => {
154
+ const was = prevWorkingRef.current;
155
+ prevWorkingRef.current = channel.working;
156
+ if (was && !channel.working)
157
+ setCelebrateUntil(Date.now() + CELEBRATE_DWELL_MS);
158
+ }, [channel.working]);
159
+ // --- 覆盖层(互动/反应)与气泡:渲染期 ref 步进,过期由本地 tick 收 ----
160
+ const overrideRef = React.useRef(undefined);
161
+ const bubbleRef = React.useRef(undefined);
162
+ const notifyTrackerRef = React.useRef(null);
163
+ if (notifyTrackerRef.current === null)
164
+ notifyTrackerRef.current = createNotificationTracker();
165
+ const clicksRef = React.useRef([]);
166
+ const carryRef = React.useRef({ branch: undefined, until: 0 });
167
+ const heartPendingRef = React.useRef(false);
168
+ // 真拖动位移(面板层状态,两套皮肤共用):session 锚住拖起点的屏幕坐标
169
+ // 与宠物当时的面板内位置;dragPos 是当前跟手位置;flyback 是松手后的
170
+ // 时间插值弹回(渲染期按 now 推进,本地 tick 驱动重渲染)。
171
+ const dragSessionRef = React.useRef(undefined);
172
+ const dragPosRef = React.useRef(undefined);
173
+ const flybackRef = React.useRef(undefined);
174
+ const [hoverState, setHoverState] = React.useState(undefined);
175
+ const now = Date.now();
176
+ // 恢复可见的第一帧:语义跳闸对齐 + 通知积压静默吞掉。
177
+ const prevVisibleRef = React.useRef(visible);
178
+ const realignPending = visible && !prevVisibleRef.current;
179
+ prevVisibleRef.current = visible;
180
+ // 通知观察:新条目(比已见的更新)→ 气泡 + 反应动画;不可见或刚恢复
181
+ // 可见(realign)的那一帧只记账不弹——切回来不弹旧账。
182
+ const newestNotify = stepNotificationTracker(notifyTrackerRef.current, channel.notifications ?? [], { silent: !visible || realignPending });
183
+ if (newestNotify !== undefined && visible) {
184
+ const reaction = notificationReactionKind(newestNotify.color);
185
+ overrideRef.current = {
186
+ semantic: DEEPY_NOTIFICATION_REACTION[reaction] ?? 'idle-look',
187
+ since: now,
188
+ until: now + NOTIFICATION_BUBBLE_MS,
189
+ };
190
+ bubbleRef.current = { text: newestNotify.text, color: newestNotify.color, kind: 'notify', until: now + NOTIFICATION_BUBBLE_MS };
191
+ }
192
+ if (!visible) {
193
+ // 面板非 active:清空覆盖层与气泡(切回来不弹旧账);语义在 realign 对齐。
194
+ overrideRef.current = undefined;
195
+ bubbleRef.current = undefined;
196
+ clicksRef.current = [];
197
+ dragSessionRef.current = undefined;
198
+ dragPosRef.current = undefined;
199
+ flybackRef.current = undefined;
200
+ }
201
+ // --- 派生(纯)→ 目标语义 → 平滑层 --------------------------------------
202
+ const derived = deriveCompanionMood({
203
+ working: channel.working,
204
+ spinnerMode: channel.spinnerMode,
205
+ activity,
206
+ attention: {
207
+ approvalPending: (attentionCtx?.approvals ?? 0) > 0,
208
+ questionPending: (attentionCtx?.questions ?? 0) > 0,
209
+ },
210
+ failures: { failedJobsUnread: jobsFailedUnread, failedSubagents },
211
+ lastInputAt: lastInputAtRef.current,
212
+ celebration: celebrateUntil > now ? { kind: 'turn-done', until: celebrateUntil } : undefined,
213
+ sleepAfterMs: SLEEP_AFTER_MS,
214
+ }, now);
215
+ const context = deriveCompanionContext({
216
+ working: channel.working,
217
+ subagents,
218
+ backgroundJobs,
219
+ compaction: channel.compaction,
220
+ });
221
+ const targetSemantic = resolveTargetSemantic(derived.mood, context);
222
+ // carrying(顶箱子):gitBranch 变更是「新建/切换分支-工作树」在 channel
223
+ // 上唯一的可见信号,变更时闪现一次。
224
+ const gitBranch = channel.gitBranch;
225
+ if (gitBranch !== undefined) {
226
+ if (carryRef.current.branch === undefined || carryRef.current.branch !== gitBranch) {
227
+ const changed = carryRef.current.branch !== undefined && carryRef.current.until <= now;
228
+ carryRef.current = { branch: gitBranch, until: changed ? now + CARRYING_FLASH_MS : carryRef.current.until };
229
+ if (changed && visible) {
230
+ overrideRef.current = { semantic: 'carrying', since: now, until: now + CARRYING_FLASH_MS };
231
+ }
232
+ }
233
+ }
234
+ const displayRef = React.useRef(initialCompanionDisplayState);
235
+ displayRef.current = stepCompanionDisplay(displayRef.current, targetSemantic, now, { realign: realignPending });
236
+ const display = displayRef.current;
237
+ // 醒来闪现:显示语义刚离开 sleeping → waking(官方 trigger:睡眠中被扰)。
238
+ const prevSemanticRef = React.useRef(initialCompanionDisplayState.semantic);
239
+ if (prevSemanticRef.current === 'sleeping' && display.semantic !== 'sleeping'
240
+ && (overrideRef.current === undefined || overrideRef.current.until <= now)) {
241
+ overrideRef.current = { semantic: 'waking', since: now, until: now + WAKING_FLASH_MS };
242
+ }
243
+ prevSemanticRef.current = display.semantic;
244
+ const activeOverride = overrideRef.current !== undefined && overrideRef.current.until > now ? overrideRef.current : undefined;
245
+ // --- 最终动画键(互动覆盖 > 悬停 > idle 轮换 > 平滑语义)-----------------
246
+ const hover = hoverState !== undefined && visible ? hoverState : undefined;
247
+ let animationSemantic;
248
+ let animSince;
249
+ if (activeOverride !== undefined) {
250
+ animationSemantic = activeOverride.semantic;
251
+ animSince = activeOverride.since;
252
+ }
253
+ else if (display.semantic === 'idle') {
254
+ const hoverSem = hoverSemantic(hover?.zone);
255
+ if (hoverSem !== undefined) {
256
+ animationSemantic = hoverSem;
257
+ animSince = hover?.since ?? now;
258
+ }
259
+ else {
260
+ const index = idleRotationIndex(display.since, now, DEEPY_IDLE_ROTATION.length);
261
+ animationSemantic = DEEPY_IDLE_ROTATION[index] ?? 'idle';
262
+ animSince = display.since + Math.max(0, Math.floor((now - display.since) / IDLE_ROTATE_MS)) * IDLE_ROTATE_MS;
263
+ }
264
+ }
265
+ else {
266
+ animationSemantic = display.semantic;
267
+ animSince = display.since;
268
+ }
269
+ const animationKey = deepyAnimationFor(animationSemantic);
270
+ // 时钟(v2.1 契约保持):visible=false 零订阅;本地 tick 代位驱动帧。
271
+ const [clockRef] = useAnimationFrame(!visible ? null : display.semantic === 'sleeping' ? 1000 : 120);
272
+ const tickMs = !visible
273
+ ? 0
274
+ : display.semantic === 'sleeping' && activeOverride === undefined && hover === undefined
275
+ ? TICK_MS_SLEEPING
276
+ : TICK_MS;
277
+ React.useEffect(() => {
278
+ if (tickMs <= 0)
279
+ return undefined;
280
+ const id = setInterval(() => setBump(n => n + 1), tickMs);
281
+ return () => { clearInterval(id); };
282
+ }, [tickMs]);
283
+ // --- 皮肤与帧 -------------------------------------------------------------
284
+ const skinId = React.useSyncExternalStore(subscribeCompanionSkin, getCompanionSkin);
285
+ const skin = resolveCompanionSkin(skinId);
286
+ const useDeepy = skinId === DeepySkin.id;
287
+ const kit = useDeepy ? loadDeepyKit() : undefined;
288
+ const rendered = kit !== undefined ? renderedDeepyAnimation(kit, animationKey) : undefined;
289
+ const animation = kit?.byKey[animationKey];
290
+ const petColumns = skin.cells.columns;
291
+ const compact = width < petColumns + 2;
292
+ const deepyRows = useDeepy && rendered !== undefined && animation !== undefined
293
+ ? (rendered[frameAt(animation, Math.max(0, now - animSince))] ?? [])
294
+ : undefined;
295
+ // --- 宠物位移(面板层):home 几何 + 拖动/弹回放置 ------------------------
296
+ // home = 面板内容盒的底部居中(与原沉底布局同一几何:居中列 + 底行)。
297
+ const petRows = skin.cells.rows;
298
+ const homeLeft = Math.max(0, Math.floor((width - petColumns) / 2));
299
+ const homeTop = Math.max(0, height - petRows);
300
+ const maxLeft = Math.max(0, width - petColumns);
301
+ const maxTop = Math.max(0, height - petRows);
302
+ const clampPet = (left, top) => ({
303
+ left: Math.min(Math.max(0, left), maxLeft),
304
+ top: Math.min(Math.max(0, top), maxTop),
305
+ });
306
+ // 放置优先级:拖动跟手 > 弹回插值 > home。弹回按墙钟确定性推进(渲染
307
+ // 期读 now,本地 tick 驱动重渲染;p>=1 即归位并清档)。petTop 以「距
308
+ // 面板顶的行数」表达,渲染时换算成 home 槽行内的负 marginTop(升起行数)。
309
+ let petLeft = homeLeft;
310
+ let petTop = homeTop;
311
+ if (flybackRef.current !== undefined) {
312
+ const progress = Math.min(1, (now - flybackRef.current.since) / PET_REBOUND_MS);
313
+ const ease = (1 - progress) * (1 - progress);
314
+ petLeft = Math.round(homeLeft + (flybackRef.current.fromLeft - homeLeft) * ease);
315
+ petTop = Math.round(homeTop + (flybackRef.current.fromTop - homeTop) * ease);
316
+ if (progress >= 1)
317
+ flybackRef.current = undefined;
318
+ }
319
+ if (dragPosRef.current !== undefined) {
320
+ petLeft = dragPosRef.current.left;
321
+ petTop = dragPosRef.current.top;
322
+ }
323
+ const petRise = maxTop - petTop;
324
+ // --- 残影防线:位移改位时作废上一帧的 blit 基线 --------------------------
325
+ // 宠物溢出行画压到流内兄弟(状态区/空隙/气泡)上时,差分渲染的两个前
326
+ // 提被打破:clean 节点的 blit 快路径会把 prevScreen 里宠物更早位置的像
327
+ // 素抄回模型(自污染),而移走方的 clear 只记 damage 不写内容——差分看
328
+ // 到 prev==next 就永不发修复,终端留下残影(用户实测:拖到面板中上部
329
+ // 留残影)。renderer 为这类「高覆盖物移动」提供的官方逃生口是
330
+ // App.invalidatePrevFrame():标记上一帧不可信,下一帧做全损伤差分、
331
+ // 逐格对照真实树重导出——被让出的格子作为变化正常发空格擦除。宠物在
332
+ // 悬空状态下每改一次位(拖动/回弹的一帧)就作废一次;归位的那一帧
333
+ //(rise>0→0 的最后让出)也作废。静止时零开销。
334
+ const ink = instances.get(process.stdout) ?? instances.values().next().value;
335
+ const petDisplaced = petRise > 0;
336
+ const petWasDisplacedRef = React.useRef(false);
337
+ React.useEffect(() => {
338
+ // effect 落在 commit 之后、下一帧之前——正好是两帧之间的窗口(渲染期
339
+ // 调用会被当帧 onRender 复位,等于没调)。悬空期间每次改位、以及归位
340
+ // 的那一次,都作废上一帧的 blit 基线。
341
+ if (petDisplaced || petWasDisplacedRef.current)
342
+ ink?.invalidatePrevFrame();
343
+ petWasDisplacedRef.current = petDisplaced;
344
+ }, [petLeft, petRise, petDisplaced, ink]);
345
+ const poseRef = React.useRef(initialCompanionPoseState(now));
346
+ const poseStep = nextCompanionPoseStep(poseRef.current, { mood: SEMANTIC_MOOD[display.semantic], heart: heartPendingRef.current }, now);
347
+ poseRef.current = poseStep.state;
348
+ heartPendingRef.current = false;
349
+ // --- 键盘:Enter 戳一戳(保留);'s' → Send to Chat(保留)---------------
350
+ const moodLabel = t(MOOD_LABEL_KEY[SEMANTIC_MOOD[display.semantic]]);
351
+ const runningSubagents = countRunningSubagents(subagents);
352
+ const runningJobs = countRunningJobs(backgroundJobs);
353
+ const sessionsRunning = countSessionsRunning(channel.working, runningSubagents, runningJobs);
354
+ const statsText = (() => {
355
+ if (runningSubagents > 0 || runningJobs > 0) {
356
+ const parts = [];
357
+ if (runningSubagents > 0)
358
+ parts.push(t('companion-stat-subagents', { n: runningSubagents }));
359
+ if (sessionsRunning > 1)
360
+ parts.push(t('companion-stat-sessions', { n: sessionsRunning }));
361
+ return parts.join(' · ');
362
+ }
363
+ if (activity !== undefined && channel.working && activity.phaseStartedAt > 0) {
364
+ const elapsed = formatElapsed(now - activity.phaseStartedAt);
365
+ return activity.toolCount > 0
366
+ ? t('companion-stats-working', { duration: elapsed, count: activity.toolCount })
367
+ : elapsed;
368
+ }
369
+ return moodLabel;
370
+ })();
371
+ usePanelInput((input, key) => {
372
+ if (key.return_ === true || input === '\r') {
373
+ const at = Date.now();
374
+ overrideRef.current = { semantic: ENTER_POKE_SIDE, since: at, until: at + POKE_REACTION_MS };
375
+ if (activity?.line !== undefined && activity.line !== '') {
376
+ bubbleRef.current = { text: activity.line, kind: 'poke', until: at + POKE_MS };
377
+ }
378
+ heartPendingRef.current = true;
379
+ lastInputAtRef.current = at;
380
+ bump();
381
+ return true;
382
+ }
383
+ if (input === 's') {
384
+ if (typeof channel.attachContext !== 'function')
385
+ return false;
386
+ const content = [
387
+ '宠物心情:' + moodLabel,
388
+ activity?.line !== undefined && activity.line !== '' ? '当前活动:' + activity.line : undefined,
389
+ '统计:' + statsText,
390
+ ].filter((line) => line !== undefined).join('\n');
391
+ channel.attachContext({ source: 'panel', sourceId: 'companion', title: t('companion-send-title'), content });
392
+ channel.notify(t('panel-sent-to-chat', { title: t('companion-send-title') }), { color: 'success' });
393
+ lastInputAtRef.current = Date.now();
394
+ return true;
395
+ }
396
+ return false;
397
+ }, { active: focused && visible });
398
+ // --- 鼠标互动 -------------------------------------------------------------
399
+ const registerClick = (side) => {
400
+ const at = Date.now();
401
+ lastInputAtRef.current = at;
402
+ heartPendingRef.current = true;
403
+ clicksRef.current = [...clicksRef.current.filter(ts => ts > at - TICKLE_WINDOW_MS), at];
404
+ overrideRef.current = clicksRef.current.length >= TICKLE_MIN_CLICKS
405
+ ? { semantic: 'tickle', since: at, until: at + TICKLE_WINDOW_MS }
406
+ : { semantic: side, since: at, until: at + POKE_REACTION_MS };
407
+ bump();
408
+ };
409
+ const onPetClick = (event) => {
410
+ event.stopImmediatePropagation();
411
+ registerClick(event.localCol < petColumns / 2 ? 'poke-left' : 'poke-right');
412
+ };
413
+ const onDragStart = (event) => {
414
+ event.stopImmediatePropagation();
415
+ const at = Date.now();
416
+ lastInputAtRef.current = at;
417
+ // 锚在当前显示位置(在家,或上一段弹回的中途被再次抓住)。
418
+ flybackRef.current = undefined;
419
+ const base = dragPosRef.current ?? { left: homeLeft, top: homeTop };
420
+ dragSessionRef.current = {
421
+ baseLeft: base.left,
422
+ baseTop: base.top,
423
+ startCol: event.startCol,
424
+ startRow: event.startRow,
425
+ };
426
+ dragPosRef.current = { left: base.left, top: base.top };
427
+ overrideRef.current = { semantic: 'drag', since: at, until: Number.POSITIVE_INFINITY };
428
+ bump();
429
+ };
430
+ const onDragMove = (event) => {
431
+ event.stopImmediatePropagation();
432
+ lastInputAtRef.current = Date.now();
433
+ const session = dragSessionRef.current;
434
+ if (session === undefined)
435
+ return;
436
+ // 位移 = 指针相对拖起点的位移(绝对坐标差,不依赖渲染帧的缓存矩形),
437
+ // clamp 在面板内容盒内——抓取点保持在指针下,本体不出面板。
438
+ dragPosRef.current = clampPet(session.baseLeft + (event.col - session.startCol), session.baseTop + (event.row - session.startRow));
439
+ bump();
440
+ };
441
+ const onDragEnd = (event) => {
442
+ event.stopImmediatePropagation();
443
+ const at = Date.now();
444
+ lastInputAtRef.current = at;
445
+ dragSessionRef.current = undefined;
446
+ const resting = dragPosRef.current;
447
+ dragPosRef.current = undefined;
448
+ // 有实际位移才弹回(≤1 格的抖动直接归位,克制优先)。
449
+ if (resting !== undefined && (Math.abs(resting.left - homeLeft) > 1 || Math.abs(resting.top - homeTop) > 1)) {
450
+ flybackRef.current = { fromLeft: resting.left, fromTop: resting.top, since: at };
451
+ }
452
+ if (overrideRef.current?.semantic === 'drag')
453
+ overrideRef.current = undefined;
454
+ bump();
455
+ };
456
+ const enterZone = (zone) => {
457
+ const at = Date.now();
458
+ if (zone === 'pet')
459
+ lastInputAtRef.current = at;
460
+ setHoverState(prev => {
461
+ if (prev?.zone === zone)
462
+ return prev;
463
+ // 同档(look)内换侧不重置动画;换档(look↔notice)重开一段。
464
+ const prevSem = hoverSemantic(prev?.zone);
465
+ const nextSem = hoverSemantic(zone);
466
+ return { zone, since: prevSem === nextSem && prev !== undefined ? prev.since : at };
467
+ });
468
+ bump();
469
+ };
470
+ const enterPanelDefault = () => {
471
+ // 只有当前没有更具体的分区时才落 'near'(链上子节点的 enter 先于根)。
472
+ setHoverState(prev => prev ?? { zone: 'near', since: Date.now() });
473
+ bump();
474
+ };
475
+ const leavePanel = () => {
476
+ setHoverState(undefined);
477
+ bump();
478
+ };
479
+ // --- 状态区文案 -----------------------------------------------------------
480
+ const phrase = derived.bubble?.replace(/^\s*[⏵▸]+\s*/u, '');
481
+ const animTitle = (deepyRows !== undefined ? kit?.byKey[animationKey]?.title : undefined) ?? skin.title ?? 'Deepy';
482
+ // --- 气泡(宠物上方;空间不足时让位给宠物本体)---------------------------
483
+ // 裁决:瞬态气泡(通知/Enter 戳,带 until 窗)> 活动自述(派生常驻层)。
484
+ // 活动自述读 runtimeCtx.activity.line——与聊天区 ⏵ 工作行(ActivityLine)
485
+ // 逐字同源;判定条件照 Chat.tsx 的渲染门:working 且 line 非空且
486
+ // phase≠idle。回合结束/面板隐藏时派生层自动消失;瞬态到期后回落。
487
+ // 拖动会话(按住跟手 + 360ms 回弹全程)抑制两层气泡:宠物被拎在半空,
488
+ // 气泡孤零零留在 home 上方既出戏又会被宠物本体遮住(用户实测反馈);
489
+ // 落定后自然恢复(用户实测诉求:要么跟着走要么不显示——选抑制,简单
490
+ // 可靠)。
491
+ const dragHold = dragSessionRef.current !== undefined || flybackRef.current !== undefined;
492
+ const transientBubble = bubbleRef.current !== undefined && bubbleRef.current.until > now && visible && !dragHold ? bubbleRef.current : undefined;
493
+ const activityNarration = visible && channel.working && activity !== undefined
494
+ && activity.line !== '' && activity.phase !== 'idle' && !dragHold ? activity.line : undefined;
495
+ const bubble = transientBubble !== undefined
496
+ ? transientBubble
497
+ : activityNarration !== undefined
498
+ ? { text: activityNarration, kind: 'poke', until: Number.POSITIVE_INFINITY }
499
+ : undefined;
500
+ const statusRows = 1 /*paddingTop*/ + 3 + (phrase !== undefined && phrase !== '' ? 1 : 0);
501
+ const bubbleRoom = Math.max(0, height - statusRows - skin.cells.rows);
502
+ const bubbleLines = bubbleRoom >= BUBBLE_MAX_LINES + 2
503
+ ? BUBBLE_MAX_LINES
504
+ : bubbleRoom >= 3 ? bubbleRoom - 2 : 0;
505
+ let bubbleNode = null;
506
+ if (bubble !== undefined && bubbleLines > 0 && !compact) {
507
+ const inner = Math.max(4, width - 4);
508
+ const wrapped = wrapText(bubble.text, inner, 'wrap').split('\n');
509
+ const shown = wrapped.length > bubbleLines
510
+ ? [...wrapped.slice(0, bubbleLines - 1), truncateWidth(wrapped[bubbleLines - 1] + '…', inner)]
511
+ : wrapped;
512
+ bubbleNode = (_jsx(Box, { flexDirection: "column", flexShrink: 0, alignSelf: "center", borderStyle: "round", paddingX: 1, borderColor: bubble.kind === 'poke' ? 'accent' : BUBBLE_COLOR[bubble.color ?? ''] ?? 'accent', children: shown.map((line, index) => (_jsx(Text, { wrap: "truncate-end", color: BUBBLE_COLOR[bubble.color ?? ''], children: line }, index))) }));
513
+ }
514
+ // 连紧凑形态都摆不下(紧凑阈值体系的地板 = PANEL_MIN_COLUMNS,分栏
515
+ // 几何的列宽下限):不硬塞——宠物本体与紧凑行都不渲染,只留一条居中
516
+ // 标语;对列宽的需求不变(§16.6)。
517
+ if (width < PANEL_MIN_COLUMNS) {
518
+ return (_jsx(Box, { ref: clockRef, flexDirection: "column", flexGrow: 1, overflow: "hidden", alignItems: "center", justifyContent: "center", paddingX: 1, children: _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: "accent", children: '♥ ' }), _jsx(Text, { dimColor: true, children: t('companion-cramped', { name: skin.title ?? 'Deepy' }) })] }) }));
519
+ }
520
+ if (compact) {
521
+ // 窄栏 compact:心情图标 + 气泡/统计,不画皮肤(永不超宽,§16.6)。
522
+ return (_jsx(Box, { ref: clockRef, flexDirection: "column", flexGrow: 1, overflow: "hidden", children: _jsxs(Box, { flexDirection: "column", paddingX: 1, paddingTop: 1, children: [_jsx(Box, { height: 1, flexShrink: 0, children: _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: "accent", children: '♥ ' }), _jsx(Text, { dimColor: true, children: moodLabel }), channel.working && _jsxs(Text, { dimColor: true, children: [' · ', statsText] })] }) }), phrase !== undefined && phrase !== '' && (_jsx(Box, { height: 1, flexShrink: 0, children: _jsxs(Text, { dimColor: true, wrap: "truncate-end", children: ['⏵ ', phrase] }) })), _jsx(Box, { height: 1, flexShrink: 0, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: t('companion-hint') }) })] }) }));
523
+ }
524
+ return (_jsxs(Box, { ref: clockRef, flexDirection: "column", flexGrow: 1, overflow: "hidden", onMouseEnter: enterPanelDefault, onMouseLeave: leavePanel, children: [_jsxs(Box, { flexDirection: "column", flexShrink: 0, paddingX: 1, paddingTop: 1, onMouseEnter: () => enterZone('near'), children: [_jsx(Box, { height: 1, flexShrink: 0, children: _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: MOOD_COLOR[SEMANTIC_MOOD[display.semantic]], children: '● ' }), _jsx(Text, { children: moodLabel }), statsText !== moodLabel && _jsxs(Text, { dimColor: true, children: [' · ', statsText] })] }) }), phrase !== undefined && phrase !== '' && (_jsx(Box, { height: 1, flexShrink: 0, children: _jsxs(Text, { dimColor: true, wrap: "truncate-end", children: ['⏵ ', phrase] }) })), _jsx(Box, { height: 1, flexShrink: 0, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: t('companion-now-playing', { anim: animTitle }) }) }), _jsx(Box, { height: 1, flexShrink: 0, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: t('companion-hint') }) })] }), _jsx(Box, { flexGrow: 1, flexShrink: 1, minHeight: 0, onMouseEnter: () => enterZone('near') }), bubbleNode, _jsxs(Box, { flexDirection: "row", flexShrink: 0, height: petRows, children: [_jsx(Box, { width: petLeft, flexShrink: 0, onMouseEnter: () => enterZone('left') }), _jsx(Box, { width: petColumns, height: petRows, marginTop: -petRise, flexShrink: 0, flexDirection: "column", alignItems: "center", onClick: onPetClick, onDragStart: onDragStart, onDragMove: onDragMove, onDragEnd: onDragEnd, onMouseEnter: () => enterZone('pet'), children: deepyRows !== undefined
525
+ ? deepyRows.map((row, index) => _jsx(Text, { wrap: "truncate-end", children: row }, index))
526
+ : skin.render({ pose: poseStep.pose, moodSince: animSince, now, width: petColumns, animationSemantic: animationKey }) }), _jsx(Box, { width: Math.max(0, width - petColumns - petLeft), flexShrink: 0, onMouseEnter: () => enterZone('right') })] })] }));
527
+ }
528
+ export const COMPANION_SKIN_DEFAULT = DeepySkin.id;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 启动页吉祥物(LogoV2 艺术槽,2026-10 复用轮)。
3
+ *
4
+ * 吉祥物跟随 companion.skin:deepy → 字母格动画;whaleGirl → 鲸娘动画
5
+ * (经 WhaleGirlSkin 内部的图像协议自适应:kitty/sixel 走 img/ 帧管线,
6
+ * 无协议回退字母格帧包——首帧字母格同步可画,图像异步解码完成后替换,
7
+ * 绝不让启动帧等 IO)。whale 皮肤不进本组件(LogoV2 维持原分层鲸路径)。
8
+ *
9
+ * 动画/互动语义与侧栏宠物同源(零复制),但按 2026-10 用户拍板收窄:
10
+ * 启动页是瞬时门面——**不做空闲轮换**,稳态恒播单一 idle 动画(循环);
11
+ * 点击 = poke(左/右半判定,播 poke-left/right 头段;鲸娘在 poke 后接一段
12
+ * smile-hearts 爱心——同面板「亲昵互动」语义,deepy 帧包无爱心键故只 poke);
13
+ * 连点 = 900ms 内 ≥3 次触发 tickle(复用 mood.ts 的 TICKLE_WINDOW_MS/
14
+ * TICKLE_MIN_CLICKS 判定);播完自然回稳态 idle。不做拖拽。
15
+ * active=false(第一个任务后冻结,照鲸鱼的 whaleFrozen 契约)或卸载后零
16
+ * 时钟:定格 idle 帧 0,interval 清空。
17
+ *
18
+ * 欢迎语/求星标语不在本组件——按 2026-10 用户拍板保持原「艺术下方居中」
19
+ * 渲染路径(LogoV2 底部块,welcomePad 缩进)。
20
+ */
21
+ import React from 'react';
22
+ export type SplashMascotSkin = 'deepy' | 'whaleGirl';
23
+ /** 读 companion.skin(LogoV2 的测试缝 prop 优先);非吉祥物皮肤返回
24
+ * undefined(LogoV2 走原鲸鱼/女仆娘路径,零改动)。 */
25
+ export declare function useSplashMascotSkin(pinned?: string): SplashMascotSkin | undefined;
26
+ /** 启动页吉祥物本体:按 skin 渲染动画,点击交互(poke/连点)在内层盒。 */
27
+ export declare function SplashMascot({ skin, active }: {
28
+ readonly skin: SplashMascotSkin;
29
+ /** 动画许可:false(冻结/落地页 whaleIdle=false)时定格 idle 帧 0、零时钟。 */
30
+ readonly active: boolean;
31
+ }): React.ReactNode;
32
+ //# sourceMappingURL=SplashMascot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplashMascot.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/companion/SplashMascot.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAiBzB,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,WAAW,CAAA;AAEpD;wCACwC;AACxC,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAIjF;AAGD,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAC7C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB,GAAG,KAAK,CAAC,SAAS,CAqElB"}