@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
@@ -6,95 +6,135 @@ const CACHE_LIMIT = 300;
6
6
  const caches = new WeakMap();
7
7
  /* The look of a simple command and what it says about it, or null when no look knows it. */
8
8
  function lookOf(command, looks) {
9
- const program = command.program;
10
- if (program === null) {
11
- return null;
9
+ const program = command.program;
10
+ if (program === null) {
11
+ return null;
12
+ }
13
+ const args = command.words.slice(program.index + 1).map(({
14
+ text
15
+ }) => text);
16
+ for (const look of looks) {
17
+ if (look.program !== program.name) {
18
+ continue;
12
19
  }
13
- const args = command.words.slice(program.index + 1).map(({ text }) => text);
14
- for (const look of looks) {
15
- if (look.program !== program.name) {
16
- continue;
17
- }
18
- const match = look.describe(args);
19
- if (match !== null) {
20
- return { look, match };
21
- }
20
+ const match = look.describe(args);
21
+ if (match !== null) {
22
+ return {
23
+ look,
24
+ match
25
+ };
22
26
  }
23
- return null;
27
+ }
28
+ return null;
24
29
  }
25
30
  /* The source of `word`, with its value cut past the fold; the body comes back as offsets into what is returned. */
26
31
  function foldedWord(source, word, fold) {
27
- const text = source.slice(word.start, word.end);
28
- const body = word.body === null ? null : { start: word.body.start - word.start, end: word.body.end - word.start };
29
- if (!fold) {
30
- return { text, body };
31
- }
32
- if (body !== null && body.end - body.start > FOLD_LENGTH) {
33
- const cut = body.start + FOLD_LENGTH;
34
- return { text: `${text.slice(0, cut)}…${text.slice(body.end)}`, body: { start: body.start, end: cut + 1 } };
35
- }
36
- if (body === null && text.length > FOLD_LENGTH) {
37
- return { text: `${text.slice(0, FOLD_LENGTH)}…`, body: null };
38
- }
39
- return { text, body };
32
+ const text = source.slice(word.start, word.end);
33
+ const body = word.body === null ? null : {
34
+ start: word.body.start - word.start,
35
+ end: word.body.end - word.start
36
+ };
37
+ if (!fold) {
38
+ return {
39
+ text,
40
+ body
41
+ };
42
+ }
43
+ if (body !== null && body.end - body.start > FOLD_LENGTH) {
44
+ const cut = body.start + FOLD_LENGTH;
45
+ return {
46
+ text: `${text.slice(0, cut)}…${text.slice(body.end)}`,
47
+ body: {
48
+ start: body.start,
49
+ end: cut + 1
50
+ }
51
+ };
52
+ }
53
+ if (body === null && text.length > FOLD_LENGTH) {
54
+ return {
55
+ text: `${text.slice(0, FOLD_LENGTH)}…`,
56
+ body: null
57
+ };
58
+ }
59
+ return {
60
+ text,
61
+ body
62
+ };
40
63
  }
41
64
  /* The detail of a command from the word the match names: its words with their spacing, a redirect or heredoc between them a single space. */
42
65
  function detailOf(source, command, match) {
43
- const first = command.program.index + 1 + Math.max(0, match.detailFrom);
44
- let detail = '';
45
- const code = [];
46
- const words = [];
47
- let previous = null;
48
- // The option the word before was, whose value this word may be.
49
- let option = null;
50
- for (const word of command.words.slice(first)) {
51
- if (previous !== null) {
52
- const gap = source.slice(previous.end, word.start);
53
- detail += /^[ \t]*$/.test(gap) ? gap : ' ';
54
- }
55
- const start = detail.length;
56
- const { text, body } = foldedWord(source, word, option !== null && match.fold?.includes(option) === true);
57
- const language = option === null ? undefined : match.languages?.[option];
58
- if (language !== undefined && body !== null && body.end > body.start) {
59
- code.push({ start: start + body.start, end: start + body.end, language });
60
- }
61
- detail += text;
62
- const isOption = word.text.startsWith('-') && word.text !== '-';
63
- if (!isOption) {
64
- words.push({ start, end: detail.length, text: word.text, option });
65
- }
66
- option = isOption ? word.text : null;
67
- previous = word;
66
+ const first = command.program.index + 1 + Math.max(0, match.detailFrom);
67
+ let detail = '';
68
+ const code = [];
69
+ const words = [];
70
+ let previous = null;
71
+ // The option the word before was, whose value this word may be.
72
+ let option = null;
73
+ for (const word of command.words.slice(first)) {
74
+ if (previous !== null) {
75
+ const gap = source.slice(previous.end, word.start);
76
+ detail += /^[ \t]*$/.test(gap) ? gap : ' ';
77
+ }
78
+ const start = detail.length;
79
+ const {
80
+ text,
81
+ body
82
+ } = foldedWord(source, word, option !== null && match.fold?.includes(option) === true);
83
+ const language = option === null ? undefined : match.languages?.[option];
84
+ if (language !== undefined && body !== null && body.end > body.start) {
85
+ code.push({
86
+ start: start + body.start,
87
+ end: start + body.end,
88
+ language
89
+ });
68
90
  }
69
- return { detail, code, words };
91
+ detail += text;
92
+ const isOption = word.text.startsWith('-') && word.text !== '-';
93
+ if (!isOption) {
94
+ words.push({
95
+ start,
96
+ end: detail.length,
97
+ text: word.text,
98
+ option
99
+ });
100
+ }
101
+ option = isOption ? word.text : null;
102
+ previous = word;
103
+ }
104
+ return {
105
+ detail,
106
+ code,
107
+ words
108
+ };
70
109
  }
71
110
  function read(command, looks) {
72
- let found = null;
73
- let more = 0;
74
- const others = [];
75
- for (const simple of shellCommands(command)) {
76
- const known = lookOf(simple, looks);
77
- if (known !== null && found === null) {
78
- found = { command: simple, ...known };
79
- }
80
- else if (known !== null) {
81
- more++;
82
- }
83
- else if (simple.program !== null && !others.includes(simple.program.name)) {
84
- others.push(simple.program.name);
85
- }
86
- }
87
- if (found === null) {
88
- return null;
111
+ let found = null;
112
+ let more = 0;
113
+ const others = [];
114
+ for (const simple of shellCommands(command)) {
115
+ const known = lookOf(simple, looks);
116
+ if (known !== null && found === null) {
117
+ found = {
118
+ command: simple,
119
+ ...known
120
+ };
121
+ } else if (known !== null) {
122
+ more++;
123
+ } else if (simple.program !== null && !others.includes(simple.program.name)) {
124
+ others.push(simple.program.name);
89
125
  }
90
- return {
91
- look: found.look,
92
- match: found.match,
93
- ...detailOf(command, found.command, found.match),
94
- others,
95
- more,
96
- heredoc: found.command.heredocs.length > 0
97
- };
126
+ }
127
+ if (found === null) {
128
+ return null;
129
+ }
130
+ return {
131
+ look: found.look,
132
+ match: found.match,
133
+ ...detailOf(command, found.command, found.match),
134
+ others,
135
+ more,
136
+ heredoc: found.command.heredocs.length > 0
137
+ };
98
138
  }
99
139
  /*
100
140
  * The first command of a shell line that one of `looks` knows, read as that look's tool: a program
@@ -102,22 +142,24 @@ function read(command, looks) {
102
142
  * `tool`. Null for a line no look knows, and for one past the length that is drawn without looking inside.
103
143
  */
104
144
  export function matchCommandLook(command, looks) {
105
- if (looks === undefined || looks.length === 0 || command.length > EMBEDDED_CODE_LIMIT || !looks.some(({ program }) => command.includes(program))) {
106
- return null;
107
- }
108
- let cache = caches.get(looks);
109
- if (cache === undefined) {
110
- cache = new Map();
111
- caches.set(looks, cache);
112
- }
113
- const known = cache.get(command);
114
- if (known !== undefined) {
115
- return known;
116
- }
117
- const run = read(command, looks);
118
- cache.set(command, run);
119
- if (cache.size > CACHE_LIMIT) {
120
- cache.delete(cache.keys().next().value);
121
- }
122
- return run;
123
- }
145
+ if (looks === undefined || looks.length === 0 || command.length > EMBEDDED_CODE_LIMIT || !looks.some(({
146
+ program
147
+ }) => command.includes(program))) {
148
+ return null;
149
+ }
150
+ let cache = caches.get(looks);
151
+ if (cache === undefined) {
152
+ cache = new Map();
153
+ caches.set(looks, cache);
154
+ }
155
+ const known = cache.get(command);
156
+ if (known !== undefined) {
157
+ return known;
158
+ }
159
+ const run = read(command, looks);
160
+ cache.set(command, run);
161
+ if (cache.size > CACHE_LIMIT) {
162
+ cache.delete(cache.keys().next().value);
163
+ }
164
+ return run;
165
+ }
@@ -1,21 +1,25 @@
1
1
  export const CONTEXT_OPTION = 'contextWindow';
2
2
  export const CONTEXT_PARTS = ['toolOutput', 'filesRead', 'conversation', 'system'];
3
3
  export function contextFraction(usage) {
4
- return usage.contextWindow ? Math.min(1, usage.contextTokens / usage.contextWindow) : 0;
4
+ return usage.contextWindow ? Math.min(1, usage.contextTokens / usage.contextWindow) : 0;
5
5
  }
6
6
  /* The stretches of the bar, in the legend's order; null from a host that does not estimate, which draws the plain bar. */
7
7
  export function contextSegments(usage) {
8
- const breakdown = usage.breakdown;
9
- if (!breakdown || usage.contextTokens === 0) {
10
- return null;
11
- }
12
- const whole = Math.max(usage.contextWindow ?? 0, usage.contextTokens);
13
- return CONTEXT_PARTS.map((part) => ({ part, tokens: breakdown[part], fraction: breakdown[part] / whole }));
8
+ const breakdown = usage.breakdown;
9
+ if (!breakdown || usage.contextTokens === 0) {
10
+ return null;
11
+ }
12
+ const whole = Math.max(usage.contextWindow ?? 0, usage.contextTokens);
13
+ return CONTEXT_PARTS.map(part => ({
14
+ part,
15
+ tokens: breakdown[part],
16
+ fraction: breakdown[part] / whole
17
+ }));
14
18
  }
15
19
  /*
16
20
  * The model's own knobs with the context window last: its details sit in the group right under it,
17
21
  * and a switch like Fast mode belongs with the reasoning choice above rather than below the size.
18
22
  */
19
23
  export function orderOptions(options) {
20
- return [...options.filter((option) => option.id !== CONTEXT_OPTION), ...options.filter((option) => option.id === CONTEXT_OPTION)];
21
- }
24
+ return [...options.filter(option => option.id !== CONTEXT_OPTION), ...options.filter(option => option.id === CONTEXT_OPTION)];
25
+ }
@@ -7,22 +7,18 @@ export const CONTINUE_PROMPT = 'Continue.';
7
7
  * and a request that waits on a person comes first.
8
8
  */
9
9
  export function continuableTurn(info, items) {
10
- if (info.activeTurnId !== null ||
11
- info.status === 'needs-you' ||
12
- (info.queue ?? []).length > 0 ||
13
- info.limit !== undefined ||
14
- info.goal?.status === 'paused') {
15
- return null;
16
- }
17
- const index = items.findLastIndex((item) => item.kind === 'turn');
18
- const turn = items[index];
19
- if (turn?.kind !== 'turn' || turn.state !== 'aborted' || turn.limit !== undefined || abortedByMachine(turn, items) || abortedByEnd(turn, items)) {
20
- return null;
21
- }
22
- // A message of this turn sits after the turn item too, so only one sent after the turn ended counts.
23
- const endedAt = turn.endedAt ?? turn.createdAt;
24
- if (items.slice(index + 1).some((item) => item.kind === 'user' && item.createdAt > endedAt)) {
25
- return null;
26
- }
27
- return turn.id;
28
- }
10
+ if (info.activeTurnId !== null || info.status === 'needs-you' || (info.queue ?? []).length > 0 || info.limit !== undefined || info.goal?.status === 'paused') {
11
+ return null;
12
+ }
13
+ const index = items.findLastIndex(item => item.kind === 'turn');
14
+ const turn = items[index];
15
+ if (turn?.kind !== 'turn' || turn.state !== 'aborted' || turn.limit !== undefined || abortedByMachine(turn, items) || abortedByEnd(turn, items)) {
16
+ return null;
17
+ }
18
+ // A message of this turn sits after the turn item too, so only one sent after the turn ended counts.
19
+ const endedAt = turn.endedAt ?? turn.createdAt;
20
+ if (items.slice(index + 1).some(item => item.kind === 'user' && item.createdAt > endedAt)) {
21
+ return null;
22
+ }
23
+ return turn.id;
24
+ }
@@ -0,0 +1,14 @@
1
+ import type { ModelInfo, ModelOptionChoice, ModelSelection } from '@adecore/agent-contracts';
2
+ export declare const EFFORT_OPTION = "effort";
3
+ export type EffortStep = 'up' | 'down';
4
+ export type EffortStepResult = {
5
+ kind: 'stepped';
6
+ selection: ModelSelection;
7
+ choice: ModelOptionChoice;
8
+ } | {
9
+ kind: 'edge';
10
+ choice: ModelOptionChoice;
11
+ } | {
12
+ kind: 'none';
13
+ };
14
+ export declare function stepEffort(model: ModelInfo | undefined, selection: ModelSelection, step: EffortStep): EffortStepResult;
@@ -0,0 +1,34 @@
1
+ /* The option a catalog names the reasoning effort by; its choices run from the least to the most. */
2
+ export const EFFORT_OPTION = 'effort';
3
+ /* One step of effort within what the model offers. A value the model no longer offers counts as its default. */
4
+ export function stepEffort(model, selection, step) {
5
+ const option = model?.options.find(candidate => candidate.id === EFFORT_OPTION);
6
+ if (option === undefined || option.type !== 'select') {
7
+ return {
8
+ kind: 'none'
9
+ };
10
+ }
11
+ const chosen = selection.options[EFFORT_OPTION];
12
+ const index = option.choices.findIndex(choice => choice.id === chosen);
13
+ const from = index === -1 ? option.choices.findIndex(choice => choice.id === option.defaultChoice) : index;
14
+ const current = Math.max(0, from);
15
+ const next = current + (step === 'up' ? 1 : -1);
16
+ const choice = option.choices[next];
17
+ if (choice === undefined) {
18
+ return {
19
+ kind: 'edge',
20
+ choice: option.choices[current]
21
+ };
22
+ }
23
+ return {
24
+ kind: 'stepped',
25
+ selection: {
26
+ ...selection,
27
+ options: {
28
+ ...selection.options,
29
+ [EFFORT_OPTION]: choice.id
30
+ }
31
+ },
32
+ choice
33
+ };
34
+ }