@adecore/agents-react 0.31.11 → 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 (404) 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 +1946 -163
  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 +35 -0
  241. package/dist/locales/en/agent-chat.js +747 -712
  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 +35 -0
  248. package/dist/locales/nl/agent-chat.js +747 -712
  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 -25
  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.d.ts +1 -0
  291. package/dist/state/chats.js +408 -192
  292. package/dist/state/index.js +1 -1
  293. package/dist/state/provider-accounts.js +70 -47
  294. package/dist/state/providers.js +45 -16
  295. package/dist/state/usage.js +154 -77
  296. package/dist/storage.js +69 -68
  297. package/dist/testing/index.js +1 -1
  298. package/dist/testing/prompts.js +105 -67
  299. package/dist/transport.js +10 -10
  300. package/dist/ui/PlainTextarea.js +27 -3
  301. package/dist/usage/LimitsList.js +646 -40
  302. package/dist/usage/UsageBreakdown.js +879 -38
  303. package/dist/usage/UsageChart.js +311 -32
  304. package/dist/usage/UsageDialog.js +46 -4
  305. package/dist/usage/UsageLimits.js +467 -34
  306. package/dist/usage/UsageLimitsCard.js +95 -11
  307. package/dist/usage/UsagePage.js +817 -96
  308. package/dist/usage/UsagePane.js +164 -10
  309. package/dist/usage/UsageSummary.js +151 -6
  310. package/dist/usage/UsageTiles.js +164 -14
  311. package/dist/usage/format.js +32 -32
  312. package/dist/usage/index.d.ts +1 -1
  313. package/dist/usage/index.js +2 -1
  314. package/dist/usage/limit-groups.d.ts +2 -0
  315. package/dist/usage/limit-groups.js +77 -59
  316. package/dist/usage/limits.js +78 -43
  317. package/dist/usage/money.js +20 -4
  318. package/dist/usage/summary.js +85 -64
  319. package/package.json +8 -8
  320. package/src/agents/ModelOptionControl.tsx +3 -1
  321. package/src/agents/option-words.ts +27 -0
  322. package/src/chat/account-choice.ts +41 -1
  323. package/src/chat/composer-effort.ts +32 -0
  324. package/src/chat/forks.ts +4 -5
  325. package/src/chat/index.ts +3 -1
  326. package/src/chat/logic/effort.ts +32 -0
  327. package/src/chat/logic/picker-entries.ts +45 -10
  328. package/src/chat/logic/resume-compaction.ts +95 -17
  329. package/src/chat/logic/timeline.ts +11 -3
  330. package/src/chat/preferences.ts +35 -0
  331. package/src/chat/subagent-view.ts +2 -3
  332. package/src/chat/ui/AnsiOutput.tsx +1 -2
  333. package/src/chat/ui/BookmarkSubmenu.tsx +3 -3
  334. package/src/chat/ui/ChatActivity.tsx +14 -22
  335. package/src/chat/ui/ChatReferenceChip.tsx +2 -3
  336. package/src/chat/ui/Composer.tsx +15 -7
  337. package/src/chat/ui/EditDiff.tsx +2 -3
  338. package/src/chat/ui/LimitState.tsx +2 -2
  339. package/src/chat/ui/Markdown.tsx +10 -8
  340. package/src/chat/ui/MermaidBlock.tsx +2 -3
  341. package/src/chat/ui/Pickers.tsx +49 -29
  342. package/src/chat/ui/PromptComposer.tsx +7 -9
  343. package/src/chat/ui/ResumeCompactionDock.tsx +16 -4
  344. package/src/chat/ui/RunSettings.tsx +67 -28
  345. package/src/chat/ui/Scrubber.tsx +3 -3
  346. package/src/chat/ui/ShellCommand.tsx +2 -0
  347. package/src/chat/ui/SubagentInfo.tsx +2 -3
  348. package/src/chat/ui/SubagentTimeline.tsx +12 -16
  349. package/src/chat/ui/Timeline.tsx +6 -6
  350. package/src/chat/ui/UnifiedDiff.tsx +3 -4
  351. package/src/chat/ui/VisualFrame.tsx +5 -8
  352. package/src/chat/ui/code-theme.ts +4 -4
  353. package/src/chat/ui/composer/placeholder.ts +2 -2
  354. package/src/chat/ui/composer/use-compaction-offer.ts +36 -16
  355. package/src/chat/ui/composer/use-composer-menus.ts +4 -9
  356. package/src/chat/ui/composer/use-composer-submit.ts +2 -1
  357. package/src/chat/ui/composer/use-effort-stepper.ts +56 -0
  358. package/src/chat/ui/composer/use-notice.ts +2 -2
  359. package/src/chat/ui/diff/EditorEditDiff.tsx +9 -13
  360. package/src/chat/ui/diff/LegacyEditDiff.tsx +12 -17
  361. package/src/chat/ui/diff/LegacyUnifiedDiff.tsx +13 -21
  362. package/src/chat/ui/diff/use-review-stack.ts +4 -4
  363. package/src/chat/ui/diff-theme.ts +3 -3
  364. package/src/chat/ui/file-links.ts +2 -2
  365. package/src/chat/ui/intelligent-ui/UiReply.tsx +2 -0
  366. package/src/chat/ui/intelligent-ui/renderers/chart.tsx +3 -3
  367. package/src/chat/ui/intelligent-ui/renderers/content.tsx +5 -6
  368. package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +2 -1
  369. package/src/chat/ui/intelligent-ui/renderers/map.tsx +2 -1
  370. package/src/chat/ui/intelligent-ui/use-truncated.ts +16 -19
  371. package/src/chat/ui/intelligent-ui/use-ui-links.ts +3 -3
  372. package/src/chat/ui/rows/ForksRow.tsx +3 -5
  373. package/src/chat/ui/rows/GeneratedImageRow.tsx +2 -1
  374. package/src/chat/ui/rows/MessageRows.tsx +12 -21
  375. package/src/chat/ui/rows/SubagentRow.tsx +3 -3
  376. package/src/chat/ui/rows/TaskRow.tsx +1 -1
  377. package/src/chat/ui/rows/WorkRows.tsx +20 -7
  378. package/src/chat/ui/useToggleSet.ts +15 -18
  379. package/src/chat/ui/visual-theme.ts +2 -3
  380. package/src/host-hooks.ts +113 -0
  381. package/src/lazy.tsx +2 -0
  382. package/src/locales/en/agent-chat.ts +135 -108
  383. package/src/locales/en/agent-prompts.ts +7 -7
  384. package/src/locales/en/agent-providers.ts +35 -34
  385. package/src/locales/en/agent-usage.ts +26 -20
  386. package/src/locales/nl/agent-chat.ts +127 -100
  387. package/src/locales/nl/agent-prompts.ts +5 -5
  388. package/src/locales/nl/agent-providers.ts +33 -32
  389. package/src/locales/nl/agent-usage.ts +25 -20
  390. package/src/prompts/ui/ApprovalBody.tsx +3 -1
  391. package/src/providers/CliDetail.tsx +2 -1
  392. package/src/providers/InstallPage.tsx +2 -4
  393. package/src/providers/ProviderList.tsx +12 -2
  394. package/src/providers/ProvidersPane.tsx +45 -15
  395. package/src/providers/pane-target.ts +20 -4
  396. package/src/state/chats.ts +7 -2
  397. package/src/usage/LimitsList.tsx +12 -13
  398. package/src/usage/UsageBreakdown.tsx +17 -6
  399. package/src/usage/UsageLimits.tsx +2 -1
  400. package/src/usage/UsagePage.tsx +3 -3
  401. package/src/usage/index.ts +1 -1
  402. package/src/usage/limit-groups.ts +12 -0
  403. package/src/usage/limits.ts +2 -2
  404. package/src/usage/money.ts +1 -2
@@ -2,149 +2,173 @@ import i18next from 'i18next';
2
2
  /* The providers whose chat a machine can fork, and go on with in a fork, are the ones with a conversation the CLI keeps. */
3
3
  export const FORKABLE_PROVIDERS = new Set(['claude', 'codex']);
4
4
  function turnsOf(items, order) {
5
- return order.flatMap((id) => {
6
- const item = items[id];
7
- return item?.kind === 'turn' ? [item] : [];
8
- });
5
+ return order.flatMap(id => {
6
+ const item = items[id];
7
+ return item?.kind === 'turn' ? [item] : [];
8
+ });
9
9
  }
10
10
  /*
11
11
  * Why a chat cannot be forked after this turn right now, or null when it can. A turn still running,
12
12
  * or any turn in the chat, is a transcript that grows while it would be copied.
13
13
  */
14
14
  export function forkRefusal(info, turn) {
15
- if (info === null || turn?.kind !== 'turn') {
16
- return i18next.t('agent-chat:fork.refusal.notInConversation');
17
- }
18
- if (!FORKABLE_PROVIDERS.has(info.provider)) {
19
- return i18next.t('agent-chat:fork.refusal.cliCannotFork');
20
- }
21
- if (info.agentSessionId === null) {
22
- return i18next.t('agent-chat:fork.refusal.noConversation');
23
- }
24
- if (turn.state === 'running' || info.activeTurnId !== null) {
25
- return i18next.t('agent-chat:fork.refusal.turnRunning');
26
- }
27
- return null;
15
+ if (info === null || turn?.kind !== 'turn') {
16
+ return i18next.t('agent-chat:fork.refusal.notInConversation');
17
+ }
18
+ if (!FORKABLE_PROVIDERS.has(info.provider)) {
19
+ return i18next.t('agent-chat:fork.refusal.cliCannotFork');
20
+ }
21
+ if (info.agentSessionId === null) {
22
+ return i18next.t('agent-chat:fork.refusal.noConversation');
23
+ }
24
+ if (turn.state === 'running' || info.activeTurnId !== null) {
25
+ return i18next.t('agent-chat:fork.refusal.turnRunning');
26
+ }
27
+ return null;
28
28
  }
29
29
  /* Why a fork cannot write a summary for its original right now, or null when it can. */
30
30
  export function summaryRefusal(state) {
31
- if (!state.originalPresent) {
32
- return i18next.t('agent-chat:fork.refusal.originalGone');
33
- }
34
- if (state.busy) {
35
- return i18next.t('agent-chat:fork.refusal.turnRunning');
36
- }
37
- return null;
31
+ if (!state.originalPresent) {
32
+ return i18next.t('agent-chat:fork.refusal.originalGone');
33
+ }
34
+ if (state.busy) {
35
+ return i18next.t('agent-chat:fork.refusal.turnRunning');
36
+ }
37
+ return null;
38
38
  }
39
39
  /* The forks this client knows of that went on after this turn of this chat, in the order it holds them. */
40
40
  export function forkIdsAfter(infos, chatId, turnId) {
41
- const ids = [];
42
- for (const info of infos) {
43
- if (info.forkOf?.chatId === chatId && info.forkOf.turnId === turnId) {
44
- ids.push(info.chatId);
45
- }
41
+ const ids = [];
42
+ for (const info of infos) {
43
+ if (info.forkOf?.chatId === chatId && info.forkOf.turnId === turnId) {
44
+ ids.push(info.chatId);
46
45
  }
47
- return ids;
46
+ }
47
+ return ids;
48
48
  }
49
49
  /* The turns of this chat that at least one fork this client knows of went on after. */
50
50
  export function forkedTurnIds(infos, chatId) {
51
- const turns = new Set();
52
- for (const info of infos) {
53
- if (info.forkOf?.chatId === chatId) {
54
- turns.add(info.forkOf.turnId);
55
- }
51
+ const turns = new Set();
52
+ for (const info of infos) {
53
+ if (info.forkOf?.chatId === chatId) {
54
+ turns.add(info.forkOf.turnId);
56
55
  }
57
- return turns;
56
+ }
57
+ return turns;
58
58
  }
59
59
  /* The last turn that ended, which is where a fork from the node's menu goes on after. */
60
60
  export function lastSettledTurn(items, order) {
61
- return turnsOf(items, order).findLast((turn) => turn.state !== 'running')?.id ?? null;
61
+ return turnsOf(items, order).findLast(turn => turn.state !== 'running')?.id ?? null;
62
62
  }
63
63
  export function forkPointOf(items, order, turnId, whole) {
64
- const turns = turnsOf(items, order);
65
- const index = turns.findIndex((turn) => turn.id === turnId);
66
- const turn = turns[index];
67
- if (turn === undefined) {
68
- return null;
69
- }
70
- const asked = order.map((id) => items[id]).find((item) => item?.kind === 'user' && item.turnId === turnId);
71
- const text = asked?.kind === 'user' ? asked.text : (turn.label ?? '');
72
- const prompt = text
73
- .split('\n')
74
- .find((line) => line.trim() !== '')
75
- ?.trim() ?? null;
76
- return { turnId, number: index + 1, total: turns.length, counted: whole, last: index === turns.length - 1, prompt };
64
+ const turns = turnsOf(items, order);
65
+ const index = turns.findIndex(turn => turn.id === turnId);
66
+ const turn = turns[index];
67
+ if (turn === undefined) {
68
+ return null;
69
+ }
70
+ const asked = order.map(id => items[id]).find(item => item?.kind === 'user' && item.turnId === turnId);
71
+ const text = asked?.kind === 'user' ? asked.text : turn.label ?? '';
72
+ const prompt = text.split('\n').find(line => line.trim() !== '')?.trim() ?? null;
73
+ return {
74
+ turnId,
75
+ number: index + 1,
76
+ total: turns.length,
77
+ counted: whole,
78
+ last: index === turns.length - 1,
79
+ prompt
80
+ };
77
81
  }
78
82
  /* The line at the top of the dialog: which turn, and what it was about. */
79
83
  export function forkPointLabel(point, maxPrompt = 60) {
80
- const where = point.last
81
- ? i18next.t('agent-chat:fork.point.afterLast')
82
- : point.counted
83
- ? i18next.t('agent-chat:fork.point.afterTurn', { number: point.number, total: point.total })
84
- : i18next.t('agent-chat:fork.point.afterThis');
85
- if (point.prompt === null) {
86
- return where;
87
- }
88
- const prompt = point.prompt.length > maxPrompt ? `${point.prompt.slice(0, maxPrompt - 1)}…` : point.prompt;
89
- return i18next.t('agent-chat:fork.point.about', { where, prompt });
84
+ const where = point.last ? i18next.t('agent-chat:fork.point.afterLast') : point.counted ? i18next.t('agent-chat:fork.point.afterTurn', {
85
+ number: point.number,
86
+ total: point.total
87
+ }) : i18next.t('agent-chat:fork.point.afterThis');
88
+ if (point.prompt === null) {
89
+ return where;
90
+ }
91
+ const prompt = point.prompt.length > maxPrompt ? `${point.prompt.slice(0, maxPrompt - 1)}…` : point.prompt;
92
+ return i18next.t('agent-chat:fork.point.about', {
93
+ where,
94
+ prompt
95
+ });
90
96
  }
91
97
  /* The turn a row of the thread belongs to, which is the turn "Fork from here" on that row goes on after. */
92
98
  export function turnIdOfRow(row) {
93
- switch (row.kind) {
94
- case 'turn-start':
95
- case 'turn-fold':
96
- return row.turn.id;
97
- case 'changed-files':
98
- case 'forks':
99
- return row.turnId;
100
- case 'work':
101
- case 'work-live':
102
- case 'workflow':
103
- return row.tool.turnId;
104
- case 'work-group':
105
- return row.tools[0]?.turnId ?? null;
106
- case 'visual':
107
- return row.visual.turnId ?? null;
108
- case 'user':
109
- case 'assistant':
110
- case 'thinking':
111
- case 'live-thought':
112
- case 'subagent':
113
- case 'approval':
114
- case 'question':
115
- return row.item.turnId;
116
- default:
117
- return null;
118
- }
99
+ switch (row.kind) {
100
+ case 'turn-start':
101
+ case 'turn-fold':
102
+ return row.turn.id;
103
+ case 'changed-files':
104
+ case 'forks':
105
+ return row.turnId;
106
+ case 'work':
107
+ case 'work-live':
108
+ case 'workflow':
109
+ return row.tool.turnId;
110
+ case 'work-group':
111
+ return row.tools[0]?.turnId ?? null;
112
+ case 'visual':
113
+ return row.visual.turnId ?? null;
114
+ case 'user':
115
+ case 'assistant':
116
+ case 'thinking':
117
+ case 'live-thought':
118
+ case 'subagent':
119
+ case 'approval':
120
+ case 'question':
121
+ return row.item.turnId;
122
+ default:
123
+ return null;
124
+ }
119
125
  }
120
126
  /* What the dialog offers, first the default: a view forks into a view, and a node into a node or, when asked, a view. */
121
127
  export function forkShapes(origin) {
122
- return origin === 'view' ? ['view'] : ['node', 'view'];
128
+ return origin === 'view' ? ['view'] : ['node', 'view'];
123
129
  }
124
130
  export function forkPayload(input) {
125
- const { cli, worktree } = input;
126
- const provider = cli !== undefined && cli.chosen.provider !== cli.original.provider ? cli.chosen.provider : null;
127
- const selection = cli !== undefined && (provider !== null || cli.chosen.selection.model !== cli.original.selection.model) ? cli.chosen.selection : null;
128
- const account = cli?.chosen.account !== undefined && (provider !== null || cli.chosen.account !== cli.original.account) ? cli.chosen.account : null;
129
- return {
130
- chatId: input.chatId,
131
- turnId: input.turnId,
132
- title: input.title,
133
- ...(input.shape === 'view' ? { asView: true } : {}),
134
- ...(provider === null ? {} : { provider }),
135
- ...(selection === null ? {} : { selection }),
136
- ...(account === null ? {} : { account }),
137
- ...(worktree ? { worktree: { branch: worktree.branch }, ...(worktree.filesAfterTurn ? { filesAfterTurn: true } : {}) } : {})
138
- };
131
+ const {
132
+ cli,
133
+ worktree
134
+ } = input;
135
+ const provider = cli !== undefined && cli.chosen.provider !== cli.original.provider ? cli.chosen.provider : null;
136
+ const selection = cli !== undefined && (provider !== null || cli.chosen.selection.model !== cli.original.selection.model) ? cli.chosen.selection : null;
137
+ const account = cli?.chosen.account !== undefined && (provider !== null || cli.chosen.account !== cli.original.account) ? cli.chosen.account : null;
138
+ return {
139
+ chatId: input.chatId,
140
+ turnId: input.turnId,
141
+ title: input.title,
142
+ ...(input.shape === 'view' ? {
143
+ asView: true
144
+ } : {}),
145
+ ...(provider === null ? {} : {
146
+ provider
147
+ }),
148
+ ...(selection === null ? {} : {
149
+ selection
150
+ }),
151
+ ...(account === null ? {} : {
152
+ account
153
+ }),
154
+ ...(worktree ? {
155
+ worktree: {
156
+ branch: worktree.branch
157
+ },
158
+ ...(worktree.filesAfterTurn ? {
159
+ filesAfterTurn: true
160
+ } : {})
161
+ } : {})
162
+ };
139
163
  }
140
164
  /* Why a branch cannot be the fork's, or null when it can. */
141
165
  export function branchRefusal(branch, taken) {
142
- const name = branch.trim();
143
- if (name === '') {
144
- return i18next.t('agent-chat:fork.branch.unnamed');
145
- }
146
- if (taken.includes(name)) {
147
- return i18next.t('agent-chat:fork.branch.taken');
148
- }
149
- return null;
150
- }
166
+ const name = branch.trim();
167
+ if (name === '') {
168
+ return i18next.t('agent-chat:fork.branch.unnamed');
169
+ }
170
+ if (taken.includes(name)) {
171
+ return i18next.t('agent-chat:fork.branch.taken');
172
+ }
173
+ return null;
174
+ }
@@ -1,32 +1,63 @@
1
1
  import { CHAT_ATTACHMENT_MAX_BYTES, GeneratedImageInputSchema } from '@adecore/agent-contracts';
2
2
  export const IMAGE_GENERATION_TOOL = 'ImageGeneration';
3
3
  export function isImageGeneration(tool) {
4
- return tool.name === IMAGE_GENERATION_TOOL;
4
+ return tool.name === IMAGE_GENERATION_TOOL;
5
5
  }
6
6
  /* What the row of an image generation draws, from the tool call alone. */
7
7
  export function generatedImageView(tool) {
8
- if (tool.state === 'running') {
9
- return { state: 'generating' };
10
- }
11
- const parsed = GeneratedImageInputSchema.safeParse(tool.input);
12
- const input = parsed.success ? parsed.data : {};
13
- const output = tool.output?.trim() || null;
14
- if (tool.state === 'error' || input.attachment === undefined) {
15
- return { state: 'failed', failure: output === null && tool.state !== 'error' ? { kind: 'empty' } : { kind: 'provider', message: output } };
16
- }
17
- const attachment = input.attachment;
18
- if (attachment.size === 0) {
19
- return { state: 'failed', failure: { kind: 'empty' } };
20
- }
21
- if (!attachment.mime.startsWith('image/')) {
22
- return { state: 'failed', failure: { kind: 'not-image' } };
23
- }
24
- if (attachment.size > CHAT_ATTACHMENT_MAX_BYTES) {
25
- return { state: 'failed', failure: { kind: 'too-large', limit: CHAT_ATTACHMENT_MAX_BYTES } };
26
- }
27
- return { state: 'ready', attachment, prompt: input.revisedPrompt?.trim() || null, transparent: input.transparentBackground === true };
8
+ if (tool.state === 'running') {
9
+ return {
10
+ state: 'generating'
11
+ };
12
+ }
13
+ const parsed = GeneratedImageInputSchema.safeParse(tool.input);
14
+ const input = parsed.success ? parsed.data : {};
15
+ const output = tool.output?.trim() || null;
16
+ if (tool.state === 'error' || input.attachment === undefined) {
17
+ return {
18
+ state: 'failed',
19
+ failure: output === null && tool.state !== 'error' ? {
20
+ kind: 'empty'
21
+ } : {
22
+ kind: 'provider',
23
+ message: output
24
+ }
25
+ };
26
+ }
27
+ const attachment = input.attachment;
28
+ if (attachment.size === 0) {
29
+ return {
30
+ state: 'failed',
31
+ failure: {
32
+ kind: 'empty'
33
+ }
34
+ };
35
+ }
36
+ if (!attachment.mime.startsWith('image/')) {
37
+ return {
38
+ state: 'failed',
39
+ failure: {
40
+ kind: 'not-image'
41
+ }
42
+ };
43
+ }
44
+ if (attachment.size > CHAT_ATTACHMENT_MAX_BYTES) {
45
+ return {
46
+ state: 'failed',
47
+ failure: {
48
+ kind: 'too-large',
49
+ limit: CHAT_ATTACHMENT_MAX_BYTES
50
+ }
51
+ };
52
+ }
53
+ return {
54
+ state: 'ready',
55
+ attachment,
56
+ prompt: input.revisedPrompt?.trim() || null,
57
+ transparent: input.transparentBackground === true
58
+ };
28
59
  }
29
60
  /* Width over height, when the attachment carries both. */
30
61
  export function attachmentAspect(attachment) {
31
- return attachment.width !== undefined && attachment.height !== undefined ? attachment.width / attachment.height : undefined;
32
- }
62
+ return attachment.width !== undefined && attachment.height !== undefined ? attachment.width / attachment.height : undefined;
63
+ }
@@ -4,23 +4,31 @@
4
4
  * turns, and a goal it already met clears itself.
5
5
  */
6
6
  export function goalView(info, goals, canAct) {
7
- const goal = info.goal;
8
- if (goal === undefined) {
9
- return null;
10
- }
11
- if (!canAct || goals === undefined) {
12
- return { goal, actions: [] };
13
- }
14
- if (goals === 'command') {
15
- return { goal, actions: goal.status === 'complete' || info.activeTurnId !== null ? [] : ['clear'] };
16
- }
17
- const actions = [];
18
- if (goal.status === 'active') {
19
- actions.push('pause');
20
- }
21
- else if (goal.status !== 'complete') {
22
- actions.push('resume');
23
- }
24
- actions.push('clear');
25
- return { goal, actions };
26
- }
7
+ const goal = info.goal;
8
+ if (goal === undefined) {
9
+ return null;
10
+ }
11
+ if (!canAct || goals === undefined) {
12
+ return {
13
+ goal,
14
+ actions: []
15
+ };
16
+ }
17
+ if (goals === 'command') {
18
+ return {
19
+ goal,
20
+ actions: goal.status === 'complete' || info.activeTurnId !== null ? [] : ['clear']
21
+ };
22
+ }
23
+ const actions = [];
24
+ if (goal.status === 'active') {
25
+ actions.push('pause');
26
+ } else if (goal.status !== 'complete') {
27
+ actions.push('resume');
28
+ }
29
+ actions.push('clear');
30
+ return {
31
+ goal,
32
+ actions
33
+ };
34
+ }
@@ -1,8 +1,8 @@
1
1
  /* The report a `SubagentHandback` call carries in `input.message` (Claude Code 2.1.273), or null for any other item. */
2
2
  export function handbackReportOf(item) {
3
- if (item.kind !== 'tool' || item.name !== 'SubagentHandback' || typeof item.input !== 'object' || item.input === null) {
4
- return null;
5
- }
6
- const message = item.input.message;
7
- return typeof message === 'string' && message.trim() !== '' ? message : null;
8
- }
3
+ if (item.kind !== 'tool' || item.name !== 'SubagentHandback' || typeof item.input !== 'object' || item.input === null) {
4
+ return null;
5
+ }
6
+ const message = item.input.message;
7
+ return typeof message === 'string' && message.trim() !== '' ? message : null;
8
+ }
@@ -1,4 +1,4 @@
1
1
  /* A plain object, which is what a tool's input and a stored record are and an array is not. */
2
2
  export function isRecord(value) {
3
- return typeof value === 'object' && value !== null && !Array.isArray(value);
4
- }
3
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
4
+ }
@@ -5,33 +5,49 @@ import { formatMoment } from '@adecore/ui/format';
5
5
  * the thread says the same as the chat. Null while the last turn stopped on nothing, or a turn runs.
6
6
  */
7
7
  export function limitView(info, now) {
8
- const limit = info.limit;
9
- if (limit === undefined || info.activeTurnId !== null) {
10
- return null;
11
- }
12
- const resumes = info.resumeAt === undefined ? null : formatMoment(info.resumeAt, now);
13
- if (limit.kind === 'overload') {
14
- return {
15
- pill: resumes === null ? i18next.t('agent-chat:limit.overload.pill') : i18next.t('agent-chat:limit.overload.pillRetry', { time: resumes }),
16
- title: i18next.t('agent-chat:limit.overload.title'),
17
- detail: resumes === null ? i18next.t('agent-chat:limit.overload.sendAgain') : i18next.t('agent-chat:limit.overload.retries', { time: resumes })
18
- };
19
- }
20
- const title = i18next.t('agent-chat:limit.usage.title');
21
- if (resumes !== null) {
22
- return {
23
- pill: i18next.t('agent-chat:limit.usage.pillResumes', { time: resumes }),
24
- title,
25
- detail: i18next.t('agent-chat:limit.usage.resumes', { time: resumes })
26
- };
27
- }
28
- if (limit.resetsAt !== undefined) {
29
- const resets = formatMoment(limit.resetsAt, now);
30
- return {
31
- pill: i18next.t('agent-chat:limit.usage.pillUntil', { time: resets }),
32
- title,
33
- detail: i18next.t('agent-chat:limit.usage.resets', { time: resets })
34
- };
35
- }
36
- return { pill: i18next.t('agent-chat:limit.usage.pill'), title, detail: null };
37
- }
8
+ const limit = info.limit;
9
+ if (limit === undefined || info.activeTurnId !== null) {
10
+ return null;
11
+ }
12
+ const resumes = info.resumeAt === undefined ? null : formatMoment(info.resumeAt, now);
13
+ if (limit.kind === 'overload') {
14
+ return {
15
+ pill: resumes === null ? i18next.t('agent-chat:limit.overload.pill') : i18next.t('agent-chat:limit.overload.pillRetry', {
16
+ time: resumes
17
+ }),
18
+ title: i18next.t('agent-chat:limit.overload.title'),
19
+ detail: resumes === null ? i18next.t('agent-chat:limit.overload.sendAgain') : i18next.t('agent-chat:limit.overload.retries', {
20
+ time: resumes
21
+ })
22
+ };
23
+ }
24
+ const title = i18next.t('agent-chat:limit.usage.title');
25
+ if (resumes !== null) {
26
+ return {
27
+ pill: i18next.t('agent-chat:limit.usage.pillResumes', {
28
+ time: resumes
29
+ }),
30
+ title,
31
+ detail: i18next.t('agent-chat:limit.usage.resumes', {
32
+ time: resumes
33
+ })
34
+ };
35
+ }
36
+ if (limit.resetsAt !== undefined) {
37
+ const resets = formatMoment(limit.resetsAt, now);
38
+ return {
39
+ pill: i18next.t('agent-chat:limit.usage.pillUntil', {
40
+ time: resets
41
+ }),
42
+ title,
43
+ detail: i18next.t('agent-chat:limit.usage.resets', {
44
+ time: resets
45
+ })
46
+ };
47
+ }
48
+ return {
49
+ pill: i18next.t('agent-chat:limit.usage.pill'),
50
+ title,
51
+ detail: null
52
+ };
53
+ }
@@ -17,11 +17,13 @@ export interface PickerCurrent {
17
17
  provider: AgentKind;
18
18
  model: string;
19
19
  }
20
+ export type FavoritesOf = (kind: AgentKind) => ReadonlySet<string>;
20
21
  export declare function modelsByVendor(models: ModelInfo[]): ModelInfo[];
21
- export declare function shortlistOf(kind: AgentKind, models: ModelInfo[], current: PickerCurrent | null): ModelInfo[] | null;
22
+ export declare function favoritesFirst(models: ModelInfo[], favorites: ReadonlySet<string>): ModelInfo[];
23
+ export declare function shortlistOf(kind: AgentKind, models: ModelInfo[], current: PickerCurrent | null, favorites?: ReadonlySet<string>): ModelInfo[] | null;
22
24
  export declare function wantsModelSearch(providers: readonly ProviderInfo[]): boolean;
23
- export declare function searchModels(providers: readonly ProviderInfo[], query: string): Array<{
25
+ export declare function searchModels(providers: readonly ProviderInfo[], query: string, favoritesOf?: FavoritesOf): Array<{
24
26
  entry: ProviderInfo;
25
27
  models: ModelInfo[];
26
28
  }>;
27
- export declare function pickerEntriesOf(providers: readonly ProviderInfo[], query: string, legacyOpen: boolean, expanded?: ReadonlySet<AgentKind>, current?: PickerCurrent | null): PickerEntry[];
29
+ export declare function pickerEntriesOf(providers: readonly ProviderInfo[], query: string, legacyOpen: boolean, expanded?: ReadonlySet<AgentKind>, current?: PickerCurrent | null, favoritesOf?: FavoritesOf): PickerEntry[];