@adecore/agents-react 0.31.12 → 0.32.0

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