@adea-ai/ui 0.140.0 → 0.142.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 (455) hide show
  1. package/dist/components/composites/appearance-editor/appearance-editor.js +2 -2
  2. package/dist/components/composites/appearance-editor/appearance-editor.js.map +1 -1
  3. package/dist/components/composites/catalog-browser/catalog-browser-group.js +1 -1
  4. package/dist/components/composites/chain-of-thought/chain-of-thought.d.ts +56 -0
  5. package/dist/components/composites/chain-of-thought/chain-of-thought.d.ts.map +1 -0
  6. package/dist/components/composites/chain-of-thought/chain-of-thought.js +117 -0
  7. package/dist/components/composites/chain-of-thought/chain-of-thought.js.map +1 -0
  8. package/dist/components/composites/chain-of-thought/index.d.ts +2 -0
  9. package/dist/components/composites/chain-of-thought/index.d.ts.map +1 -0
  10. package/dist/components/composites/chain-of-thought/index.js +2 -0
  11. package/dist/components/composites/chat/chat.d.ts +67 -0
  12. package/dist/components/composites/chat/chat.d.ts.map +1 -0
  13. package/dist/components/composites/chat/chat.js +179 -0
  14. package/dist/components/composites/chat/chat.js.map +1 -0
  15. package/dist/components/composites/chat/index.d.ts +2 -0
  16. package/dist/components/composites/chat/index.d.ts.map +1 -0
  17. package/dist/components/composites/chat/index.js +2 -0
  18. package/dist/components/composites/checkpoint/checkpoint-model.d.ts +34 -0
  19. package/dist/components/composites/checkpoint/checkpoint-model.d.ts.map +1 -0
  20. package/dist/components/composites/checkpoint/checkpoint-model.js +48 -0
  21. package/dist/components/composites/checkpoint/checkpoint-model.js.map +1 -0
  22. package/dist/components/composites/checkpoint/checkpoint.d.ts +48 -0
  23. package/dist/components/composites/checkpoint/checkpoint.d.ts.map +1 -0
  24. package/dist/components/composites/checkpoint/checkpoint.js +160 -0
  25. package/dist/components/composites/checkpoint/checkpoint.js.map +1 -0
  26. package/dist/components/composites/checkpoint/index.d.ts +3 -0
  27. package/dist/components/composites/checkpoint/index.d.ts.map +1 -0
  28. package/dist/components/composites/checkpoint/index.js +3 -0
  29. package/dist/components/composites/confirmation/confirmation-model.d.ts +45 -0
  30. package/dist/components/composites/confirmation/confirmation-model.d.ts.map +1 -0
  31. package/dist/components/composites/confirmation/confirmation-model.js +51 -0
  32. package/dist/components/composites/confirmation/confirmation-model.js.map +1 -0
  33. package/dist/components/composites/confirmation/confirmation.d.ts +72 -0
  34. package/dist/components/composites/confirmation/confirmation.d.ts.map +1 -0
  35. package/dist/components/composites/confirmation/confirmation.js +300 -0
  36. package/dist/components/composites/confirmation/confirmation.js.map +1 -0
  37. package/dist/components/composites/confirmation/index.d.ts +3 -0
  38. package/dist/components/composites/confirmation/index.d.ts.map +1 -0
  39. package/dist/components/composites/confirmation/index.js +3 -0
  40. package/dist/components/composites/context/context-model.d.ts +69 -0
  41. package/dist/components/composites/context/context-model.d.ts.map +1 -0
  42. package/dist/components/composites/context/context-model.js +122 -0
  43. package/dist/components/composites/context/context-model.js.map +1 -0
  44. package/dist/components/composites/context/context.d.ts +38 -0
  45. package/dist/components/composites/context/context.d.ts.map +1 -0
  46. package/dist/components/composites/context/context.js +234 -0
  47. package/dist/components/composites/context/context.js.map +1 -0
  48. package/dist/components/composites/context/index.d.ts +3 -0
  49. package/dist/components/composites/context/index.d.ts.map +1 -0
  50. package/dist/components/composites/context/index.js +3 -0
  51. package/dist/components/composites/file-tree/build-file-tree.d.ts +138 -0
  52. package/dist/components/composites/file-tree/build-file-tree.d.ts.map +1 -0
  53. package/dist/components/composites/file-tree/build-file-tree.js +325 -0
  54. package/dist/components/composites/file-tree/build-file-tree.js.map +1 -0
  55. package/dist/components/composites/file-tree/file-tree.d.ts +74 -0
  56. package/dist/components/composites/file-tree/file-tree.d.ts.map +1 -0
  57. package/dist/components/composites/file-tree/file-tree.js +389 -0
  58. package/dist/components/composites/file-tree/file-tree.js.map +1 -0
  59. package/dist/components/composites/file-tree/index.d.ts +3 -0
  60. package/dist/components/composites/file-tree/index.d.ts.map +1 -0
  61. package/dist/components/composites/file-tree/index.js +3 -0
  62. package/dist/components/composites/inline-citation/citation.d.ts +37 -0
  63. package/dist/components/composites/inline-citation/citation.d.ts.map +1 -0
  64. package/dist/components/composites/inline-citation/citation.js +52 -0
  65. package/dist/components/composites/inline-citation/citation.js.map +1 -0
  66. package/dist/components/composites/inline-citation/index.d.ts +3 -0
  67. package/dist/components/composites/inline-citation/index.d.ts.map +1 -0
  68. package/dist/components/composites/inline-citation/index.js +3 -0
  69. package/dist/components/composites/inline-citation/inline-citation.d.ts +64 -0
  70. package/dist/components/composites/inline-citation/inline-citation.d.ts.map +1 -0
  71. package/dist/components/composites/inline-citation/inline-citation.js +272 -0
  72. package/dist/components/composites/inline-citation/inline-citation.js.map +1 -0
  73. package/dist/components/composites/message-scroller/index.d.ts +3 -0
  74. package/dist/components/composites/message-scroller/index.d.ts.map +1 -0
  75. package/dist/components/composites/message-scroller/index.js +3 -0
  76. package/dist/components/composites/message-scroller/message-scroller.d.ts +55 -0
  77. package/dist/components/composites/message-scroller/message-scroller.d.ts.map +1 -0
  78. package/dist/components/composites/message-scroller/message-scroller.js +201 -0
  79. package/dist/components/composites/message-scroller/message-scroller.js.map +1 -0
  80. package/dist/components/composites/message-scroller/scroll-anchor.d.ts +66 -0
  81. package/dist/components/composites/message-scroller/scroll-anchor.d.ts.map +1 -0
  82. package/dist/components/composites/message-scroller/scroll-anchor.js +122 -0
  83. package/dist/components/composites/message-scroller/scroll-anchor.js.map +1 -0
  84. package/dist/components/composites/model-selector/index.d.ts +3 -0
  85. package/dist/components/composites/model-selector/index.d.ts.map +1 -0
  86. package/dist/components/composites/model-selector/index.js +3 -0
  87. package/dist/components/composites/model-selector/model-selector.d.ts +55 -0
  88. package/dist/components/composites/model-selector/model-selector.d.ts.map +1 -0
  89. package/dist/components/composites/model-selector/model-selector.js +490 -0
  90. package/dist/components/composites/model-selector/model-selector.js.map +1 -0
  91. package/dist/components/composites/model-selector/models.d.ts +51 -0
  92. package/dist/components/composites/model-selector/models.d.ts.map +1 -0
  93. package/dist/components/composites/model-selector/models.js +71 -0
  94. package/dist/components/composites/model-selector/models.js.map +1 -0
  95. package/dist/components/composites/plan/index.d.ts +2 -0
  96. package/dist/components/composites/plan/index.d.ts.map +1 -0
  97. package/dist/components/composites/plan/index.js +2 -0
  98. package/dist/components/composites/plan/plan.d.ts +61 -0
  99. package/dist/components/composites/plan/plan.d.ts.map +1 -0
  100. package/dist/components/composites/plan/plan.js +130 -0
  101. package/dist/components/composites/plan/plan.js.map +1 -0
  102. package/dist/components/composites/queue/index.d.ts +2 -0
  103. package/dist/components/composites/queue/index.d.ts.map +1 -0
  104. package/dist/components/composites/queue/index.js +2 -0
  105. package/dist/components/composites/queue/queue.d.ts +77 -0
  106. package/dist/components/composites/queue/queue.d.ts.map +1 -0
  107. package/dist/components/composites/queue/queue.js +271 -0
  108. package/dist/components/composites/queue/queue.js.map +1 -0
  109. package/dist/components/composites/reasoning/index.d.ts +2 -0
  110. package/dist/components/composites/reasoning/index.d.ts.map +1 -0
  111. package/dist/components/composites/reasoning/index.js +2 -0
  112. package/dist/components/composites/reasoning/reasoning.d.ts +62 -0
  113. package/dist/components/composites/reasoning/reasoning.d.ts.map +1 -0
  114. package/dist/components/composites/reasoning/reasoning.js +156 -0
  115. package/dist/components/composites/reasoning/reasoning.js.map +1 -0
  116. package/dist/components/composites/sources/index.d.ts +3 -0
  117. package/dist/components/composites/sources/index.d.ts.map +1 -0
  118. package/dist/components/composites/sources/index.js +3 -0
  119. package/dist/components/composites/sources/source.d.ts +46 -0
  120. package/dist/components/composites/sources/source.d.ts.map +1 -0
  121. package/dist/components/composites/sources/source.js +74 -0
  122. package/dist/components/composites/sources/source.js.map +1 -0
  123. package/dist/components/composites/sources/sources.d.ts +45 -0
  124. package/dist/components/composites/sources/sources.d.ts.map +1 -0
  125. package/dist/components/composites/sources/sources.js +175 -0
  126. package/dist/components/composites/sources/sources.js.map +1 -0
  127. package/dist/components/composites/stack-trace/index.d.ts +3 -0
  128. package/dist/components/composites/stack-trace/index.d.ts.map +1 -0
  129. package/dist/components/composites/stack-trace/index.js +3 -0
  130. package/dist/components/composites/stack-trace/parse-stack-trace.d.ts +118 -0
  131. package/dist/components/composites/stack-trace/parse-stack-trace.d.ts.map +1 -0
  132. package/dist/components/composites/stack-trace/parse-stack-trace.js +376 -0
  133. package/dist/components/composites/stack-trace/parse-stack-trace.js.map +1 -0
  134. package/dist/components/composites/stack-trace/stack-trace.d.ts +63 -0
  135. package/dist/components/composites/stack-trace/stack-trace.d.ts.map +1 -0
  136. package/dist/components/composites/stack-trace/stack-trace.js +491 -0
  137. package/dist/components/composites/stack-trace/stack-trace.js.map +1 -0
  138. package/dist/components/composites/subagent/index.d.ts +2 -0
  139. package/dist/components/composites/subagent/index.d.ts.map +1 -0
  140. package/dist/components/composites/subagent/index.js +2 -0
  141. package/dist/components/composites/subagent/subagent.d.ts +55 -0
  142. package/dist/components/composites/subagent/subagent.d.ts.map +1 -0
  143. package/dist/components/composites/subagent/subagent.js +138 -0
  144. package/dist/components/composites/subagent/subagent.js.map +1 -0
  145. package/dist/components/composites/suggestion/index.d.ts +2 -0
  146. package/dist/components/composites/suggestion/index.d.ts.map +1 -0
  147. package/dist/components/composites/suggestion/index.js +2 -0
  148. package/dist/components/composites/suggestion/suggestion.d.ts +37 -0
  149. package/dist/components/composites/suggestion/suggestion.d.ts.map +1 -0
  150. package/dist/components/composites/suggestion/suggestion.js +100 -0
  151. package/dist/components/composites/suggestion/suggestion.js.map +1 -0
  152. package/dist/components/composites/task/index.d.ts +2 -0
  153. package/dist/components/composites/task/index.d.ts.map +1 -0
  154. package/dist/components/composites/task/index.js +2 -0
  155. package/dist/components/composites/task/task.d.ts +96 -0
  156. package/dist/components/composites/task/task.d.ts.map +1 -0
  157. package/dist/components/composites/task/task.js +311 -0
  158. package/dist/components/composites/task/task.js.map +1 -0
  159. package/dist/components/composites/terminal/ansi.d.ts +101 -0
  160. package/dist/components/composites/terminal/ansi.d.ts.map +1 -0
  161. package/dist/components/composites/terminal/ansi.js +544 -0
  162. package/dist/components/composites/terminal/ansi.js.map +1 -0
  163. package/dist/components/composites/terminal/index.d.ts +4 -0
  164. package/dist/components/composites/terminal/index.d.ts.map +1 -0
  165. package/dist/components/composites/terminal/index.js +4 -0
  166. package/dist/components/composites/terminal/terminal-model.d.ts +63 -0
  167. package/dist/components/composites/terminal/terminal-model.d.ts.map +1 -0
  168. package/dist/components/composites/terminal/terminal-model.js +69 -0
  169. package/dist/components/composites/terminal/terminal-model.js.map +1 -0
  170. package/dist/components/composites/terminal/terminal.d.ts +88 -0
  171. package/dist/components/composites/terminal/terminal.d.ts.map +1 -0
  172. package/dist/components/composites/terminal/terminal.js +500 -0
  173. package/dist/components/composites/terminal/terminal.js.map +1 -0
  174. package/dist/components/composites/test-results/index.d.ts +3 -0
  175. package/dist/components/composites/test-results/index.d.ts.map +1 -0
  176. package/dist/components/composites/test-results/index.js +3 -0
  177. package/dist/components/composites/test-results/test-results-model.d.ts +154 -0
  178. package/dist/components/composites/test-results/test-results-model.d.ts.map +1 -0
  179. package/dist/components/composites/test-results/test-results-model.js +252 -0
  180. package/dist/components/composites/test-results/test-results-model.js.map +1 -0
  181. package/dist/components/composites/test-results/test-results.d.ts +60 -0
  182. package/dist/components/composites/test-results/test-results.d.ts.map +1 -0
  183. package/dist/components/composites/test-results/test-results.js +631 -0
  184. package/dist/components/composites/test-results/test-results.js.map +1 -0
  185. package/dist/components/composites/tool/format-tool-value.d.ts +37 -0
  186. package/dist/components/composites/tool/format-tool-value.d.ts.map +1 -0
  187. package/dist/components/composites/tool/format-tool-value.js +135 -0
  188. package/dist/components/composites/tool/format-tool-value.js.map +1 -0
  189. package/dist/components/composites/tool/index.d.ts +3 -0
  190. package/dist/components/composites/tool/index.d.ts.map +1 -0
  191. package/dist/components/composites/tool/index.js +3 -0
  192. package/dist/components/composites/tool/tool.d.ts +69 -0
  193. package/dist/components/composites/tool/tool.d.ts.map +1 -0
  194. package/dist/components/composites/tool/tool.js +214 -0
  195. package/dist/components/composites/tool/tool.js.map +1 -0
  196. package/dist/components/composites/update-dialog/update-dialog.js +1 -1
  197. package/dist/components/conversation/conversation-surface.d.ts +7 -0
  198. package/dist/components/conversation/conversation-surface.d.ts.map +1 -1
  199. package/dist/components/conversation/conversation-surface.js +2 -0
  200. package/dist/components/conversation/conversation-surface.js.map +1 -1
  201. package/dist/components/conversation/scroll-follow-core.d.ts +24 -0
  202. package/dist/components/conversation/scroll-follow-core.d.ts.map +1 -1
  203. package/dist/components/conversation/scroll-follow-core.js +23 -1
  204. package/dist/components/conversation/scroll-follow-core.js.map +1 -1
  205. package/dist/components/conversation/scroll-follow.d.ts +3 -0
  206. package/dist/components/conversation/scroll-follow.d.ts.map +1 -1
  207. package/dist/components/conversation/scroll-follow.js +80 -1
  208. package/dist/components/conversation/scroll-follow.js.map +1 -1
  209. package/dist/components/ui/attachment/attachment.d.ts +58 -0
  210. package/dist/components/ui/attachment/attachment.d.ts.map +1 -0
  211. package/dist/components/ui/attachment/attachment.js +279 -0
  212. package/dist/components/ui/attachment/attachment.js.map +1 -0
  213. package/dist/components/ui/attachment/index.d.ts +2 -0
  214. package/dist/components/ui/attachment/index.d.ts.map +1 -0
  215. package/dist/components/ui/attachment/index.js +2 -0
  216. package/dist/components/ui/badge/badge.d.ts +1 -1
  217. package/dist/components/ui/bubble/bubble.d.ts +33 -0
  218. package/dist/components/ui/bubble/bubble.d.ts.map +1 -0
  219. package/dist/components/ui/bubble/bubble.js +95 -0
  220. package/dist/components/ui/bubble/bubble.js.map +1 -0
  221. package/dist/components/ui/bubble/index.d.ts +2 -0
  222. package/dist/components/ui/bubble/index.d.ts.map +1 -0
  223. package/dist/components/ui/bubble/index.js +2 -0
  224. package/dist/components/ui/button/button.d.ts +1 -1
  225. package/dist/components/ui/code-block/code-block.d.ts +56 -3
  226. package/dist/components/ui/code-block/code-block.d.ts.map +1 -1
  227. package/dist/components/ui/code-block/code-block.js +231 -50
  228. package/dist/components/ui/code-block/code-block.js.map +1 -1
  229. package/dist/components/ui/code-block/index.d.ts +1 -1
  230. package/dist/components/ui/code-block/index.d.ts.map +1 -1
  231. package/dist/components/ui/code-block/index.js +2 -2
  232. package/dist/components/ui/field/number-field.d.ts +21 -4
  233. package/dist/components/ui/field/number-field.d.ts.map +1 -1
  234. package/dist/components/ui/field/number-field.js +22 -11
  235. package/dist/components/ui/field/number-field.js.map +1 -1
  236. package/dist/components/ui/marker/index.d.ts +2 -0
  237. package/dist/components/ui/marker/index.d.ts.map +1 -0
  238. package/dist/components/ui/marker/index.js +2 -0
  239. package/dist/components/ui/marker/marker.d.ts +35 -0
  240. package/dist/components/ui/marker/marker.d.ts.map +1 -0
  241. package/dist/components/ui/marker/marker.js +123 -0
  242. package/dist/components/ui/marker/marker.js.map +1 -0
  243. package/dist/components/ui/message/cite-ranges.d.ts +42 -0
  244. package/dist/components/ui/message/cite-ranges.d.ts.map +1 -0
  245. package/dist/components/ui/message/cite-ranges.js +105 -0
  246. package/dist/components/ui/message/cite-ranges.js.map +1 -0
  247. package/dist/components/ui/message/index.d.ts +4 -0
  248. package/dist/components/ui/message/index.d.ts.map +1 -0
  249. package/dist/components/ui/message/index.js +4 -0
  250. package/dist/components/ui/message/message.d.ts +95 -0
  251. package/dist/components/ui/message/message.d.ts.map +1 -0
  252. package/dist/components/ui/message/message.js +443 -0
  253. package/dist/components/ui/message/message.js.map +1 -0
  254. package/dist/components/ui/message/parse-message-text.d.ts +93 -0
  255. package/dist/components/ui/message/parse-message-text.d.ts.map +1 -0
  256. package/dist/components/ui/message/parse-message-text.js +365 -0
  257. package/dist/components/ui/message/parse-message-text.js.map +1 -0
  258. package/dist/components/ui/questionnaire/index.d.ts +2 -0
  259. package/dist/components/ui/questionnaire/index.d.ts.map +1 -0
  260. package/dist/components/ui/questionnaire/index.js +2 -0
  261. package/dist/components/ui/questionnaire/questionnaire.d.ts +83 -0
  262. package/dist/components/ui/questionnaire/questionnaire.d.ts.map +1 -0
  263. package/dist/components/ui/questionnaire/questionnaire.js +470 -0
  264. package/dist/components/ui/questionnaire/questionnaire.js.map +1 -0
  265. package/dist/components/ui/status-chip/status-chip.d.ts +1 -1
  266. package/dist/components/ui/switch/switch.js +11 -11
  267. package/dist/components/ui/switch/switch.js.map +1 -1
  268. package/dist/components/ui/trace/index.d.ts +2 -0
  269. package/dist/components/ui/trace/index.d.ts.map +1 -0
  270. package/dist/components/ui/trace/index.js +2 -0
  271. package/dist/components/ui/trace/trace.d.ts +72 -0
  272. package/dist/components/ui/trace/trace.d.ts.map +1 -0
  273. package/dist/components/ui/trace/trace.js +340 -0
  274. package/dist/components/ui/trace/trace.js.map +1 -0
  275. package/dist/index.d.ts +26 -0
  276. package/dist/index.d.ts.map +1 -1
  277. package/dist/index.js +46 -5
  278. package/dist/r/attachment.json +25 -0
  279. package/dist/r/bubble.json +22 -0
  280. package/dist/r/chain-of-thought.json +26 -0
  281. package/dist/r/chat.json +24 -0
  282. package/dist/r/checkpoint.json +35 -0
  283. package/dist/r/confirmation.json +34 -0
  284. package/dist/r/context.json +33 -0
  285. package/dist/r/file-tree.json +32 -0
  286. package/dist/r/inline-citation.json +35 -0
  287. package/dist/r/marker.json +22 -0
  288. package/dist/r/message-scroller.json +31 -0
  289. package/dist/r/message.json +33 -0
  290. package/dist/r/model-selector.json +34 -0
  291. package/dist/r/plan.json +26 -0
  292. package/dist/r/questionnaire.json +28 -0
  293. package/dist/r/queue.json +26 -0
  294. package/dist/r/reasoning.json +26 -0
  295. package/dist/r/registry.json +811 -52
  296. package/dist/r/sources.json +32 -0
  297. package/dist/r/src/components/composites/chain-of-thought/chain-of-thought.tsx +141 -0
  298. package/dist/r/src/components/composites/chain-of-thought/index.ts +11 -0
  299. package/dist/r/src/components/composites/chat/chat.tsx +190 -0
  300. package/dist/r/src/components/composites/chat/index.ts +11 -0
  301. package/dist/r/src/components/composites/checkpoint/checkpoint-model.ts +71 -0
  302. package/dist/r/src/components/composites/checkpoint/checkpoint.tsx +214 -0
  303. package/dist/r/src/components/composites/checkpoint/index.ts +8 -0
  304. package/dist/r/src/components/composites/confirmation/confirmation-model.ts +83 -0
  305. package/dist/r/src/components/composites/confirmation/confirmation.tsx +311 -0
  306. package/dist/r/src/components/composites/confirmation/index.ts +9 -0
  307. package/dist/r/src/components/composites/context/context-model.ts +168 -0
  308. package/dist/r/src/components/composites/context/context.tsx +187 -0
  309. package/dist/r/src/components/composites/context/index.ts +18 -0
  310. package/dist/r/src/components/composites/file-tree/build-file-tree.ts +456 -0
  311. package/dist/r/src/components/composites/file-tree/file-tree.tsx +405 -0
  312. package/dist/r/src/components/composites/file-tree/index.ts +25 -0
  313. package/dist/r/src/components/composites/inline-citation/citation.ts +78 -0
  314. package/dist/r/src/components/composites/inline-citation/index.ts +9 -0
  315. package/dist/r/src/components/composites/inline-citation/inline-citation.tsx +285 -0
  316. package/dist/r/src/components/composites/message-scroller/index.ts +2 -0
  317. package/dist/r/src/components/composites/message-scroller/message-scroller.tsx +301 -0
  318. package/dist/r/src/components/composites/message-scroller/scroll-anchor.ts +170 -0
  319. package/dist/r/src/components/composites/model-selector/index.ts +14 -0
  320. package/dist/r/src/components/composites/model-selector/model-selector.tsx +420 -0
  321. package/dist/r/src/components/composites/model-selector/models.ts +103 -0
  322. package/dist/r/src/components/composites/plan/index.ts +1 -0
  323. package/dist/r/src/components/composites/plan/plan.tsx +155 -0
  324. package/dist/r/src/components/composites/queue/index.ts +10 -0
  325. package/dist/r/src/components/composites/queue/queue.tsx +264 -0
  326. package/dist/r/src/components/composites/reasoning/index.ts +1 -0
  327. package/dist/r/src/components/composites/reasoning/reasoning.tsx +176 -0
  328. package/dist/r/src/components/composites/sources/index.ts +11 -0
  329. package/dist/r/src/components/composites/sources/source.ts +116 -0
  330. package/dist/r/src/components/composites/sources/sources.tsx +163 -0
  331. package/dist/r/src/components/composites/stack-trace/index.ts +19 -0
  332. package/dist/r/src/components/composites/stack-trace/parse-stack-trace.ts +507 -0
  333. package/dist/r/src/components/composites/stack-trace/stack-trace.tsx +395 -0
  334. package/dist/r/src/components/composites/subagent/index.ts +1 -0
  335. package/dist/r/src/components/composites/subagent/subagent.tsx +159 -0
  336. package/dist/r/src/components/composites/suggestion/index.ts +1 -0
  337. package/dist/r/src/components/composites/suggestion/suggestion.tsx +140 -0
  338. package/dist/r/src/components/composites/task/index.ts +14 -0
  339. package/dist/r/src/components/composites/task/task.tsx +317 -0
  340. package/dist/r/src/components/composites/terminal/ansi.ts +674 -0
  341. package/dist/r/src/components/composites/terminal/index.ts +20 -0
  342. package/dist/r/src/components/composites/terminal/terminal-model.ts +111 -0
  343. package/dist/r/src/components/composites/terminal/terminal.tsx +574 -0
  344. package/dist/r/src/components/composites/test-results/index.ts +20 -0
  345. package/dist/r/src/components/composites/test-results/test-results-model.ts +368 -0
  346. package/dist/r/src/components/composites/test-results/test-results.tsx +586 -0
  347. package/dist/r/src/components/composites/tool/format-tool-value.ts +221 -0
  348. package/dist/r/src/components/composites/tool/index.ts +2 -0
  349. package/dist/r/src/components/composites/tool/tool.tsx +228 -0
  350. package/dist/r/src/components/conversation/conversation-surface.tsx +9 -0
  351. package/dist/r/src/components/conversation/scroll-follow-core.ts +31 -0
  352. package/dist/r/src/components/conversation/scroll-follow.ts +92 -0
  353. package/dist/r/src/components/ui/attachment/attachment.tsx +282 -0
  354. package/dist/r/src/components/ui/attachment/index.ts +10 -0
  355. package/dist/r/src/components/ui/bubble/bubble.tsx +86 -0
  356. package/dist/r/src/components/ui/bubble/index.ts +1 -0
  357. package/dist/r/src/components/ui/code-block/code-block.tsx +256 -26
  358. package/dist/r/src/components/ui/code-block/index.ts +9 -1
  359. package/dist/r/src/components/ui/field/number-field.tsx +51 -14
  360. package/dist/r/src/components/ui/marker/index.ts +1 -0
  361. package/dist/r/src/components/ui/marker/marker.tsx +90 -0
  362. package/dist/r/src/components/ui/message/cite-ranges.ts +144 -0
  363. package/dist/r/src/components/ui/message/index.ts +23 -0
  364. package/dist/r/src/components/ui/message/message.tsx +434 -0
  365. package/dist/r/src/components/ui/message/parse-message-text.ts +450 -0
  366. package/dist/r/src/components/ui/questionnaire/index.ts +10 -0
  367. package/dist/r/src/components/ui/questionnaire/questionnaire.tsx +446 -0
  368. package/dist/r/src/components/ui/trace/index.ts +9 -0
  369. package/dist/r/src/components/ui/trace/trace.tsx +334 -0
  370. package/dist/r/src/styles/base.css +34 -0
  371. package/dist/r/stack-trace.json +32 -0
  372. package/dist/r/subagent.json +27 -0
  373. package/dist/r/suggestion.json +24 -0
  374. package/dist/r/task.json +28 -0
  375. package/dist/r/terminal.json +35 -0
  376. package/dist/r/test-results.json +33 -0
  377. package/dist/r/tool.json +31 -0
  378. package/dist/r/trace.json +25 -0
  379. package/package.json +6 -3
  380. package/registry.json +811 -52
  381. package/src/components/composites/chain-of-thought/chain-of-thought.tsx +141 -0
  382. package/src/components/composites/chain-of-thought/index.ts +11 -0
  383. package/src/components/composites/chat/chat.tsx +190 -0
  384. package/src/components/composites/chat/index.ts +11 -0
  385. package/src/components/composites/checkpoint/checkpoint-model.ts +71 -0
  386. package/src/components/composites/checkpoint/checkpoint.tsx +214 -0
  387. package/src/components/composites/checkpoint/index.ts +8 -0
  388. package/src/components/composites/confirmation/confirmation-model.ts +83 -0
  389. package/src/components/composites/confirmation/confirmation.tsx +311 -0
  390. package/src/components/composites/confirmation/index.ts +9 -0
  391. package/src/components/composites/context/context-model.ts +168 -0
  392. package/src/components/composites/context/context.tsx +187 -0
  393. package/src/components/composites/context/index.ts +18 -0
  394. package/src/components/composites/file-tree/build-file-tree.ts +456 -0
  395. package/src/components/composites/file-tree/file-tree.tsx +405 -0
  396. package/src/components/composites/file-tree/index.ts +25 -0
  397. package/src/components/composites/inline-citation/citation.ts +78 -0
  398. package/src/components/composites/inline-citation/index.ts +9 -0
  399. package/src/components/composites/inline-citation/inline-citation.tsx +285 -0
  400. package/src/components/composites/message-scroller/index.ts +2 -0
  401. package/src/components/composites/message-scroller/message-scroller.tsx +301 -0
  402. package/src/components/composites/message-scroller/scroll-anchor.ts +170 -0
  403. package/src/components/composites/model-selector/index.ts +14 -0
  404. package/src/components/composites/model-selector/model-selector.tsx +420 -0
  405. package/src/components/composites/model-selector/models.ts +103 -0
  406. package/src/components/composites/plan/index.ts +1 -0
  407. package/src/components/composites/plan/plan.tsx +155 -0
  408. package/src/components/composites/queue/index.ts +10 -0
  409. package/src/components/composites/queue/queue.tsx +264 -0
  410. package/src/components/composites/reasoning/index.ts +1 -0
  411. package/src/components/composites/reasoning/reasoning.tsx +176 -0
  412. package/src/components/composites/sources/index.ts +11 -0
  413. package/src/components/composites/sources/source.ts +116 -0
  414. package/src/components/composites/sources/sources.tsx +163 -0
  415. package/src/components/composites/stack-trace/index.ts +19 -0
  416. package/src/components/composites/stack-trace/parse-stack-trace.ts +507 -0
  417. package/src/components/composites/stack-trace/stack-trace.tsx +395 -0
  418. package/src/components/composites/subagent/index.ts +1 -0
  419. package/src/components/composites/subagent/subagent.tsx +159 -0
  420. package/src/components/composites/suggestion/index.ts +1 -0
  421. package/src/components/composites/suggestion/suggestion.tsx +140 -0
  422. package/src/components/composites/task/index.ts +14 -0
  423. package/src/components/composites/task/task.tsx +317 -0
  424. package/src/components/composites/terminal/ansi.ts +674 -0
  425. package/src/components/composites/terminal/index.ts +20 -0
  426. package/src/components/composites/terminal/terminal-model.ts +111 -0
  427. package/src/components/composites/terminal/terminal.tsx +574 -0
  428. package/src/components/composites/test-results/index.ts +20 -0
  429. package/src/components/composites/test-results/test-results-model.ts +368 -0
  430. package/src/components/composites/test-results/test-results.tsx +586 -0
  431. package/src/components/composites/tool/format-tool-value.ts +221 -0
  432. package/src/components/composites/tool/index.ts +2 -0
  433. package/src/components/composites/tool/tool.tsx +228 -0
  434. package/src/components/conversation/conversation-surface.tsx +9 -0
  435. package/src/components/conversation/scroll-follow-core.ts +31 -0
  436. package/src/components/conversation/scroll-follow.ts +92 -0
  437. package/src/components/ui/attachment/attachment.tsx +282 -0
  438. package/src/components/ui/attachment/index.ts +10 -0
  439. package/src/components/ui/bubble/bubble.tsx +86 -0
  440. package/src/components/ui/bubble/index.ts +1 -0
  441. package/src/components/ui/code-block/code-block.tsx +256 -26
  442. package/src/components/ui/code-block/index.ts +9 -1
  443. package/src/components/ui/field/number-field.tsx +51 -14
  444. package/src/components/ui/marker/index.ts +1 -0
  445. package/src/components/ui/marker/marker.tsx +90 -0
  446. package/src/components/ui/message/cite-ranges.ts +144 -0
  447. package/src/components/ui/message/index.ts +23 -0
  448. package/src/components/ui/message/message.tsx +434 -0
  449. package/src/components/ui/message/parse-message-text.ts +450 -0
  450. package/src/components/ui/questionnaire/index.ts +10 -0
  451. package/src/components/ui/questionnaire/questionnaire.tsx +446 -0
  452. package/src/components/ui/trace/index.ts +9 -0
  453. package/src/components/ui/trace/trace.tsx +334 -0
  454. package/src/index.ts +26 -0
  455. package/src/styles/base.css +34 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","names":[],"sources":["../../../../src/components/composites/model-selector/models.ts"],"sourcesContent":["import { boundText } from '../sources/source'\n\n/**\n * An effort level a model supports: just its id (`'high'`), or an id with the\n * words to show. A bare id is labelled by capitalising it, which is right for\n * `low` / `medium` / `high` and wrong for anything else — pass a label then.\n */\nexport type ModelEffort = string | Readonly<{ id: string; label?: string; description?: string }>\n\nexport type EffortOption = Readonly<{ id: string; label: string; description?: string }>\n\n/**\n * A model the person may pick. `efforts` lists the effort levels *this* model\n * advertises; a model without it has no effort control, because showing one would\n * claim the model can be told how hard to think. `disabledReason` is the host's\n * authority speaking (plan, quota, region): the model stays in the list, disabled,\n * with the reason beside it.\n */\nexport type ModelOption = Readonly<{\n /** Unique within the list. */\n id: string\n label: string\n provider: string\n description?: string\n disabledReason?: string\n efforts?: readonly ModelEffort[]\n}>\n\nconst LABEL_LIMIT = 60\nconst DESCRIPTION_LIMIT = 160\n\nfunction titleCase(id: string): string {\n const clean = boundText(id, LABEL_LIMIT)\n return clean.charAt(0).toUpperCase() + clean.slice(1)\n}\n\n/** Efforts as options: blanks dropped, duplicate ids kept once (first wins), text bounded. */\nexport function normalizeEfforts(efforts: readonly ModelEffort[] | undefined): EffortOption[] {\n const seen = new Set<string>()\n const out: EffortOption[] = []\n for (const effort of efforts ?? []) {\n const id = typeof effort === 'string' ? effort : effort.id\n if (id.trim() === '' || seen.has(id)) continue\n seen.add(id)\n if (typeof effort === 'string') {\n out.push({ id, label: titleCase(id) })\n } else {\n out.push({\n id,\n label: (effort.label ? boundText(effort.label, LABEL_LIMIT) : '') || titleCase(id),\n description: effort.description\n ? boundText(effort.description, DESCRIPTION_LIMIT)\n : undefined,\n })\n }\n }\n return out\n}\n\nexport function findModel(\n models: readonly ModelOption[],\n id: string | undefined\n): ModelOption | undefined {\n return id === undefined ? undefined : models.find((model) => model.id === id)\n}\n\n/** The selected effort, only if the selected model actually offers it. */\nexport function resolveEffort(\n model: ModelOption | undefined,\n effort: string | undefined\n): EffortOption | undefined {\n if (!model || effort === undefined) return undefined\n return normalizeEfforts(model.efforts).find((option) => option.id === effort)\n}\n\nexport type ModelGroup = Readonly<{ provider: string; models: readonly ModelOption[] }>\n\n/** Group by provider, in the order providers first appear, so the host controls ranking. */\nexport function groupModels(models: readonly ModelOption[]): ModelGroup[] {\n const groups = new Map<string, ModelOption[]>()\n for (const model of models) {\n const provider = boundText(model.provider, LABEL_LIMIT) || 'Other'\n const bucket = groups.get(provider)\n if (bucket) bucket.push(model)\n else groups.set(provider, [model])\n }\n return [...groups].map(([provider, list]) => ({ provider, models: list }))\n}\n\n/** Past this many models the list gets a search box; a short list is quicker to read. */\nexport const MODEL_SEARCH_THRESHOLD = 7\n\nexport function needsSearch(count: number, threshold = MODEL_SEARCH_THRESHOLD): boolean {\n return count > threshold\n}\n\n/**\n * What the search matches against: everything a person might type to find a model\n * — its name, its provider, its id, and its description.\n */\nexport function modelSearchValue(model: ModelOption): string {\n return [model.label, model.provider, model.id, model.description ?? ''].join(' ')\n}\n"],"mappings":";;AA4BA,IAAM,cAAc;AACpB,IAAM,oBAAoB;AAE1B,SAAS,UAAU,IAAoB;CACrC,MAAM,QAAQ,UAAU,IAAI,WAAW;CACvC,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC;AACtD;;AAGA,SAAgB,iBAAiB,SAA6D;CAC5F,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,MAAsB,CAAC;CAC7B,KAAK,MAAM,UAAU,WAAW,CAAC,GAAG;EAClC,MAAM,KAAK,OAAO,WAAW,WAAW,SAAS,OAAO;EACxD,IAAI,GAAG,KAAK,MAAM,MAAM,KAAK,IAAI,EAAE,GAAG;EACtC,KAAK,IAAI,EAAE;EACX,IAAI,OAAO,WAAW,UACpB,IAAI,KAAK;GAAE;GAAI,OAAO,UAAU,EAAE;EAAE,CAAC;OAErC,IAAI,KAAK;GACP;GACA,QAAQ,OAAO,QAAQ,UAAU,OAAO,OAAO,WAAW,IAAI,OAAO,UAAU,EAAE;GACjF,aAAa,OAAO,cAChB,UAAU,OAAO,aAAa,iBAAiB,IAC/C,KAAA;EACN,CAAC;CAEL;CACA,OAAO;AACT;AAEA,SAAgB,UACd,QACA,IACyB;CACzB,OAAO,OAAO,KAAA,IAAY,KAAA,IAAY,OAAO,MAAM,UAAU,MAAM,OAAO,EAAE;AAC9E;;AAGA,SAAgB,cACd,OACA,QAC0B;CAC1B,IAAI,CAAC,SAAS,WAAW,KAAA,GAAW,OAAO,KAAA;CAC3C,OAAO,iBAAiB,MAAM,OAAO,CAAC,CAAC,MAAM,WAAW,OAAO,OAAO,MAAM;AAC9E;;AAKA,SAAgB,YAAY,QAA8C;CACxE,MAAM,yBAAS,IAAI,IAA2B;CAC9C,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,WAAW,UAAU,MAAM,UAAU,WAAW,KAAK;EAC3D,MAAM,SAAS,OAAO,IAAI,QAAQ;EAClC,IAAI,QAAQ,OAAO,KAAK,KAAK;OACxB,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;CACnC;CACA,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,WAAW;EAAE;EAAU,QAAQ;CAAK,EAAE;AAC3E;;AAGA,IAAa,yBAAyB;AAEtC,SAAgB,YAAY,OAAe,YAAA,GAA6C;CACtF,OAAO,QAAQ;AACjB;;;;;AAMA,SAAgB,iBAAiB,OAA4B;CAC3D,OAAO;EAAC,MAAM;EAAO,MAAM;EAAU,MAAM;EAAI,MAAM,eAAe;CAAE,CAAC,CAAC,KAAK,GAAG;AAClF"}
@@ -0,0 +1,2 @@
1
+ export { Plan, type PlanProps, type PlanStep, type PlanStepStatus } from './plan';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/plan/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { Plan } from "./plan.js";
2
+ export { Plan };
@@ -0,0 +1,61 @@
1
+ import { type JSX } from 'solid-js';
2
+ import { type TraceLineProps } from '../../ui/trace';
3
+ import { type TaskItemStatus } from '../task';
4
+ /**
5
+ * Plan.
6
+ *
7
+ * What the agent intends to do, as a `TraceLine` that opens onto the steps: a
8
+ * title, an optional description, the steps with their status, how far along
9
+ * they are, and — when the host supplies them — the actions the reader can take
10
+ * (approve, edit, run). Reach for `Task` when the list is a unit of work that is
11
+ * already under way and not a proposal, for `Queue` when it is the agent's
12
+ * running todo list, and for `ChainOfThought` when the steps describe how an
13
+ * answer was reached rather than what will be done.
14
+ *
15
+ * ## It opens by default
16
+ *
17
+ * Unlike a tool call, the plan is the thing being decided or followed, so it
18
+ * starts open (`defaultOpen={false}` folds it). A plan with no steps, no
19
+ * description and no actions is a plain line.
20
+ *
21
+ * ## Progress is derived, in words
22
+ *
23
+ * "2 of 5 steps done" and the bar come from the steps' own `status` and appear
24
+ * only when at least one step has one; a step with no status counts toward the
25
+ * total and not toward "done" (the host did not say it was finished). The bar is
26
+ * the shared `Progress`, which publishes the same phrase to assistive
27
+ * technology, so the number is never only a length.
28
+ *
29
+ * ## Streaming
30
+ *
31
+ * While `streaming` the plan is still being written, so its length is not known
32
+ * and no progress is claimed: the title shimmers, the line says "Drafting", and
33
+ * a caret trails the last step. Finished steps keep their DOM while the last one
34
+ * grows (rows are kept by position).
35
+ *
36
+ * ## The host owns authority
37
+ *
38
+ * `actions` is a slot. The plan neither enables nor disables what is in it, and
39
+ * with no `actions` there are no controls — a plan the reader may not approve
40
+ * simply has no Approve button.
41
+ *
42
+ * A `Plan` is a line: place it inside a `Trace`.
43
+ */
44
+ export type PlanStepStatus = TaskItemStatus;
45
+ export type PlanStep = Readonly<{
46
+ id?: string;
47
+ label: string;
48
+ description?: string;
49
+ status?: PlanStepStatus;
50
+ }>;
51
+ export type PlanProps = Omit<TraceLineProps, 'description' | 'href' | 'onSelect' | 'selectHaspopup' | 'children' | 'status' | 'statusLabel'> & {
52
+ steps: readonly PlanStep[];
53
+ /** What the plan is for, above the steps. */
54
+ description?: JSX.Element;
55
+ /** True while the plan is still being generated. */
56
+ streaming?: boolean;
57
+ /** Controls for the reader: approve, edit, run. Absent means there are none. */
58
+ actions?: JSX.Element;
59
+ };
60
+ export declare function Plan(props: PlanProps): JSX.Element;
61
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/plan/plan.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAA;AAExE,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC5E,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAKhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,CAAA;AAE3C,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,cAAc,CAAA;CACxB,CAAC,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,IAAI,CAC1B,cAAc,EACd,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CAC/F,GAAG;IACF,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC1B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gFAAgF;IAChF,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CACtB,CAAA;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,eA6EpC"}
@@ -0,0 +1,130 @@
1
+ import { Progress } from "../../ui/progress/progress.js";
2
+ import { TraceDetail, TraceLine } from "../../ui/trace/trace.js";
3
+ import { TaskItemList, TaskItemRow, taskProgress, taskProgressLabel } from "../task/task.js";
4
+ import { createComponent, insert, memo, mergeProps, template } from "solid-js/web";
5
+ import { ListTodo } from "lucide-solid";
6
+ import { Index, Show, createMemo, splitProps } from "solid-js";
7
+ //#region src/components/composites/plan/plan.tsx
8
+ var _tmpl$ = /*#__PURE__*/ template(`<div class="text-sm text-muted-foreground">`);
9
+ var _tmpl$2 = /*#__PURE__*/ template(`<span class=streaming-caret aria-hidden=true>`);
10
+ var _tmpl$3 = /*#__PURE__*/ template(`<div data-slot=plan-actions class="flex flex-wrap items-center gap-2 pt-1">`);
11
+ var deferred = (render) => render;
12
+ function Plan(props) {
13
+ const [local, rest] = splitProps(props, [
14
+ "steps",
15
+ "description",
16
+ "streaming",
17
+ "actions",
18
+ "icon",
19
+ "meta",
20
+ "defaultOpen"
21
+ ]);
22
+ const progress = createMemo(() => local.streaming ? void 0 : taskProgress(local.steps));
23
+ const meta = () => {
24
+ if (local.meta !== void 0) return local.meta;
25
+ if (local.streaming) return "Drafting";
26
+ const value = progress();
27
+ return value ? taskProgressLabel(value) : void 0;
28
+ };
29
+ const hasDetail = () => local.steps.length > 0 || local.description !== void 0 || local.actions !== void 0 || local.streaming === true;
30
+ const detail = () => createComponent(TraceDetail, {
31
+ "class": "flex flex-col gap-2",
32
+ get children() {
33
+ return [
34
+ createComponent(Show, {
35
+ get when() {
36
+ return local.description;
37
+ },
38
+ get children() {
39
+ var _el$ = _tmpl$();
40
+ insert(_el$, () => local.description);
41
+ return _el$;
42
+ }
43
+ }),
44
+ createComponent(Show, {
45
+ get when() {
46
+ return progress();
47
+ },
48
+ children: (value) => createComponent(Progress, {
49
+ get value() {
50
+ return value().done;
51
+ },
52
+ minValue: 0,
53
+ get maxValue() {
54
+ return Math.max(1, value().total);
55
+ },
56
+ "aria-label": "Plan progress",
57
+ getValueLabel: ({ value: done, max }) => `${done} of ${max} ${max === 1 ? "step" : "steps"} done`
58
+ })
59
+ }),
60
+ createComponent(Show, {
61
+ get when() {
62
+ return local.steps.length > 0;
63
+ },
64
+ get children() {
65
+ return createComponent(TaskItemList, {
66
+ label: "Plan steps",
67
+ get children() {
68
+ return createComponent(Index, {
69
+ get each() {
70
+ return local.steps;
71
+ },
72
+ children: (step) => createComponent(TaskItemRow, {
73
+ get text() {
74
+ return step().label;
75
+ },
76
+ get description() {
77
+ return step().description;
78
+ },
79
+ get status() {
80
+ return step().status;
81
+ }
82
+ })
83
+ });
84
+ }
85
+ });
86
+ }
87
+ }),
88
+ createComponent(Show, {
89
+ get when() {
90
+ return local.streaming;
91
+ },
92
+ get children() {
93
+ return _tmpl$2();
94
+ }
95
+ }),
96
+ createComponent(Show, {
97
+ get when() {
98
+ return local.actions;
99
+ },
100
+ get children() {
101
+ var _el$3 = _tmpl$3();
102
+ insert(_el$3, () => local.actions);
103
+ return _el$3;
104
+ }
105
+ })
106
+ ];
107
+ }
108
+ });
109
+ return createComponent(TraceLine, mergeProps({
110
+ get icon() {
111
+ return local.icon ?? createComponent(ListTodo, {});
112
+ },
113
+ get status() {
114
+ return local.streaming ? "running" : void 0;
115
+ },
116
+ statusLabel: "Generating",
117
+ get meta() {
118
+ return meta();
119
+ },
120
+ get defaultOpen() {
121
+ return local.defaultOpen ?? true;
122
+ }
123
+ }, rest, { get children() {
124
+ return memo(() => !!hasDetail())() ? deferred(detail) : void 0;
125
+ } }));
126
+ }
127
+ //#endregion
128
+ export { Plan };
129
+
130
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","names":["ListTodo","createMemo","Index","Show","splitProps","JSX","Progress","TraceDetail","TraceLine","TraceLineProps","TaskItemList","TaskItemRow","taskProgress","taskProgressLabel","TaskItemStatus","deferred","render","Element","PlanStepStatus","PlanStep","Readonly","id","label","description","status","PlanProps","Omit","steps","streaming","actions","Plan","props","local","rest","progress","undefined","meta","value","hasDetail","length","detail","_$createComponent","children","when","_el$","_tmpl$","_$insert","done","minValue","maxValue","Math","max","total","getValueLabel","each","step","text","_tmpl$2","_el$3","_tmpl$3","_$mergeProps","icon","statusLabel","defaultOpen","_$memo","_$createComponent","_$mergeProps","_$memo"],"sources":["../../../../src/components/composites/plan/plan.tsx"],"sourcesContent":["import { ListTodo } from 'lucide-solid'\nimport { createMemo, Index, Show, splitProps, type JSX } from 'solid-js'\nimport { Progress } from '../../ui/progress'\nimport { TraceDetail, TraceLine, type TraceLineProps } from '../../ui/trace'\nimport {\n TaskItemList,\n TaskItemRow,\n taskProgress,\n taskProgressLabel,\n type TaskItemStatus,\n} from '../task'\n\n// A function child runs once, when the content mounts (see `deferred` in `tool.tsx`).\nconst deferred = (render: () => JSX.Element) => render as unknown as JSX.Element\n\n/**\n * Plan.\n *\n * What the agent intends to do, as a `TraceLine` that opens onto the steps: a\n * title, an optional description, the steps with their status, how far along\n * they are, and — when the host supplies them — the actions the reader can take\n * (approve, edit, run). Reach for `Task` when the list is a unit of work that is\n * already under way and not a proposal, for `Queue` when it is the agent's\n * running todo list, and for `ChainOfThought` when the steps describe how an\n * answer was reached rather than what will be done.\n *\n * ## It opens by default\n *\n * Unlike a tool call, the plan is the thing being decided or followed, so it\n * starts open (`defaultOpen={false}` folds it). A plan with no steps, no\n * description and no actions is a plain line.\n *\n * ## Progress is derived, in words\n *\n * \"2 of 5 steps done\" and the bar come from the steps' own `status` and appear\n * only when at least one step has one; a step with no status counts toward the\n * total and not toward \"done\" (the host did not say it was finished). The bar is\n * the shared `Progress`, which publishes the same phrase to assistive\n * technology, so the number is never only a length.\n *\n * ## Streaming\n *\n * While `streaming` the plan is still being written, so its length is not known\n * and no progress is claimed: the title shimmers, the line says \"Drafting\", and\n * a caret trails the last step. Finished steps keep their DOM while the last one\n * grows (rows are kept by position).\n *\n * ## The host owns authority\n *\n * `actions` is a slot. The plan neither enables nor disables what is in it, and\n * with no `actions` there are no controls — a plan the reader may not approve\n * simply has no Approve button.\n *\n * A `Plan` is a line: place it inside a `Trace`.\n */\nexport type PlanStepStatus = TaskItemStatus\n\nexport type PlanStep = Readonly<{\n id?: string\n label: string\n description?: string\n status?: PlanStepStatus\n}>\n\nexport type PlanProps = Omit<\n TraceLineProps,\n 'description' | 'href' | 'onSelect' | 'selectHaspopup' | 'children' | 'status' | 'statusLabel'\n> & {\n steps: readonly PlanStep[]\n /** What the plan is for, above the steps. */\n description?: JSX.Element\n /** True while the plan is still being generated. */\n streaming?: boolean\n /** Controls for the reader: approve, edit, run. Absent means there are none. */\n actions?: JSX.Element\n}\n\nexport function Plan(props: PlanProps) {\n const [local, rest] = splitProps(props, [\n 'steps',\n 'description',\n 'streaming',\n 'actions',\n 'icon',\n 'meta',\n 'defaultOpen',\n ])\n const progress = createMemo(() => (local.streaming ? undefined : taskProgress(local.steps)))\n const meta = () => {\n if (local.meta !== undefined) return local.meta\n if (local.streaming) return 'Drafting'\n const value = progress()\n return value ? taskProgressLabel(value) : undefined\n }\n const hasDetail = () =>\n local.steps.length > 0 ||\n local.description !== undefined ||\n local.actions !== undefined ||\n local.streaming === true\n\n const detail = () => (\n <TraceDetail class=\"flex flex-col gap-2\">\n <Show when={local.description}>\n <div class=\"text-sm text-muted-foreground\">{local.description}</div>\n </Show>\n <Show when={progress()}>\n {(value) => (\n <Progress\n value={value().done}\n minValue={0}\n maxValue={Math.max(1, value().total)}\n aria-label=\"Plan progress\"\n getValueLabel={({ value: done, max }) =>\n `${done} of ${max} ${max === 1 ? 'step' : 'steps'} done`\n }\n />\n )}\n </Show>\n <Show when={local.steps.length > 0}>\n <TaskItemList label=\"Plan steps\">\n <Index each={local.steps}>\n {(step) => (\n <TaskItemRow\n text={step().label}\n description={step().description}\n status={step().status}\n />\n )}\n </Index>\n </TaskItemList>\n </Show>\n <Show when={local.streaming}>\n <span class=\"streaming-caret\" aria-hidden=\"true\" />\n </Show>\n <Show when={local.actions}>\n <div data-slot=\"plan-actions\" class=\"flex flex-wrap items-center gap-2 pt-1\">\n {local.actions}\n </div>\n </Show>\n </TraceDetail>\n )\n\n return (\n <TraceLine\n icon={local.icon ?? <ListTodo />}\n status={local.streaming ? 'running' : undefined}\n statusLabel=\"Generating\"\n meta={meta()}\n defaultOpen={local.defaultOpen ?? true}\n {...rest}\n >\n {hasDetail() ? deferred(detail) : undefined}\n </TraceLine>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { partitionQueue, Queue, QueueFollowUps, type QueueFollowUp, type QueueFollowUpsProps, type QueueItem, type QueueItemStatus, type QueueProps, } from './queue';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,UAAU,GAChB,MAAM,SAAS,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { Queue, QueueFollowUps, partitionQueue } from "./queue.js";
2
+ export { Queue, QueueFollowUps, partitionQueue };
@@ -0,0 +1,77 @@
1
+ import { type ComponentProps, type JSX } from 'solid-js';
2
+ import { Trace } from '../../ui/trace';
3
+ /**
4
+ * Queue.
5
+ *
6
+ * The agent's todo list, split the way a reader asks about it: what is still to
7
+ * do, and what is already done. Two collapsible sections with their counts,
8
+ * "Pending" open and "Completed" folded — the finished work is the record, the
9
+ * pending work is the question. Reach for `Plan` when the list is a proposal
10
+ * awaiting a decision, for `Task` when it is one piece of work with files
11
+ * attached, and for `QueueFollowUps` (below) when the things waiting are
12
+ * *messages from the person*, not work the agent set itself.
13
+ *
14
+ * ## Sorting is the host's statement, not ours
15
+ *
16
+ * An item is in the Completed section only if its `status` is `complete`.
17
+ * Everything else — `pending`, `active`, or no status at all — is still to do,
18
+ * which is what "not marked done" means; the mark shown matches (an item with
19
+ * no status gets the pending mark, because it is in the Pending section). An
20
+ * empty section is not drawn: "Completed (0)" is noise, and a list with nothing
21
+ * in either section renders nothing, or the `empty` content if the host gave
22
+ * some, rather than a heading over a void.
23
+ *
24
+ * ## Bounded
25
+ *
26
+ * Each section scrolls inside a capped, keyboard-focusable region, and rows are
27
+ * kept by position, so a list of two hundred items does not push the answer out
28
+ * of view and a status change updates a row instead of recreating it. Item text
29
+ * wraps to three lines and is clamped (see `Task`).
30
+ *
31
+ * A `Queue` is a block (its own `Trace`) and can sit between other parts of a
32
+ * turn.
33
+ */
34
+ export type QueueItemStatus = 'pending' | 'active' | 'complete';
35
+ export type QueueItem = Readonly<{
36
+ id?: string;
37
+ text: string;
38
+ description?: string;
39
+ status?: QueueItemStatus;
40
+ }>;
41
+ /** Split a todo list into the two sections. Order is preserved within each. */
42
+ export declare function partitionQueue(items: readonly QueueItem[]): Readonly<{
43
+ pending: readonly QueueItem[];
44
+ completed: readonly QueueItem[];
45
+ }>;
46
+ export type QueueProps = Omit<ComponentProps<typeof Trace>, 'children'> & {
47
+ items: readonly QueueItem[];
48
+ pendingLabel?: string;
49
+ completedLabel?: string;
50
+ /** Shown when there is nothing in either section. Omit to draw nothing. */
51
+ empty?: JSX.Element;
52
+ /** Open the Completed section initially. */
53
+ defaultCompletedOpen?: boolean;
54
+ };
55
+ export declare function Queue(props: QueueProps): JSX.Element;
56
+ export type QueueFollowUp = Readonly<{
57
+ id?: string;
58
+ text: string;
59
+ /** Removes it from the queue. Omit it and the row has no remove control. */
60
+ onRemove?: () => void;
61
+ }>;
62
+ export type QueueFollowUpsProps = Omit<ComponentProps<typeof Trace>, 'children'> & {
63
+ items: readonly QueueFollowUp[];
64
+ /** The section's title. */
65
+ title?: string;
66
+ defaultOpen?: boolean;
67
+ };
68
+ /**
69
+ * Follow-up messages the person sent that have not been delivered yet. They are
70
+ * the person's words, so they are shown as sent (wrapped, clamped to three
71
+ * lines) rather than as work. The remove control exists per message only when
72
+ * that message carries `onRemove`: whether it may still be withdrawn is the
73
+ * runtime's to say, and a message past recall simply has no button. With no
74
+ * messages the component draws nothing.
75
+ */
76
+ export declare function QueueFollowUps(props: QueueFollowUpsProps): JSX.Element;
77
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/queue/queue.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,GAAG,EACT,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,KAAK,EAAa,MAAM,gBAAgB,CAAA;AAMjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;AAE/D,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,eAAe,CAAA;CACzB,CAAC,CAAA;AAEF,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,QAAQ,CAAC;IACpE,OAAO,EAAE,SAAS,SAAS,EAAE,CAAA;IAC7B,SAAS,EAAE,SAAS,SAAS,EAAE,CAAA;CAChC,CAAC,CAKD;AAgBD,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG;IACxE,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACnB,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAA;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,eAyEtC;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB,CAAC,CAAA;AAuDF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG;IACjF,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;IAC/B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,eAqBxD"}
@@ -0,0 +1,271 @@
1
+ import { Button } from "../../ui/button/button.js";
2
+ import { Trace, TraceLine } from "../../ui/trace/trace.js";
3
+ import { TaskItemList, TaskItemRow } from "../task/task.js";
4
+ import { createComponent, effect, insert, mergeProps, setAttribute, template } from "solid-js/web";
5
+ import { CornerDownRight, ListChecks, ListTodo, MessageSquarePlus, X } from "lucide-solid";
6
+ import { Index, Show, createMemo, onCleanup, splitProps } from "solid-js";
7
+ //#region src/components/composites/queue/queue.tsx
8
+ var _tmpl$ = /*#__PURE__*/ template(`<span aria-hidden=true>`);
9
+ var _tmpl$2 = /*#__PURE__*/ template(`<span class=sr-only>`);
10
+ var _tmpl$3 = /*#__PURE__*/ template(`<li data-slot=queue-follow-up class="flex min-w-0 items-start gap-2 rounded-md px-1.5 py-0.5"><p class="m-0 line-clamp-3 min-w-0 flex-1 text-sm [overflow-wrap:anywhere] whitespace-pre-wrap text-foreground">`);
11
+ var deferred = (render) => render;
12
+ /** Split a todo list into the two sections. Order is preserved within each. */
13
+ function partitionQueue(items) {
14
+ return {
15
+ pending: items.filter((item) => item.status !== "complete"),
16
+ completed: items.filter((item) => item.status === "complete")
17
+ };
18
+ }
19
+ function itemCount(count) {
20
+ return `${count} ${count === 1 ? "item" : "items"}`;
21
+ }
22
+ /** The count, shown as a number and spoken as a phrase. */
23
+ function Count(props) {
24
+ return [(() => {
25
+ var _el$ = _tmpl$();
26
+ insert(_el$, () => props.count);
27
+ return _el$;
28
+ })(), (() => {
29
+ var _el$2 = _tmpl$2();
30
+ insert(_el$2, () => props.noun ?? itemCount(props.count));
31
+ return _el$2;
32
+ })()];
33
+ }
34
+ function Queue(props) {
35
+ const [local, rest] = splitProps(props, [
36
+ "items",
37
+ "pendingLabel",
38
+ "completedLabel",
39
+ "empty",
40
+ "defaultCompletedOpen"
41
+ ]);
42
+ const sections = createMemo(() => partitionQueue(local.items));
43
+ const pending = () => sections().pending;
44
+ const completed = () => sections().completed;
45
+ const pendingLabel = () => local.pendingLabel ?? "Pending";
46
+ const completedLabel = () => local.completedLabel ?? "Completed";
47
+ return createComponent(Show, {
48
+ get when() {
49
+ return local.items.length > 0;
50
+ },
51
+ get fallback() {
52
+ return createComponent(Show, {
53
+ get when() {
54
+ return local.empty;
55
+ },
56
+ get children() {
57
+ return createComponent(Trace, mergeProps({ "aria-label": "Queue" }, rest, { get children() {
58
+ return createComponent(TraceLine, { get title() {
59
+ return local.empty;
60
+ } });
61
+ } }));
62
+ }
63
+ });
64
+ },
65
+ get children() {
66
+ return createComponent(Trace, mergeProps({ "aria-label": "Queue" }, rest, { get children() {
67
+ return [createComponent(Show, {
68
+ get when() {
69
+ return pending().length > 0;
70
+ },
71
+ get children() {
72
+ return createComponent(TraceLine, {
73
+ get icon() {
74
+ return createComponent(ListTodo, {});
75
+ },
76
+ get title() {
77
+ return pendingLabel();
78
+ },
79
+ get meta() {
80
+ return createComponent(Count, { get count() {
81
+ return pending().length;
82
+ } });
83
+ },
84
+ defaultOpen: true,
85
+ get children() {
86
+ return deferred(() => createComponent(TaskItemList, {
87
+ get label() {
88
+ return pendingLabel();
89
+ },
90
+ get children() {
91
+ return createComponent(Index, {
92
+ get each() {
93
+ return pending();
94
+ },
95
+ children: (item) => createComponent(TaskItemRow, {
96
+ get text() {
97
+ return item().text;
98
+ },
99
+ get description() {
100
+ return item().description;
101
+ },
102
+ get status() {
103
+ return item().status ?? "pending";
104
+ }
105
+ })
106
+ });
107
+ }
108
+ }));
109
+ }
110
+ });
111
+ }
112
+ }), createComponent(Show, {
113
+ get when() {
114
+ return completed().length > 0;
115
+ },
116
+ get children() {
117
+ return createComponent(TraceLine, {
118
+ get icon() {
119
+ return createComponent(ListChecks, {});
120
+ },
121
+ get title() {
122
+ return completedLabel();
123
+ },
124
+ get meta() {
125
+ return createComponent(Count, { get count() {
126
+ return completed().length;
127
+ } });
128
+ },
129
+ get defaultOpen() {
130
+ return local.defaultCompletedOpen ?? false;
131
+ },
132
+ get children() {
133
+ return deferred(() => createComponent(TaskItemList, {
134
+ get label() {
135
+ return completedLabel();
136
+ },
137
+ get children() {
138
+ return createComponent(Index, {
139
+ get each() {
140
+ return completed();
141
+ },
142
+ children: (item) => createComponent(TaskItemRow, {
143
+ get text() {
144
+ return item().text;
145
+ },
146
+ get description() {
147
+ return item().description;
148
+ },
149
+ status: "complete"
150
+ })
151
+ });
152
+ }
153
+ }));
154
+ }
155
+ });
156
+ }
157
+ })];
158
+ } }));
159
+ }
160
+ });
161
+ }
162
+ var REMOVE_LABEL_CHARS = 60;
163
+ function FollowUpRow(props) {
164
+ let remove;
165
+ onCleanup(() => {
166
+ if (!remove || document.activeElement !== remove) return;
167
+ const buttons = remove.closest("ul")?.querySelectorAll("button[data-slot=\"queue-follow-up-remove\"]");
168
+ Array.from(buttons ?? []).filter((button) => button !== remove).at(-1)?.focus();
169
+ });
170
+ const text = () => props.item.text.length > 1e3 ? `${props.item.text.slice(0, 1e3)}…` : props.item.text;
171
+ const label = () => props.item.text.length > REMOVE_LABEL_CHARS ? `${props.item.text.slice(0, REMOVE_LABEL_CHARS)}…` : props.item.text;
172
+ return (() => {
173
+ var _el$3 = _tmpl$3(), _el$4 = _el$3.firstChild;
174
+ insert(_el$3, createComponent(CornerDownRight, {
175
+ "aria-hidden": "true",
176
+ "class": "mt-0.5 size-3.5 shrink-0 text-muted-foreground"
177
+ }), _el$4);
178
+ insert(_el$4, text);
179
+ insert(_el$3, createComponent(Show, {
180
+ get when() {
181
+ return props.item.onRemove;
182
+ },
183
+ children: (onRemove) => createComponent(Button, {
184
+ ref: (element) => remove = element,
185
+ "data-slot": "queue-follow-up-remove",
186
+ type: "button",
187
+ variant: "ghost",
188
+ size: "icon-2xs",
189
+ "class": "shrink-0",
190
+ get ["aria-label"]() {
191
+ return `Remove queued message: ${label()}`;
192
+ },
193
+ onClick: () => onRemove()(),
194
+ get children() {
195
+ return createComponent(X, { "aria-hidden": "true" });
196
+ }
197
+ })
198
+ }), null);
199
+ effect(() => setAttribute(_el$4, "title", text()));
200
+ return _el$3;
201
+ })();
202
+ }
203
+ /**
204
+ * Follow-up messages the person sent that have not been delivered yet. They are
205
+ * the person's words, so they are shown as sent (wrapped, clamped to three
206
+ * lines) rather than as work. The remove control exists per message only when
207
+ * that message carries `onRemove`: whether it may still be withdrawn is the
208
+ * runtime's to say, and a message past recall simply has no button. With no
209
+ * messages the component draws nothing.
210
+ */
211
+ function QueueFollowUps(props) {
212
+ const [local, rest] = splitProps(props, [
213
+ "items",
214
+ "title",
215
+ "defaultOpen"
216
+ ]);
217
+ const title = () => local.title ?? "Queued follow-ups";
218
+ return createComponent(Show, {
219
+ get when() {
220
+ return local.items.length > 0;
221
+ },
222
+ get children() {
223
+ return createComponent(Trace, mergeProps({ get ["aria-label"]() {
224
+ return title();
225
+ } }, rest, { get children() {
226
+ return createComponent(TraceLine, {
227
+ get icon() {
228
+ return createComponent(MessageSquarePlus, {});
229
+ },
230
+ get title() {
231
+ return title();
232
+ },
233
+ get meta() {
234
+ return createComponent(Count, {
235
+ get count() {
236
+ return local.items.length;
237
+ },
238
+ get noun() {
239
+ return `${local.items.length} waiting`;
240
+ }
241
+ });
242
+ },
243
+ get defaultOpen() {
244
+ return local.defaultOpen ?? true;
245
+ },
246
+ get children() {
247
+ return deferred(() => createComponent(TaskItemList, {
248
+ get label() {
249
+ return title();
250
+ },
251
+ get children() {
252
+ return createComponent(Index, {
253
+ get each() {
254
+ return local.items;
255
+ },
256
+ children: (item) => createComponent(FollowUpRow, { get item() {
257
+ return item();
258
+ } })
259
+ });
260
+ }
261
+ }));
262
+ }
263
+ });
264
+ } }));
265
+ }
266
+ });
267
+ }
268
+ //#endregion
269
+ export { Queue, QueueFollowUps, partitionQueue };
270
+
271
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","names":["CornerDownRight","ListChecks","ListTodo","MessageSquarePlus","X","createMemo","Index","onCleanup","Show","splitProps","ComponentProps","JSX","Button","Trace","TraceLine","TaskItemList","TaskItemRow","deferred","render","Element","QueueItemStatus","QueueItem","Readonly","id","text","description","status","partitionQueue","items","pending","completed","filter","item","itemCount","count","Count","props","noun","_el$","_tmpl$","_$insert","_el$2","_tmpl$2","QueueProps","Omit","pendingLabel","completedLabel","empty","defaultCompletedOpen","Queue","local","rest","sections","_$createComponent","when","length","fallback","children","_$mergeProps","title","icon","meta","defaultOpen","label","each","QueueFollowUp","onRemove","REMOVE_LABEL_CHARS","FollowUpRow","remove","HTMLButtonElement","document","activeElement","buttons","closest","querySelectorAll","previous","Array","from","button","at","focus","slice","_el$3","_tmpl$3","_el$4","firstChild","ref","element","type","variant","size","aria-label","onClick","_$effect","_$setAttribute","QueueFollowUpsProps","QueueFollowUps","_$createComponent","_$mergeProps","_$setAttribute"],"sources":["../../../../src/components/composites/queue/queue.tsx"],"sourcesContent":["import { CornerDownRight, ListChecks, ListTodo, MessageSquarePlus, X } from 'lucide-solid'\nimport {\n createMemo,\n Index,\n onCleanup,\n Show,\n splitProps,\n type ComponentProps,\n type JSX,\n} from 'solid-js'\nimport { Button } from '../../ui/button'\nimport { Trace, TraceLine } from '../../ui/trace'\nimport { TaskItemList, TaskItemRow } from '../task'\n\n// A function child runs once, when the content mounts (see `deferred` in `tool.tsx`).\nconst deferred = (render: () => JSX.Element) => render as unknown as JSX.Element\n\n/**\n * Queue.\n *\n * The agent's todo list, split the way a reader asks about it: what is still to\n * do, and what is already done. Two collapsible sections with their counts,\n * \"Pending\" open and \"Completed\" folded — the finished work is the record, the\n * pending work is the question. Reach for `Plan` when the list is a proposal\n * awaiting a decision, for `Task` when it is one piece of work with files\n * attached, and for `QueueFollowUps` (below) when the things waiting are\n * *messages from the person*, not work the agent set itself.\n *\n * ## Sorting is the host's statement, not ours\n *\n * An item is in the Completed section only if its `status` is `complete`.\n * Everything else — `pending`, `active`, or no status at all — is still to do,\n * which is what \"not marked done\" means; the mark shown matches (an item with\n * no status gets the pending mark, because it is in the Pending section). An\n * empty section is not drawn: \"Completed (0)\" is noise, and a list with nothing\n * in either section renders nothing, or the `empty` content if the host gave\n * some, rather than a heading over a void.\n *\n * ## Bounded\n *\n * Each section scrolls inside a capped, keyboard-focusable region, and rows are\n * kept by position, so a list of two hundred items does not push the answer out\n * of view and a status change updates a row instead of recreating it. Item text\n * wraps to three lines and is clamped (see `Task`).\n *\n * A `Queue` is a block (its own `Trace`) and can sit between other parts of a\n * turn.\n */\nexport type QueueItemStatus = 'pending' | 'active' | 'complete'\n\nexport type QueueItem = Readonly<{\n id?: string\n text: string\n description?: string\n status?: QueueItemStatus\n}>\n\n/** Split a todo list into the two sections. Order is preserved within each. */\nexport function partitionQueue(items: readonly QueueItem[]): Readonly<{\n pending: readonly QueueItem[]\n completed: readonly QueueItem[]\n}> {\n return {\n pending: items.filter((item) => item.status !== 'complete'),\n completed: items.filter((item) => item.status === 'complete'),\n }\n}\n\nfunction itemCount(count: number): string {\n return `${count} ${count === 1 ? 'item' : 'items'}`\n}\n\n/** The count, shown as a number and spoken as a phrase. */\nfunction Count(props: { count: number; noun?: string }) {\n return (\n <>\n <span aria-hidden=\"true\">{props.count}</span>\n <span class=\"sr-only\">{props.noun ?? itemCount(props.count)}</span>\n </>\n )\n}\n\nexport type QueueProps = Omit<ComponentProps<typeof Trace>, 'children'> & {\n items: readonly QueueItem[]\n pendingLabel?: string\n completedLabel?: string\n /** Shown when there is nothing in either section. Omit to draw nothing. */\n empty?: JSX.Element\n /** Open the Completed section initially. */\n defaultCompletedOpen?: boolean\n}\n\nexport function Queue(props: QueueProps) {\n const [local, rest] = splitProps(props, [\n 'items',\n 'pendingLabel',\n 'completedLabel',\n 'empty',\n 'defaultCompletedOpen',\n ])\n const sections = createMemo(() => partitionQueue(local.items))\n const pending = () => sections().pending\n const completed = () => sections().completed\n const pendingLabel = () => local.pendingLabel ?? 'Pending'\n const completedLabel = () => local.completedLabel ?? 'Completed'\n\n return (\n <Show\n when={local.items.length > 0}\n fallback={\n <Show when={local.empty}>\n <Trace aria-label=\"Queue\" {...rest}>\n <TraceLine title={local.empty} />\n </Trace>\n </Show>\n }\n >\n <Trace aria-label=\"Queue\" {...rest}>\n <Show when={pending().length > 0}>\n <TraceLine\n icon={<ListTodo />}\n title={pendingLabel()}\n meta={<Count count={pending().length} />}\n defaultOpen\n >\n {deferred(() => (\n <TaskItemList label={pendingLabel()}>\n <Index each={pending()}>\n {(item) => (\n <TaskItemRow\n text={item().text}\n description={item().description}\n status={item().status ?? 'pending'}\n />\n )}\n </Index>\n </TaskItemList>\n ))}\n </TraceLine>\n </Show>\n <Show when={completed().length > 0}>\n <TraceLine\n icon={<ListChecks />}\n title={completedLabel()}\n meta={<Count count={completed().length} />}\n defaultOpen={local.defaultCompletedOpen ?? false}\n >\n {deferred(() => (\n <TaskItemList label={completedLabel()}>\n <Index each={completed()}>\n {(item) => (\n <TaskItemRow\n text={item().text}\n description={item().description}\n status=\"complete\"\n />\n )}\n </Index>\n </TaskItemList>\n ))}\n </TraceLine>\n </Show>\n </Trace>\n </Show>\n )\n}\n\nexport type QueueFollowUp = Readonly<{\n id?: string\n text: string\n /** Removes it from the queue. Omit it and the row has no remove control. */\n onRemove?: () => void\n}>\n\nconst REMOVE_LABEL_CHARS = 60\n\nfunction FollowUpRow(props: { item: QueueFollowUp }) {\n let remove: HTMLButtonElement | undefined\n\n // Rows are kept by position, so removing a middle row leaves the focused\n // button where it is (now on the next message). Only the last row is ever\n // disposed under focus; hand focus to the one before it rather than to `body`.\n onCleanup(() => {\n if (!remove || document.activeElement !== remove) return\n const buttons = remove\n .closest('ul')\n ?.querySelectorAll<HTMLButtonElement>('button[data-slot=\"queue-follow-up-remove\"]')\n const previous = Array.from(buttons ?? []).filter((button) => button !== remove)\n previous.at(-1)?.focus()\n })\n\n const text = () =>\n props.item.text.length > 1_000 ? `${props.item.text.slice(0, 1_000)}…` : props.item.text\n const label = () =>\n props.item.text.length > REMOVE_LABEL_CHARS\n ? `${props.item.text.slice(0, REMOVE_LABEL_CHARS)}…`\n : props.item.text\n\n return (\n <li data-slot=\"queue-follow-up\" class=\"flex min-w-0 items-start gap-2 rounded-md px-1.5 py-0.5\">\n <CornerDownRight aria-hidden=\"true\" class=\"mt-0.5 size-3.5 shrink-0 text-muted-foreground\" />\n <p\n title={text()}\n class=\"m-0 line-clamp-3 min-w-0 flex-1 text-sm [overflow-wrap:anywhere] whitespace-pre-wrap text-foreground\"\n >\n {text()}\n </p>\n <Show when={props.item.onRemove}>\n {(onRemove) => (\n <Button\n ref={(element) => (remove = element)}\n data-slot=\"queue-follow-up-remove\"\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-2xs\"\n class=\"shrink-0\"\n aria-label={`Remove queued message: ${label()}`}\n onClick={() => onRemove()()}\n >\n <X aria-hidden=\"true\" />\n </Button>\n )}\n </Show>\n </li>\n )\n}\n\nexport type QueueFollowUpsProps = Omit<ComponentProps<typeof Trace>, 'children'> & {\n items: readonly QueueFollowUp[]\n /** The section's title. */\n title?: string\n defaultOpen?: boolean\n}\n\n/**\n * Follow-up messages the person sent that have not been delivered yet. They are\n * the person's words, so they are shown as sent (wrapped, clamped to three\n * lines) rather than as work. The remove control exists per message only when\n * that message carries `onRemove`: whether it may still be withdrawn is the\n * runtime's to say, and a message past recall simply has no button. With no\n * messages the component draws nothing.\n */\nexport function QueueFollowUps(props: QueueFollowUpsProps) {\n const [local, rest] = splitProps(props, ['items', 'title', 'defaultOpen'])\n const title = () => local.title ?? 'Queued follow-ups'\n return (\n <Show when={local.items.length > 0}>\n <Trace aria-label={title()} {...rest}>\n <TraceLine\n icon={<MessageSquarePlus />}\n title={title()}\n meta={<Count count={local.items.length} noun={`${local.items.length} waiting`} />}\n defaultOpen={local.defaultOpen ?? true}\n >\n {deferred(() => (\n <TaskItemList label={title()}>\n <Index each={local.items}>{(item) => <FollowUpRow item={item()} />}</Index>\n </TaskItemList>\n ))}\n </TraceLine>\n </Trace>\n </Show>\n )\n}\n"],"mappings":";;;;;;;;;;AAeA,IAAMiB,YAAYC,WAA8BA;;AA2ChD,SAAgBS,eAAeC,OAG5B;CACD,OAAO;EACLC,SAASD,MAAMG,QAAQC,SAASA,KAAKN,WAAW,UAAU;EAC1DI,WAAWF,MAAMG,QAAQC,SAASA,KAAKN,WAAW,UAAU;CAC9D;AACF;AAEA,SAASO,UAAUC,OAAuB;CACxC,OAAO,GAAGA,MAAK,GAAIA,UAAU,IAAI,SAAS;AAC5C;;AAGA,SAASC,MAAMC,OAAyC;CACtD,OAAA,QAAA;EAAA,IAAAE,OAAAC,OAAA;EAAAC,OAAAF,YAE8BF,MAAMF,KAAK;EAAA,OAAAI;CAAA,EAAA,CAAA,UAAA;EAAA,IAAAG,QAAAC,QAAA;EAAAF,OAAAC,aACdL,MAAMC,QAAQJ,UAAUG,MAAMF,KAAK,CAAC;EAAA,OAAAO;CAAA,EAAA,CAAA,CAAA;AAGjE;AAYA,SAAgBQ,MAAMb,OAAmB;CACvC,MAAM,CAACc,OAAOC,QAAQ1C,WAAW2B,OAAO;EACtC;EACA;EACA;EACA;EACA;CAAsB,CACvB;CACD,MAAMgB,WAAW/C,iBAAiBsB,eAAeuB,MAAMtB,KAAK,CAAC;CAC7D,MAAMC,gBAAgBuB,SAAS,CAAC,CAACvB;CACjC,MAAMC,kBAAkBsB,SAAS,CAAC,CAACtB;CACnC,MAAMe,qBAAqBK,MAAML,gBAAgB;CACjD,MAAMC,uBAAuBI,MAAMJ,kBAAkB;CAErD,OAAAO,gBACG7C,MAAI;EAAA,IACH8C,OAAI;GAAA,OAAEJ,MAAMtB,MAAM2B,SAAS;EAAC;EAAA,IAC5BC,WAAQ;GAAA,OAAAH,gBACL7C,MAAI;IAAA,IAAC8C,OAAI;KAAA,OAAEJ,MAAMH;IAAK;IAAA,IAAAU,WAAA;KAAA,OAAAJ,gBACpBxC,OAAK6C,WAAA,EAAA,cAAA,QAAA,GAAwBP,MAAI,EAAA,IAAAM,WAAA;MAAA,OAAAJ,gBAC/BvC,WAAS,EAAA,IAAC6C,QAAK;OAAA,OAAET,MAAMH;MAAK,EAAA,CAAA;KAAA,EAAA,CAAA,CAAA;IAAA;GAAA,CAAA;EAAA;EAAA,IAAAU,WAAA;GAAA,OAAAJ,gBAKlCxC,OAAK6C,WAAA,EAAA,cAAA,QAAA,GAAwBP,MAAI,EAAA,IAAAM,WAAA;IAAA,OAAA,CAAAJ,gBAC/B7C,MAAI;KAAA,IAAC8C,OAAI;MAAA,OAAEzB,QAAQ,CAAC,CAAC0B,SAAS;KAAC;KAAA,IAAAE,WAAA;MAAA,OAAAJ,gBAC7BvC,WAAS;OAAA,IACR8C,OAAI;QAAA,OAAAP,gBAAGnD,UAAQ,CAAA,CAAA;OAAA;OAAA,IACfyD,QAAK;QAAA,OAAEd,aAAa;OAAC;OAAA,IACrBgB,OAAI;QAAA,OAAAR,gBAAGlB,OAAK,EAAA,IAACD,QAAK;SAAA,OAAEL,QAAQ,CAAC,CAAC0B;QAAM,EAAA,CAAA;OAAA;OACpCO,aAAW;OAAA,IAAAL,WAAA;QAAA,OAEVxC,eAASoC,gBACPtC,cAAY;SAAA,IAACgD,QAAK;UAAA,OAAElB,aAAa;SAAC;SAAA,IAAAY,WAAA;UAAA,OAAAJ,gBAChC/C,OAAK;WAAA,IAAC0D,OAAI;YAAA,OAAEnC,QAAQ;WAAC;WAAA4B,WAClBzB,SAAIqB,gBACHrC,aAAW;YAAA,IACVQ,OAAI;aAAA,OAAEQ,KAAK,CAAC,CAACR;YAAI;YAAA,IACjBC,cAAW;aAAA,OAAEO,KAAK,CAAC,CAACP;YAAW;YAAA,IAC/BC,SAAM;aAAA,OAAEM,KAAK,CAAC,CAACN,UAAU;YAAS;WAAA,CAAA;UAErC,CAAA;SAAA;QAAA,CAAA,CAGN;OAAC;MAAA,CAAA;KAAA;IAAA,CAAA,GAAA2B,gBAGL7C,MAAI;KAAA,IAAC8C,OAAI;MAAA,OAAExB,UAAU,CAAC,CAACyB,SAAS;KAAC;KAAA,IAAAE,WAAA;MAAA,OAAAJ,gBAC/BvC,WAAS;OAAA,IACR8C,OAAI;QAAA,OAAAP,gBAAGpD,YAAU,CAAA,CAAA;OAAA;OAAA,IACjB0D,QAAK;QAAA,OAAEb,eAAe;OAAC;OAAA,IACvBe,OAAI;QAAA,OAAAR,gBAAGlB,OAAK,EAAA,IAACD,QAAK;SAAA,OAAEJ,UAAU,CAAC,CAACyB;QAAM,EAAA,CAAA;OAAA;OAAA,IACtCO,cAAW;QAAA,OAAEZ,MAAMF,wBAAwB;OAAK;OAAA,IAAAS,WAAA;QAAA,OAE/CxC,eAASoC,gBACPtC,cAAY;SAAA,IAACgD,QAAK;UAAA,OAAEjB,eAAe;SAAC;SAAA,IAAAW,WAAA;UAAA,OAAAJ,gBAClC/C,OAAK;WAAA,IAAC0D,OAAI;YAAA,OAAElC,UAAU;WAAC;WAAA2B,WACpBzB,SAAIqB,gBACHrC,aAAW;YAAA,IACVQ,OAAI;aAAA,OAAEQ,KAAK,CAAC,CAACR;YAAI;YAAA,IACjBC,cAAW;aAAA,OAAEO,KAAK,CAAC,CAACP;YAAW;YAC/BC,QAAM;WAAA,CAAA;UAET,CAAA;SAAA;QAAA,CAAA,CAGN;OAAC;MAAA,CAAA;KAAA;IAAA,CAAA,CAAA;GAAA,EAAA,CAAA,CAAA;EAAA;CAAA,CAAA;AAMd;AASA,IAAMyC,qBAAqB;AAE3B,SAASC,YAAYhC,OAAgC;CACnD,IAAIiC;CAKJ9D,gBAAgB;EACd,IAAI,CAAC8D,UAAUE,SAASC,kBAAkBH,QAAQ;EAClD,MAAMI,UAAUJ,OACbK,QAAQ,IAAI,CAAC,EACZC,iBAAoC,8CAA4C;EAEpFC,MADuBE,KAAKL,WAAW,CAAA,CAAE,CAAC,CAAC1C,QAAQgD,WAAWA,WAAWV,MACzEO,CAAAA,CAASI,GAAG,EAAE,CAAC,EAAEC,MAAM;CACzB,CAAC;CAED,MAAMzD,aACJY,MAAMJ,KAAKR,KAAK+B,SAAS,MAAQ,GAAGnB,MAAMJ,KAAKR,KAAK0D,MAAM,GAAG,GAAK,EAAC,KAAM9C,MAAMJ,KAAKR;CACtF,MAAMuC,cACJ3B,MAAMJ,KAAKR,KAAK+B,SAASY,qBACrB,GAAG/B,MAAMJ,KAAKR,KAAK0D,MAAM,GAAGf,kBAAkB,EAAC,KAC/C/B,MAAMJ,KAAKR;CAEjB,cAAA;EAAA,IAAA2D,QAAAC,QAAA,GAAAC,QAAAF,MAAAG;EAAA9C,OAAA2C,OAAA9B,gBAEKrD,iBAAe;GAAA,eAAA;GAAA,SAAA;EAAA,CAAA,GAAAqF,KAAA;EAAA7C,OAAA6C,OAKb7D,IAAI;EAAAgB,OAAA2C,OAAA9B,gBAEN7C,MAAI;GAAA,IAAC8C,OAAI;IAAA,OAAElB,MAAMJ,KAAKkC;GAAQ;GAAAT,WAC3BS,aAAQb,gBACPzC,QAAM;IAAA2E,MACCC,YAAanB,SAASmB;IAAQ,aAAA;IAEpCC,MAAI;IACJC,SAAO;IACPC,MAAI;IAAA,SAAA;IAAA,KAAA,gBAAA;KAAA,OAEQ,0BAA0B5B,MAAM;IAAG;IAC/C8B,eAAe3B,SAAS,CAAC,CAAC;IAAC,IAAAT,WAAA;KAAA,OAAAJ,gBAE1BjD,GAAC,EAAA,eAAA,OAAA,CAAA;IAAA;GAAA,CAAA;EAEL,CAAA,GAAA,IAAA;EAAA0F,aAAAC,aAAAV,OAAA,SAnBM7D,KAAK,CAAC,CAAA;EAAA,OAAA2D;CAAA,EAAA,CAAA;AAuBrB;;;;;;;;;AAiBA,SAAgBc,eAAe7D,OAA4B;CACzD,MAAM,CAACc,OAAOC,QAAQ1C,WAAW2B,OAAO;EAAC;EAAS;EAAS;CAAa,CAAC;CACzE,MAAMuB,cAAcT,MAAMS,SAAS;CACnC,OAAAN,gBACG7C,MAAI;EAAA,IAAC8C,OAAI;GAAA,OAAEJ,MAAMtB,MAAM2B,SAAS;EAAC;EAAA,IAAAE,WAAA;GAAA,OAAAJ,gBAC/BxC,OAAK6C,WAAA,EAAA,KAAA,gBAAA;IAAA,OAAaC,MAAM;GAAC,EAAA,GAAMR,MAAI,EAAA,IAAAM,WAAA;IAAA,OAAAJ,gBACjCvC,WAAS;KAAA,IACR8C,OAAI;MAAA,OAAAP,gBAAGlD,mBAAiB,CAAA,CAAA;KAAA;KAAA,IACxBwD,QAAK;MAAA,OAAEA,MAAM;KAAC;KAAA,IACdE,OAAI;MAAA,OAAAR,gBAAGlB,OAAK;OAAA,IAACD,QAAK;QAAA,OAAEgB,MAAMtB,MAAM2B;OAAM;OAAA,IAAElB,OAAI;QAAA,OAAE,GAAGa,MAAMtB,MAAM2B,OAAM;OAAU;MAAA,CAAA;KAAA;KAAA,IAC7EO,cAAW;MAAA,OAAEZ,MAAMY,eAAe;KAAI;KAAA,IAAAL,WAAA;MAAA,OAErCxC,eAASoC,gBACPtC,cAAY;OAAA,IAACgD,QAAK;QAAA,OAAEJ,MAAM;OAAC;OAAA,IAAAF,WAAA;QAAA,OAAAJ,gBACzB/C,OAAK;SAAA,IAAC0D,OAAI;UAAA,OAAEd,MAAMtB;SAAK;SAAA6B,WAAIzB,SAAIqB,gBAAMe,aAAW,EAAA,IAACpC,OAAI;UAAA,OAAEA,KAAK;SAAC,EAAA,CAAA;QAAI,CAAA;OAAA;MAAA,CAAA,CAErE;KAAC;IAAA,CAAA;GAAA,EAAA,CAAA,CAAA;EAAA;CAAA,CAAA;AAKZ"}
@@ -0,0 +1,2 @@
1
+ export { formatDuration, Reasoning, reasoningTitle, type ReasoningProps } from './reasoning';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/composites/reasoning/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { Reasoning, formatDuration, reasoningTitle } from "./reasoning.js";
2
+ export { Reasoning, formatDuration, reasoningTitle };