@adecore/agents-react 0.31.12 → 0.32.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 (402) hide show
  1. package/dist/agents/AccountDot.js +57 -6
  2. package/dist/agents/AgentIcon.js +88 -12
  3. package/dist/agents/ModelOptionControl.js +153 -18
  4. package/dist/agents/ProviderLogo.js +49 -4
  5. package/dist/agents/account-limits.js +17 -14
  6. package/dist/agents/accounts.js +99 -67
  7. package/dist/agents/agent-marks.js +5 -3
  8. package/dist/agents/model-name.js +42 -31
  9. package/dist/agents/model-options.js +8 -8
  10. package/dist/agents/model-requirement.js +17 -14
  11. package/dist/agents/option-words.d.ts +7 -0
  12. package/dist/agents/option-words.js +35 -0
  13. package/dist/agents/provider-paths.js +6 -6
  14. package/dist/agents/status-look.js +32 -12
  15. package/dist/chat/account-choice.d.ts +13 -0
  16. package/dist/chat/account-choice.js +90 -20
  17. package/dist/chat/actions.js +126 -59
  18. package/dist/chat/activity.js +5 -5
  19. package/dist/chat/attachments.js +74 -53
  20. package/dist/chat/bookmarks.js +58 -48
  21. package/dist/chat/chat-client.js +344 -263
  22. package/dist/chat/chat-references.js +3 -3
  23. package/dist/chat/composer-effort.d.ts +5 -0
  24. package/dist/chat/composer-effort.js +26 -0
  25. package/dist/chat/composer-send.js +13 -13
  26. package/dist/chat/drafts.js +115 -79
  27. package/dist/chat/forks.js +81 -24
  28. package/dist/chat/guards.js +15 -43
  29. package/dist/chat/index.d.ts +3 -1
  30. package/dist/chat/index.js +3 -2
  31. package/dist/chat/logic/ansi.js +170 -167
  32. package/dist/chat/logic/answers.js +2 -2
  33. package/dist/chat/logic/bookmarks.js +19 -19
  34. package/dist/chat/logic/command-looks.js +138 -96
  35. package/dist/chat/logic/context-usage.js +13 -9
  36. package/dist/chat/logic/continue-after-stop.js +15 -19
  37. package/dist/chat/logic/effort.d.ts +14 -0
  38. package/dist/chat/logic/effort.js +34 -0
  39. package/dist/chat/logic/embedded-code.js +387 -326
  40. package/dist/chat/logic/fork.js +134 -110
  41. package/dist/chat/logic/generated-image.js +54 -23
  42. package/dist/chat/logic/goal.js +28 -20
  43. package/dist/chat/logic/handback.js +6 -6
  44. package/dist/chat/logic/json.js +2 -2
  45. package/dist/chat/logic/limit.js +46 -30
  46. package/dist/chat/logic/picker-entries.d.ts +5 -3
  47. package/dist/chat/logic/picker-entries.js +83 -43
  48. package/dist/chat/logic/resume-compaction.d.ts +14 -1
  49. package/dist/chat/logic/resume-compaction.js +93 -24
  50. package/dist/chat/logic/scrubber.js +188 -136
  51. package/dist/chat/logic/thought.js +13 -16
  52. package/dist/chat/logic/thread-cards.js +60 -48
  53. package/dist/chat/logic/timeline-copy.js +30 -38
  54. package/dist/chat/logic/timeline-target.js +92 -63
  55. package/dist/chat/logic/timeline.js +499 -355
  56. package/dist/chat/logic/tool-catalog.js +54 -34
  57. package/dist/chat/logic/tools.js +106 -82
  58. package/dist/chat/logic/visual-height.js +18 -18
  59. package/dist/chat/logic/visual-viewport.js +6 -3
  60. package/dist/chat/logic/welcome.js +9 -9
  61. package/dist/chat/logic/workflow.js +45 -34
  62. package/dist/chat/mentions.js +149 -109
  63. package/dist/chat/persisted-json.js +51 -54
  64. package/dist/chat/preferences.d.ts +4 -0
  65. package/dist/chat/preferences.js +162 -84
  66. package/dist/chat/prompt-hold.js +9 -9
  67. package/dist/chat/quote.js +21 -30
  68. package/dist/chat/reading-width.js +12 -10
  69. package/dist/chat/recent-messages.js +34 -21
  70. package/dist/chat/resume-compaction-dismissals.js +25 -5
  71. package/dist/chat/runtime-modes.js +3 -3
  72. package/dist/chat/send-key.js +11 -7
  73. package/dist/chat/stash.js +89 -69
  74. package/dist/chat/subagent-conversation.js +181 -139
  75. package/dist/chat/subagent-list.js +65 -67
  76. package/dist/chat/subagent-support.js +12 -7
  77. package/dist/chat/subagent-view.js +132 -44
  78. package/dist/chat/thumbnails.js +88 -60
  79. package/dist/chat/timeline-flash.js +24 -12
  80. package/dist/chat/timeline-scroll.js +116 -86
  81. package/dist/chat/ui/AccountPill.js +126 -15
  82. package/dist/chat/ui/AnsiOutput.js +62 -6
  83. package/dist/chat/ui/BookmarkMarker.js +231 -41
  84. package/dist/chat/ui/BookmarkSubmenu.js +165 -18
  85. package/dist/chat/ui/ChatActivity.js +649 -70
  86. package/dist/chat/ui/ChatReferenceChip.js +104 -9
  87. package/dist/chat/ui/CodeBlock.js +132 -58
  88. package/dist/chat/ui/Composer.js +866 -132
  89. package/dist/chat/ui/ComposerInput.js +309 -120
  90. package/dist/chat/ui/DiffPool.js +75 -14
  91. package/dist/chat/ui/EditDiff.js +160 -21
  92. package/dist/chat/ui/FadingWords.js +32 -3
  93. package/dist/chat/ui/GoalDock.js +235 -42
  94. package/dist/chat/ui/ImageView.js +617 -61
  95. package/dist/chat/ui/LimitState.js +446 -72
  96. package/dist/chat/ui/Markdown.js +991 -173
  97. package/dist/chat/ui/MermaidBlock.js +238 -68
  98. package/dist/chat/ui/MessageActions.js +251 -39
  99. package/dist/chat/ui/ModelMarks.js +55 -5
  100. package/dist/chat/ui/Pickers.js +664 -113
  101. package/dist/chat/ui/PromptComposer.js +281 -51
  102. package/dist/chat/ui/QuoteButton.js +151 -57
  103. package/dist/chat/ui/ResumeCompactionDock.d.ts +6 -2
  104. package/dist/chat/ui/ResumeCompactionDock.js +141 -6
  105. package/dist/chat/ui/RowTime.js +59 -5
  106. package/dist/chat/ui/RunSettings.js +1744 -154
  107. package/dist/chat/ui/Scrubber.js +517 -88
  108. package/dist/chat/ui/ShellCommand.js +183 -107
  109. package/dist/chat/ui/SubagentControls.js +212 -24
  110. package/dist/chat/ui/SubagentInfo.js +170 -13
  111. package/dist/chat/ui/SubagentStopButton.js +115 -24
  112. package/dist/chat/ui/SubagentTimeline.js +357 -91
  113. package/dist/chat/ui/Timeline.js +988 -476
  114. package/dist/chat/ui/TimelineMenu.js +552 -37
  115. package/dist/chat/ui/UnifiedDiff.js +234 -27
  116. package/dist/chat/ui/UploadThumb.js +37 -7
  117. package/dist/chat/ui/VisualDialogs.js +251 -20
  118. package/dist/chat/ui/VisualFrame.js +321 -95
  119. package/dist/chat/ui/Welcome.js +72 -7
  120. package/dist/chat/ui/chips.js +1 -1
  121. package/dist/chat/ui/code-lines.js +36 -36
  122. package/dist/chat/ui/code-streaming.js +1 -1
  123. package/dist/chat/ui/code-theme.js +7 -7
  124. package/dist/chat/ui/composer/ComposerControls.js +329 -21
  125. package/dist/chat/ui/composer/ComposerMenu.js +358 -30
  126. package/dist/chat/ui/composer/DraftParts.js +185 -11
  127. package/dist/chat/ui/composer/QueuedMessages.js +138 -13
  128. package/dist/chat/ui/composer/chips.js +29 -19
  129. package/dist/chat/ui/composer/editor.js +79 -63
  130. package/dist/chat/ui/composer/insert.js +26 -12
  131. package/dist/chat/ui/composer/key-handler.js +180 -127
  132. package/dist/chat/ui/composer/keys.js +90 -73
  133. package/dist/chat/ui/composer/menu-aria.js +18 -9
  134. package/dist/chat/ui/composer/placeholder.js +78 -31
  135. package/dist/chat/ui/composer/surface.js +13 -37
  136. package/dist/chat/ui/composer/use-chat-controls.js +230 -90
  137. package/dist/chat/ui/composer/use-compaction-offer.js +50 -18
  138. package/dist/chat/ui/composer/use-composer-draft.js +65 -34
  139. package/dist/chat/ui/composer/use-composer-menus.js +478 -193
  140. package/dist/chat/ui/composer/use-composer-submit.js +251 -109
  141. package/dist/chat/ui/composer/use-continuable-turn.js +33 -6
  142. package/dist/chat/ui/composer/use-draft-files.js +245 -93
  143. package/dist/chat/ui/composer/use-effort-stepper.d.ts +13 -0
  144. package/dist/chat/ui/composer/use-effort-stepper.js +88 -0
  145. package/dist/chat/ui/composer/use-notice.js +61 -16
  146. package/dist/chat/ui/composer/use-pending-requests.js +38 -17
  147. package/dist/chat/ui/composer/use-prompt-history.js +117 -45
  148. package/dist/chat/ui/composer/use-prompt-hold.js +119 -35
  149. package/dist/chat/ui/composer/use-take-back.js +94 -72
  150. package/dist/chat/ui/diff/ApprovalReview.js +101 -23
  151. package/dist/chat/ui/diff/DiffFallbackBoundary.js +21 -13
  152. package/dist/chat/ui/diff/DiffOmitted.js +56 -6
  153. package/dist/chat/ui/diff/DiffStack.js +92 -8
  154. package/dist/chat/ui/diff/DiffUnavailable.js +56 -6
  155. package/dist/chat/ui/diff/EditorEditDiff.js +263 -51
  156. package/dist/chat/ui/diff/EditorPatchDiff.js +39 -14
  157. package/dist/chat/ui/diff/LegacyDiffPool.js +27 -10
  158. package/dist/chat/ui/diff/LegacyEditDiff.js +97 -20
  159. package/dist/chat/ui/diff/LegacyUnifiedDiff.js +172 -42
  160. package/dist/chat/ui/diff/RawDiff.js +65 -5
  161. package/dist/chat/ui/diff/ReviewDiff.js +77 -5
  162. package/dist/chat/ui/diff/diff-props.js +1 -1
  163. package/dist/chat/ui/diff/diff-source-budget.js +46 -35
  164. package/dist/chat/ui/diff/editor-edit-model.js +18 -14
  165. package/dist/chat/ui/diff/review-plan.js +63 -40
  166. package/dist/chat/ui/diff/review-settle.js +24 -9
  167. package/dist/chat/ui/diff/syntax-runtime.js +236 -201
  168. package/dist/chat/ui/diff/use-review-stack.js +146 -25
  169. package/dist/chat/ui/diff-syntax.js +70 -58
  170. package/dist/chat/ui/diff-theme.js +31 -12
  171. package/dist/chat/ui/file-links.js +39 -10
  172. package/dist/chat/ui/find-reveal.js +29 -8
  173. package/dist/chat/ui/full-diff.js +17 -12
  174. package/dist/chat/ui/highlighter.js +143 -113
  175. package/dist/chat/ui/icons.js +16 -7
  176. package/dist/chat/ui/index.js +1 -1
  177. package/dist/chat/ui/intelligent-ui/UiBlockFrame.js +556 -82
  178. package/dist/chat/ui/intelligent-ui/UiFallbackPart.js +73 -5
  179. package/dist/chat/ui/intelligent-ui/UiReply.js +666 -262
  180. package/dist/chat/ui/intelligent-ui/block-local.js +59 -31
  181. package/dist/chat/ui/intelligent-ui/chart-data.js +77 -67
  182. package/dist/chat/ui/intelligent-ui/node-text.js +77 -91
  183. package/dist/chat/ui/intelligent-ui/registry.js +46 -46
  184. package/dist/chat/ui/intelligent-ui/render-context.js +1 -1
  185. package/dist/chat/ui/intelligent-ui/renderers/base-land.js +1 -1
  186. package/dist/chat/ui/intelligent-ui/renderers/binding.js +3 -3
  187. package/dist/chat/ui/intelligent-ui/renderers/chart.js +1223 -123
  188. package/dist/chat/ui/intelligent-ui/renderers/choices.js +312 -34
  189. package/dist/chat/ui/intelligent-ui/renderers/content.js +1241 -86
  190. package/dist/chat/ui/intelligent-ui/renderers/data.js +619 -54
  191. package/dist/chat/ui/intelligent-ui/renderers/inputs.js +868 -67
  192. package/dist/chat/ui/intelligent-ui/renderers/links.js +366 -62
  193. package/dist/chat/ui/intelligent-ui/renderers/map-slots.js +118 -60
  194. package/dist/chat/ui/intelligent-ui/renderers/map-style.js +85 -78
  195. package/dist/chat/ui/intelligent-ui/renderers/map-view.js +282 -217
  196. package/dist/chat/ui/intelligent-ui/renderers/map.js +621 -69
  197. package/dist/chat/ui/intelligent-ui/renderers/place-point.js +15 -8
  198. package/dist/chat/ui/intelligent-ui/renderers/structure.js +262 -20
  199. package/dist/chat/ui/intelligent-ui/renderers/text.js +674 -49
  200. package/dist/chat/ui/intelligent-ui/reply-parts.js +24 -15
  201. package/dist/chat/ui/intelligent-ui/table-data.js +97 -57
  202. package/dist/chat/ui/intelligent-ui/tones.js +31 -31
  203. package/dist/chat/ui/intelligent-ui/use-in-view.js +30 -12
  204. package/dist/chat/ui/intelligent-ui/use-later.js +28 -13
  205. package/dist/chat/ui/intelligent-ui/use-truncated.js +45 -21
  206. package/dist/chat/ui/intelligent-ui/use-ui-links.js +296 -109
  207. package/dist/chat/ui/intelligent-ui/use-ui-queries.js +256 -246
  208. package/dist/chat/ui/markdown-blocks.js +296 -262
  209. package/dist/chat/ui/mermaid.js +60 -72
  210. package/dist/chat/ui/quote-selection.js +32 -29
  211. package/dist/chat/ui/rehype-chips.js +35 -23
  212. package/dist/chat/ui/rehype-fade.js +28 -17
  213. package/dist/chat/ui/remark-html-as-text.js +22 -15
  214. package/dist/chat/ui/reply-context.js +1 -1
  215. package/dist/chat/ui/reveal.js +161 -72
  216. package/dist/chat/ui/rows/ForksRow.js +226 -24
  217. package/dist/chat/ui/rows/GeneratedImageRow.js +541 -87
  218. package/dist/chat/ui/rows/MessageRows.js +1706 -159
  219. package/dist/chat/ui/rows/RowContainer.js +57 -7
  220. package/dist/chat/ui/rows/Rows.js +463 -54
  221. package/dist/chat/ui/rows/SubagentRow.js +577 -60
  222. package/dist/chat/ui/rows/TaskRow.js +359 -40
  223. package/dist/chat/ui/rows/VisualRow.js +233 -11
  224. package/dist/chat/ui/rows/WorkRows.js +1945 -164
  225. package/dist/chat/ui/rows/WorkflowRow.js +293 -34
  226. package/dist/chat/ui/rows/row-rhythm.js +27 -17
  227. package/dist/chat/ui/theme-watch.js +26 -23
  228. package/dist/chat/ui/timestamp-format.js +4 -1
  229. package/dist/chat/ui/use-diff-source-tokens.js +70 -34
  230. package/dist/chat/ui/useToggleSet.js +51 -19
  231. package/dist/chat/ui/visual-theme.js +153 -128
  232. package/dist/chat/visual-bridge.js +123 -123
  233. package/dist/chat/visual-viewport.js +94 -83
  234. package/dist/chat/visuals.js +13 -5
  235. package/dist/host-hooks.d.ts +29 -0
  236. package/dist/host-hooks.js +78 -0
  237. package/dist/host.js +120 -48
  238. package/dist/index.js +1 -1
  239. package/dist/lazy.js +38 -32
  240. package/dist/locales/en/agent-chat.d.ts +34 -0
  241. package/dist/locales/en/agent-chat.js +747 -713
  242. package/dist/locales/en/agent-prompts.js +42 -42
  243. package/dist/locales/en/agent-providers.d.ts +1 -0
  244. package/dist/locales/en/agent-providers.js +166 -165
  245. package/dist/locales/en/agent-usage.d.ts +6 -0
  246. package/dist/locales/en/agent-usage.js +129 -123
  247. package/dist/locales/nl/agent-chat.d.ts +34 -0
  248. package/dist/locales/nl/agent-chat.js +747 -713
  249. package/dist/locales/nl/agent-prompts.js +42 -42
  250. package/dist/locales/nl/agent-providers.d.ts +1 -0
  251. package/dist/locales/nl/agent-providers.js +166 -165
  252. package/dist/locales/nl/agent-usage.d.ts +6 -0
  253. package/dist/locales/nl/agent-usage.js +129 -123
  254. package/dist/locales.js +14 -14
  255. package/dist/mounted-registry.js +31 -30
  256. package/dist/port-transport.js +122 -111
  257. package/dist/prompts/index.js +1 -1
  258. package/dist/prompts/logic/focus.js +15 -14
  259. package/dist/prompts/logic/keys.js +93 -59
  260. package/dist/prompts/logic/prompts.js +27 -14
  261. package/dist/prompts/logic/subjects.js +60 -46
  262. package/dist/prompts/logic/useFocusAfterAnswer.js +60 -20
  263. package/dist/prompts/logic/usePromptSession.js +88 -77
  264. package/dist/prompts/ui/ApprovalBody.js +246 -27
  265. package/dist/prompts/ui/PromptActions.js +215 -9
  266. package/dist/prompts/ui/PromptCard.js +215 -36
  267. package/dist/prompts/ui/PromptView.js +372 -34
  268. package/dist/prompts/ui/QuestionBody.js +269 -73
  269. package/dist/providers/AccountColors.js +36 -5
  270. package/dist/providers/AccountDetail.js +683 -50
  271. package/dist/providers/AccountVariables.js +139 -32
  272. package/dist/providers/AddAccountForm.js +125 -38
  273. package/dist/providers/CliDetail.js +343 -36
  274. package/dist/providers/InstallPage.js +644 -59
  275. package/dist/providers/ProviderList.d.ts +2 -1
  276. package/dist/providers/ProviderList.js +215 -23
  277. package/dist/providers/ProvidersPane.d.ts +4 -2
  278. package/dist/providers/ProvidersPane.js +244 -64
  279. package/dist/providers/account-actions.js +54 -30
  280. package/dist/providers/index.js +1 -1
  281. package/dist/providers/install-steps.js +12 -9
  282. package/dist/providers/pane-target.d.ts +3 -0
  283. package/dist/providers/pane-target.js +34 -13
  284. package/dist/providers/parts.js +62 -12
  285. package/dist/providers/provider-abilities.js +5 -5
  286. package/dist/providers/provider-groups.js +75 -40
  287. package/dist/providers/variables.js +73 -39
  288. package/dist/scope.js +6 -6
  289. package/dist/settings/sections.js +18 -18
  290. package/dist/state/chats.js +404 -192
  291. package/dist/state/index.js +1 -1
  292. package/dist/state/provider-accounts.js +70 -47
  293. package/dist/state/providers.js +45 -16
  294. package/dist/state/usage.js +154 -77
  295. package/dist/storage.js +69 -68
  296. package/dist/testing/index.js +1 -1
  297. package/dist/testing/prompts.js +105 -67
  298. package/dist/transport.js +10 -10
  299. package/dist/ui/PlainTextarea.js +27 -3
  300. package/dist/usage/LimitsList.js +646 -40
  301. package/dist/usage/UsageBreakdown.js +879 -38
  302. package/dist/usage/UsageChart.js +311 -32
  303. package/dist/usage/UsageDialog.js +46 -4
  304. package/dist/usage/UsageLimits.js +467 -34
  305. package/dist/usage/UsageLimitsCard.js +95 -11
  306. package/dist/usage/UsagePage.js +817 -96
  307. package/dist/usage/UsagePane.js +164 -10
  308. package/dist/usage/UsageSummary.js +151 -6
  309. package/dist/usage/UsageTiles.js +164 -14
  310. package/dist/usage/format.js +32 -32
  311. package/dist/usage/index.d.ts +1 -1
  312. package/dist/usage/index.js +2 -1
  313. package/dist/usage/limit-groups.d.ts +2 -0
  314. package/dist/usage/limit-groups.js +77 -59
  315. package/dist/usage/limits.js +78 -43
  316. package/dist/usage/money.js +20 -4
  317. package/dist/usage/summary.js +85 -64
  318. package/package.json +8 -8
  319. package/src/agents/ModelOptionControl.tsx +3 -1
  320. package/src/agents/option-words.ts +27 -0
  321. package/src/chat/account-choice.ts +41 -1
  322. package/src/chat/composer-effort.ts +32 -0
  323. package/src/chat/forks.ts +4 -5
  324. package/src/chat/index.ts +3 -1
  325. package/src/chat/logic/effort.ts +32 -0
  326. package/src/chat/logic/picker-entries.ts +45 -10
  327. package/src/chat/logic/resume-compaction.ts +95 -17
  328. package/src/chat/logic/timeline.ts +11 -3
  329. package/src/chat/preferences.ts +35 -0
  330. package/src/chat/subagent-view.ts +2 -3
  331. package/src/chat/ui/AnsiOutput.tsx +1 -2
  332. package/src/chat/ui/BookmarkSubmenu.tsx +3 -3
  333. package/src/chat/ui/ChatActivity.tsx +14 -22
  334. package/src/chat/ui/ChatReferenceChip.tsx +2 -3
  335. package/src/chat/ui/Composer.tsx +15 -7
  336. package/src/chat/ui/EditDiff.tsx +2 -3
  337. package/src/chat/ui/LimitState.tsx +2 -2
  338. package/src/chat/ui/Markdown.tsx +10 -8
  339. package/src/chat/ui/MermaidBlock.tsx +2 -3
  340. package/src/chat/ui/Pickers.tsx +49 -29
  341. package/src/chat/ui/PromptComposer.tsx +7 -9
  342. package/src/chat/ui/ResumeCompactionDock.tsx +16 -4
  343. package/src/chat/ui/RunSettings.tsx +67 -28
  344. package/src/chat/ui/Scrubber.tsx +3 -3
  345. package/src/chat/ui/ShellCommand.tsx +2 -0
  346. package/src/chat/ui/SubagentInfo.tsx +2 -3
  347. package/src/chat/ui/SubagentTimeline.tsx +12 -16
  348. package/src/chat/ui/Timeline.tsx +6 -6
  349. package/src/chat/ui/UnifiedDiff.tsx +3 -4
  350. package/src/chat/ui/VisualFrame.tsx +5 -8
  351. package/src/chat/ui/code-theme.ts +4 -4
  352. package/src/chat/ui/composer/placeholder.ts +2 -2
  353. package/src/chat/ui/composer/use-compaction-offer.ts +36 -16
  354. package/src/chat/ui/composer/use-composer-menus.ts +4 -9
  355. package/src/chat/ui/composer/use-composer-submit.ts +2 -1
  356. package/src/chat/ui/composer/use-effort-stepper.ts +56 -0
  357. package/src/chat/ui/composer/use-notice.ts +2 -2
  358. package/src/chat/ui/diff/EditorEditDiff.tsx +9 -13
  359. package/src/chat/ui/diff/LegacyEditDiff.tsx +12 -17
  360. package/src/chat/ui/diff/LegacyUnifiedDiff.tsx +13 -21
  361. package/src/chat/ui/diff/use-review-stack.ts +4 -4
  362. package/src/chat/ui/diff-theme.ts +3 -3
  363. package/src/chat/ui/file-links.ts +2 -2
  364. package/src/chat/ui/intelligent-ui/UiReply.tsx +2 -0
  365. package/src/chat/ui/intelligent-ui/renderers/chart.tsx +3 -3
  366. package/src/chat/ui/intelligent-ui/renderers/content.tsx +5 -6
  367. package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +2 -1
  368. package/src/chat/ui/intelligent-ui/renderers/map.tsx +2 -1
  369. package/src/chat/ui/intelligent-ui/use-truncated.ts +16 -19
  370. package/src/chat/ui/intelligent-ui/use-ui-links.ts +3 -3
  371. package/src/chat/ui/rows/ForksRow.tsx +3 -5
  372. package/src/chat/ui/rows/GeneratedImageRow.tsx +2 -1
  373. package/src/chat/ui/rows/MessageRows.tsx +12 -21
  374. package/src/chat/ui/rows/SubagentRow.tsx +3 -3
  375. package/src/chat/ui/rows/TaskRow.tsx +1 -1
  376. package/src/chat/ui/rows/WorkRows.tsx +10 -5
  377. package/src/chat/ui/useToggleSet.ts +15 -18
  378. package/src/chat/ui/visual-theme.ts +2 -3
  379. package/src/host-hooks.ts +113 -0
  380. package/src/lazy.tsx +2 -0
  381. package/src/locales/en/agent-chat.ts +134 -108
  382. package/src/locales/en/agent-prompts.ts +7 -7
  383. package/src/locales/en/agent-providers.ts +35 -34
  384. package/src/locales/en/agent-usage.ts +26 -20
  385. package/src/locales/nl/agent-chat.ts +126 -100
  386. package/src/locales/nl/agent-prompts.ts +5 -5
  387. package/src/locales/nl/agent-providers.ts +33 -32
  388. package/src/locales/nl/agent-usage.ts +25 -20
  389. package/src/providers/CliDetail.tsx +2 -1
  390. package/src/providers/InstallPage.tsx +2 -4
  391. package/src/providers/ProviderList.tsx +12 -2
  392. package/src/providers/ProvidersPane.tsx +45 -15
  393. package/src/providers/pane-target.ts +20 -4
  394. package/src/state/chats.ts +2 -2
  395. package/src/usage/LimitsList.tsx +12 -13
  396. package/src/usage/UsageBreakdown.tsx +17 -6
  397. package/src/usage/UsageLimits.tsx +2 -1
  398. package/src/usage/UsagePage.tsx +3 -3
  399. package/src/usage/index.ts +1 -1
  400. package/src/usage/limit-groups.ts +12 -0
  401. package/src/usage/limits.ts +2 -2
  402. 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
+ }