@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
@@ -8,53 +8,65 @@ const ends = new Map();
8
8
  const listeners = new Set();
9
9
  /* The timeline hands its scroller over so the composer, which never sees it, can page through it. */
10
10
  export function registerTimeline(chatId, element, follow, coveredHeight) {
11
- if (element === null) {
12
- return () => undefined;
11
+ if (element === null) {
12
+ return () => undefined;
13
+ }
14
+ scrollers.set(chatId, {
15
+ element,
16
+ follow,
17
+ coveredHeight
18
+ });
19
+ return () => {
20
+ if (scrollers.get(chatId)?.element === element) {
21
+ scrollers.delete(chatId);
22
+ ends.delete(chatId);
13
23
  }
14
- scrollers.set(chatId, { element, follow, coveredHeight });
15
- return () => {
16
- if (scrollers.get(chatId)?.element === element) {
17
- scrollers.delete(chatId);
18
- ends.delete(chatId);
19
- }
20
- };
24
+ };
21
25
  }
22
26
  export function setTimelineAtEnd(chatId, atEnd) {
23
- if (ends.get(chatId) === atEnd) {
24
- return;
25
- }
26
- ends.set(chatId, atEnd);
27
- for (const listener of listeners) {
28
- listener();
29
- }
27
+ if (ends.get(chatId) === atEnd) {
28
+ return;
29
+ }
30
+ ends.set(chatId, atEnd);
31
+ for (const listener of listeners) {
32
+ listener();
33
+ }
30
34
  }
31
35
  export function subscribeTimelineEnd(listener) {
32
- listeners.add(listener);
33
- return () => {
34
- listeners.delete(listener);
35
- };
36
+ listeners.add(listener);
37
+ return () => {
38
+ listeners.delete(listener);
39
+ };
36
40
  }
37
41
  /* A thread nobody has scrolled is at its end, so the button stays away until there is a way back. */
38
42
  export function timelineAtEnd(chatId) {
39
- return ends.get(chatId) ?? true;
43
+ return ends.get(chatId) ?? true;
40
44
  }
41
45
  export function scrollTimelineToEnd(chatId, behavior = 'smooth') {
42
- const scroller = scrollers.get(chatId);
43
- if (scroller) {
44
- scroller.follow(true);
45
- scroller.element.scrollTo({ top: scroller.element.scrollHeight, behavior });
46
- }
46
+ const scroller = scrollers.get(chatId);
47
+ if (scroller) {
48
+ scroller.follow(true);
49
+ scroller.element.scrollTo({
50
+ top: scroller.element.scrollHeight,
51
+ behavior
52
+ });
53
+ }
47
54
  }
48
55
  /* Pages the thread of this chat up or down; false when it has no timeline on screen. */
49
56
  export function pageTimeline(chatId, direction) {
50
- const scroller = scrollers.get(chatId);
51
- if (!scroller) {
52
- return false;
53
- }
54
- scroller.follow(false);
55
- const { element } = scroller;
56
- element.scrollBy({ top: direction * Math.max(0, element.clientHeight - scroller.coveredHeight()) * PAGE_OVERLAP, behavior: 'smooth' });
57
- return true;
57
+ const scroller = scrollers.get(chatId);
58
+ if (!scroller) {
59
+ return false;
60
+ }
61
+ scroller.follow(false);
62
+ const {
63
+ element
64
+ } = scroller;
65
+ element.scrollBy({
66
+ top: direction * Math.max(0, element.clientHeight - scroller.coveredHeight()) * PAGE_OVERLAP,
67
+ behavior: 'smooth'
68
+ });
69
+ return true;
58
70
  }
59
71
  /*
60
72
  * The keyboard steps from one message of the person to the next through the timeline on screen,
@@ -63,16 +75,16 @@ export function pageTimeline(chatId, direction) {
63
75
  */
64
76
  const steppers = new Map();
65
77
  export function registerMessageStepper(key, step) {
66
- steppers.set(key, step);
67
- return () => {
68
- if (steppers.get(key) === step) {
69
- steppers.delete(key);
70
- }
71
- };
78
+ steppers.set(key, step);
79
+ return () => {
80
+ if (steppers.get(key) === step) {
81
+ steppers.delete(key);
82
+ }
83
+ };
72
84
  }
73
85
  /* False when that chat has no timeline on screen or no message in that direction. */
74
86
  export function stepTimelineMessage(key, direction) {
75
- return steppers.get(key)?.(direction) ?? false;
87
+ return steppers.get(key)?.(direction) ?? false;
76
88
  }
77
89
  /*
78
90
  * Jumps asked from outside a thread (the chat's menu, a card that names a turn), keyed with the
@@ -80,72 +92,90 @@ export function stepTimelineMessage(key, direction) {
80
92
  * registers, since the asker may have to show the chat first.
81
93
  */
82
94
  function waitingJumps() {
83
- const jumpers = new Map();
84
- const waiting = new Map();
85
- return {
86
- register(key, jump) {
87
- jumpers.set(key, jump);
88
- const pending = waiting.get(key);
89
- if (pending !== undefined) {
90
- waiting.delete(key);
91
- // A jump nobody picked up for long is not what the person wants any more.
92
- if (Date.now() - pending.at <= PENDING_JUMP_TTL_MS) {
93
- jump(pending.target);
94
- }
95
- }
96
- return () => {
97
- if (jumpers.get(key) === jump) {
98
- jumpers.delete(key);
99
- }
100
- };
101
- },
102
- jump(key, target) {
103
- const jump = jumpers.get(key);
104
- if (jump === undefined) {
105
- waiting.set(key, { target, at: Date.now() });
106
- return false;
107
- }
108
- jump(target);
109
- return true;
95
+ const jumpers = new Map();
96
+ const waiting = new Map();
97
+ return {
98
+ register(key, jump) {
99
+ jumpers.set(key, jump);
100
+ const pending = waiting.get(key);
101
+ if (pending !== undefined) {
102
+ waiting.delete(key);
103
+ // A jump nobody picked up for long is not what the person wants any more.
104
+ if (Date.now() - pending.at <= PENDING_JUMP_TTL_MS) {
105
+ jump(pending.target);
106
+ }
107
+ }
108
+ return () => {
109
+ if (jumpers.get(key) === jump) {
110
+ jumpers.delete(key);
110
111
  }
111
- };
112
+ };
113
+ },
114
+ jump(key, target) {
115
+ const jump = jumpers.get(key);
116
+ if (jump === undefined) {
117
+ waiting.set(key, {
118
+ target,
119
+ at: Date.now()
120
+ });
121
+ return false;
122
+ }
123
+ jump(target);
124
+ return true;
125
+ }
126
+ };
112
127
  }
113
128
  const itemJumps = waitingJumps();
114
129
  export function registerItemJumper(key, jump) {
115
- return itemJumps.register(key, ({ itemId, options }) => jump(itemId, options));
130
+ return itemJumps.register(key, ({
131
+ itemId,
132
+ options
133
+ }) => jump(itemId, options));
116
134
  }
117
135
  /* False when that chat has no thread on screen; the jump then waits for the next one that registers. */
118
136
  export function jumpToTimelineItem(key, itemId, options = {}) {
119
- return itemJumps.jump(key, { itemId, options });
137
+ return itemJumps.jump(key, {
138
+ itemId,
139
+ options
140
+ });
120
141
  }
121
142
  const turnJumps = waitingJumps();
122
143
  export function registerTurnJumper(key, jump) {
123
- return turnJumps.register(key, ({ turnId, target }) => jump(turnId, target));
144
+ return turnJumps.register(key, ({
145
+ turnId,
146
+ target
147
+ }) => jump(turnId, target));
124
148
  }
125
149
  /* False when that chat has no thread on screen; the jump then waits for the next one that registers. */
126
150
  export function jumpToTimelineTurn(key, turnId, target) {
127
- return turnJumps.jump(key, { turnId, target });
151
+ return turnJumps.jump(key, {
152
+ turnId,
153
+ target
154
+ });
128
155
  }
129
156
  /* How near the top, in screens, the page before is asked for, so it is there before a reader reaches the edge. */
130
157
  const EARLIER_SCREENS = 1.5;
131
158
  export function wantsEarlier(scroller) {
132
- return scroller.clientHeight > 0 && scroller.scrollTop < scroller.clientHeight * EARLIER_SCREENS;
159
+ return scroller.clientHeight > 0 && scroller.scrollTop < scroller.clientHeight * EARLIER_SCREENS;
133
160
  }
134
161
  /* The first row in view, found by the rows' `data-item-id`, for a thread that keeps every row in the document. */
135
162
  export function firstRowInView(scroller) {
136
- const top = scroller.getBoundingClientRect().top;
137
- for (const row of scroller.querySelectorAll('[data-item-id]')) {
138
- const rect = row.getBoundingClientRect();
139
- if (rect.bottom > top) {
140
- return { id: row.dataset.itemId, offset: rect.top - top };
141
- }
163
+ const top = scroller.getBoundingClientRect().top;
164
+ for (const row of scroller.querySelectorAll('[data-item-id]')) {
165
+ const rect = row.getBoundingClientRect();
166
+ if (rect.bottom > top) {
167
+ return {
168
+ id: row.dataset.itemId,
169
+ offset: rect.top - top
170
+ };
142
171
  }
143
- return null;
172
+ }
173
+ return null;
144
174
  }
145
175
  /* Puts the anchored row back where it was; nothing moves when that row is gone. */
146
176
  export function restoreAnchor(scroller, anchor) {
147
- const row = scroller.querySelector(`[data-item-id="${CSS.escape(anchor.id)}"]`);
148
- if (row !== null) {
149
- scroller.scrollTop += row.getBoundingClientRect().top - scroller.getBoundingClientRect().top - anchor.offset;
150
- }
151
- }
177
+ const row = scroller.querySelector(`[data-item-id="${CSS.escape(anchor.id)}"]`);
178
+ if (row !== null) {
179
+ scroller.scrollTop += row.getBoundingClientRect().top - scroller.getBoundingClientRect().top - anchor.offset;
180
+ }
181
+ }
@@ -1,23 +1,134 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { c as _c } from "react/compiler-runtime";
2
2
  import { useTranslation } from 'react-i18next';
3
3
  import { AccountDot } from '../../agents/AccountDot.js';
4
4
  import { useAccountChoice } from '../account-choice.js';
5
5
  import { useChats } from '../../state/chats.js';
6
6
  import { useChatScope } from '../../scope.js';
7
7
  import { Pill, Tooltip } from '@adecore/ui';
8
- function AccountPillOf({ provider, account }) {
9
- const { t } = useTranslation('agent-chat');
10
- const choice = useAccountChoice(provider, account);
11
- if (choice === null) {
12
- return null;
13
- }
14
- const name = choice.current === null ? choice.currentId : choice.nameOf(choice.current);
15
- return (_jsx(Tooltip, { label: t('account.pill', { provider: choice.providerName, account: name }), children: _jsx(Pill, { icon: _jsx(AccountDot, { color: choice.current?.account.color, className: "size-1.75" }), children: _jsx("span", { className: "max-w-32 truncate", children: name }) }) }));
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ function AccountPillOf(t0) {
10
+ const $ = _c(16);
11
+ const {
12
+ provider,
13
+ account
14
+ } = t0;
15
+ const {
16
+ t
17
+ } = useTranslation("agent-chat");
18
+ const choice = useAccountChoice(provider, account);
19
+ if (choice === null) {
20
+ return null;
21
+ }
22
+ let T0;
23
+ let name;
24
+ let t1;
25
+ if ($[0] !== choice || $[1] !== t) {
26
+ name = choice.current === null ? choice.currentId : choice.nameOf(choice.current);
27
+ T0 = Tooltip;
28
+ t1 = t("account.pill", {
29
+ provider: choice.providerName,
30
+ account: name
31
+ });
32
+ $[0] = choice;
33
+ $[1] = t;
34
+ $[2] = T0;
35
+ $[3] = name;
36
+ $[4] = t1;
37
+ } else {
38
+ T0 = $[2];
39
+ name = $[3];
40
+ t1 = $[4];
41
+ }
42
+ const t2 = choice.current?.account.color;
43
+ let t3;
44
+ if ($[5] !== t2) {
45
+ t3 = /*#__PURE__*/_jsx(AccountDot, {
46
+ color: t2,
47
+ className: "size-1.75"
48
+ });
49
+ $[5] = t2;
50
+ $[6] = t3;
51
+ } else {
52
+ t3 = $[6];
53
+ }
54
+ let t4;
55
+ if ($[7] !== name) {
56
+ t4 = /*#__PURE__*/_jsx("span", {
57
+ className: "max-w-32 truncate",
58
+ children: name
59
+ });
60
+ $[7] = name;
61
+ $[8] = t4;
62
+ } else {
63
+ t4 = $[8];
64
+ }
65
+ let t5;
66
+ if ($[9] !== t3 || $[10] !== t4) {
67
+ t5 = /*#__PURE__*/_jsx(Pill, {
68
+ icon: t3,
69
+ children: t4
70
+ });
71
+ $[9] = t3;
72
+ $[10] = t4;
73
+ $[11] = t5;
74
+ } else {
75
+ t5 = $[11];
76
+ }
77
+ let t6;
78
+ if ($[12] !== T0 || $[13] !== t1 || $[14] !== t5) {
79
+ t6 = /*#__PURE__*/_jsx(T0, {
80
+ label: t1,
81
+ children: t5
82
+ });
83
+ $[12] = T0;
84
+ $[13] = t1;
85
+ $[14] = t5;
86
+ $[15] = t6;
87
+ } else {
88
+ t6 = $[15];
89
+ }
90
+ return t6;
16
91
  }
17
92
  /* Which account a chat node runs under, from the status every client gets; only while its CLI has a choice of accounts. */
18
- export function AccountPill({ chatId }) {
19
- const { keyOf } = useChatScope();
20
- const provider = useChats((s) => s.statusByKey[keyOf(chatId)]?.info.provider);
21
- const account = useChats((s) => s.statusByKey[keyOf(chatId)]?.info.account);
22
- return provider === undefined ? null : _jsx(AccountPillOf, { provider: provider, account: account });
23
- }
93
+ export function AccountPill(t0) {
94
+ const $ = _c(9);
95
+ const {
96
+ chatId
97
+ } = t0;
98
+ const {
99
+ keyOf
100
+ } = useChatScope();
101
+ let t1;
102
+ if ($[0] !== chatId || $[1] !== keyOf) {
103
+ t1 = s => s.statusByKey[keyOf(chatId)]?.info.provider;
104
+ $[0] = chatId;
105
+ $[1] = keyOf;
106
+ $[2] = t1;
107
+ } else {
108
+ t1 = $[2];
109
+ }
110
+ const provider = useChats(t1);
111
+ let t2;
112
+ if ($[3] !== chatId || $[4] !== keyOf) {
113
+ t2 = s_0 => s_0.statusByKey[keyOf(chatId)]?.info.account;
114
+ $[3] = chatId;
115
+ $[4] = keyOf;
116
+ $[5] = t2;
117
+ } else {
118
+ t2 = $[5];
119
+ }
120
+ const account = useChats(t2);
121
+ let t3;
122
+ if ($[6] !== account || $[7] !== provider) {
123
+ t3 = provider === undefined ? null : /*#__PURE__*/_jsx(AccountPillOf, {
124
+ provider: provider,
125
+ account: account
126
+ });
127
+ $[6] = account;
128
+ $[7] = provider;
129
+ $[8] = t3;
130
+ } else {
131
+ t3 = $[8];
132
+ }
133
+ return t3;
134
+ }
@@ -1,9 +1,65 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo } from 'react';
1
+ import { c as _c } from "react/compiler-runtime";
3
2
  import { useTranslation } from 'react-i18next';
4
3
  import { parseAnsi } from '../logic/ansi.js';
5
- export function AnsiOutput({ text, limit, tailLines }) {
6
- const { t } = useTranslation('agent-chat');
7
- const { tokens, omitted } = useMemo(() => parseAnsi(text, { limit, tailLines }), [text, limit, tailLines]);
8
- return (_jsxs(_Fragment, { children: [tokens.map((token, index) => (_jsx("span", { style: token.style, children: token.content }, index))), omitted > 0 && `\n${t('work.moreCharacters', { count: omitted })}`] }));
4
+ import { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
5
+ export function AnsiOutput(t0) {
6
+ const $ = _c(11);
7
+ const {
8
+ text,
9
+ limit,
10
+ tailLines
11
+ } = t0;
12
+ const {
13
+ t
14
+ } = useTranslation("agent-chat");
15
+ let omitted;
16
+ let t1;
17
+ if ($[0] !== limit || $[1] !== tailLines || $[2] !== text) {
18
+ const {
19
+ tokens,
20
+ omitted: t2
21
+ } = parseAnsi(text, {
22
+ limit,
23
+ tailLines
24
+ });
25
+ omitted = t2;
26
+ t1 = tokens.map(_temp);
27
+ $[0] = limit;
28
+ $[1] = tailLines;
29
+ $[2] = text;
30
+ $[3] = omitted;
31
+ $[4] = t1;
32
+ } else {
33
+ omitted = $[3];
34
+ t1 = $[4];
35
+ }
36
+ let t2;
37
+ if ($[5] !== omitted || $[6] !== t) {
38
+ t2 = omitted > 0 && `\n${t("work.moreCharacters", {
39
+ count: omitted
40
+ })}`;
41
+ $[5] = omitted;
42
+ $[6] = t;
43
+ $[7] = t2;
44
+ } else {
45
+ t2 = $[7];
46
+ }
47
+ let t3;
48
+ if ($[8] !== t1 || $[9] !== t2) {
49
+ t3 = /*#__PURE__*/_jsxs(_Fragment, {
50
+ children: [t1, t2]
51
+ });
52
+ $[8] = t1;
53
+ $[9] = t2;
54
+ $[10] = t3;
55
+ } else {
56
+ t3 = $[10];
57
+ }
58
+ return t3;
9
59
  }
60
+ function _temp(token, index) {
61
+ return /*#__PURE__*/_jsx("span", {
62
+ style: token.style,
63
+ children: token.content
64
+ }, index);
65
+ }