@adecore/agents-react 0.31.12 → 0.33.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 (409) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/AccountDot.js +57 -6
  3. package/dist/agents/AgentIcon.js +88 -12
  4. package/dist/agents/ModelOptionControl.js +153 -18
  5. package/dist/agents/ProviderLogo.js +49 -4
  6. package/dist/agents/account-limits.js +17 -14
  7. package/dist/agents/accounts.js +99 -67
  8. package/dist/agents/agent-marks.js +5 -3
  9. package/dist/agents/model-name.js +42 -31
  10. package/dist/agents/model-options.js +8 -8
  11. package/dist/agents/model-requirement.js +17 -14
  12. package/dist/agents/option-words.d.ts +7 -0
  13. package/dist/agents/option-words.js +35 -0
  14. package/dist/agents/provider-paths.js +6 -6
  15. package/dist/agents/status-look.js +32 -12
  16. package/dist/chat/account-choice.d.ts +13 -0
  17. package/dist/chat/account-choice.js +90 -20
  18. package/dist/chat/actions.js +126 -59
  19. package/dist/chat/activity.js +5 -5
  20. package/dist/chat/attachments.js +74 -53
  21. package/dist/chat/bookmarks.js +58 -48
  22. package/dist/chat/chat-client.js +344 -263
  23. package/dist/chat/chat-references.js +3 -3
  24. package/dist/chat/composer-effort.d.ts +5 -0
  25. package/dist/chat/composer-effort.js +26 -0
  26. package/dist/chat/composer-send.js +13 -13
  27. package/dist/chat/drafts.js +115 -79
  28. package/dist/chat/forks.js +81 -24
  29. package/dist/chat/guards.js +15 -43
  30. package/dist/chat/index.d.ts +3 -1
  31. package/dist/chat/index.js +3 -2
  32. package/dist/chat/logic/ansi.js +170 -167
  33. package/dist/chat/logic/answers.js +2 -2
  34. package/dist/chat/logic/bookmarks.js +19 -19
  35. package/dist/chat/logic/command-looks.js +138 -96
  36. package/dist/chat/logic/context-usage.js +13 -9
  37. package/dist/chat/logic/continue-after-stop.js +15 -19
  38. package/dist/chat/logic/effort.d.ts +14 -0
  39. package/dist/chat/logic/effort.js +34 -0
  40. package/dist/chat/logic/embedded-code.js +387 -326
  41. package/dist/chat/logic/fork.js +134 -110
  42. package/dist/chat/logic/generated-image.js +54 -23
  43. package/dist/chat/logic/goal.js +28 -20
  44. package/dist/chat/logic/handback.js +6 -6
  45. package/dist/chat/logic/json.js +2 -2
  46. package/dist/chat/logic/limit.js +46 -30
  47. package/dist/chat/logic/picker-entries.d.ts +5 -3
  48. package/dist/chat/logic/picker-entries.js +83 -43
  49. package/dist/chat/logic/resume-compaction.d.ts +14 -1
  50. package/dist/chat/logic/resume-compaction.js +93 -24
  51. package/dist/chat/logic/scrubber.js +188 -136
  52. package/dist/chat/logic/thought.js +13 -16
  53. package/dist/chat/logic/thread-cards.js +60 -48
  54. package/dist/chat/logic/timeline-copy.js +30 -38
  55. package/dist/chat/logic/timeline-target.js +92 -63
  56. package/dist/chat/logic/timeline.js +499 -355
  57. package/dist/chat/logic/tool-catalog.js +54 -34
  58. package/dist/chat/logic/tools.js +106 -82
  59. package/dist/chat/logic/visual-height.js +18 -18
  60. package/dist/chat/logic/visual-viewport.js +6 -3
  61. package/dist/chat/logic/welcome.js +9 -9
  62. package/dist/chat/logic/workflow.d.ts +10 -0
  63. package/dist/chat/logic/workflow.js +130 -32
  64. package/dist/chat/mentions.js +149 -109
  65. package/dist/chat/persisted-json.js +51 -54
  66. package/dist/chat/preferences.d.ts +4 -0
  67. package/dist/chat/preferences.js +162 -84
  68. package/dist/chat/prompt-hold.js +9 -9
  69. package/dist/chat/quote.js +21 -30
  70. package/dist/chat/reading-width.js +12 -10
  71. package/dist/chat/recent-messages.js +34 -21
  72. package/dist/chat/resume-compaction-dismissals.js +25 -5
  73. package/dist/chat/runtime-modes.js +3 -3
  74. package/dist/chat/send-key.js +11 -7
  75. package/dist/chat/stash.js +89 -69
  76. package/dist/chat/subagent-conversation.js +181 -139
  77. package/dist/chat/subagent-list.js +65 -67
  78. package/dist/chat/subagent-support.js +12 -7
  79. package/dist/chat/subagent-view.js +132 -44
  80. package/dist/chat/thumbnails.js +88 -60
  81. package/dist/chat/timeline-flash.js +24 -12
  82. package/dist/chat/timeline-scroll.js +116 -86
  83. package/dist/chat/ui/AccountPill.js +126 -15
  84. package/dist/chat/ui/AnsiOutput.js +62 -6
  85. package/dist/chat/ui/BookmarkMarker.js +231 -41
  86. package/dist/chat/ui/BookmarkSubmenu.js +165 -18
  87. package/dist/chat/ui/ChatActivity.js +649 -70
  88. package/dist/chat/ui/ChatReferenceChip.js +104 -9
  89. package/dist/chat/ui/CodeBlock.js +132 -58
  90. package/dist/chat/ui/Composer.js +866 -132
  91. package/dist/chat/ui/ComposerInput.js +309 -120
  92. package/dist/chat/ui/DiffPool.js +75 -14
  93. package/dist/chat/ui/EditDiff.js +160 -21
  94. package/dist/chat/ui/FadingWords.js +32 -3
  95. package/dist/chat/ui/GoalDock.js +235 -42
  96. package/dist/chat/ui/ImageView.js +617 -61
  97. package/dist/chat/ui/LimitState.js +446 -72
  98. package/dist/chat/ui/Markdown.js +991 -173
  99. package/dist/chat/ui/MermaidBlock.js +285 -79
  100. package/dist/chat/ui/MessageActions.js +251 -39
  101. package/dist/chat/ui/ModelMarks.js +55 -5
  102. package/dist/chat/ui/Pickers.js +664 -113
  103. package/dist/chat/ui/PromptComposer.js +281 -51
  104. package/dist/chat/ui/QuoteButton.js +151 -57
  105. package/dist/chat/ui/ResumeCompactionDock.d.ts +6 -2
  106. package/dist/chat/ui/ResumeCompactionDock.js +141 -6
  107. package/dist/chat/ui/RowTime.js +59 -5
  108. package/dist/chat/ui/RunSettings.js +1744 -154
  109. package/dist/chat/ui/Scrubber.js +517 -88
  110. package/dist/chat/ui/ShellCommand.js +183 -107
  111. package/dist/chat/ui/SubagentControls.js +212 -24
  112. package/dist/chat/ui/SubagentInfo.js +170 -13
  113. package/dist/chat/ui/SubagentStopButton.js +115 -24
  114. package/dist/chat/ui/SubagentTimeline.js +357 -91
  115. package/dist/chat/ui/Timeline.js +988 -476
  116. package/dist/chat/ui/TimelineMenu.js +552 -37
  117. package/dist/chat/ui/UnifiedDiff.js +234 -27
  118. package/dist/chat/ui/UploadThumb.js +37 -7
  119. package/dist/chat/ui/VisualDialogs.js +251 -20
  120. package/dist/chat/ui/VisualFrame.js +321 -95
  121. package/dist/chat/ui/Welcome.js +72 -7
  122. package/dist/chat/ui/chips.js +1 -1
  123. package/dist/chat/ui/code-lines.js +36 -36
  124. package/dist/chat/ui/code-streaming.js +1 -1
  125. package/dist/chat/ui/code-theme.js +7 -7
  126. package/dist/chat/ui/composer/ComposerControls.js +329 -21
  127. package/dist/chat/ui/composer/ComposerMenu.js +358 -30
  128. package/dist/chat/ui/composer/DraftParts.js +185 -11
  129. package/dist/chat/ui/composer/QueuedMessages.js +138 -13
  130. package/dist/chat/ui/composer/chips.js +29 -19
  131. package/dist/chat/ui/composer/editor.js +79 -63
  132. package/dist/chat/ui/composer/insert.js +26 -12
  133. package/dist/chat/ui/composer/key-handler.js +180 -127
  134. package/dist/chat/ui/composer/keys.js +90 -73
  135. package/dist/chat/ui/composer/menu-aria.js +18 -9
  136. package/dist/chat/ui/composer/placeholder.js +78 -31
  137. package/dist/chat/ui/composer/surface.js +13 -37
  138. package/dist/chat/ui/composer/use-chat-controls.js +230 -90
  139. package/dist/chat/ui/composer/use-compaction-offer.js +50 -18
  140. package/dist/chat/ui/composer/use-composer-draft.js +65 -34
  141. package/dist/chat/ui/composer/use-composer-menus.js +478 -193
  142. package/dist/chat/ui/composer/use-composer-submit.js +251 -109
  143. package/dist/chat/ui/composer/use-continuable-turn.js +33 -6
  144. package/dist/chat/ui/composer/use-draft-files.js +245 -93
  145. package/dist/chat/ui/composer/use-effort-stepper.d.ts +13 -0
  146. package/dist/chat/ui/composer/use-effort-stepper.js +88 -0
  147. package/dist/chat/ui/composer/use-notice.js +61 -16
  148. package/dist/chat/ui/composer/use-pending-requests.js +38 -17
  149. package/dist/chat/ui/composer/use-prompt-history.js +117 -45
  150. package/dist/chat/ui/composer/use-prompt-hold.js +119 -35
  151. package/dist/chat/ui/composer/use-take-back.js +94 -72
  152. package/dist/chat/ui/diff/ApprovalReview.js +101 -23
  153. package/dist/chat/ui/diff/DiffFallbackBoundary.js +21 -13
  154. package/dist/chat/ui/diff/DiffOmitted.js +56 -6
  155. package/dist/chat/ui/diff/DiffStack.js +92 -8
  156. package/dist/chat/ui/diff/DiffUnavailable.js +56 -6
  157. package/dist/chat/ui/diff/EditorEditDiff.js +263 -51
  158. package/dist/chat/ui/diff/EditorPatchDiff.js +39 -14
  159. package/dist/chat/ui/diff/LegacyDiffPool.js +27 -10
  160. package/dist/chat/ui/diff/LegacyEditDiff.js +97 -20
  161. package/dist/chat/ui/diff/LegacyUnifiedDiff.js +172 -42
  162. package/dist/chat/ui/diff/RawDiff.js +65 -5
  163. package/dist/chat/ui/diff/ReviewDiff.js +77 -5
  164. package/dist/chat/ui/diff/diff-props.js +1 -1
  165. package/dist/chat/ui/diff/diff-source-budget.js +46 -35
  166. package/dist/chat/ui/diff/editor-edit-model.js +18 -14
  167. package/dist/chat/ui/diff/review-plan.js +63 -40
  168. package/dist/chat/ui/diff/review-settle.js +24 -9
  169. package/dist/chat/ui/diff/syntax-runtime.js +236 -201
  170. package/dist/chat/ui/diff/use-review-stack.js +146 -25
  171. package/dist/chat/ui/diff-syntax.js +70 -58
  172. package/dist/chat/ui/diff-theme.js +31 -12
  173. package/dist/chat/ui/file-links.js +39 -10
  174. package/dist/chat/ui/find-reveal.js +29 -8
  175. package/dist/chat/ui/full-diff.js +17 -12
  176. package/dist/chat/ui/highlighter.js +143 -113
  177. package/dist/chat/ui/icons.js +16 -7
  178. package/dist/chat/ui/index.js +1 -1
  179. package/dist/chat/ui/intelligent-ui/UiBlockFrame.js +556 -82
  180. package/dist/chat/ui/intelligent-ui/UiFallbackPart.js +73 -5
  181. package/dist/chat/ui/intelligent-ui/UiReply.js +666 -262
  182. package/dist/chat/ui/intelligent-ui/block-local.js +59 -31
  183. package/dist/chat/ui/intelligent-ui/chart-data.js +77 -67
  184. package/dist/chat/ui/intelligent-ui/node-text.js +77 -91
  185. package/dist/chat/ui/intelligent-ui/registry.js +46 -46
  186. package/dist/chat/ui/intelligent-ui/render-context.js +1 -1
  187. package/dist/chat/ui/intelligent-ui/renderers/base-land.js +1 -1
  188. package/dist/chat/ui/intelligent-ui/renderers/binding.js +3 -3
  189. package/dist/chat/ui/intelligent-ui/renderers/chart.js +1223 -123
  190. package/dist/chat/ui/intelligent-ui/renderers/choices.js +312 -34
  191. package/dist/chat/ui/intelligent-ui/renderers/content.js +1241 -86
  192. package/dist/chat/ui/intelligent-ui/renderers/data.js +619 -54
  193. package/dist/chat/ui/intelligent-ui/renderers/inputs.js +868 -67
  194. package/dist/chat/ui/intelligent-ui/renderers/links.js +366 -62
  195. package/dist/chat/ui/intelligent-ui/renderers/map-slots.js +118 -60
  196. package/dist/chat/ui/intelligent-ui/renderers/map-style.js +85 -78
  197. package/dist/chat/ui/intelligent-ui/renderers/map-view.js +282 -217
  198. package/dist/chat/ui/intelligent-ui/renderers/map.js +621 -69
  199. package/dist/chat/ui/intelligent-ui/renderers/place-point.js +15 -8
  200. package/dist/chat/ui/intelligent-ui/renderers/structure.js +262 -20
  201. package/dist/chat/ui/intelligent-ui/renderers/text.js +674 -49
  202. package/dist/chat/ui/intelligent-ui/reply-parts.js +24 -15
  203. package/dist/chat/ui/intelligent-ui/table-data.js +97 -57
  204. package/dist/chat/ui/intelligent-ui/tones.js +31 -31
  205. package/dist/chat/ui/intelligent-ui/use-in-view.js +30 -12
  206. package/dist/chat/ui/intelligent-ui/use-later.js +28 -13
  207. package/dist/chat/ui/intelligent-ui/use-truncated.js +45 -21
  208. package/dist/chat/ui/intelligent-ui/use-ui-links.js +296 -109
  209. package/dist/chat/ui/intelligent-ui/use-ui-queries.js +256 -246
  210. package/dist/chat/ui/markdown-blocks.js +296 -262
  211. package/dist/chat/ui/mermaid.d.ts +8 -20
  212. package/dist/chat/ui/mermaid.js +47 -84
  213. package/dist/chat/ui/quote-selection.js +32 -29
  214. package/dist/chat/ui/rehype-chips.js +35 -23
  215. package/dist/chat/ui/rehype-fade.js +28 -17
  216. package/dist/chat/ui/remark-html-as-text.js +22 -15
  217. package/dist/chat/ui/reply-context.js +1 -1
  218. package/dist/chat/ui/reveal.js +161 -72
  219. package/dist/chat/ui/rows/ForksRow.js +226 -24
  220. package/dist/chat/ui/rows/GeneratedImageRow.js +541 -87
  221. package/dist/chat/ui/rows/MessageRows.js +1706 -159
  222. package/dist/chat/ui/rows/RowContainer.js +57 -7
  223. package/dist/chat/ui/rows/Rows.js +463 -54
  224. package/dist/chat/ui/rows/SubagentRow.js +577 -60
  225. package/dist/chat/ui/rows/TaskRow.js +359 -40
  226. package/dist/chat/ui/rows/VisualRow.js +233 -11
  227. package/dist/chat/ui/rows/WorkRows.d.ts +3 -0
  228. package/dist/chat/ui/rows/WorkRows.js +1945 -164
  229. package/dist/chat/ui/rows/WorkflowRow.js +756 -37
  230. package/dist/chat/ui/rows/row-rhythm.js +27 -17
  231. package/dist/chat/ui/theme-watch.js +26 -23
  232. package/dist/chat/ui/timestamp-format.js +4 -1
  233. package/dist/chat/ui/use-diff-source-tokens.js +70 -34
  234. package/dist/chat/ui/useToggleSet.js +51 -19
  235. package/dist/chat/ui/visual-theme.js +153 -128
  236. package/dist/chat/visual-bridge.js +123 -123
  237. package/dist/chat/visual-viewport.js +94 -83
  238. package/dist/chat/visuals.js +13 -5
  239. package/dist/host-hooks.d.ts +29 -0
  240. package/dist/host-hooks.js +78 -0
  241. package/dist/host.js +120 -48
  242. package/dist/index.js +1 -1
  243. package/dist/lazy.js +38 -32
  244. package/dist/locales/en/agent-chat.d.ts +42 -0
  245. package/dist/locales/en/agent-chat.js +755 -713
  246. package/dist/locales/en/agent-prompts.js +42 -42
  247. package/dist/locales/en/agent-providers.d.ts +1 -0
  248. package/dist/locales/en/agent-providers.js +166 -165
  249. package/dist/locales/en/agent-usage.d.ts +6 -0
  250. package/dist/locales/en/agent-usage.js +129 -123
  251. package/dist/locales/nl/agent-chat.d.ts +42 -0
  252. package/dist/locales/nl/agent-chat.js +755 -713
  253. package/dist/locales/nl/agent-prompts.js +42 -42
  254. package/dist/locales/nl/agent-providers.d.ts +1 -0
  255. package/dist/locales/nl/agent-providers.js +166 -165
  256. package/dist/locales/nl/agent-usage.d.ts +6 -0
  257. package/dist/locales/nl/agent-usage.js +129 -123
  258. package/dist/locales.js +14 -14
  259. package/dist/mounted-registry.js +31 -30
  260. package/dist/port-transport.js +122 -111
  261. package/dist/prompts/index.js +1 -1
  262. package/dist/prompts/logic/focus.js +15 -14
  263. package/dist/prompts/logic/keys.js +93 -59
  264. package/dist/prompts/logic/prompts.js +27 -14
  265. package/dist/prompts/logic/subjects.js +60 -46
  266. package/dist/prompts/logic/useFocusAfterAnswer.js +60 -20
  267. package/dist/prompts/logic/usePromptSession.js +88 -77
  268. package/dist/prompts/ui/ApprovalBody.js +246 -27
  269. package/dist/prompts/ui/PromptActions.js +215 -9
  270. package/dist/prompts/ui/PromptCard.js +215 -36
  271. package/dist/prompts/ui/PromptView.js +372 -34
  272. package/dist/prompts/ui/QuestionBody.js +269 -73
  273. package/dist/providers/AccountColors.js +36 -5
  274. package/dist/providers/AccountDetail.js +683 -50
  275. package/dist/providers/AccountVariables.js +139 -32
  276. package/dist/providers/AddAccountForm.js +125 -38
  277. package/dist/providers/CliDetail.js +343 -36
  278. package/dist/providers/InstallPage.js +644 -59
  279. package/dist/providers/ProviderList.d.ts +2 -1
  280. package/dist/providers/ProviderList.js +215 -23
  281. package/dist/providers/ProvidersPane.d.ts +4 -2
  282. package/dist/providers/ProvidersPane.js +244 -64
  283. package/dist/providers/account-actions.js +54 -30
  284. package/dist/providers/index.js +1 -1
  285. package/dist/providers/install-steps.js +12 -9
  286. package/dist/providers/pane-target.d.ts +3 -0
  287. package/dist/providers/pane-target.js +34 -13
  288. package/dist/providers/parts.js +62 -12
  289. package/dist/providers/provider-abilities.js +5 -5
  290. package/dist/providers/provider-groups.js +75 -40
  291. package/dist/providers/variables.js +73 -39
  292. package/dist/scope.js +6 -6
  293. package/dist/settings/sections.js +18 -18
  294. package/dist/state/chats.js +404 -192
  295. package/dist/state/index.js +1 -1
  296. package/dist/state/provider-accounts.js +70 -47
  297. package/dist/state/providers.js +45 -16
  298. package/dist/state/usage.js +154 -77
  299. package/dist/storage.js +69 -68
  300. package/dist/testing/index.js +1 -1
  301. package/dist/testing/prompts.js +105 -67
  302. package/dist/transport.js +10 -10
  303. package/dist/ui/PlainTextarea.js +27 -3
  304. package/dist/usage/LimitsList.js +646 -40
  305. package/dist/usage/UsageBreakdown.js +879 -38
  306. package/dist/usage/UsageChart.js +311 -32
  307. package/dist/usage/UsageDialog.js +46 -4
  308. package/dist/usage/UsageLimits.js +467 -34
  309. package/dist/usage/UsageLimitsCard.js +95 -11
  310. package/dist/usage/UsagePage.js +817 -96
  311. package/dist/usage/UsagePane.js +164 -10
  312. package/dist/usage/UsageSummary.js +151 -6
  313. package/dist/usage/UsageTiles.js +164 -14
  314. package/dist/usage/format.js +32 -32
  315. package/dist/usage/index.d.ts +1 -1
  316. package/dist/usage/index.js +2 -1
  317. package/dist/usage/limit-groups.d.ts +2 -0
  318. package/dist/usage/limit-groups.js +77 -59
  319. package/dist/usage/limits.js +78 -43
  320. package/dist/usage/money.js +20 -4
  321. package/dist/usage/summary.js +85 -64
  322. package/package.json +9 -9
  323. package/src/agents/ModelOptionControl.tsx +3 -1
  324. package/src/agents/option-words.ts +27 -0
  325. package/src/chat/account-choice.ts +41 -1
  326. package/src/chat/composer-effort.ts +32 -0
  327. package/src/chat/forks.ts +4 -5
  328. package/src/chat/index.ts +3 -1
  329. package/src/chat/logic/effort.ts +32 -0
  330. package/src/chat/logic/picker-entries.ts +45 -10
  331. package/src/chat/logic/resume-compaction.ts +95 -17
  332. package/src/chat/logic/timeline.ts +11 -3
  333. package/src/chat/logic/workflow.ts +86 -4
  334. package/src/chat/preferences.ts +35 -0
  335. package/src/chat/subagent-view.ts +2 -3
  336. package/src/chat/ui/AnsiOutput.tsx +1 -2
  337. package/src/chat/ui/BookmarkSubmenu.tsx +3 -3
  338. package/src/chat/ui/ChatActivity.tsx +14 -22
  339. package/src/chat/ui/ChatReferenceChip.tsx +2 -3
  340. package/src/chat/ui/Composer.tsx +15 -7
  341. package/src/chat/ui/EditDiff.tsx +2 -3
  342. package/src/chat/ui/LimitState.tsx +2 -2
  343. package/src/chat/ui/Markdown.tsx +10 -8
  344. package/src/chat/ui/MermaidBlock.tsx +57 -49
  345. package/src/chat/ui/Pickers.tsx +49 -29
  346. package/src/chat/ui/PromptComposer.tsx +7 -9
  347. package/src/chat/ui/ResumeCompactionDock.tsx +16 -4
  348. package/src/chat/ui/RunSettings.tsx +67 -28
  349. package/src/chat/ui/Scrubber.tsx +3 -3
  350. package/src/chat/ui/ShellCommand.tsx +2 -0
  351. package/src/chat/ui/SubagentInfo.tsx +2 -3
  352. package/src/chat/ui/SubagentTimeline.tsx +12 -16
  353. package/src/chat/ui/Timeline.tsx +6 -6
  354. package/src/chat/ui/UnifiedDiff.tsx +3 -4
  355. package/src/chat/ui/VisualFrame.tsx +5 -8
  356. package/src/chat/ui/code-theme.ts +4 -4
  357. package/src/chat/ui/composer/placeholder.ts +2 -2
  358. package/src/chat/ui/composer/use-compaction-offer.ts +36 -16
  359. package/src/chat/ui/composer/use-composer-menus.ts +4 -9
  360. package/src/chat/ui/composer/use-composer-submit.ts +2 -1
  361. package/src/chat/ui/composer/use-effort-stepper.ts +56 -0
  362. package/src/chat/ui/composer/use-notice.ts +2 -2
  363. package/src/chat/ui/diff/EditorEditDiff.tsx +9 -13
  364. package/src/chat/ui/diff/LegacyEditDiff.tsx +12 -17
  365. package/src/chat/ui/diff/LegacyUnifiedDiff.tsx +13 -21
  366. package/src/chat/ui/diff/use-review-stack.ts +4 -4
  367. package/src/chat/ui/diff-theme.ts +3 -3
  368. package/src/chat/ui/file-links.ts +2 -2
  369. package/src/chat/ui/intelligent-ui/UiReply.tsx +2 -0
  370. package/src/chat/ui/intelligent-ui/renderers/chart.tsx +3 -3
  371. package/src/chat/ui/intelligent-ui/renderers/content.tsx +5 -6
  372. package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +2 -1
  373. package/src/chat/ui/intelligent-ui/renderers/map.tsx +2 -1
  374. package/src/chat/ui/intelligent-ui/use-truncated.ts +16 -19
  375. package/src/chat/ui/intelligent-ui/use-ui-links.ts +3 -3
  376. package/src/chat/ui/mermaid.ts +52 -96
  377. package/src/chat/ui/rows/ForksRow.tsx +3 -5
  378. package/src/chat/ui/rows/GeneratedImageRow.tsx +2 -1
  379. package/src/chat/ui/rows/MessageRows.tsx +12 -21
  380. package/src/chat/ui/rows/SubagentRow.tsx +3 -3
  381. package/src/chat/ui/rows/TaskRow.tsx +1 -1
  382. package/src/chat/ui/rows/WorkRows.tsx +11 -6
  383. package/src/chat/ui/rows/WorkflowRow.tsx +144 -54
  384. package/src/chat/ui/useToggleSet.ts +15 -18
  385. package/src/chat/ui/visual-theme.ts +2 -3
  386. package/src/host-hooks.ts +113 -0
  387. package/src/lazy.tsx +2 -0
  388. package/src/locales/en/agent-chat.ts +142 -108
  389. package/src/locales/en/agent-prompts.ts +7 -7
  390. package/src/locales/en/agent-providers.ts +35 -34
  391. package/src/locales/en/agent-usage.ts +26 -20
  392. package/src/locales/nl/agent-chat.ts +134 -100
  393. package/src/locales/nl/agent-prompts.ts +5 -5
  394. package/src/locales/nl/agent-providers.ts +33 -32
  395. package/src/locales/nl/agent-usage.ts +25 -20
  396. package/src/providers/CliDetail.tsx +2 -1
  397. package/src/providers/InstallPage.tsx +2 -4
  398. package/src/providers/ProviderList.tsx +12 -2
  399. package/src/providers/ProvidersPane.tsx +45 -15
  400. package/src/providers/pane-target.ts +20 -4
  401. package/src/state/chats.ts +2 -2
  402. package/src/usage/LimitsList.tsx +12 -13
  403. package/src/usage/UsageBreakdown.tsx +17 -6
  404. package/src/usage/UsageLimits.tsx +2 -1
  405. package/src/usage/UsagePage.tsx +3 -3
  406. package/src/usage/index.ts +1 -1
  407. package/src/usage/limit-groups.ts +12 -0
  408. package/src/usage/limits.ts +2 -2
  409. package/src/usage/money.ts +1 -2
@@ -1,18 +1,27 @@
1
1
  export function uiReplyParts(text, blocks, streaming = false) {
2
- const parts = [];
3
- let position = 0;
4
- for (const block of [...blocks].sort((left, right) => left.start - right.start)) {
5
- if (!Number.isInteger(block.start) || !Number.isInteger(block.end) || block.start < position || block.end < block.start || block.end > text.length) {
6
- continue;
7
- }
8
- if (block.start > position) {
9
- parts.push({ kind: 'text', text: text.slice(position, block.start) });
10
- }
11
- parts.push({ kind: 'ui', block });
12
- position = streaming && !block.complete ? text.length : block.end;
2
+ const parts = [];
3
+ let position = 0;
4
+ for (const block of [...blocks].sort((left, right) => left.start - right.start)) {
5
+ if (!Number.isInteger(block.start) || !Number.isInteger(block.end) || block.start < position || block.end < block.start || block.end > text.length) {
6
+ continue;
13
7
  }
14
- if (position < text.length) {
15
- parts.push({ kind: 'text', text: text.slice(position) });
8
+ if (block.start > position) {
9
+ parts.push({
10
+ kind: 'text',
11
+ text: text.slice(position, block.start)
12
+ });
16
13
  }
17
- return parts;
18
- }
14
+ parts.push({
15
+ kind: 'ui',
16
+ block
17
+ });
18
+ position = streaming && !block.complete ? text.length : block.end;
19
+ }
20
+ if (position < text.length) {
21
+ parts.push({
22
+ kind: 'text',
23
+ text: text.slice(position)
24
+ });
25
+ }
26
+ return parts;
27
+ }
@@ -5,7 +5,7 @@ export const UI_TABLE_ROWS = 50;
5
5
  const DATE_RANGE = 8.64e15;
6
6
  const NUMERIC_KINDS = new Set(['number', 'bytes', 'duration']);
7
7
  export function isNumericColumn(column) {
8
- return NUMERIC_KINDS.has(column.as);
8
+ return NUMERIC_KINDS.has(column.as);
9
9
  }
10
10
  /*
11
11
  * The columns a table can draw: its Column children whose key some row has, each key once. A table
@@ -13,67 +13,107 @@ export function isNumericColumn(column) {
13
13
  * nothing is usable, which draws the fallback.
14
14
  */
15
15
  export function uiTableColumns(node) {
16
- const rows = node.props.rows;
17
- const present = (key) => rows.some((row) => Object.hasOwn(row, key));
18
- const declared = uiChildrenOf(node, 'Column');
19
- if (declared.length > 0) {
20
- const seen = new Set();
21
- return declared.flatMap(({ props }) => {
22
- if (seen.has(props.key) || (rows.length > 0 && !present(props.key))) {
23
- return [];
24
- }
25
- seen.add(props.key);
26
- return [{ key: props.key, title: props.title ?? props.key, unit: props.unit, as: props.as ?? 'text' }];
27
- });
28
- }
29
- const keys = [];
30
- for (const row of rows) {
31
- for (const key of Object.keys(row)) {
32
- if (!keys.includes(key)) {
33
- keys.push(key);
34
- }
35
- }
36
- }
37
- return keys.map((key) => {
38
- const values = rows.map((row) => row[key]).filter((value) => value !== undefined && value !== null);
39
- const numeric = values.length > 0 && values.every((value) => typeof value === 'number' && Number.isFinite(value));
40
- return { key, title: key, as: numeric ? 'number' : 'text' };
16
+ const rows = node.props.rows;
17
+ const present = key => rows.some(row => Object.hasOwn(row, key));
18
+ const declared = uiChildrenOf(node, 'Column');
19
+ if (declared.length > 0) {
20
+ const seen = new Set();
21
+ return declared.flatMap(({
22
+ props
23
+ }) => {
24
+ if (seen.has(props.key) || rows.length > 0 && !present(props.key)) {
25
+ return [];
26
+ }
27
+ seen.add(props.key);
28
+ return [{
29
+ key: props.key,
30
+ title: props.title ?? props.key,
31
+ unit: props.unit,
32
+ as: props.as ?? 'text'
33
+ }];
41
34
  });
35
+ }
36
+ const keys = [];
37
+ for (const row of rows) {
38
+ for (const key of Object.keys(row)) {
39
+ if (!keys.includes(key)) {
40
+ keys.push(key);
41
+ }
42
+ }
43
+ }
44
+ return keys.map(key => {
45
+ const values = rows.map(row => row[key]).filter(value => value !== undefined && value !== null);
46
+ const numeric = values.length > 0 && values.every(value => typeof value === 'number' && Number.isFinite(value));
47
+ return {
48
+ key,
49
+ title: key,
50
+ as: numeric ? 'number' : 'text'
51
+ };
52
+ });
42
53
  }
43
54
  function textOf(value) {
44
- return typeof value === 'object' ? JSON.stringify(value) : String(value);
55
+ return typeof value === 'object' ? JSON.stringify(value) : String(value);
45
56
  }
46
57
  function numberOf(value) {
47
- if (typeof value === 'number') {
48
- return Number.isFinite(value) ? value : null;
49
- }
50
- if (typeof value === 'string' && value.trim() !== '') {
51
- const parsed = Number(value);
52
- return Number.isFinite(parsed) ? parsed : null;
53
- }
54
- return null;
58
+ if (typeof value === 'number') {
59
+ return Number.isFinite(value) ? value : null;
60
+ }
61
+ if (typeof value === 'string' && value.trim() !== '') {
62
+ const parsed = Number(value);
63
+ return Number.isFinite(parsed) ? parsed : null;
64
+ }
65
+ return null;
55
66
  }
56
67
  /* A duration is in milliseconds and a date is milliseconds since the epoch or an ISO string; anything else reads as text. */
57
68
  export function uiTableCell(value, column) {
58
- if (value === undefined || value === null || value === '') {
59
- return { kind: 'empty' };
60
- }
61
- switch (column.as) {
62
- case 'number':
63
- case 'bytes':
64
- case 'duration': {
65
- const number = numberOf(value);
66
- return number === null ? { kind: 'text', text: textOf(value) } : { kind: 'number', as: column.as, value: number };
67
- }
68
- case 'date': {
69
- const at = typeof value === 'number' ? value : typeof value === 'string' ? Date.parse(value) : Number.NaN;
70
- return Number.isFinite(at) && Math.abs(at) <= DATE_RANGE ? { kind: 'date', at } : { kind: 'text', text: textOf(value) };
71
- }
72
- case 'file':
73
- return typeof value === 'string' ? { kind: 'file', path: value } : { kind: 'text', text: textOf(value) };
74
- case 'tag':
75
- return { kind: 'tag', text: textOf(value) };
76
- case 'text':
77
- return { kind: 'text', text: textOf(value) };
78
- }
79
- }
69
+ if (value === undefined || value === null || value === '') {
70
+ return {
71
+ kind: 'empty'
72
+ };
73
+ }
74
+ switch (column.as) {
75
+ case 'number':
76
+ case 'bytes':
77
+ case 'duration':
78
+ {
79
+ const number = numberOf(value);
80
+ return number === null ? {
81
+ kind: 'text',
82
+ text: textOf(value)
83
+ } : {
84
+ kind: 'number',
85
+ as: column.as,
86
+ value: number
87
+ };
88
+ }
89
+ case 'date':
90
+ {
91
+ const at = typeof value === 'number' ? value : typeof value === 'string' ? Date.parse(value) : Number.NaN;
92
+ return Number.isFinite(at) && Math.abs(at) <= DATE_RANGE ? {
93
+ kind: 'date',
94
+ at
95
+ } : {
96
+ kind: 'text',
97
+ text: textOf(value)
98
+ };
99
+ }
100
+ case 'file':
101
+ return typeof value === 'string' ? {
102
+ kind: 'file',
103
+ path: value
104
+ } : {
105
+ kind: 'text',
106
+ text: textOf(value)
107
+ };
108
+ case 'tag':
109
+ return {
110
+ kind: 'tag',
111
+ text: textOf(value)
112
+ };
113
+ case 'text':
114
+ return {
115
+ kind: 'text',
116
+ text: textOf(value)
117
+ };
118
+ }
119
+ }
@@ -1,47 +1,47 @@
1
1
  import { CircleCheck, Info, MessageCircle, OctagonAlert, TriangleAlert } from 'lucide-react';
2
2
  /* Every tone has an icon of its own, so color is never the only thing that tells two apart. */
3
3
  export const UI_TONE_ICONS = {
4
- neutral: MessageCircle,
5
- info: Info,
6
- success: CircleCheck,
7
- warning: TriangleAlert,
8
- danger: OctagonAlert
4
+ neutral: MessageCircle,
5
+ info: Info,
6
+ success: CircleCheck,
7
+ warning: TriangleAlert,
8
+ danger: OctagonAlert
9
9
  };
10
10
  export const UI_TONE_TEXT = {
11
- neutral: 'text-text-muted',
12
- info: 'text-status-running',
13
- success: 'text-positive',
14
- warning: 'text-status-needs-you',
15
- danger: 'text-status-error'
11
+ neutral: 'text-text-muted',
12
+ info: 'text-status-running',
13
+ success: 'text-positive',
14
+ warning: 'text-status-needs-you',
15
+ danger: 'text-status-error'
16
16
  };
17
17
  /* The tone mixed over the ground, for a surface such as a callout. */
18
18
  export const UI_TONE_SURFACE = {
19
- neutral: 'bg-text/7',
20
- info: 'bg-status-running/10',
21
- success: 'bg-positive/10',
22
- warning: 'bg-status-needs-you/12',
23
- danger: 'bg-status-error/10'
19
+ neutral: 'bg-text/7',
20
+ info: 'bg-status-running/10',
21
+ success: 'bg-positive/10',
22
+ warning: 'bg-status-needs-you/12',
23
+ danger: 'bg-status-error/10'
24
24
  };
25
25
  export const UI_TONE_PILL = {
26
- neutral: 'muted',
27
- info: 'accent',
28
- success: 'idle',
29
- warning: 'needsYou',
30
- danger: 'error'
26
+ neutral: 'muted',
27
+ info: 'accent',
28
+ success: 'idle',
29
+ warning: 'needsYou',
30
+ danger: 'error'
31
31
  };
32
32
  /* The tone at full strength, for the square that carries the icon of a Summary. */
33
33
  export const UI_TONE_FILL = {
34
- neutral: 'bg-text-muted',
35
- info: 'bg-status-running',
36
- success: 'bg-positive',
37
- warning: 'bg-status-needs-you',
38
- danger: 'bg-status-error'
34
+ neutral: 'bg-text-muted',
35
+ info: 'bg-status-running',
36
+ success: 'bg-positive',
37
+ warning: 'bg-status-needs-you',
38
+ danger: 'bg-status-error'
39
39
  };
40
40
  /* The tag at the end of a step, in words, so a state never rests on its icon alone. */
41
41
  export const UI_STEP_PILL = {
42
- done: 'idle',
43
- running: 'accent',
44
- pending: 'muted',
45
- failed: 'error',
46
- skipped: 'muted'
47
- };
42
+ done: 'idle',
43
+ running: 'accent',
44
+ pending: 'muted',
45
+ failed: 'error',
46
+ skipped: 'muted'
47
+ };
@@ -1,17 +1,35 @@
1
+ import { c as _c } from "react/compiler-runtime";
1
2
  import { useEffect, useState } from 'react';
2
3
  /*
3
4
  * Whether `element` is near the viewport, with `margin` to spare so it is ready by the time it scrolls in.
4
5
  * Without an observer (a server render, a test) it counts as in view.
5
6
  */
6
- export function useInView(element, margin = '200px') {
7
- const [inView, setInView] = useState(typeof IntersectionObserver === 'undefined');
8
- useEffect(() => {
9
- if (element === null || typeof IntersectionObserver === 'undefined') {
10
- return;
11
- }
12
- const observer = new IntersectionObserver((entries) => setInView(entries.at(-1)?.isIntersecting ?? false), { rootMargin: margin });
13
- observer.observe(element);
14
- return () => observer.disconnect();
15
- }, [element, margin]);
16
- return inView;
17
- }
7
+ export function useInView(element, t0) {
8
+ const $ = _c(4);
9
+ const margin = t0 === undefined ? "200px" : t0;
10
+ const [inView, setInView] = useState(typeof IntersectionObserver === "undefined");
11
+ let t1;
12
+ let t2;
13
+ if ($[0] !== element || $[1] !== margin) {
14
+ t1 = () => {
15
+ if (element === null || typeof IntersectionObserver === "undefined") {
16
+ return;
17
+ }
18
+ const observer = new IntersectionObserver(entries => setInView(entries.at(-1)?.isIntersecting ?? false), {
19
+ rootMargin: margin
20
+ });
21
+ observer.observe(element);
22
+ return () => observer.disconnect();
23
+ };
24
+ t2 = [element, margin];
25
+ $[0] = element;
26
+ $[1] = margin;
27
+ $[2] = t1;
28
+ $[3] = t2;
29
+ } else {
30
+ t1 = $[2];
31
+ t2 = $[3];
32
+ }
33
+ useEffect(t1, t2);
34
+ return inView;
35
+ }
@@ -1,16 +1,31 @@
1
+ import { c as _c } from "react/compiler-runtime";
1
2
  import { useEffect, useState } from 'react';
2
3
  /* True once `on` has held for `ms`, for a spinner that only shows when waiting takes long. */
3
4
  export function useLater(on, ms) {
4
- const [late, setLate] = useState(false);
5
- useEffect(() => {
6
- if (!on) {
7
- return;
8
- }
9
- const timer = setTimeout(() => setLate(true), ms);
10
- return () => {
11
- clearTimeout(timer);
12
- setLate(false);
13
- };
14
- }, [on, ms]);
15
- return on && late;
16
- }
5
+ const $ = _c(4);
6
+ const [late, setLate] = useState(false);
7
+ let t0;
8
+ let t1;
9
+ if ($[0] !== ms || $[1] !== on) {
10
+ t0 = () => {
11
+ if (!on) {
12
+ return;
13
+ }
14
+ const timer = setTimeout(() => setLate(true), ms);
15
+ return () => {
16
+ clearTimeout(timer);
17
+ setLate(false);
18
+ };
19
+ };
20
+ t1 = [on, ms];
21
+ $[0] = ms;
22
+ $[1] = on;
23
+ $[2] = t0;
24
+ $[3] = t1;
25
+ } else {
26
+ t0 = $[2];
27
+ t1 = $[3];
28
+ }
29
+ useEffect(t0, t1);
30
+ return on && late;
31
+ }
@@ -1,28 +1,52 @@
1
- import { useCallback, useState } from 'react';
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { useState } from 'react';
2
3
  function cut(element) {
3
- return element.scrollWidth > element.clientWidth + 1;
4
+ return element.scrollWidth > element.clientWidth + 1;
4
5
  }
5
6
  /*
6
7
  * Whether an element's text is cut short where it stands, for a tooltip or a list of values that shows
7
8
  * it whole exactly then. `within` asks the same of every `.truncate` element inside it instead. Measured
8
9
  * again when the box resizes or the text changes, since neither moves the other.
9
10
  */
10
- export function useTruncated(within = false) {
11
- const [truncated, setTruncated] = useState(false);
12
- const measure = useCallback((element) => {
13
- if (element === null || typeof ResizeObserver === 'undefined') {
14
- return undefined;
15
- }
16
- const check = () => setTruncated(within ? [...element.querySelectorAll('.truncate')].some(cut) : cut(element));
17
- check();
18
- const resize = new ResizeObserver(check);
19
- resize.observe(element);
20
- const text = new MutationObserver(check);
21
- text.observe(element, { characterData: true, childList: true, subtree: true });
22
- return () => {
23
- resize.disconnect();
24
- text.disconnect();
25
- };
26
- }, [within]);
27
- return [measure, truncated];
28
- }
11
+ export function useTruncated(t0) {
12
+ const $ = _c(5);
13
+ const within = t0 === undefined ? false : t0;
14
+ const [truncated, setTruncated] = useState(false);
15
+ let t1;
16
+ if ($[0] !== within) {
17
+ t1 = element => {
18
+ if (element === null || typeof ResizeObserver === "undefined") {
19
+ return;
20
+ }
21
+ const check = () => setTruncated(within ? [...element.querySelectorAll(".truncate")].some(cut) : cut(element));
22
+ check();
23
+ const resize = new ResizeObserver(check);
24
+ resize.observe(element);
25
+ const text = new MutationObserver(check);
26
+ text.observe(element, {
27
+ characterData: true,
28
+ childList: true,
29
+ subtree: true
30
+ });
31
+ return () => {
32
+ resize.disconnect();
33
+ text.disconnect();
34
+ };
35
+ };
36
+ $[0] = within;
37
+ $[1] = t1;
38
+ } else {
39
+ t1 = $[1];
40
+ }
41
+ const measure = t1;
42
+ let t2;
43
+ if ($[2] !== measure || $[3] !== truncated) {
44
+ t2 = [measure, truncated];
45
+ $[2] = measure;
46
+ $[3] = truncated;
47
+ $[4] = t2;
48
+ } else {
49
+ t2 = $[4];
50
+ }
51
+ return t2;
52
+ }