@cueplusplus/ui 0.2.0 → 0.5.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 (628) hide show
  1. package/CHANGELOG.md +2250 -0
  2. package/dist/agent-runtime/_glyphs.js +43 -0
  3. package/dist/agent-runtime/branch-picker.d.ts +45 -0
  4. package/dist/agent-runtime/branch-picker.js +87 -0
  5. package/dist/agent-runtime/index.d.ts +4 -0
  6. package/dist/agent-runtime/index.js +4 -0
  7. package/dist/agent-runtime/tool-call-card.d.ts +69 -0
  8. package/dist/agent-runtime/tool-call-card.js +187 -0
  9. package/dist/agent-runtime/use-agent-thread.d.ts +164 -0
  10. package/dist/agent-runtime/use-agent-thread.js +251 -0
  11. package/dist/brand/_chassis.d.ts +1 -1
  12. package/dist/brand/cue-mark.d.ts +1 -1
  13. package/dist/brand/cue-mark.js +1 -1
  14. package/dist/chat/index.d.ts +2 -2
  15. package/dist/chat/message-list.d.ts +6 -0
  16. package/dist/chat/message-list.js +35 -0
  17. package/dist/chrome/_edge-scroller.js +12 -1
  18. package/dist/chrome/_tabs-scroll.d.ts +1 -1
  19. package/dist/chrome/_tabs-scroll.js +1 -1
  20. package/dist/chrome/app-shell.d.ts +52 -2
  21. package/dist/chrome/app-shell.js +80 -8
  22. package/dist/chrome/index.d.ts +2 -2
  23. package/dist/configurator/_export.js +3 -2
  24. package/dist/configurator/_overrides.d.ts +1 -1
  25. package/dist/configurator/_overrides.js +18 -6
  26. package/dist/configurator/token-editor.js +4 -1
  27. package/dist/date/_segments.js +37 -2
  28. package/dist/elements/activity-graph.d.ts +40 -0
  29. package/dist/elements/activity-graph.js +81 -0
  30. package/dist/elements/agent-card.d.ts +49 -0
  31. package/dist/elements/agent-card.js +91 -0
  32. package/dist/elements/agent-handoff.d.ts +24 -0
  33. package/dist/elements/agent-handoff.js +53 -0
  34. package/dist/elements/agent-mode-badge.d.ts +72 -0
  35. package/dist/elements/agent-mode-badge.js +110 -0
  36. package/dist/elements/agent-plan.d.ts +24 -0
  37. package/dist/elements/agent-plan.js +74 -0
  38. package/dist/elements/agent-status.d.ts +29 -0
  39. package/dist/elements/agent-status.js +46 -0
  40. package/dist/elements/agent-surface.d.ts +65 -0
  41. package/dist/elements/agent-surface.js +68 -0
  42. package/dist/elements/animated-number.d.ts +86 -0
  43. package/dist/elements/animated-number.js +118 -0
  44. package/dist/elements/approval-card.d.ts +40 -0
  45. package/dist/elements/approval-card.js +78 -0
  46. package/dist/elements/artifact-card.d.ts +30 -0
  47. package/dist/elements/artifact-card.js +58 -0
  48. package/dist/elements/background-inbox.d.ts +39 -0
  49. package/dist/elements/background-inbox.js +60 -0
  50. package/dist/elements/canvas-split.d.ts +77 -0
  51. package/dist/elements/canvas-split.js +138 -0
  52. package/dist/elements/chart.d.ts +41 -0
  53. package/dist/elements/chart.js +117 -0
  54. package/dist/elements/chat-panel.d.ts +46 -0
  55. package/dist/elements/chat-panel.js +104 -0
  56. package/dist/elements/checkpoint-history.d.ts +31 -0
  57. package/dist/elements/checkpoint-history.js +65 -0
  58. package/dist/elements/clamp.d.ts +90 -0
  59. package/dist/elements/clamp.js +109 -0
  60. package/dist/elements/code-diff.d.ts +42 -0
  61. package/dist/elements/code-diff.js +69 -0
  62. package/dist/elements/code-runner.d.ts +38 -0
  63. package/dist/elements/code-runner.js +84 -0
  64. package/dist/elements/command-palette.d.ts +48 -0
  65. package/dist/elements/command-palette.js +129 -0
  66. package/dist/elements/compaction-row.d.ts +63 -0
  67. package/dist/elements/compaction-row.js +110 -0
  68. package/dist/elements/comparison-card.d.ts +47 -0
  69. package/dist/elements/comparison-card.js +69 -0
  70. package/dist/elements/composer.d.ts +274 -0
  71. package/dist/elements/composer.js +505 -0
  72. package/dist/elements/computer-use.d.ts +40 -0
  73. package/dist/elements/computer-use.js +92 -0
  74. package/dist/elements/confidence-marker.d.ts +39 -0
  75. package/dist/elements/confidence-marker.js +64 -0
  76. package/dist/elements/connection-state.d.ts +29 -0
  77. package/dist/elements/connection-state.js +66 -0
  78. package/dist/elements/context-breakdown.d.ts +30 -0
  79. package/dist/elements/context-breakdown.js +86 -0
  80. package/dist/elements/context-usage.d.ts +99 -0
  81. package/dist/elements/context-usage.js +225 -0
  82. package/dist/elements/conversation-search.d.ts +48 -0
  83. package/dist/elements/conversation-search.js +88 -0
  84. package/dist/elements/cost-meter.d.ts +33 -0
  85. package/dist/elements/cost-meter.js +75 -0
  86. package/dist/elements/data-table.d.ts +31 -0
  87. package/dist/elements/data-table.js +67 -0
  88. package/dist/elements/day-separator.d.ts +34 -0
  89. package/dist/elements/day-separator.js +50 -0
  90. package/dist/elements/diagram.d.ts +34 -0
  91. package/dist/elements/diagram.js +75 -0
  92. package/dist/elements/document-reference.d.ts +37 -0
  93. package/dist/elements/document-reference.js +66 -0
  94. package/dist/elements/draft-restore.d.ts +27 -0
  95. package/dist/elements/draft-restore.js +54 -0
  96. package/dist/elements/edit-message.d.ts +36 -0
  97. package/dist/elements/edit-message.js +77 -0
  98. package/dist/elements/elements.css +459 -0
  99. package/dist/elements/elicitation-form.d.ts +48 -0
  100. package/dist/elements/elicitation-form.js +106 -0
  101. package/dist/elements/empty-state.d.ts +52 -0
  102. package/dist/elements/empty-state.js +98 -0
  103. package/dist/elements/end-of-turn-summary.d.ts +60 -0
  104. package/dist/elements/end-of-turn-summary.js +75 -0
  105. package/dist/elements/error-state.d.ts +29 -0
  106. package/dist/elements/error-state.js +55 -0
  107. package/dist/elements/feedback-dialog.d.ts +36 -0
  108. package/dist/elements/feedback-dialog.js +81 -0
  109. package/dist/elements/file-tree.d.ts +45 -0
  110. package/dist/elements/file-tree.js +84 -0
  111. package/dist/elements/flow-graph.d.ts +45 -0
  112. package/dist/elements/flow-graph.js +78 -0
  113. package/dist/elements/generative/chart.js +200 -0
  114. package/dist/elements/generative/faults.js +111 -0
  115. package/dist/elements/generative/icons.d.ts +41 -0
  116. package/dist/elements/generative/icons.js +190 -0
  117. package/dist/elements/generative/intrinsics.js +483 -0
  118. package/dist/elements/generative/spec.d.ts +110 -0
  119. package/dist/elements/generative/spec.js +366 -0
  120. package/dist/elements/generative.css +1145 -0
  121. package/dist/elements/generative.d.ts +144 -0
  122. package/dist/elements/generative.js +126 -0
  123. package/dist/elements/guardrail-notice.d.ts +29 -0
  124. package/dist/elements/guardrail-notice.js +63 -0
  125. package/dist/elements/image-generation.d.ts +18 -0
  126. package/dist/elements/image-generation.js +64 -0
  127. package/dist/elements/index.d.ts +116 -0
  128. package/dist/elements/index.js +115 -0
  129. package/dist/elements/inline-citation.d.ts +43 -0
  130. package/dist/elements/inline-citation.js +93 -0
  131. package/dist/elements/job-progress.d.ts +49 -0
  132. package/dist/elements/job-progress.js +74 -0
  133. package/dist/elements/launcher-bubble.d.ts +34 -0
  134. package/dist/elements/launcher-bubble.js +72 -0
  135. package/dist/elements/live-region-announcer.d.ts +130 -0
  136. package/dist/elements/live-region-announcer.js +230 -0
  137. package/dist/elements/loading-state.d.ts +27 -0
  138. package/dist/elements/loading-state.js +36 -0
  139. package/dist/elements/map-answer.d.ts +38 -0
  140. package/dist/elements/map-answer.js +93 -0
  141. package/dist/elements/markdown.d.ts +131 -0
  142. package/dist/elements/markdown.js +528 -0
  143. package/dist/elements/math-block.d.ts +51 -0
  144. package/dist/elements/math-block.js +70 -0
  145. package/dist/elements/mcp-server-panel.d.ts +41 -0
  146. package/dist/elements/mcp-server-panel.js +115 -0
  147. package/dist/elements/memory-chips.d.ts +30 -0
  148. package/dist/elements/memory-chips.js +43 -0
  149. package/dist/elements/message-actions.d.ts +38 -0
  150. package/dist/elements/message-actions.js +71 -0
  151. package/dist/elements/message-attachment.d.ts +48 -0
  152. package/dist/elements/message-attachment.js +63 -0
  153. package/dist/elements/message-branches.d.ts +25 -0
  154. package/dist/elements/message-branches.js +65 -0
  155. package/dist/elements/message-pair.d.ts +33 -0
  156. package/dist/elements/message-pair.js +65 -0
  157. package/dist/elements/message-queue.d.ts +31 -0
  158. package/dist/elements/message-queue.js +80 -0
  159. package/dist/elements/message-timing.d.ts +33 -0
  160. package/dist/elements/message-timing.js +37 -0
  161. package/dist/elements/mobile-composer.d.ts +44 -0
  162. package/dist/elements/mobile-composer.js +88 -0
  163. package/dist/elements/model-picker.d.ts +38 -0
  164. package/dist/elements/model-picker.js +69 -0
  165. package/dist/elements/number-ticker.d.ts +18 -0
  166. package/dist/elements/number-ticker.js +47 -0
  167. package/dist/elements/onboarding.d.ts +30 -0
  168. package/dist/elements/onboarding.js +75 -0
  169. package/dist/elements/permission-grant.d.ts +35 -0
  170. package/dist/elements/permission-grant.js +86 -0
  171. package/dist/elements/permission-scopes.d.ts +215 -0
  172. package/dist/elements/permission-scopes.js +249 -0
  173. package/dist/elements/prompt-library.d.ts +43 -0
  174. package/dist/elements/prompt-library.js +117 -0
  175. package/dist/elements/queue-dock.d.ts +101 -0
  176. package/dist/elements/queue-dock.js +132 -0
  177. package/dist/elements/quota-banner.d.ts +26 -0
  178. package/dist/elements/quota-banner.js +66 -0
  179. package/dist/elements/quote-reply.d.ts +44 -0
  180. package/dist/elements/quote-reply.js +79 -0
  181. package/dist/elements/range.d.ts +29 -0
  182. package/dist/elements/range.js +45 -0
  183. package/dist/elements/read-aloud.d.ts +45 -0
  184. package/dist/elements/read-aloud.js +75 -0
  185. package/dist/elements/reasoning-effort.d.ts +36 -0
  186. package/dist/elements/reasoning-effort.js +67 -0
  187. package/dist/elements/reasoning-panel.d.ts +46 -0
  188. package/dist/elements/reasoning-panel.js +75 -0
  189. package/dist/elements/recommendation-card.d.ts +45 -0
  190. package/dist/elements/recommendation-card.js +83 -0
  191. package/dist/elements/regenerate-menu.d.ts +45 -0
  192. package/dist/elements/regenerate-menu.js +51 -0
  193. package/dist/elements/replay.d.ts +217 -0
  194. package/dist/elements/replay.js +498 -0
  195. package/dist/elements/research-report.d.ts +38 -0
  196. package/dist/elements/research-report.js +69 -0
  197. package/dist/elements/retrieval-chunks.d.ts +43 -0
  198. package/dist/elements/retrieval-chunks.js +81 -0
  199. package/dist/elements/revert-dock.d.ts +159 -0
  200. package/dist/elements/revert-dock.js +327 -0
  201. package/dist/elements/reviewable-diff.d.ts +45 -0
  202. package/dist/elements/reviewable-diff.js +110 -0
  203. package/dist/elements/risk-badge.d.ts +52 -0
  204. package/dist/elements/risk-badge.js +91 -0
  205. package/dist/elements/schedule-card.d.ts +42 -0
  206. package/dist/elements/schedule-card.js +90 -0
  207. package/dist/elements/score-breakdown.d.ts +47 -0
  208. package/dist/elements/score-breakdown.js +82 -0
  209. package/dist/elements/scroll-anchor.d.ts +32 -0
  210. package/dist/elements/scroll-anchor.js +121 -0
  211. package/dist/elements/settings-panel.d.ts +52 -0
  212. package/dist/elements/settings-panel.js +107 -0
  213. package/dist/elements/shared-conversation.d.ts +39 -0
  214. package/dist/elements/shared-conversation.js +68 -0
  215. package/dist/elements/sources.d.ts +33 -0
  216. package/dist/elements/sources.js +61 -0
  217. package/dist/elements/speaker-identity.d.ts +32 -0
  218. package/dist/elements/speaker-identity.js +51 -0
  219. package/dist/elements/spec-sheet.d.ts +31 -0
  220. package/dist/elements/spec-sheet.js +45 -0
  221. package/dist/elements/stopped-run.d.ts +22 -0
  222. package/dist/elements/stopped-run.js +50 -0
  223. package/dist/elements/streaming-text.d.ts +31 -0
  224. package/dist/elements/streaming-text.js +45 -0
  225. package/dist/elements/subagent-list.d.ts +37 -0
  226. package/dist/elements/subagent-list.js +79 -0
  227. package/dist/elements/suggestions.d.ts +30 -0
  228. package/dist/elements/suggestions.js +36 -0
  229. package/dist/elements/surfaces.d.ts +85 -0
  230. package/dist/elements/surfaces.js +107 -0
  231. package/dist/elements/tail-status.d.ts +131 -0
  232. package/dist/elements/tail-status.js +94 -0
  233. package/dist/elements/terminal-block.d.ts +29 -0
  234. package/dist/elements/terminal-block.js +54 -0
  235. package/dist/elements/thinking-indicator.d.ts +18 -0
  236. package/dist/elements/thinking-indicator.js +36 -0
  237. package/dist/elements/thread-list.d.ts +35 -0
  238. package/dist/elements/thread-list.js +68 -0
  239. package/dist/elements/thread-search.d.ts +42 -0
  240. package/dist/elements/thread-search.js +99 -0
  241. package/dist/elements/timeline.d.ts +37 -0
  242. package/dist/elements/timeline.js +46 -0
  243. package/dist/elements/todo-list.d.ts +42 -0
  244. package/dist/elements/todo-list.js +59 -0
  245. package/dist/elements/tool-call.d.ts +41 -0
  246. package/dist/elements/tool-call.js +85 -0
  247. package/dist/elements/tool-error.d.ts +39 -0
  248. package/dist/elements/tool-error.js +76 -0
  249. package/dist/elements/tool-group.d.ts +45 -0
  250. package/dist/elements/tool-group.js +71 -0
  251. package/dist/elements/tool-timeline.d.ts +65 -0
  252. package/dist/elements/tool-timeline.js +88 -0
  253. package/dist/elements/trace-waterfall.d.ts +37 -0
  254. package/dist/elements/trace-waterfall.js +69 -0
  255. package/dist/elements/transcript-rules.d.ts +67 -0
  256. package/dist/elements/transcript-rules.js +95 -0
  257. package/dist/elements/turn-footer.d.ts +74 -0
  258. package/dist/elements/turn-footer.js +101 -0
  259. package/dist/elements/typing-indicator.d.ts +16 -0
  260. package/dist/elements/typing-indicator.js +51 -0
  261. package/dist/elements/verdict-row.d.ts +89 -0
  262. package/dist/elements/verdict-row.js +150 -0
  263. package/dist/elements/vocabulary.d.ts +612 -0
  264. package/dist/elements/vocabulary.js +611 -0
  265. package/dist/elements/voice-conversation.d.ts +49 -0
  266. package/dist/elements/voice-conversation.js +123 -0
  267. package/dist/elements/web-preview.d.ts +32 -0
  268. package/dist/elements/web-preview.js +66 -0
  269. package/dist/elements/web-search.d.ts +37 -0
  270. package/dist/elements/web-search.js +66 -0
  271. package/dist/elements/work-collapse.d.ts +103 -0
  272. package/dist/elements/work-collapse.js +131 -0
  273. package/dist/icons/containers.d.ts +89 -0
  274. package/dist/icons/containers.js +295 -0
  275. package/dist/icons/index.d.ts +2 -0
  276. package/dist/index.d.ts +9 -7
  277. package/dist/index.js +3 -2
  278. package/dist/instruments/index.d.ts +2 -2
  279. package/dist/instruments/index.js +2 -2
  280. package/dist/instruments/table.d.ts +14 -1
  281. package/dist/instruments/table.js +20 -1
  282. package/dist/instruments/two-step-button.js +25 -6
  283. package/dist/layout/sidebar.d.ts +19 -1
  284. package/dist/layout/sidebar.js +19 -1
  285. package/dist/primitives/button.js +11 -1
  286. package/dist/primitives/chip.d.ts +34 -8
  287. package/dist/primitives/chip.js +97 -11
  288. package/dist/styles.css +11 -1
  289. package/dist/system/agent-skin.d.ts +27 -0
  290. package/dist/system/agent-skin.js +20 -0
  291. package/dist/system/index.d.ts +3 -3
  292. package/dist/system/portal.d.ts +5 -3
  293. package/dist/system/portal.js +36 -8
  294. package/dist/system/prepaint.d.ts +20 -2
  295. package/dist/system/prepaint.js +39 -33
  296. package/dist/system/theme-provider.d.ts +13 -2
  297. package/dist/system/theme-provider.js +107 -26
  298. package/dist/system/use-density.d.ts +9 -0
  299. package/dist/system/use-density.js +9 -0
  300. package/dist/system/use-isomorphic-layout-effect.js +19 -1
  301. package/dist/theming/_presets.d.ts +1 -1
  302. package/dist/theming/_presets.js +124 -8
  303. package/dist/theming/contrast.d.ts +16 -4
  304. package/dist/theming/contrast.js +33 -6
  305. package/dist/theming/create-theme.d.ts +8 -4
  306. package/dist/theming/create-theme.js +56 -20
  307. package/dist/theming/serialize.d.ts +11 -2
  308. package/dist/theming/serialize.js +87 -9
  309. package/manifest/components/accordion.json +154 -0
  310. package/manifest/components/activity-graph.json +88 -0
  311. package/manifest/components/agent-card.json +120 -0
  312. package/manifest/components/agent-handoff.json +87 -0
  313. package/manifest/components/agent-mode-badge.json +84 -0
  314. package/manifest/components/agent-pile.json +116 -0
  315. package/manifest/components/agent-plan.json +67 -0
  316. package/manifest/components/agent-status.json +73 -0
  317. package/manifest/components/agent-surface.json +78 -0
  318. package/manifest/components/alert-dialog.json +190 -0
  319. package/manifest/components/animated-number.json +67 -0
  320. package/manifest/components/app-bar.json +244 -0
  321. package/manifest/components/app-shell.json +383 -0
  322. package/manifest/components/app-window-frame.json +102 -0
  323. package/manifest/components/approval-card.json +106 -0
  324. package/manifest/components/artifact-card.json +81 -0
  325. package/manifest/components/ask-box.json +209 -0
  326. package/manifest/components/audience-icon.json +52 -0
  327. package/manifest/components/autocomplete.json +197 -0
  328. package/manifest/components/avatar-group.json +72 -0
  329. package/manifest/components/avatar.json +95 -0
  330. package/manifest/components/background-inbox.json +71 -0
  331. package/manifest/components/branch-picker.json +124 -0
  332. package/manifest/components/breadcrumb.json +74 -0
  333. package/manifest/components/button-group.json +74 -0
  334. package/manifest/components/button.json +126 -0
  335. package/manifest/components/calendar.json +65 -0
  336. package/manifest/components/canvas-split-body.json +62 -0
  337. package/manifest/components/canvas-split-document.json +54 -0
  338. package/manifest/components/canvas-split-header.json +83 -0
  339. package/manifest/components/canvas-split-line.json +62 -0
  340. package/manifest/components/canvas-split-message.json +62 -0
  341. package/manifest/components/canvas-split-thread.json +54 -0
  342. package/manifest/components/canvas-split.json +60 -0
  343. package/manifest/components/card.json +140 -0
  344. package/manifest/components/carousel.json +200 -0
  345. package/manifest/components/catalogue-icon.json +52 -0
  346. package/manifest/components/channel-beta-icon.json +52 -0
  347. package/manifest/components/channel-matrix.json +173 -0
  348. package/manifest/components/channel-released-icon.json +52 -0
  349. package/manifest/components/chart-container.json +111 -0
  350. package/manifest/components/chart-ramp.json +72 -0
  351. package/manifest/components/chart-swatch.json +65 -0
  352. package/manifest/components/chart-tooltip-content.json +114 -0
  353. package/manifest/components/chart.json +93 -0
  354. package/manifest/components/chat-empty-state.json +55 -0
  355. package/manifest/components/chat-panel-assistant-message.json +51 -0
  356. package/manifest/components/chat-panel-composer.json +66 -0
  357. package/manifest/components/chat-panel-messages.json +51 -0
  358. package/manifest/components/chat-panel-typing.json +51 -0
  359. package/manifest/components/chat-panel-user-message.json +51 -0
  360. package/manifest/components/chat-panel.json +57 -0
  361. package/manifest/components/checkbox-group.json +68 -0
  362. package/manifest/components/checkbox.json +93 -0
  363. package/manifest/components/checkpoint-history.json +80 -0
  364. package/manifest/components/chip.json +144 -0
  365. package/manifest/components/clamp.json +102 -0
  366. package/manifest/components/cli-tool-icon.json +52 -0
  367. package/manifest/components/code-diff.json +87 -0
  368. package/manifest/components/code-runner.json +97 -0
  369. package/manifest/components/collapsible.json +120 -0
  370. package/manifest/components/color-area.json +59 -0
  371. package/manifest/components/color-field.json +79 -0
  372. package/manifest/components/color-picker.json +175 -0
  373. package/manifest/components/color-slider.json +75 -0
  374. package/manifest/components/color-swatch.json +68 -0
  375. package/manifest/components/colors-section.json +66 -0
  376. package/manifest/components/combobox.json +198 -0
  377. package/manifest/components/command-palette.json +177 -0
  378. package/manifest/components/compaction-row.json +100 -0
  379. package/manifest/components/comparison-card.json +83 -0
  380. package/manifest/components/composer-actions.json +65 -0
  381. package/manifest/components/composer-attach-button.json +65 -0
  382. package/manifest/components/composer-attachment-chip.json +75 -0
  383. package/manifest/components/composer-attachments.json +60 -0
  384. package/manifest/components/composer-bar.json +73 -0
  385. package/manifest/components/composer-command-item.json +79 -0
  386. package/manifest/components/composer-context.json +67 -0
  387. package/manifest/components/composer-input.json +73 -0
  388. package/manifest/components/composer-menu-item.json +72 -0
  389. package/manifest/components/composer-menu.json +79 -0
  390. package/manifest/components/composer-model-item.json +75 -0
  391. package/manifest/components/composer-model-trigger.json +75 -0
  392. package/manifest/components/composer-person-item.json +79 -0
  393. package/manifest/components/composer-send.json +80 -0
  394. package/manifest/components/composer-toolbar.json +65 -0
  395. package/manifest/components/composer-voice-button.json +68 -0
  396. package/manifest/components/composer-voice.json +75 -0
  397. package/manifest/components/composer.json +176 -0
  398. package/manifest/components/computer-use.json +84 -0
  399. package/manifest/components/confidence-marker.json +74 -0
  400. package/manifest/components/connection-state.json +84 -0
  401. package/manifest/components/container.json +60 -0
  402. package/manifest/components/context-breakdown.json +65 -0
  403. package/manifest/components/context-menu.json +121 -0
  404. package/manifest/components/context-usage.json +85 -0
  405. package/manifest/components/conversation-search.json +92 -0
  406. package/manifest/components/copy-button.json +93 -0
  407. package/manifest/components/cost-meter.json +74 -0
  408. package/manifest/components/cue-logotype.json +96 -0
  409. package/manifest/components/cue-mark.json +97 -0
  410. package/manifest/components/cue-portal-frame.json +55 -0
  411. package/manifest/components/data-table-pagination.json +83 -0
  412. package/manifest/components/data-table-toolbar.json +104 -0
  413. package/manifest/components/date-field.json +80 -0
  414. package/manifest/components/date-picker.json +191 -0
  415. package/manifest/components/date-range-picker.json +191 -0
  416. package/manifest/components/day-separator.json +58 -0
  417. package/manifest/components/delegation-card.json +144 -0
  418. package/manifest/components/density.json +58 -0
  419. package/manifest/components/description-list.json +84 -0
  420. package/manifest/components/diagram.json +100 -0
  421. package/manifest/components/dialog.json +198 -0
  422. package/manifest/components/disclosure.json +109 -0
  423. package/manifest/components/dmx-bar.json +94 -0
  424. package/manifest/components/dmx-strip.json +101 -0
  425. package/manifest/components/document-reference.json +90 -0
  426. package/manifest/components/draft-restore.json +82 -0
  427. package/manifest/components/drawer.json +179 -0
  428. package/manifest/components/dropdown-menu.json +229 -0
  429. package/manifest/components/edit-message.json +105 -0
  430. package/manifest/components/elements-command-palette.json +100 -0
  431. package/manifest/components/elements-composer.json +71 -0
  432. package/manifest/components/elements-data-table.json +68 -0
  433. package/manifest/components/elements-timeline.json +69 -0
  434. package/manifest/components/elicitation-form.json +103 -0
  435. package/manifest/components/empty-state-composer.json +64 -0
  436. package/manifest/components/empty-state-greeting.json +49 -0
  437. package/manifest/components/empty-state-suggestion.json +57 -0
  438. package/manifest/components/empty-state-suggestions.json +49 -0
  439. package/manifest/components/empty-state.json +90 -0
  440. package/manifest/components/end-of-turn-summary.json +77 -0
  441. package/manifest/components/env-var-input.json +150 -0
  442. package/manifest/components/error-state.json +80 -0
  443. package/manifest/components/export-dialog.json +84 -0
  444. package/manifest/components/eyebrow.json +56 -0
  445. package/manifest/components/feedback-dialog.json +107 -0
  446. package/manifest/components/field-description.json +63 -0
  447. package/manifest/components/field-error.json +77 -0
  448. package/manifest/components/field-label.json +63 -0
  449. package/manifest/components/field.json +79 -0
  450. package/manifest/components/file-tree.json +83 -0
  451. package/manifest/components/file-upload.json +159 -0
  452. package/manifest/components/flow-background.json +50 -0
  453. package/manifest/components/flow-controls.json +50 -0
  454. package/manifest/components/flow-graph.json +75 -0
  455. package/manifest/components/folder-icon.json +52 -0
  456. package/manifest/components/footer.json +112 -0
  457. package/manifest/components/frac.json +59 -0
  458. package/manifest/components/generation-loader.json +64 -0
  459. package/manifest/components/generative-ui.json +93 -0
  460. package/manifest/components/grid.json +81 -0
  461. package/manifest/components/group-bar.json +102 -0
  462. package/manifest/components/guardrail-notice.json +91 -0
  463. package/manifest/components/hover-card.json +151 -0
  464. package/manifest/components/icon-button.json +88 -0
  465. package/manifest/components/image-generation.json +67 -0
  466. package/manifest/components/info-tip.json +98 -0
  467. package/manifest/components/inline-citation.json +77 -0
  468. package/manifest/components/input-group.json +91 -0
  469. package/manifest/components/input.json +89 -0
  470. package/manifest/components/item.json +129 -0
  471. package/manifest/components/job-progress.json +96 -0
  472. package/manifest/components/kbd.json +52 -0
  473. package/manifest/components/launcher-bubble.json +105 -0
  474. package/manifest/components/link.json +81 -0
  475. package/manifest/components/live-region-announcer.json +79 -0
  476. package/manifest/components/log-viewer.json +139 -0
  477. package/manifest/components/map-answer.json +83 -0
  478. package/manifest/components/markdown-text.json +94 -0
  479. package/manifest/components/math-block.json +74 -0
  480. package/manifest/components/mcp-server-icon.json +52 -0
  481. package/manifest/components/mcp-server-panel.json +87 -0
  482. package/manifest/components/memory-chips.json +65 -0
  483. package/manifest/components/menubar.json +157 -0
  484. package/manifest/components/message-actions.json +99 -0
  485. package/manifest/components/message-attachments.json +63 -0
  486. package/manifest/components/message-branches.json +71 -0
  487. package/manifest/components/message-list.json +100 -0
  488. package/manifest/components/message-pair.json +86 -0
  489. package/manifest/components/message-queue.json +74 -0
  490. package/manifest/components/message-timing.json +62 -0
  491. package/manifest/components/message.json +116 -0
  492. package/manifest/components/meter.json +114 -0
  493. package/manifest/components/mobile-composer.json +126 -0
  494. package/manifest/components/model-picker.json +76 -0
  495. package/manifest/components/multi-select.json +190 -0
  496. package/manifest/components/musical-time-input.json +113 -0
  497. package/manifest/components/navigation-menu.json +226 -0
  498. package/manifest/components/node-card.json +109 -0
  499. package/manifest/components/node-handle.json +69 -0
  500. package/manifest/components/number-field.json +107 -0
  501. package/manifest/components/number-ticker.json +61 -0
  502. package/manifest/components/onboarding.json +84 -0
  503. package/manifest/components/otp-field.json +128 -0
  504. package/manifest/components/page-shell.json +96 -0
  505. package/manifest/components/pagination.json +92 -0
  506. package/manifest/components/panel-header.json +77 -0
  507. package/manifest/components/panel.json +71 -0
  508. package/manifest/components/password-input.json +119 -0
  509. package/manifest/components/permission-grant.json +92 -0
  510. package/manifest/components/permission-scopes.json +139 -0
  511. package/manifest/components/piano-keyboard.json +120 -0
  512. package/manifest/components/plussie.json +111 -0
  513. package/manifest/components/popover.json +193 -0
  514. package/manifest/components/preset-section.json +73 -0
  515. package/manifest/components/progress.json +95 -0
  516. package/manifest/components/prompt-library.json +99 -0
  517. package/manifest/components/queue-dock.json +110 -0
  518. package/manifest/components/quota-banner.json +94 -0
  519. package/manifest/components/quote-reply.json +105 -0
  520. package/manifest/components/radio-group.json +73 -0
  521. package/manifest/components/radio.json +80 -0
  522. package/manifest/components/rating.json +141 -0
  523. package/manifest/components/read-aloud.json +111 -0
  524. package/manifest/components/reasoning-effort.json +81 -0
  525. package/manifest/components/reasoning-panel.json +108 -0
  526. package/manifest/components/recommendation-card.json +107 -0
  527. package/manifest/components/regenerate-menu.json +89 -0
  528. package/manifest/components/replay-player.json +102 -0
  529. package/manifest/components/research-report.json +76 -0
  530. package/manifest/components/resizable.json +88 -0
  531. package/manifest/components/retrieval-chunks.json +84 -0
  532. package/manifest/components/revert-dock.json +150 -0
  533. package/manifest/components/reviewable-diff.json +93 -0
  534. package/manifest/components/risk-badge.json +74 -0
  535. package/manifest/components/row.json +109 -0
  536. package/manifest/components/schedule-card.json +101 -0
  537. package/manifest/components/score-breakdown.json +91 -0
  538. package/manifest/components/scroll-anchor.json +72 -0
  539. package/manifest/components/scroll-area.json +91 -0
  540. package/manifest/components/scrollable-tabs-list.json +83 -0
  541. package/manifest/components/scrub-input.json +200 -0
  542. package/manifest/components/seam-cell.json +75 -0
  543. package/manifest/components/seam-grid.json +75 -0
  544. package/manifest/components/seam-list.json +56 -0
  545. package/manifest/components/search-input.json +134 -0
  546. package/manifest/components/section-header.json +112 -0
  547. package/manifest/components/segmented-control.json +138 -0
  548. package/manifest/components/select.json +194 -0
  549. package/manifest/components/separator.json +53 -0
  550. package/manifest/components/settings-panel.json +118 -0
  551. package/manifest/components/shape-section.json +66 -0
  552. package/manifest/components/shared-conversation.json +89 -0
  553. package/manifest/components/sheet.json +186 -0
  554. package/manifest/components/shimmer-label.json +59 -0
  555. package/manifest/components/sidebar.json +198 -0
  556. package/manifest/components/signal-edge.json +56 -0
  557. package/manifest/components/skeleton.json +46 -0
  558. package/manifest/components/skill-icon.json +52 -0
  559. package/manifest/components/slider.json +89 -0
  560. package/manifest/components/sources.json +83 -0
  561. package/manifest/components/sparkline.json +76 -0
  562. package/manifest/components/speaker-identity.json +61 -0
  563. package/manifest/components/spec-sheet.json +80 -0
  564. package/manifest/components/spectrum-visualizer.json +115 -0
  565. package/manifest/components/spinner.json +61 -0
  566. package/manifest/components/stack-icon.json +52 -0
  567. package/manifest/components/stack.json +96 -0
  568. package/manifest/components/stacks-matrix-icon.json +52 -0
  569. package/manifest/components/stat.json +87 -0
  570. package/manifest/components/status-bar.json +58 -0
  571. package/manifest/components/status-dot.json +78 -0
  572. package/manifest/components/stepper.json +89 -0
  573. package/manifest/components/stopped-run.json +81 -0
  574. package/manifest/components/streaming-text.json +71 -0
  575. package/manifest/components/sub.json +44 -0
  576. package/manifest/components/subagent-list.json +88 -0
  577. package/manifest/components/suggestions.json +84 -0
  578. package/manifest/components/sup.json +44 -0
  579. package/manifest/components/swap-label.json +71 -0
  580. package/manifest/components/switch.json +87 -0
  581. package/manifest/components/table-scroll-region.json +69 -0
  582. package/manifest/components/table.json +155 -0
  583. package/manifest/components/tabs.json +145 -0
  584. package/manifest/components/tags-input.json +190 -0
  585. package/manifest/components/tail-status.json +109 -0
  586. package/manifest/components/terminal-block.json +91 -0
  587. package/manifest/components/terminal-frame.json +119 -0
  588. package/manifest/components/textarea.json +76 -0
  589. package/manifest/components/theme-configurator.json +124 -0
  590. package/manifest/components/theme-provider.json +134 -0
  591. package/manifest/components/thinking-indicator.json +63 -0
  592. package/manifest/components/thread-list.json +76 -0
  593. package/manifest/components/thread-search.json +90 -0
  594. package/manifest/components/threshold-rail.json +160 -0
  595. package/manifest/components/time-boundary.json +62 -0
  596. package/manifest/components/time-field.json +80 -0
  597. package/manifest/components/timeline-ruler.json +139 -0
  598. package/manifest/components/timeline.json +115 -0
  599. package/manifest/components/title-bar.json +82 -0
  600. package/manifest/components/toast.json +130 -0
  601. package/manifest/components/todo-list.json +69 -0
  602. package/manifest/components/toggle-group.json +106 -0
  603. package/manifest/components/toggle.json +109 -0
  604. package/manifest/components/token-editor.json +90 -0
  605. package/manifest/components/tool-call-card.json +200 -0
  606. package/manifest/components/tool-call.json +119 -0
  607. package/manifest/components/tool-error.json +114 -0
  608. package/manifest/components/tool-group.json +83 -0
  609. package/manifest/components/tool-timeline.json +119 -0
  610. package/manifest/components/toolbar.json +163 -0
  611. package/manifest/components/tooltip.json +164 -0
  612. package/manifest/components/trace-waterfall.json +74 -0
  613. package/manifest/components/tree-visibility-toggle.json +84 -0
  614. package/manifest/components/tree.json +140 -0
  615. package/manifest/components/turn-footer.json +105 -0
  616. package/manifest/components/two-step-button.json +113 -0
  617. package/manifest/components/typing-indicator.json +53 -0
  618. package/manifest/components/universe-grid.json +127 -0
  619. package/manifest/components/unread-divider.json +55 -0
  620. package/manifest/components/usage-chart.json +124 -0
  621. package/manifest/components/verdict-row.json +91 -0
  622. package/manifest/components/voice-conversation.json +109 -0
  623. package/manifest/components/web-preview.json +87 -0
  624. package/manifest/components/web-search.json +92 -0
  625. package/manifest/components/work-collapse.json +102 -0
  626. package/manifest/manifest.json +4779 -0
  627. package/manifest/tokens.json +159 -0
  628. package/package.json +54 -5
@@ -0,0 +1,43 @@
1
+ import "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/agent-runtime/_glyphs.tsx
4
+ /**
5
+ * Shared agent-runtime glyphs.
6
+ *
7
+ * Drawn inline for the same reason as `chat/_glyphs.tsx`: a chevron on a branch
8
+ * stepper should not put an icon dependency on the render path of a transcript,
9
+ * and hand-set strokes stay hairline-thin at the 8–12px sizes console density
10
+ * asks for. `currentColor` everywhere — the tone comes from the parent.
11
+ *
12
+ * @internal Not part of the public API.
13
+ */
14
+ /** A leftward chevron — the direction the previous branch lies in. */
15
+ function ChevronLeftGlyph(props) {
16
+ return /* @__PURE__ */ jsx("svg", {
17
+ viewBox: "0 0 16 16",
18
+ fill: "none",
19
+ stroke: "currentColor",
20
+ strokeWidth: "2",
21
+ strokeLinecap: "round",
22
+ strokeLinejoin: "round",
23
+ "aria-hidden": "true",
24
+ ...props,
25
+ children: /* @__PURE__ */ jsx("path", { d: "m10 3-5 5 5 5" })
26
+ });
27
+ }
28
+ /** A rightward chevron — the direction the next branch lies in. */
29
+ function ChevronRightGlyph(props) {
30
+ return /* @__PURE__ */ jsx("svg", {
31
+ viewBox: "0 0 16 16",
32
+ fill: "none",
33
+ stroke: "currentColor",
34
+ strokeWidth: "2",
35
+ strokeLinecap: "round",
36
+ strokeLinejoin: "round",
37
+ "aria-hidden": "true",
38
+ ...props,
39
+ children: /* @__PURE__ */ jsx("path", { d: "m6 3 5 5-5 5" })
40
+ });
41
+ }
42
+ //#endregion
43
+ export { ChevronLeftGlyph, ChevronRightGlyph };
@@ -0,0 +1,45 @@
1
+ import * as React from "react";
2
+ //#region src/agent-runtime/branch-picker.d.ts
3
+ /** Which way along the sibling branches a click moves. */
4
+ type BranchDirection = "previous" | "next";
5
+ interface BranchPickerProps extends Omit<React.ComponentPropsWithoutRef<"div">, "onChange" | "children"> {
6
+ /** 1-based position of the branch on show — what the readout prints. */
7
+ index: number;
8
+ /** How many sibling branches exist. Below 2 the picker renders nothing. */
9
+ count: number;
10
+ /** Called with the direction to move in. Never called past either end. */
11
+ onNavigate: (direction: BranchDirection) => void;
12
+ /** Accessible name of the previous button. Defaults to `"Previous branch"`. */
13
+ previousLabel?: string;
14
+ /** Accessible name of the next button. Defaults to `"Next branch"`. */
15
+ nextLabel?: string;
16
+ /** Block both buttons — a run is in flight and the runtime cannot switch mid-run. */
17
+ disabled?: boolean;
18
+ /** Accessible name for the group. Defaults to `"Branches"`. */
19
+ "aria-label"?: string;
20
+ }
21
+ /**
22
+ * The `‹ 2 / 3 ›` stepper that walks a turn's regenerated siblings.
23
+ *
24
+ * It keeps a segmented control's two promises — exactly one branch is on show,
25
+ * and the set cannot be emptied — without being one. A row of N numbered
26
+ * segments is the wrong shape for a count that is usually 2 and occasionally 9,
27
+ * and a segmented control's recessed frame fights the message bubble it sits
28
+ * in. Two ghost icon buttons around a mono readout stay quiet until the reader
29
+ * has a reason to look at them.
30
+ *
31
+ * A single branch is not a choice, so below two branches this renders nothing
32
+ * at all: the host can hand it every turn's `branch` without deciding which
33
+ * turns deserve a control. It belongs in an agent turn's `footer` — a user
34
+ * bubble is a solid accent fill, and a stepper drawn on it is unreadable.
35
+ *
36
+ * The picker never moves the thread itself. It reports a direction and the host
37
+ * asks the runtime; under an ExternalStore runtime the switch arrives back at
38
+ * the adapter's `setMessages`, which is the host's to write.
39
+ *
40
+ * @example
41
+ * <Message agent="planner" footer={<BranchPicker index={2} count={3} onNavigate={go} disabled={busy} />}>…</Message>
42
+ */
43
+ declare const BranchPicker: React.ForwardRefExoticComponent<BranchPickerProps & React.RefAttributes<HTMLDivElement>>;
44
+ //#endregion
45
+ export { BranchDirection, BranchPicker, BranchPickerProps };
@@ -0,0 +1,87 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { IconButton } from "../primitives/icon-button.js";
4
+ import { ChevronLeftGlyph, ChevronRightGlyph } from "./_glyphs.js";
5
+ import * as React from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/agent-runtime/branch-picker.tsx
8
+ /**
9
+ * The `‹ 2 / 3 ›` stepper that walks a turn's regenerated siblings.
10
+ *
11
+ * It keeps a segmented control's two promises — exactly one branch is on show,
12
+ * and the set cannot be emptied — without being one. A row of N numbered
13
+ * segments is the wrong shape for a count that is usually 2 and occasionally 9,
14
+ * and a segmented control's recessed frame fights the message bubble it sits
15
+ * in. Two ghost icon buttons around a mono readout stay quiet until the reader
16
+ * has a reason to look at them.
17
+ *
18
+ * A single branch is not a choice, so below two branches this renders nothing
19
+ * at all: the host can hand it every turn's `branch` without deciding which
20
+ * turns deserve a control. It belongs in an agent turn's `footer` — a user
21
+ * bubble is a solid accent fill, and a stepper drawn on it is unreadable.
22
+ *
23
+ * The picker never moves the thread itself. It reports a direction and the host
24
+ * asks the runtime; under an ExternalStore runtime the switch arrives back at
25
+ * the adapter's `setMessages`, which is the host's to write.
26
+ *
27
+ * @example
28
+ * <Message agent="planner" footer={<BranchPicker index={2} count={3} onNavigate={go} disabled={busy} />}>…</Message>
29
+ */
30
+ const BranchPicker = React.forwardRef(function BranchPicker({ className, index, count, onNavigate, previousLabel = "Previous branch", nextLabel = "Next branch", disabled, "aria-label": ariaLabel = "Branches", ...elementProps }, ref) {
31
+ if (count < 2) return null;
32
+ const position = Math.min(Math.max(index, 1), count);
33
+ return /* @__PURE__ */ jsxs("div", {
34
+ ref,
35
+ "data-slot": "branch-picker",
36
+ role: "group",
37
+ "aria-label": ariaLabel,
38
+ "data-index": position,
39
+ "data-count": count,
40
+ className: cn("inline-flex items-center gap-(--cue-space-1)", className),
41
+ ...elementProps,
42
+ children: [
43
+ /* @__PURE__ */ jsx(IconButton, {
44
+ type: "button",
45
+ size: "sm",
46
+ variant: "ghost",
47
+ icon: ChevronLeftGlyph,
48
+ "aria-label": previousLabel,
49
+ "data-slot": "branch-picker-previous",
50
+ disabled: disabled === true || position <= 1,
51
+ onClick: () => onNavigate("previous")
52
+ }),
53
+ /* @__PURE__ */ jsxs("span", {
54
+ "data-slot": "branch-picker-position",
55
+ className: "font-mono text-(length:--cue-text-micro) tabular-nums text-fg-subtle",
56
+ children: [/* @__PURE__ */ jsxs("span", {
57
+ "aria-hidden": "true",
58
+ children: [
59
+ position,
60
+ " / ",
61
+ count
62
+ ]
63
+ }), /* @__PURE__ */ jsxs("span", {
64
+ className: "sr-only",
65
+ children: [
66
+ "branch ",
67
+ position,
68
+ " of ",
69
+ count
70
+ ]
71
+ })]
72
+ }),
73
+ /* @__PURE__ */ jsx(IconButton, {
74
+ type: "button",
75
+ size: "sm",
76
+ variant: "ghost",
77
+ icon: ChevronRightGlyph,
78
+ "aria-label": nextLabel,
79
+ "data-slot": "branch-picker-next",
80
+ disabled: disabled === true || position >= count,
81
+ onClick: () => onNavigate("next")
82
+ })
83
+ ]
84
+ });
85
+ });
86
+ //#endregion
87
+ export { BranchPicker };
@@ -0,0 +1,4 @@
1
+ import { BranchDirection, BranchPicker, BranchPickerProps } from "./branch-picker.js";
2
+ import { ToolCallCard, ToolCallCardProps, ToolCallStatus } from "./tool-call-card.js";
3
+ import { AgentThread, AgentToolCall, AgentTurn, AgentTurnStatus, UseAgentThreadOptions, useAgentThread } from "./use-agent-thread.js";
4
+ export { type AgentThread, type AgentToolCall, type AgentTurn, type AgentTurnStatus, type BranchDirection, BranchPicker, type BranchPickerProps, ToolCallCard, type ToolCallCardProps, type ToolCallStatus, type UseAgentThreadOptions, useAgentThread };
@@ -0,0 +1,4 @@
1
+ import { BranchPicker } from "./branch-picker.js";
2
+ import { ToolCallCard } from "./tool-call-card.js";
3
+ import { useAgentThread } from "./use-agent-thread.js";
4
+ export { BranchPicker, ToolCallCard, useAgentThread };
@@ -0,0 +1,69 @@
1
+ import { AskDanger } from "../chat/ask-box.js";
2
+ import * as React from "react";
3
+ //#region src/agent-runtime/tool-call-card.d.ts
4
+ /** Where a tool call has got to. `idle` is a call parked on a human. */
5
+ type ToolCallStatus = "working" | "done" | "failed" | "idle";
6
+ interface ToolCallCardProps extends Omit<React.ComponentPropsWithoutRef<"div">, "title"> {
7
+ /** Name of the tool being called. */
8
+ tool: string;
9
+ /** The call's arguments, rendered verbatim as preformatted text. Pass a string you already formatted — JSON, a command line. An empty string counts as absent. */
10
+ args?: string;
11
+ /** What the tool returned, rendered verbatim. A string is shown as text; pass your own renderer for rich output and own that decision. `null`, `false`, an empty string or an empty array count as absent. */
12
+ result?: React.ReactNode;
13
+ /** Where the call has got to. Omit to draw no status line at all. */
14
+ status?: ToolCallStatus;
15
+ /** What the tool is doing right now. Shown beside the spinner while `working`, and as the text while `idle`. */
16
+ activity?: React.ReactNode;
17
+ /** Risk rating for the call, chipped the way an AskBox approval is. Omit for a routine call. */
18
+ danger?: AskDanger;
19
+ /** Slug of the agent making the call, so the rail takes its colour. Named in assistive text as well as inked. */
20
+ agent?: string;
21
+ /** Slug of the orchestrator, so its calls take the theme accent. */
22
+ rootAgent?: string;
23
+ /** Open state when controlled. Pass with `onOpenChange`. */
24
+ open?: boolean;
25
+ /** Initial open state. Defaults to `false`. */
26
+ defaultOpen?: boolean;
27
+ /** Called with the state the card is asking to move to. */
28
+ onOpenChange?: (open: boolean) => void;
29
+ /** Eyebrow over the arguments block. Defaults to `"arguments"`. */
30
+ argsLabel?: React.ReactNode;
31
+ /** Eyebrow over the result block. Defaults to `"result"`. */
32
+ resultLabel?: React.ReactNode;
33
+ /** What a finished call says. Defaults to `"Completed"`. */
34
+ doneLabel?: React.ReactNode;
35
+ /** What a failed call says. Defaults to `"Failed"`. */
36
+ failedLabel?: React.ReactNode;
37
+ /** Extra detail under the result — an approval `AskBox`, a nested transcript. */
38
+ children?: React.ReactNode;
39
+ }
40
+ /**
41
+ * An LLM's own tool call, shown while it runs and after.
42
+ *
43
+ * The two neighbours it is deliberately not: `AskBox` is a question put to a
44
+ * human and it waits for an answer; `DelegationCard` is another agent's work
45
+ * folded into a lane. This is the model reaching for a tool by itself — nobody
46
+ * is being asked anything, and nothing downstream is another agent's turn. It
47
+ * borrows both their surfaces on purpose, so a transcript mixing all three
48
+ * reads as one family: the tool name and risk chip are `AskBox`'s, the status
49
+ * line and the disclosure are `DelegationCard`'s.
50
+ *
51
+ * Arguments and results are rendered verbatim: there is no markdown or HTML
52
+ * path here on purpose. Both are untrusted text — half of it is the model's
53
+ * own output and the other half is whatever the tool returned — and a
54
+ * component that quietly parsed them would make every consumer of this library
55
+ * one prompt away from an injection. `args` is text you already formatted;
56
+ * `result` takes nodes, so a caller who wants rich output passes their own
57
+ * renderer and owns that decision.
58
+ *
59
+ * The body is mounted and unmounted rather than height-animated. A call's
60
+ * result lands mid-render and its arguments grow while they stream, and
61
+ * animating the height of something that changes size on its own is how a panel
62
+ * ends up permanently mid-transition.
63
+ *
64
+ * @example
65
+ * <ToolCallCard tool="read_file" args={'{ "path": "cue.json" }'} status="working" activity="reading 12 KB" />
66
+ */
67
+ declare const ToolCallCard: React.ForwardRefExoticComponent<ToolCallCardProps & React.RefAttributes<HTMLDivElement>>;
68
+ //#endregion
69
+ export { ToolCallCard, ToolCallCardProps, ToolCallStatus };
@@ -0,0 +1,187 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { AGENT_ROOT_COLOR, agentColor } from "../chat/agent-color.js";
4
+ import { CheckGlyph } from "../chat/_glyphs.js";
5
+ import { Chip } from "../primitives/chip.js";
6
+ import { Spinner } from "../primitives/spinner.js";
7
+ import * as React from "react";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/agent-runtime/tool-call-card.tsx
10
+ /**
11
+ * The same map `AskBox` paints an approval with, for the same reason: a call
12
+ * the reader is watching and the question asking them to allow it must rate
13
+ * risk in one vocabulary, or the two cards disagree about what "critical"
14
+ * looks like.
15
+ */
16
+ const DANGER_TONES = {
17
+ low: "ok",
18
+ high: "warn",
19
+ critical: "danger"
20
+ };
21
+ /**
22
+ * The header row, shared by the disclosure button and the buttonless header a
23
+ * card with nothing to disclose draws instead — the two must sit at exactly the
24
+ * same height and ink, or a list of calls ripples as some of them gain detail.
25
+ */
26
+ const HEADER = "flex min-w-0 items-center gap-(--cue-space-2) border-0 bg-transparent p-0 text-start font-mono text-(length:--cue-text-ui) text-fg-muted outline-none focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-accent";
27
+ /** The label over a block in the body, in the same eyebrow as a message header. */
28
+ const EYEBROW = "font-mono text-(length:--cue-text-micro) tracking-[0.15em] uppercase text-fg-subtle";
29
+ /**
30
+ * An LLM's own tool call, shown while it runs and after.
31
+ *
32
+ * The two neighbours it is deliberately not: `AskBox` is a question put to a
33
+ * human and it waits for an answer; `DelegationCard` is another agent's work
34
+ * folded into a lane. This is the model reaching for a tool by itself — nobody
35
+ * is being asked anything, and nothing downstream is another agent's turn. It
36
+ * borrows both their surfaces on purpose, so a transcript mixing all three
37
+ * reads as one family: the tool name and risk chip are `AskBox`'s, the status
38
+ * line and the disclosure are `DelegationCard`'s.
39
+ *
40
+ * Arguments and results are rendered verbatim: there is no markdown or HTML
41
+ * path here on purpose. Both are untrusted text — half of it is the model's
42
+ * own output and the other half is whatever the tool returned — and a
43
+ * component that quietly parsed them would make every consumer of this library
44
+ * one prompt away from an injection. `args` is text you already formatted;
45
+ * `result` takes nodes, so a caller who wants rich output passes their own
46
+ * renderer and owns that decision.
47
+ *
48
+ * The body is mounted and unmounted rather than height-animated. A call's
49
+ * result lands mid-render and its arguments grow while they stream, and
50
+ * animating the height of something that changes size on its own is how a panel
51
+ * ends up permanently mid-transition.
52
+ *
53
+ * @example
54
+ * <ToolCallCard tool="read_file" args={'{ "path": "cue.json" }'} status="working" activity="reading 12 KB" />
55
+ */
56
+ const ToolCallCard = React.forwardRef(function ToolCallCard({ className, tool, args, result, status, activity, danger, agent, rootAgent, open: openProp, defaultOpen, onOpenChange, argsLabel = "arguments", resultLabel = "result", doneLabel = "Completed", failedLabel = "Failed", children, style, ...elementProps }, ref) {
57
+ const bodyId = React.useId();
58
+ const isControlled = openProp !== void 0;
59
+ const [uncontrolled, setUncontrolled] = React.useState(defaultOpen ?? false);
60
+ const open = isControlled ? openProp : uncontrolled;
61
+ const hasArgs = args !== void 0 && args !== "";
62
+ const hasResult = result !== void 0 && result !== null && result !== false && result !== "" && !(Array.isArray(result) && result.length === 0);
63
+ const hasDetail = hasArgs || hasResult || children !== void 0;
64
+ const toggle = () => {
65
+ const next = !open;
66
+ if (!isControlled) setUncontrolled(next);
67
+ onOpenChange?.(next);
68
+ };
69
+ const color = agent === void 0 ? AGENT_ROOT_COLOR : agentColor(agent, { root: rootAgent });
70
+ const heading = /* @__PURE__ */ jsxs(Fragment, { children: [
71
+ /* @__PURE__ */ jsx("span", {
72
+ "aria-hidden": "true",
73
+ className: "shrink-0 text-(--agent-color)",
74
+ children: "●"
75
+ }),
76
+ /* @__PURE__ */ jsx("code", {
77
+ "data-slot": "tool-call-card-tool",
78
+ className: "min-w-0 truncate font-mono text-(length:--cue-text-micro) text-fg",
79
+ children: tool
80
+ }),
81
+ agent === void 0 ? null : /* @__PURE__ */ jsxs("span", {
82
+ className: "sr-only",
83
+ children: ["by ", agent]
84
+ }),
85
+ danger === void 0 ? null : /* @__PURE__ */ jsx(Chip, {
86
+ "data-slot": "tool-call-card-danger",
87
+ tone: DANGER_TONES[danger],
88
+ "data-danger": danger,
89
+ children: danger
90
+ })
91
+ ] });
92
+ return /* @__PURE__ */ jsxs("div", {
93
+ ref,
94
+ "data-slot": "tool-call-card",
95
+ "data-agent": agent,
96
+ "data-status": status,
97
+ "data-state": hasDetail ? open ? "open" : "closed" : void 0,
98
+ "data-danger": danger,
99
+ className: cn("flex min-w-0 flex-col gap-(--cue-space-2) rounded-(--radius-control) border border-border px-(--cue-space-3) py-(--cue-space-2)", className),
100
+ style: {
101
+ "--agent-color": color,
102
+ ...style
103
+ },
104
+ ...elementProps,
105
+ children: [
106
+ hasDetail ? /* @__PURE__ */ jsxs("button", {
107
+ type: "button",
108
+ "data-slot": "tool-call-card-trigger",
109
+ "aria-expanded": open,
110
+ "aria-controls": open ? bodyId : void 0,
111
+ className: cn(HEADER, "cursor-pointer"),
112
+ onClick: toggle,
113
+ children: [/* @__PURE__ */ jsx("span", {
114
+ "aria-hidden": "true",
115
+ "data-slot": "tool-call-card-caret",
116
+ className: "shrink-0 text-(length:--cue-text-micro) leading-none select-none",
117
+ children: open ? "▾" : "▸"
118
+ }), heading]
119
+ }) : /* @__PURE__ */ jsxs("div", {
120
+ "data-slot": "tool-call-card-header",
121
+ className: HEADER,
122
+ children: [/* @__PURE__ */ jsx("span", {
123
+ "aria-hidden": "true",
124
+ "data-slot": "tool-call-card-caret-space",
125
+ className: "invisible shrink-0 text-(length:--cue-text-micro) leading-none select-none",
126
+ children: "▸"
127
+ }), heading]
128
+ }),
129
+ status === void 0 ? null : /* @__PURE__ */ jsxs("div", {
130
+ "data-slot": "tool-call-card-status",
131
+ "data-status": status,
132
+ className: cn("flex min-w-0 items-center gap-(--cue-space-2) ps-(--cue-space-5) font-mono text-(length:--cue-text-micro)", status === "failed" ? "text-danger" : "text-fg-subtle"),
133
+ children: [
134
+ status === "working" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Spinner, {
135
+ size: "sm",
136
+ label: "working",
137
+ "data-slot": "tool-call-card-spinner",
138
+ className: "text-(--agent-color)"
139
+ }), /* @__PURE__ */ jsx("span", {
140
+ className: "min-w-0 truncate",
141
+ children: activity ?? "working…"
142
+ })] }) : null,
143
+ status === "done" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CheckGlyph, { className: "size-icon-sm shrink-0 text-ok" }), /* @__PURE__ */ jsx("span", {
144
+ className: "min-w-0 truncate",
145
+ children: doneLabel
146
+ })] }) : null,
147
+ status === "failed" ? /* @__PURE__ */ jsx("span", {
148
+ className: "min-w-0 truncate",
149
+ children: failedLabel
150
+ }) : null,
151
+ status === "idle" ? /* @__PURE__ */ jsx("span", {
152
+ className: "min-w-0 truncate",
153
+ children: activity ?? "waiting"
154
+ }) : null
155
+ ]
156
+ }),
157
+ open && hasDetail ? /* @__PURE__ */ jsxs("div", {
158
+ id: bodyId,
159
+ "data-slot": "tool-call-card-body",
160
+ className: "ms-(--cue-space-3) flex min-w-0 flex-col gap-(--cue-space-2) border-s-2 [border-inline-start-color:var(--agent-color)] ps-(--cue-space-4)",
161
+ children: [
162
+ hasArgs ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
163
+ "data-slot": "tool-call-card-args-label",
164
+ className: EYEBROW,
165
+ children: argsLabel
166
+ }), /* @__PURE__ */ jsx("pre", {
167
+ "data-slot": "tool-call-card-args",
168
+ className: "m-0 min-w-0 overflow-x-auto font-mono text-(length:--cue-text-micro) leading-relaxed break-words whitespace-pre-wrap text-fg-muted",
169
+ children: args
170
+ })] }) : null,
171
+ hasResult ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
172
+ "data-slot": "tool-call-card-result-label",
173
+ className: EYEBROW,
174
+ children: resultLabel
175
+ }), /* @__PURE__ */ jsx("div", {
176
+ "data-slot": "tool-call-card-result",
177
+ className: "min-w-0 font-mono text-(length:--cue-text-micro) leading-relaxed break-words whitespace-pre-wrap text-fg",
178
+ children: result
179
+ })] }) : null,
180
+ children
181
+ ]
182
+ }) : null
183
+ ]
184
+ });
185
+ });
186
+ //#endregion
187
+ export { ToolCallCard };
@@ -0,0 +1,164 @@
1
+ import { BranchDirection } from "./branch-picker.js";
2
+ import { ToolCallStatus } from "./tool-call-card.js";
3
+ import { MessageRole } from "../chat/message.js";
4
+ import { AssistantRuntime, ThreadMessage } from "@assistant-ui/react";
5
+ //#region src/agent-runtime/use-agent-thread.d.ts
6
+ /** Where an agent turn has got to. */
7
+ type AgentTurnStatus = "streaming" | "complete" | "requires-action" | "cancelled" | "failed";
8
+ /** One tool call inside a turn, in the shape `ToolCallCard` takes. */
9
+ interface AgentToolCall {
10
+ /** The runtime's id for the call. */
11
+ id: string;
12
+ /** Tool name. Spread onto `ToolCallCard` as `tool`. */
13
+ tool: string;
14
+ /** Arguments as text: the pretty-printed parse once any field has landed, else the raw JSON as streamed. Spread as `args`. */
15
+ args: string;
16
+ /** The result as text, or `undefined` until there is one. Spread as `result`. */
17
+ result: string | undefined;
18
+ /** Spread onto `ToolCallCard` as `status`. */
19
+ status: ToolCallStatus;
20
+ }
21
+ /** One turn, in the shape `Message` takes. */
22
+ interface AgentTurn {
23
+ /** The runtime's message id. Use it as the React key and for `regenerate`/`switchBranch`. */
24
+ id: string;
25
+ /** Spread onto `Message` as `role`. */
26
+ role: MessageRole;
27
+ /** From `options.agent`; `undefined` when unset. Spread onto `Message` as `agent`. */
28
+ agent: string | undefined;
29
+ /** Every text part, joined by a blank line. Render verbatim as `Message`'s children. */
30
+ text: string;
31
+ /** Every reasoning part, joined by a blank line, or `undefined` when there is none. */
32
+ reasoning: string | undefined;
33
+ /** The turn's tool calls, in order. */
34
+ toolCalls: readonly AgentToolCall[];
35
+ /** Where the turn has got to, in words rather than in flags. */
36
+ status: AgentTurnStatus;
37
+ /** `status === "streaming"`. Spread onto `Message` as `pending`. */
38
+ pending: boolean;
39
+ /** When the runtime first saw the turn. */
40
+ createdAt: Date;
41
+ /** 1-based position among sibling branches, and how many there are — `BranchPicker`'s `index`/`count`. */
42
+ branch: {
43
+ readonly index: number;
44
+ readonly count: number;
45
+ };
46
+ /** The runtime's own message, for anything this shape leaves out. */
47
+ message: ThreadMessage;
48
+ }
49
+ interface UseAgentThreadOptions {
50
+ /** Names the agent behind agent turns: a fixed slug, or a resolver reading the runtime message (e.g. `m.metadata.custom.agent`). A resolver may be inline: it is read through a ref and applied when the thread changes, not on every render. */
51
+ agent?: string | ((message: ThreadMessage) => string | undefined);
52
+ }
53
+ /** What the hook returns — every field named for the prop it feeds. */
54
+ interface AgentThread {
55
+ /** The thread, oldest first. One `Message` each. */
56
+ turns: readonly AgentTurn[];
57
+ /** A run is in flight. Spread onto `Composer` as `busy`. */
58
+ busy: boolean;
59
+ /** The thread cannot take input. Spread onto `Composer` as `disabled`. */
60
+ disabled: boolean;
61
+ /** Send a user turn. Spread onto `Composer` as `onSend`. */
62
+ onSend: (text: string) => void;
63
+ /** Abort the run — `undefined` when the runtime cannot cancel, so `Composer` keeps Send. Spread as `onStop`. */
64
+ onStop: (() => void) | undefined;
65
+ /** Regenerate an agent turn in place (a new branch), or `undefined` when the runtime cannot reload. */
66
+ regenerate: ((turnId: string) => void) | undefined;
67
+ /** Move a turn to its previous/next sibling branch, or `undefined` when the runtime cannot switch. Feed `BranchPicker`'s `onNavigate`. */
68
+ switchBranch: ((turnId: string, direction: BranchDirection) => void) | undefined;
69
+ /** The runtime itself, for anything this shape leaves out. */
70
+ runtime: AssistantRuntime;
71
+ }
72
+ /**
73
+ * An assistant-ui runtime, read as the props the Chat group already takes.
74
+ *
75
+ * `Message`, `MessageList` and `Composer` render turns that have finished
76
+ * arriving. The hard part of a turn that is *still* arriving — assembling
77
+ * tokens, tracking a run, cancelling one, keeping a regenerated answer beside
78
+ * its sibling — is a solved problem, so this library does not re-derive it. You
79
+ * build a runtime with one line of assistant-ui, typically
80
+ * `useExternalStoreRuntime(adapter)`, and hand the object over; every field
81
+ * that comes back is named for the prop it feeds.
82
+ *
83
+ * It is provider-free by construction: a `useSyncExternalStore` over the
84
+ * runtime's thread, and nothing else. No `AssistantRuntimeProvider`, no
85
+ * primitive, no context and no borrowed DOM — this library renders 100% of what
86
+ * the reader sees, and the peer is only a type in the shipped modules.
87
+ *
88
+ * `MessageList` follows a turn that is still growing on its own: the items
89
+ * container is watched for growth, so a streaming bubble keeps the bottom in
90
+ * view without the host adding anything, while a tool-call card the reader
91
+ * folds away leaves the view where it was.
92
+ *
93
+ * Four things are worth knowing before wiring an `ExternalStoreAdapter` to it:
94
+ *
95
+ * - **Pass `convertMessage`, and keep its identity.** Without it your messages
96
+ * must already be complete runtime messages, and a missing `metadata`
97
+ * throws; `convertMessage: (m) => m` lets the runtime fill the defaults in.
98
+ * Declare it outside the component (or memoise it): the runtime caches the
99
+ * conversion against that function, so a fresh arrow every render re-converts
100
+ * the whole thread, which re-renders, which converts it again — an inline
101
+ * arrow turns the next message change into "Maximum update depth exceeded".
102
+ * - **`onReload` takes two arguments** — `(parentId, config)`. Regenerating a
103
+ * turn re-runs its *parent*, which is what puts the new answer beside the old
104
+ * one rather than after it.
105
+ * - **A branch switch is host-owned.** Under an ExternalStore runtime
106
+ * `switchBranch` does not move the thread: it arrives at the adapter's
107
+ * `setMessages` with the newly visible list, and the host writes it back. A
108
+ * host that ignores `setMessages` gets a picker that does nothing.
109
+ * - **`onStop`, `regenerate` and `switchBranch` are `undefined`** until the
110
+ * matching callback exists on the adapter (`onCancel`, `onReload`,
111
+ * `setMessages`). That is deliberate: `Composer` keeps drawing Send while
112
+ * `onStop` is missing, so a control that cannot work is never drawn.
113
+ *
114
+ * @example
115
+ * // Outside the component: the runtime caches the conversion against this
116
+ * // function, and a new one every render is an update loop.
117
+ * const convertMessage = (m: ThreadMessageLike) => m;
118
+ *
119
+ * const runtime = useExternalStoreRuntime({
120
+ * messages,
121
+ * isRunning,
122
+ * convertMessage,
123
+ * onNew,
124
+ * onCancel,
125
+ * onReload,
126
+ * setMessages,
127
+ * });
128
+ * const thread = useAgentThread(runtime, { agent: "planner" });
129
+ *
130
+ * <MessageList aria-label="Thread">
131
+ * {thread.turns.map((t) => (
132
+ * <Message
133
+ * key={t.id}
134
+ * role={t.role}
135
+ * agent={t.agent}
136
+ * pending={t.pending}
137
+ * footer={
138
+ * t.branch.count > 1 && thread.switchBranch ? (
139
+ * <BranchPicker
140
+ * index={t.branch.index}
141
+ * count={t.branch.count}
142
+ * onNavigate={(d) => thread.switchBranch?.(t.id, d)}
143
+ * disabled={thread.busy}
144
+ * />
145
+ * ) : undefined
146
+ * }
147
+ * >
148
+ * {t.text}
149
+ * {t.toolCalls.map((c) => (
150
+ * <ToolCallCard key={c.id} tool={c.tool} args={c.args} result={c.result} status={c.status} />
151
+ * ))}
152
+ * </Message>
153
+ * ))}
154
+ * </MessageList>
155
+ * <Composer
156
+ * onSend={thread.onSend}
157
+ * busy={thread.busy}
158
+ * disabled={thread.disabled || thread.busy}
159
+ * onStop={thread.onStop}
160
+ * />
161
+ */
162
+ declare function useAgentThread(runtime: AssistantRuntime, options?: UseAgentThreadOptions): AgentThread;
163
+ //#endregion
164
+ export { AgentThread, AgentToolCall, AgentTurn, AgentTurnStatus, UseAgentThreadOptions, useAgentThread };