@adecore/agents-react 0.31.12 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/AccountDot.js +57 -6
  3. package/dist/agents/AgentIcon.js +88 -12
  4. package/dist/agents/ModelOptionControl.js +153 -18
  5. package/dist/agents/ProviderLogo.js +49 -4
  6. package/dist/agents/account-limits.js +17 -14
  7. package/dist/agents/accounts.js +99 -67
  8. package/dist/agents/agent-marks.js +5 -3
  9. package/dist/agents/model-name.js +42 -31
  10. package/dist/agents/model-options.js +8 -8
  11. package/dist/agents/model-requirement.js +17 -14
  12. package/dist/agents/option-words.d.ts +7 -0
  13. package/dist/agents/option-words.js +35 -0
  14. package/dist/agents/provider-paths.js +6 -6
  15. package/dist/agents/status-look.js +32 -12
  16. package/dist/chat/account-choice.d.ts +13 -0
  17. package/dist/chat/account-choice.js +90 -20
  18. package/dist/chat/actions.js +126 -59
  19. package/dist/chat/activity.js +5 -5
  20. package/dist/chat/attachments.js +74 -53
  21. package/dist/chat/bookmarks.js +58 -48
  22. package/dist/chat/chat-client.js +344 -263
  23. package/dist/chat/chat-references.js +3 -3
  24. package/dist/chat/composer-effort.d.ts +5 -0
  25. package/dist/chat/composer-effort.js +26 -0
  26. package/dist/chat/composer-send.js +13 -13
  27. package/dist/chat/drafts.js +115 -79
  28. package/dist/chat/forks.js +81 -24
  29. package/dist/chat/guards.js +15 -43
  30. package/dist/chat/index.d.ts +3 -1
  31. package/dist/chat/index.js +3 -2
  32. package/dist/chat/logic/ansi.js +170 -167
  33. package/dist/chat/logic/answers.js +2 -2
  34. package/dist/chat/logic/bookmarks.js +19 -19
  35. package/dist/chat/logic/command-looks.js +138 -96
  36. package/dist/chat/logic/context-usage.js +13 -9
  37. package/dist/chat/logic/continue-after-stop.js +15 -19
  38. package/dist/chat/logic/effort.d.ts +14 -0
  39. package/dist/chat/logic/effort.js +34 -0
  40. package/dist/chat/logic/embedded-code.js +387 -326
  41. package/dist/chat/logic/fork.js +134 -110
  42. package/dist/chat/logic/generated-image.js +54 -23
  43. package/dist/chat/logic/goal.js +28 -20
  44. package/dist/chat/logic/handback.js +6 -6
  45. package/dist/chat/logic/json.js +2 -2
  46. package/dist/chat/logic/limit.js +46 -30
  47. package/dist/chat/logic/picker-entries.d.ts +5 -3
  48. package/dist/chat/logic/picker-entries.js +83 -43
  49. package/dist/chat/logic/resume-compaction.d.ts +14 -1
  50. package/dist/chat/logic/resume-compaction.js +93 -24
  51. package/dist/chat/logic/scrubber.js +188 -136
  52. package/dist/chat/logic/thought.js +13 -16
  53. package/dist/chat/logic/thread-cards.js +60 -48
  54. package/dist/chat/logic/timeline-copy.js +30 -38
  55. package/dist/chat/logic/timeline-target.js +92 -63
  56. package/dist/chat/logic/timeline.js +499 -355
  57. package/dist/chat/logic/tool-catalog.js +54 -34
  58. package/dist/chat/logic/tools.js +106 -82
  59. package/dist/chat/logic/visual-height.js +18 -18
  60. package/dist/chat/logic/visual-viewport.js +6 -3
  61. package/dist/chat/logic/welcome.js +9 -9
  62. package/dist/chat/logic/workflow.d.ts +10 -0
  63. package/dist/chat/logic/workflow.js +130 -32
  64. package/dist/chat/mentions.js +149 -109
  65. package/dist/chat/persisted-json.js +51 -54
  66. package/dist/chat/preferences.d.ts +4 -0
  67. package/dist/chat/preferences.js +162 -84
  68. package/dist/chat/prompt-hold.js +9 -9
  69. package/dist/chat/quote.js +21 -30
  70. package/dist/chat/reading-width.js +12 -10
  71. package/dist/chat/recent-messages.js +34 -21
  72. package/dist/chat/resume-compaction-dismissals.js +25 -5
  73. package/dist/chat/runtime-modes.js +3 -3
  74. package/dist/chat/send-key.js +11 -7
  75. package/dist/chat/stash.js +89 -69
  76. package/dist/chat/subagent-conversation.js +181 -139
  77. package/dist/chat/subagent-list.js +65 -67
  78. package/dist/chat/subagent-support.js +12 -7
  79. package/dist/chat/subagent-view.js +132 -44
  80. package/dist/chat/thumbnails.js +88 -60
  81. package/dist/chat/timeline-flash.js +24 -12
  82. package/dist/chat/timeline-scroll.js +116 -86
  83. package/dist/chat/ui/AccountPill.js +126 -15
  84. package/dist/chat/ui/AnsiOutput.js +62 -6
  85. package/dist/chat/ui/BookmarkMarker.js +231 -41
  86. package/dist/chat/ui/BookmarkSubmenu.js +165 -18
  87. package/dist/chat/ui/ChatActivity.js +649 -70
  88. package/dist/chat/ui/ChatReferenceChip.js +104 -9
  89. package/dist/chat/ui/CodeBlock.js +132 -58
  90. package/dist/chat/ui/Composer.js +866 -132
  91. package/dist/chat/ui/ComposerInput.js +309 -120
  92. package/dist/chat/ui/DiffPool.js +75 -14
  93. package/dist/chat/ui/EditDiff.js +160 -21
  94. package/dist/chat/ui/FadingWords.js +32 -3
  95. package/dist/chat/ui/GoalDock.js +235 -42
  96. package/dist/chat/ui/ImageView.js +617 -61
  97. package/dist/chat/ui/LimitState.js +446 -72
  98. package/dist/chat/ui/Markdown.js +991 -173
  99. package/dist/chat/ui/MermaidBlock.js +285 -79
  100. package/dist/chat/ui/MessageActions.js +251 -39
  101. package/dist/chat/ui/ModelMarks.js +55 -5
  102. package/dist/chat/ui/Pickers.js +664 -113
  103. package/dist/chat/ui/PromptComposer.js +281 -51
  104. package/dist/chat/ui/QuoteButton.js +151 -57
  105. package/dist/chat/ui/ResumeCompactionDock.d.ts +6 -2
  106. package/dist/chat/ui/ResumeCompactionDock.js +141 -6
  107. package/dist/chat/ui/RowTime.js +59 -5
  108. package/dist/chat/ui/RunSettings.js +1744 -154
  109. package/dist/chat/ui/Scrubber.js +517 -88
  110. package/dist/chat/ui/ShellCommand.js +183 -107
  111. package/dist/chat/ui/SubagentControls.js +212 -24
  112. package/dist/chat/ui/SubagentInfo.js +170 -13
  113. package/dist/chat/ui/SubagentStopButton.js +115 -24
  114. package/dist/chat/ui/SubagentTimeline.js +357 -91
  115. package/dist/chat/ui/Timeline.js +988 -476
  116. package/dist/chat/ui/TimelineMenu.js +552 -37
  117. package/dist/chat/ui/UnifiedDiff.js +234 -27
  118. package/dist/chat/ui/UploadThumb.js +37 -7
  119. package/dist/chat/ui/VisualDialogs.js +251 -20
  120. package/dist/chat/ui/VisualFrame.js +321 -95
  121. package/dist/chat/ui/Welcome.js +72 -7
  122. package/dist/chat/ui/chips.js +1 -1
  123. package/dist/chat/ui/code-lines.js +36 -36
  124. package/dist/chat/ui/code-streaming.js +1 -1
  125. package/dist/chat/ui/code-theme.js +7 -7
  126. package/dist/chat/ui/composer/ComposerControls.js +329 -21
  127. package/dist/chat/ui/composer/ComposerMenu.js +358 -30
  128. package/dist/chat/ui/composer/DraftParts.js +185 -11
  129. package/dist/chat/ui/composer/QueuedMessages.js +138 -13
  130. package/dist/chat/ui/composer/chips.js +29 -19
  131. package/dist/chat/ui/composer/editor.js +79 -63
  132. package/dist/chat/ui/composer/insert.js +26 -12
  133. package/dist/chat/ui/composer/key-handler.js +180 -127
  134. package/dist/chat/ui/composer/keys.js +90 -73
  135. package/dist/chat/ui/composer/menu-aria.js +18 -9
  136. package/dist/chat/ui/composer/placeholder.js +78 -31
  137. package/dist/chat/ui/composer/surface.js +13 -37
  138. package/dist/chat/ui/composer/use-chat-controls.js +230 -90
  139. package/dist/chat/ui/composer/use-compaction-offer.js +50 -18
  140. package/dist/chat/ui/composer/use-composer-draft.js +65 -34
  141. package/dist/chat/ui/composer/use-composer-menus.js +478 -193
  142. package/dist/chat/ui/composer/use-composer-submit.js +251 -109
  143. package/dist/chat/ui/composer/use-continuable-turn.js +33 -6
  144. package/dist/chat/ui/composer/use-draft-files.js +245 -93
  145. package/dist/chat/ui/composer/use-effort-stepper.d.ts +13 -0
  146. package/dist/chat/ui/composer/use-effort-stepper.js +88 -0
  147. package/dist/chat/ui/composer/use-notice.js +61 -16
  148. package/dist/chat/ui/composer/use-pending-requests.js +38 -17
  149. package/dist/chat/ui/composer/use-prompt-history.js +117 -45
  150. package/dist/chat/ui/composer/use-prompt-hold.js +119 -35
  151. package/dist/chat/ui/composer/use-take-back.js +94 -72
  152. package/dist/chat/ui/diff/ApprovalReview.js +101 -23
  153. package/dist/chat/ui/diff/DiffFallbackBoundary.js +21 -13
  154. package/dist/chat/ui/diff/DiffOmitted.js +56 -6
  155. package/dist/chat/ui/diff/DiffStack.js +92 -8
  156. package/dist/chat/ui/diff/DiffUnavailable.js +56 -6
  157. package/dist/chat/ui/diff/EditorEditDiff.js +263 -51
  158. package/dist/chat/ui/diff/EditorPatchDiff.js +39 -14
  159. package/dist/chat/ui/diff/LegacyDiffPool.js +27 -10
  160. package/dist/chat/ui/diff/LegacyEditDiff.js +97 -20
  161. package/dist/chat/ui/diff/LegacyUnifiedDiff.js +172 -42
  162. package/dist/chat/ui/diff/RawDiff.js +65 -5
  163. package/dist/chat/ui/diff/ReviewDiff.js +77 -5
  164. package/dist/chat/ui/diff/diff-props.js +1 -1
  165. package/dist/chat/ui/diff/diff-source-budget.js +46 -35
  166. package/dist/chat/ui/diff/editor-edit-model.js +18 -14
  167. package/dist/chat/ui/diff/review-plan.js +63 -40
  168. package/dist/chat/ui/diff/review-settle.js +24 -9
  169. package/dist/chat/ui/diff/syntax-runtime.js +236 -201
  170. package/dist/chat/ui/diff/use-review-stack.js +146 -25
  171. package/dist/chat/ui/diff-syntax.js +70 -58
  172. package/dist/chat/ui/diff-theme.js +31 -12
  173. package/dist/chat/ui/file-links.js +39 -10
  174. package/dist/chat/ui/find-reveal.js +29 -8
  175. package/dist/chat/ui/full-diff.js +17 -12
  176. package/dist/chat/ui/highlighter.js +143 -113
  177. package/dist/chat/ui/icons.js +16 -7
  178. package/dist/chat/ui/index.js +1 -1
  179. package/dist/chat/ui/intelligent-ui/UiBlockFrame.js +556 -82
  180. package/dist/chat/ui/intelligent-ui/UiFallbackPart.js +73 -5
  181. package/dist/chat/ui/intelligent-ui/UiReply.js +666 -262
  182. package/dist/chat/ui/intelligent-ui/block-local.js +59 -31
  183. package/dist/chat/ui/intelligent-ui/chart-data.js +77 -67
  184. package/dist/chat/ui/intelligent-ui/node-text.js +77 -91
  185. package/dist/chat/ui/intelligent-ui/registry.js +46 -46
  186. package/dist/chat/ui/intelligent-ui/render-context.js +1 -1
  187. package/dist/chat/ui/intelligent-ui/renderers/base-land.js +1 -1
  188. package/dist/chat/ui/intelligent-ui/renderers/binding.js +3 -3
  189. package/dist/chat/ui/intelligent-ui/renderers/chart.js +1223 -123
  190. package/dist/chat/ui/intelligent-ui/renderers/choices.js +312 -34
  191. package/dist/chat/ui/intelligent-ui/renderers/content.js +1241 -86
  192. package/dist/chat/ui/intelligent-ui/renderers/data.js +619 -54
  193. package/dist/chat/ui/intelligent-ui/renderers/inputs.js +868 -67
  194. package/dist/chat/ui/intelligent-ui/renderers/links.js +366 -62
  195. package/dist/chat/ui/intelligent-ui/renderers/map-slots.js +118 -60
  196. package/dist/chat/ui/intelligent-ui/renderers/map-style.js +85 -78
  197. package/dist/chat/ui/intelligent-ui/renderers/map-view.js +282 -217
  198. package/dist/chat/ui/intelligent-ui/renderers/map.js +621 -69
  199. package/dist/chat/ui/intelligent-ui/renderers/place-point.js +15 -8
  200. package/dist/chat/ui/intelligent-ui/renderers/structure.js +262 -20
  201. package/dist/chat/ui/intelligent-ui/renderers/text.js +674 -49
  202. package/dist/chat/ui/intelligent-ui/reply-parts.js +24 -15
  203. package/dist/chat/ui/intelligent-ui/table-data.js +97 -57
  204. package/dist/chat/ui/intelligent-ui/tones.js +31 -31
  205. package/dist/chat/ui/intelligent-ui/use-in-view.js +30 -12
  206. package/dist/chat/ui/intelligent-ui/use-later.js +28 -13
  207. package/dist/chat/ui/intelligent-ui/use-truncated.js +45 -21
  208. package/dist/chat/ui/intelligent-ui/use-ui-links.js +296 -109
  209. package/dist/chat/ui/intelligent-ui/use-ui-queries.js +256 -246
  210. package/dist/chat/ui/markdown-blocks.js +296 -262
  211. package/dist/chat/ui/mermaid.d.ts +8 -20
  212. package/dist/chat/ui/mermaid.js +47 -84
  213. package/dist/chat/ui/quote-selection.js +32 -29
  214. package/dist/chat/ui/rehype-chips.js +35 -23
  215. package/dist/chat/ui/rehype-fade.js +28 -17
  216. package/dist/chat/ui/remark-html-as-text.js +22 -15
  217. package/dist/chat/ui/reply-context.js +1 -1
  218. package/dist/chat/ui/reveal.js +161 -72
  219. package/dist/chat/ui/rows/ForksRow.js +226 -24
  220. package/dist/chat/ui/rows/GeneratedImageRow.js +541 -87
  221. package/dist/chat/ui/rows/MessageRows.js +1706 -159
  222. package/dist/chat/ui/rows/RowContainer.js +57 -7
  223. package/dist/chat/ui/rows/Rows.js +463 -54
  224. package/dist/chat/ui/rows/SubagentRow.js +577 -60
  225. package/dist/chat/ui/rows/TaskRow.js +359 -40
  226. package/dist/chat/ui/rows/VisualRow.js +233 -11
  227. package/dist/chat/ui/rows/WorkRows.d.ts +3 -0
  228. package/dist/chat/ui/rows/WorkRows.js +1945 -164
  229. package/dist/chat/ui/rows/WorkflowRow.js +756 -37
  230. package/dist/chat/ui/rows/row-rhythm.js +27 -17
  231. package/dist/chat/ui/theme-watch.js +26 -23
  232. package/dist/chat/ui/timestamp-format.js +4 -1
  233. package/dist/chat/ui/use-diff-source-tokens.js +70 -34
  234. package/dist/chat/ui/useToggleSet.js +51 -19
  235. package/dist/chat/ui/visual-theme.js +153 -128
  236. package/dist/chat/visual-bridge.js +123 -123
  237. package/dist/chat/visual-viewport.js +94 -83
  238. package/dist/chat/visuals.js +13 -5
  239. package/dist/host-hooks.d.ts +29 -0
  240. package/dist/host-hooks.js +78 -0
  241. package/dist/host.js +120 -48
  242. package/dist/index.js +1 -1
  243. package/dist/lazy.js +38 -32
  244. package/dist/locales/en/agent-chat.d.ts +42 -0
  245. package/dist/locales/en/agent-chat.js +755 -713
  246. package/dist/locales/en/agent-prompts.js +42 -42
  247. package/dist/locales/en/agent-providers.d.ts +1 -0
  248. package/dist/locales/en/agent-providers.js +166 -165
  249. package/dist/locales/en/agent-usage.d.ts +6 -0
  250. package/dist/locales/en/agent-usage.js +129 -123
  251. package/dist/locales/nl/agent-chat.d.ts +42 -0
  252. package/dist/locales/nl/agent-chat.js +755 -713
  253. package/dist/locales/nl/agent-prompts.js +42 -42
  254. package/dist/locales/nl/agent-providers.d.ts +1 -0
  255. package/dist/locales/nl/agent-providers.js +166 -165
  256. package/dist/locales/nl/agent-usage.d.ts +6 -0
  257. package/dist/locales/nl/agent-usage.js +129 -123
  258. package/dist/locales.js +14 -14
  259. package/dist/mounted-registry.js +31 -30
  260. package/dist/port-transport.js +122 -111
  261. package/dist/prompts/index.js +1 -1
  262. package/dist/prompts/logic/focus.js +15 -14
  263. package/dist/prompts/logic/keys.js +93 -59
  264. package/dist/prompts/logic/prompts.js +27 -14
  265. package/dist/prompts/logic/subjects.js +60 -46
  266. package/dist/prompts/logic/useFocusAfterAnswer.js +60 -20
  267. package/dist/prompts/logic/usePromptSession.js +88 -77
  268. package/dist/prompts/ui/ApprovalBody.js +246 -27
  269. package/dist/prompts/ui/PromptActions.js +215 -9
  270. package/dist/prompts/ui/PromptCard.js +215 -36
  271. package/dist/prompts/ui/PromptView.js +372 -34
  272. package/dist/prompts/ui/QuestionBody.js +269 -73
  273. package/dist/providers/AccountColors.js +36 -5
  274. package/dist/providers/AccountDetail.js +683 -50
  275. package/dist/providers/AccountVariables.js +139 -32
  276. package/dist/providers/AddAccountForm.js +125 -38
  277. package/dist/providers/CliDetail.js +343 -36
  278. package/dist/providers/InstallPage.js +644 -59
  279. package/dist/providers/ProviderList.d.ts +2 -1
  280. package/dist/providers/ProviderList.js +215 -23
  281. package/dist/providers/ProvidersPane.d.ts +4 -2
  282. package/dist/providers/ProvidersPane.js +244 -64
  283. package/dist/providers/account-actions.js +54 -30
  284. package/dist/providers/index.js +1 -1
  285. package/dist/providers/install-steps.js +12 -9
  286. package/dist/providers/pane-target.d.ts +3 -0
  287. package/dist/providers/pane-target.js +34 -13
  288. package/dist/providers/parts.js +62 -12
  289. package/dist/providers/provider-abilities.js +5 -5
  290. package/dist/providers/provider-groups.js +75 -40
  291. package/dist/providers/variables.js +73 -39
  292. package/dist/scope.js +6 -6
  293. package/dist/settings/sections.js +18 -18
  294. package/dist/state/chats.js +404 -192
  295. package/dist/state/index.js +1 -1
  296. package/dist/state/provider-accounts.js +70 -47
  297. package/dist/state/providers.js +45 -16
  298. package/dist/state/usage.js +154 -77
  299. package/dist/storage.js +69 -68
  300. package/dist/testing/index.js +1 -1
  301. package/dist/testing/prompts.js +105 -67
  302. package/dist/transport.js +10 -10
  303. package/dist/ui/PlainTextarea.js +27 -3
  304. package/dist/usage/LimitsList.js +646 -40
  305. package/dist/usage/UsageBreakdown.js +879 -38
  306. package/dist/usage/UsageChart.js +311 -32
  307. package/dist/usage/UsageDialog.js +46 -4
  308. package/dist/usage/UsageLimits.js +467 -34
  309. package/dist/usage/UsageLimitsCard.js +95 -11
  310. package/dist/usage/UsagePage.js +817 -96
  311. package/dist/usage/UsagePane.js +164 -10
  312. package/dist/usage/UsageSummary.js +151 -6
  313. package/dist/usage/UsageTiles.js +164 -14
  314. package/dist/usage/format.js +32 -32
  315. package/dist/usage/index.d.ts +1 -1
  316. package/dist/usage/index.js +2 -1
  317. package/dist/usage/limit-groups.d.ts +2 -0
  318. package/dist/usage/limit-groups.js +77 -59
  319. package/dist/usage/limits.js +78 -43
  320. package/dist/usage/money.js +20 -4
  321. package/dist/usage/summary.js +85 -64
  322. package/package.json +9 -9
  323. package/src/agents/ModelOptionControl.tsx +3 -1
  324. package/src/agents/option-words.ts +27 -0
  325. package/src/chat/account-choice.ts +41 -1
  326. package/src/chat/composer-effort.ts +32 -0
  327. package/src/chat/forks.ts +4 -5
  328. package/src/chat/index.ts +3 -1
  329. package/src/chat/logic/effort.ts +32 -0
  330. package/src/chat/logic/picker-entries.ts +45 -10
  331. package/src/chat/logic/resume-compaction.ts +95 -17
  332. package/src/chat/logic/timeline.ts +11 -3
  333. package/src/chat/logic/workflow.ts +86 -4
  334. package/src/chat/preferences.ts +35 -0
  335. package/src/chat/subagent-view.ts +2 -3
  336. package/src/chat/ui/AnsiOutput.tsx +1 -2
  337. package/src/chat/ui/BookmarkSubmenu.tsx +3 -3
  338. package/src/chat/ui/ChatActivity.tsx +14 -22
  339. package/src/chat/ui/ChatReferenceChip.tsx +2 -3
  340. package/src/chat/ui/Composer.tsx +15 -7
  341. package/src/chat/ui/EditDiff.tsx +2 -3
  342. package/src/chat/ui/LimitState.tsx +2 -2
  343. package/src/chat/ui/Markdown.tsx +10 -8
  344. package/src/chat/ui/MermaidBlock.tsx +57 -49
  345. package/src/chat/ui/Pickers.tsx +49 -29
  346. package/src/chat/ui/PromptComposer.tsx +7 -9
  347. package/src/chat/ui/ResumeCompactionDock.tsx +16 -4
  348. package/src/chat/ui/RunSettings.tsx +67 -28
  349. package/src/chat/ui/Scrubber.tsx +3 -3
  350. package/src/chat/ui/ShellCommand.tsx +2 -0
  351. package/src/chat/ui/SubagentInfo.tsx +2 -3
  352. package/src/chat/ui/SubagentTimeline.tsx +12 -16
  353. package/src/chat/ui/Timeline.tsx +6 -6
  354. package/src/chat/ui/UnifiedDiff.tsx +3 -4
  355. package/src/chat/ui/VisualFrame.tsx +5 -8
  356. package/src/chat/ui/code-theme.ts +4 -4
  357. package/src/chat/ui/composer/placeholder.ts +2 -2
  358. package/src/chat/ui/composer/use-compaction-offer.ts +36 -16
  359. package/src/chat/ui/composer/use-composer-menus.ts +4 -9
  360. package/src/chat/ui/composer/use-composer-submit.ts +2 -1
  361. package/src/chat/ui/composer/use-effort-stepper.ts +56 -0
  362. package/src/chat/ui/composer/use-notice.ts +2 -2
  363. package/src/chat/ui/diff/EditorEditDiff.tsx +9 -13
  364. package/src/chat/ui/diff/LegacyEditDiff.tsx +12 -17
  365. package/src/chat/ui/diff/LegacyUnifiedDiff.tsx +13 -21
  366. package/src/chat/ui/diff/use-review-stack.ts +4 -4
  367. package/src/chat/ui/diff-theme.ts +3 -3
  368. package/src/chat/ui/file-links.ts +2 -2
  369. package/src/chat/ui/intelligent-ui/UiReply.tsx +2 -0
  370. package/src/chat/ui/intelligent-ui/renderers/chart.tsx +3 -3
  371. package/src/chat/ui/intelligent-ui/renderers/content.tsx +5 -6
  372. package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +2 -1
  373. package/src/chat/ui/intelligent-ui/renderers/map.tsx +2 -1
  374. package/src/chat/ui/intelligent-ui/use-truncated.ts +16 -19
  375. package/src/chat/ui/intelligent-ui/use-ui-links.ts +3 -3
  376. package/src/chat/ui/mermaid.ts +52 -96
  377. package/src/chat/ui/rows/ForksRow.tsx +3 -5
  378. package/src/chat/ui/rows/GeneratedImageRow.tsx +2 -1
  379. package/src/chat/ui/rows/MessageRows.tsx +12 -21
  380. package/src/chat/ui/rows/SubagentRow.tsx +3 -3
  381. package/src/chat/ui/rows/TaskRow.tsx +1 -1
  382. package/src/chat/ui/rows/WorkRows.tsx +11 -6
  383. package/src/chat/ui/rows/WorkflowRow.tsx +144 -54
  384. package/src/chat/ui/useToggleSet.ts +15 -18
  385. package/src/chat/ui/visual-theme.ts +2 -3
  386. package/src/host-hooks.ts +113 -0
  387. package/src/lazy.tsx +2 -0
  388. package/src/locales/en/agent-chat.ts +142 -108
  389. package/src/locales/en/agent-prompts.ts +7 -7
  390. package/src/locales/en/agent-providers.ts +35 -34
  391. package/src/locales/en/agent-usage.ts +26 -20
  392. package/src/locales/nl/agent-chat.ts +134 -100
  393. package/src/locales/nl/agent-prompts.ts +5 -5
  394. package/src/locales/nl/agent-providers.ts +33 -32
  395. package/src/locales/nl/agent-usage.ts +25 -20
  396. package/src/providers/CliDetail.tsx +2 -1
  397. package/src/providers/InstallPage.tsx +2 -4
  398. package/src/providers/ProviderList.tsx +12 -2
  399. package/src/providers/ProvidersPane.tsx +45 -15
  400. package/src/providers/pane-target.ts +20 -4
  401. package/src/state/chats.ts +2 -2
  402. package/src/usage/LimitsList.tsx +12 -13
  403. package/src/usage/UsageBreakdown.tsx +17 -6
  404. package/src/usage/UsageLimits.tsx +2 -1
  405. package/src/usage/UsagePage.tsx +3 -3
  406. package/src/usage/index.ts +1 -1
  407. package/src/usage/limit-groups.ts +12 -0
  408. package/src/usage/limits.ts +2 -2
  409. package/src/usage/money.ts +1 -2
@@ -1,10 +1,11 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { c as _c } from "react/compiler-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  import { Tooltip } from '@adecore/ui';
4
4
  import { EMBEDDED_CODE_LIMIT, SHELL_LANGUAGE, embeddedCode } from '../logic/embedded-code.js';
5
5
  import { useChatHost } from '../../host.js';
6
6
  import { useCodeTheme } from './code-theme.js';
7
7
  import { tokenStyle, useCodeHighlighter } from './highlighter.js';
8
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
8
9
  const NO_CODE = [];
9
10
  const NO_NAMES = [];
10
11
  // Rows redraw often and a thread holds many commands, so each is tokenized once per theme.
@@ -12,110 +13,174 @@ const CACHE_LIMIT = 300;
12
13
  const cache = new Map();
13
14
  /* The runs of `code` in one language, placed at `offset`; a run in the theme's own foreground takes the color around it. */
14
15
  function runsOf(highlighter, code, language, theme, offset) {
15
- const fg = highlighter.getTheme(theme).fg.toLowerCase();
16
- const { tokens } = highlighter.codeToTokens(code, { lang: language, theme });
17
- return tokens.flat().map((token) => ({
18
- start: offset + token.offset,
19
- end: offset + token.offset + token.content.length,
20
- content: token.content,
21
- color: token.color?.toLowerCase() === fg ? undefined : token.color,
22
- fontStyle: token.fontStyle
23
- }));
16
+ const fg = highlighter.getTheme(theme).fg.toLowerCase();
17
+ const {
18
+ tokens
19
+ } = highlighter.codeToTokens(code, {
20
+ lang: language,
21
+ theme
22
+ });
23
+ return tokens.flat().map(token => ({
24
+ start: offset + token.offset,
25
+ end: offset + token.offset + token.content.length,
26
+ content: token.content,
27
+ color: token.color?.toLowerCase() === fg ? undefined : token.color,
28
+ fontStyle: token.fontStyle
29
+ }));
24
30
  }
25
31
  /* `base` with `[start, end)` cut out of it and `inner` in its place. */
26
32
  function overlay(base, start, end, inner) {
27
- const kept = [];
28
- for (const run of base) {
29
- if (run.end <= start || run.start >= end) {
30
- kept.push(run);
31
- continue;
32
- }
33
- if (run.start < start) {
34
- kept.push({ ...run, end: start, content: run.content.slice(0, start - run.start) });
35
- }
36
- if (run.end > end) {
37
- kept.push({ ...run, start: end, content: run.content.slice(end - run.start) });
38
- }
33
+ const kept = [];
34
+ for (const run of base) {
35
+ if (run.end <= start || run.start >= end) {
36
+ kept.push(run);
37
+ continue;
39
38
  }
40
- return [...kept, ...inner].sort((left, right) => left.start - right.start);
39
+ if (run.start < start) {
40
+ kept.push({
41
+ ...run,
42
+ end: start,
43
+ content: run.content.slice(0, start - run.start)
44
+ });
45
+ }
46
+ if (run.end > end) {
47
+ kept.push({
48
+ ...run,
49
+ start: end,
50
+ content: run.content.slice(end - run.start)
51
+ });
52
+ }
53
+ }
54
+ return [...kept, ...inner].sort((left, right) => left.start - right.start);
41
55
  }
42
56
  /* The code inside a command, with the stretches a caller knows the language of on top. */
43
57
  function codeIn(command, extra) {
44
- return extra.length === 0
45
- ? embeddedCode(command)
46
- : [...embeddedCode(command), ...extra].sort((left, right) => left.start - right.start || right.end - left.end);
58
+ return extra.length === 0 ? embeddedCode(command) : [...embeddedCode(command), ...extra].sort((left, right) => left.start - right.start || right.end - left.end);
47
59
  }
48
60
  function languagesOf(command, extra) {
49
- return new Set([SHELL_LANGUAGE, ...codeIn(command, extra).map(({ language }) => language)]);
61
+ return new Set([SHELL_LANGUAGE, ...codeIn(command, extra).map(({
62
+ language
63
+ }) => language)]);
50
64
  }
51
65
  /* The colored runs of a command, or null while a grammar or the theme is still on its way. */
52
66
  function highlight(command, extra, theme, code) {
53
- const key = `${theme}\n${extra.map(({ start, end, language }) => `${start}:${end}:${language}`).join(',')}\n${command}`;
54
- const known = cache.get(key);
55
- if (known !== undefined) {
56
- // Touched entries move to the end, so the oldest falls out first.
57
- cache.delete(key);
58
- cache.set(key, known);
59
- return known;
60
- }
61
- const embedded = codeIn(command, extra);
62
- const highlighter = code.ready([SHELL_LANGUAGE, ...embedded.map(({ language }) => language)], theme);
63
- if (highlighter === null) {
64
- return null;
65
- }
66
- let runs = runsOf(highlighter, command, code.language(SHELL_LANGUAGE), theme, 0);
67
- for (const part of embedded) {
68
- runs = overlay(runs, part.start, part.end, runsOf(highlighter, command.slice(part.start, part.end), code.language(part.language), theme, part.start));
69
- }
70
- cache.set(key, runs);
71
- if (cache.size > CACHE_LIMIT) {
72
- cache.delete(cache.keys().next().value);
73
- }
74
- return runs;
67
+ const key = `${theme}\n${extra.map(({
68
+ start,
69
+ end,
70
+ language
71
+ }) => `${start}:${end}:${language}`).join(',')}\n${command}`;
72
+ const known = cache.get(key);
73
+ if (known !== undefined) {
74
+ // Touched entries move to the end, so the oldest falls out first.
75
+ cache.delete(key);
76
+ cache.set(key, known);
77
+ return known;
78
+ }
79
+ const embedded = codeIn(command, extra);
80
+ const highlighter = code.ready([SHELL_LANGUAGE, ...embedded.map(({
81
+ language
82
+ }) => language)], theme);
83
+ if (highlighter === null) {
84
+ return null;
85
+ }
86
+ let runs = runsOf(highlighter, command, code.language(SHELL_LANGUAGE), theme, 0);
87
+ for (const part of embedded) {
88
+ runs = overlay(runs, part.start, part.end, runsOf(highlighter, command.slice(part.start, part.end), code.language(part.language), theme, part.start));
89
+ }
90
+ cache.set(key, runs);
91
+ if (cache.size > CACHE_LIMIT) {
92
+ cache.delete(cache.keys().next().value);
93
+ }
94
+ return runs;
75
95
  }
76
96
  /* `command[from, to)` in its colors, or as it is while there are none. */
77
97
  function draw(command, runs, from, to) {
78
- if (runs === null) {
79
- return [command.slice(from, to)];
98
+ if (runs === null) {
99
+ return [command.slice(from, to)];
100
+ }
101
+ const parts = [];
102
+ let at = from;
103
+ for (const run of runs) {
104
+ if (run.end <= from || run.start >= to) {
105
+ continue;
80
106
  }
81
- const parts = [];
82
- let at = from;
83
- for (const run of runs) {
84
- if (run.end <= from || run.start >= to) {
85
- continue;
86
- }
87
- const start = Math.max(run.start, from);
88
- const end = Math.min(run.end, to);
89
- // Shiki leaves the line breaks out of its tokens; they come from the command itself.
90
- if (start > at) {
91
- parts.push(command.slice(at, start));
92
- }
93
- const content = run.content.slice(start - run.start, end - run.start);
94
- const style = tokenStyle(run);
95
- parts.push(style === undefined ? (content) : (_jsx("span", { style: style, children: content }, start)));
96
- at = end;
107
+ const start = Math.max(run.start, from);
108
+ const end = Math.min(run.end, to);
109
+ // Shiki leaves the line breaks out of its tokens; they come from the command itself.
110
+ if (start > at) {
111
+ parts.push(command.slice(at, start));
97
112
  }
98
- if (at < to) {
99
- parts.push(command.slice(at, to));
100
- }
101
- return parts;
113
+ const content = run.content.slice(start - run.start, end - run.start);
114
+ const style = tokenStyle(run);
115
+ parts.push(style === undefined ? content : /*#__PURE__*/_jsx("span", {
116
+ style: style,
117
+ children: content
118
+ }, start));
119
+ at = end;
120
+ }
121
+ if (at < to) {
122
+ parts.push(command.slice(at, to));
123
+ }
124
+ return parts;
102
125
  }
103
126
  /* A word as its name, in a frame so it reads as a reference; the word itself stays in the text, for a find. */
104
- function Name({ named }) {
105
- return (_jsx(Tooltip, { label: named.word, children: _jsxs("span", { className: "inline-flex items-center gap-1 rounded bg-surface-hover px-1 font-sans text-text ring-1 ring-border ring-inset", children: [named.name.icon, named.name.name, _jsx("span", { className: "sr-only", children: named.word })] }) }));
127
+ function Name(t0) {
128
+ const $ = _c(9);
129
+ const {
130
+ named
131
+ } = t0;
132
+ let t1;
133
+ if ($[0] !== named.word) {
134
+ t1 = /*#__PURE__*/_jsx("span", {
135
+ className: "sr-only",
136
+ children: named.word
137
+ });
138
+ $[0] = named.word;
139
+ $[1] = t1;
140
+ } else {
141
+ t1 = $[1];
142
+ }
143
+ let t2;
144
+ if ($[2] !== named.name.icon || $[3] !== named.name.name || $[4] !== t1) {
145
+ t2 = /*#__PURE__*/_jsxs("span", {
146
+ className: "inline-flex items-center gap-1 rounded bg-surface-hover px-1 font-sans text-text ring-1 ring-border ring-inset",
147
+ children: [named.name.icon, named.name.name, t1]
148
+ });
149
+ $[2] = named.name.icon;
150
+ $[3] = named.name.name;
151
+ $[4] = t1;
152
+ $[5] = t2;
153
+ } else {
154
+ t2 = $[5];
155
+ }
156
+ let t3;
157
+ if ($[6] !== named.word || $[7] !== t2) {
158
+ t3 = /*#__PURE__*/_jsx(Tooltip, {
159
+ label: named.word,
160
+ children: t2
161
+ });
162
+ $[6] = named.word;
163
+ $[7] = t2;
164
+ $[8] = t3;
165
+ } else {
166
+ t3 = $[8];
167
+ }
168
+ return t3;
106
169
  }
107
170
  function drawNamed(command, runs, names) {
108
- const parts = [];
109
- let at = 0;
110
- for (const named of names) {
111
- if (named.start < at) {
112
- continue;
113
- }
114
- parts.push(...draw(command, runs, at, named.start), _jsx(Name, { named: named }, `name-${named.start}`));
115
- at = named.end;
171
+ const parts = [];
172
+ let at = 0;
173
+ for (const named of names) {
174
+ if (named.start < at) {
175
+ continue;
116
176
  }
117
- parts.push(...draw(command, runs, at, command.length));
118
- return parts;
177
+ parts.push(...draw(command, runs, at, named.start), /*#__PURE__*/_jsx(Name, {
178
+ named: named
179
+ }, `name-${named.start}`));
180
+ at = named.end;
181
+ }
182
+ parts.push(...draw(command, runs, at, command.length));
183
+ return parts;
119
184
  }
120
185
  /*
121
186
  * A shell command in the colors of the code theme, with the code inside it (a `bash -lc` script, a
@@ -123,28 +188,39 @@ function drawNamed(command, runs, names) {
123
188
  * changes no size; a command past the limit stays plain. `code` adds stretches whose language the
124
189
  * caller knows, and `names` draws words as the names a host gave them, both as offsets into `command`.
125
190
  */
126
- export function ShellCommand({ command, code = NO_CODE, names = NO_NAMES }) {
127
- const theme = useCodeTheme();
128
- const { custom } = useChatHost().code;
129
- const highlighter = useCodeHighlighter();
130
- // Bumped when a load settles, so the cache is asked again.
131
- const [, setLoads] = useState(0);
132
- const tooLong = command.length > EMBEDDED_CODE_LIMIT;
133
- const runs = tooLong ? null : highlight(command, code, theme, highlighter);
134
- useEffect(() => {
135
- if (runs !== null || tooLong) {
136
- return;
137
- }
138
- let cancelled = false;
139
- Promise.all([highlighter.loadTheme(theme, custom), ...[...languagesOf(command, code)].map((lang) => highlighter.loadLanguage(lang))])
140
- .then(() => !cancelled && setLoads((count) => count + 1))
141
- .catch(() => undefined);
142
- return () => {
143
- cancelled = true;
144
- };
145
- }, [highlighter, command, code, theme, custom, runs, tooLong]);
146
- if (names.length > 0) {
147
- return _jsx(_Fragment, { children: drawNamed(command, runs, names) });
191
+ export function ShellCommand({
192
+ command,
193
+ code = NO_CODE,
194
+ names = NO_NAMES
195
+ }) {
196
+ // The highlighter's cache fills in place; compiled, the runs it gave before its grammars loaded would stay.
197
+ 'use no memo';
198
+
199
+ const theme = useCodeTheme();
200
+ const {
201
+ custom
202
+ } = useChatHost().code;
203
+ const highlighter = useCodeHighlighter();
204
+ // Bumped when a load settles, so the cache is asked again.
205
+ const [, setLoads] = useState(0);
206
+ const tooLong = command.length > EMBEDDED_CODE_LIMIT;
207
+ const runs = tooLong ? null : highlight(command, code, theme, highlighter);
208
+ useEffect(() => {
209
+ if (runs !== null || tooLong) {
210
+ return;
148
211
  }
149
- return _jsx(_Fragment, { children: runs === null ? command : draw(command, runs, 0, command.length) });
150
- }
212
+ let cancelled = false;
213
+ Promise.all([highlighter.loadTheme(theme, custom), ...[...languagesOf(command, code)].map(lang => highlighter.loadLanguage(lang))]).then(() => !cancelled && setLoads(count => count + 1)).catch(() => undefined);
214
+ return () => {
215
+ cancelled = true;
216
+ };
217
+ }, [highlighter, command, code, theme, custom, runs, tooLong]);
218
+ if (names.length > 0) {
219
+ return /*#__PURE__*/_jsx(_Fragment, {
220
+ children: drawNamed(command, runs, names)
221
+ });
222
+ }
223
+ return /*#__PURE__*/_jsx(_Fragment, {
224
+ children: runs === null ? command : draw(command, runs, 0, command.length)
225
+ });
226
+ }
@@ -1,4 +1,4 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { c as _c } from "react/compiler-runtime";
2
2
  import { Fragment } from 'react';
3
3
  import clsx from 'clsx';
4
4
  import { useTranslation } from 'react-i18next';
@@ -6,33 +6,221 @@ import { ChevronRight, X } from 'lucide-react';
6
6
  import { breadcrumbOf, MAIN_AGENT, trailTo, useOpenableSubagents, useSubagentTrail } from '../subagent-view.js';
7
7
  import { SubagentStopButton } from './SubagentStopButton.js';
8
8
  import { Icon, IconButton } from '@adecore/ui';
9
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
10
  const CRUMB_LINK = 'truncate text-text-muted hover:text-text';
10
11
  /* The chat's own title in the bar; while a sub-agent stands in the chat's place, pressing it goes back to the main agent. */
11
- export function SubagentTitleCrumb({ chatId, className, children }) {
12
- const { trail, show } = useSubagentTrail(chatId);
13
- if (trail.length === 0) {
14
- return _jsx(_Fragment, { children: children });
12
+ export function SubagentTitleCrumb(t0) {
13
+ const $ = _c(10);
14
+ const {
15
+ chatId,
16
+ className,
17
+ children
18
+ } = t0;
19
+ const {
20
+ trail,
21
+ show
22
+ } = useSubagentTrail(chatId);
23
+ if (trail.length === 0) {
24
+ let t1;
25
+ if ($[0] !== children) {
26
+ t1 = /*#__PURE__*/_jsx(_Fragment, {
27
+ children: children
28
+ });
29
+ $[0] = children;
30
+ $[1] = t1;
31
+ } else {
32
+ t1 = $[1];
15
33
  }
16
- return (_jsx("button", { type: "button", className: clsx('flex min-w-0 items-center', className), onClick: () => show(MAIN_AGENT), children: children }));
34
+ return t1;
35
+ }
36
+ let t1;
37
+ if ($[2] !== className) {
38
+ t1 = clsx("flex min-w-0 items-center", className);
39
+ $[2] = className;
40
+ $[3] = t1;
41
+ } else {
42
+ t1 = $[3];
43
+ }
44
+ let t2;
45
+ if ($[4] !== show) {
46
+ t2 = () => show(MAIN_AGENT);
47
+ $[4] = show;
48
+ $[5] = t2;
49
+ } else {
50
+ t2 = $[5];
51
+ }
52
+ let t3;
53
+ if ($[6] !== children || $[7] !== t1 || $[8] !== t2) {
54
+ t3 = /*#__PURE__*/_jsx("button", {
55
+ type: "button",
56
+ className: t1,
57
+ onClick: t2,
58
+ children: children
59
+ });
60
+ $[6] = children;
61
+ $[7] = t1;
62
+ $[8] = t2;
63
+ $[9] = t3;
64
+ } else {
65
+ t3 = $[9];
66
+ }
67
+ return t3;
17
68
  }
18
69
  /* The way down to the sub-agent on screen, each step but the last a way back up. Nothing while the main agent is on screen. */
19
- export function SubagentBreadcrumb({ chatId, className }) {
20
- const { t } = useTranslation('agent-chat');
21
- const { trail, show } = useSubagentTrail(chatId);
22
- if (trail.length === 0) {
23
- return null;
24
- }
25
- return (_jsx("nav", { "aria-label": t('subagents.title'), className: clsx('flex min-w-0 items-center gap-1', className), children: breadcrumbOf(trail).map((step) => (_jsxs(Fragment, { children: [step.depth > 1 && _jsx(Icon, { icon: ChevronRight, size: 12, className: "shrink-0 text-text-faint" }), step.current ? (_jsx("span", { "aria-current": "page", className: "min-w-0 truncate text-text", children: step.label })) : (_jsx("button", { type: "button", className: clsx(CRUMB_LINK, 'min-w-0 shrink'), onClick: () => show(trailTo(trail, step.depth)), children: step.label }))] }, step.depth))) }));
70
+ export function SubagentBreadcrumb(t0) {
71
+ const $ = _c(11);
72
+ const {
73
+ chatId,
74
+ className
75
+ } = t0;
76
+ const {
77
+ t
78
+ } = useTranslation("agent-chat");
79
+ const {
80
+ trail,
81
+ show
82
+ } = useSubagentTrail(chatId);
83
+ if (trail.length === 0) {
84
+ return null;
85
+ }
86
+ let t1;
87
+ if ($[0] !== t) {
88
+ t1 = t("subagents.title");
89
+ $[0] = t;
90
+ $[1] = t1;
91
+ } else {
92
+ t1 = $[1];
93
+ }
94
+ let t2;
95
+ if ($[2] !== className) {
96
+ t2 = clsx("flex min-w-0 items-center gap-1", className);
97
+ $[2] = className;
98
+ $[3] = t2;
99
+ } else {
100
+ t2 = $[3];
101
+ }
102
+ let t3;
103
+ if ($[4] !== show || $[5] !== trail) {
104
+ t3 = breadcrumbOf(trail).map(step => /*#__PURE__*/_jsxs(Fragment, {
105
+ children: [step.depth > 1 && /*#__PURE__*/_jsx(Icon, {
106
+ icon: ChevronRight,
107
+ size: 12,
108
+ className: "shrink-0 text-text-faint"
109
+ }), step.current ? /*#__PURE__*/_jsx("span", {
110
+ "aria-current": "page",
111
+ className: "min-w-0 truncate text-text",
112
+ children: step.label
113
+ }) : /*#__PURE__*/_jsx("button", {
114
+ type: "button",
115
+ className: clsx(CRUMB_LINK, "min-w-0 shrink"),
116
+ onClick: () => show(trailTo(trail, step.depth)),
117
+ children: step.label
118
+ })]
119
+ }, step.depth));
120
+ $[4] = show;
121
+ $[5] = trail;
122
+ $[6] = t3;
123
+ } else {
124
+ t3 = $[6];
125
+ }
126
+ let t4;
127
+ if ($[7] !== t1 || $[8] !== t2 || $[9] !== t3) {
128
+ t4 = /*#__PURE__*/_jsx("nav", {
129
+ "aria-label": t1,
130
+ className: t2,
131
+ children: t3
132
+ });
133
+ $[7] = t1;
134
+ $[8] = t2;
135
+ $[9] = t3;
136
+ $[10] = t4;
137
+ } else {
138
+ t4 = $[10];
139
+ }
140
+ return t4;
26
141
  }
27
142
  /* Stops the sub-agent on screen where that is on offer, and closes it straight back to the main agent. */
28
- export function SubagentActions({ chatId }) {
29
- const { t } = useTranslation('agent-chat');
30
- const { trail, show } = useSubagentTrail(chatId);
31
- const subagents = useOpenableSubagents(chatId);
32
- if (trail.length === 0) {
33
- return null;
34
- }
35
- // Only a row of the chat's own thread can be stopped; a grandchild belongs to the sub-agent that opened it.
36
- const shown = trail.length === 1 ? subagents.find((item) => item.toolUseId === trail[0].toolUseId) : undefined;
37
- return (_jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [shown !== undefined && _jsx(SubagentStopButton, { chatId: chatId, item: shown, size: "sm" }), _jsx(IconButton, { icon: X, size: "sm", label: t('subagents.backToMain'), onClick: () => show(MAIN_AGENT) })] }));
38
- }
143
+ export function SubagentActions(t0) {
144
+ const $ = _c(17);
145
+ const {
146
+ chatId
147
+ } = t0;
148
+ const {
149
+ t
150
+ } = useTranslation("agent-chat");
151
+ const {
152
+ trail,
153
+ show
154
+ } = useSubagentTrail(chatId);
155
+ const subagents = useOpenableSubagents(chatId);
156
+ if (trail.length === 0) {
157
+ return null;
158
+ }
159
+ let t1;
160
+ if ($[0] !== subagents || $[1] !== trail[0] || $[2] !== trail.length) {
161
+ t1 = trail.length === 1 ? subagents.find(item => item.toolUseId === trail[0].toolUseId) : undefined;
162
+ $[0] = subagents;
163
+ $[1] = trail[0];
164
+ $[2] = trail.length;
165
+ $[3] = t1;
166
+ } else {
167
+ t1 = $[3];
168
+ }
169
+ const shown = t1;
170
+ let t2;
171
+ if ($[4] !== chatId || $[5] !== shown) {
172
+ t2 = shown !== undefined && /*#__PURE__*/_jsx(SubagentStopButton, {
173
+ chatId: chatId,
174
+ item: shown,
175
+ size: "sm"
176
+ });
177
+ $[4] = chatId;
178
+ $[5] = shown;
179
+ $[6] = t2;
180
+ } else {
181
+ t2 = $[6];
182
+ }
183
+ let t3;
184
+ if ($[7] !== t) {
185
+ t3 = t("subagents.backToMain");
186
+ $[7] = t;
187
+ $[8] = t3;
188
+ } else {
189
+ t3 = $[8];
190
+ }
191
+ let t4;
192
+ if ($[9] !== show) {
193
+ t4 = () => show(MAIN_AGENT);
194
+ $[9] = show;
195
+ $[10] = t4;
196
+ } else {
197
+ t4 = $[10];
198
+ }
199
+ let t5;
200
+ if ($[11] !== t3 || $[12] !== t4) {
201
+ t5 = /*#__PURE__*/_jsx(IconButton, {
202
+ icon: X,
203
+ size: "sm",
204
+ label: t3,
205
+ onClick: t4
206
+ });
207
+ $[11] = t3;
208
+ $[12] = t4;
209
+ $[13] = t5;
210
+ } else {
211
+ t5 = $[13];
212
+ }
213
+ let t6;
214
+ if ($[14] !== t2 || $[15] !== t5) {
215
+ t6 = /*#__PURE__*/_jsxs("div", {
216
+ className: "flex shrink-0 items-center gap-1",
217
+ children: [t2, t5]
218
+ });
219
+ $[14] = t2;
220
+ $[15] = t5;
221
+ $[16] = t6;
222
+ } else {
223
+ t6 = $[16];
224
+ }
225
+ return t6;
226
+ }