@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
@@ -1,67 +1,90 @@
1
+ import { c as _c } from "react/compiler-runtime";
1
2
  import { create } from 'zustand';
2
3
  import { useChatScope } from '../scope.js';
3
4
  /* One object for a host that has not answered yet, so a selector gets a stable snapshot. */
4
- const NONE = { accounts: null, loaded: false };
5
+ const NONE = {
6
+ accounts: null,
7
+ loaded: false
8
+ };
5
9
  /* The accounts of every agent CLI on each host, and what each CLI last said about who is signed in there. */
6
10
  export const useProviderAccountsStore = create((set, get) => ({
7
- byScope: {},
8
- set(scopeId, accounts) {
9
- set({ byScope: { ...get().byScope, [scopeId]: { accounts, loaded: true } } });
10
- },
11
- forget(scopeId) {
12
- const { [scopeId]: _gone, ...rest } = get().byScope;
13
- set({ byScope: rest });
14
- }
11
+ byScope: {},
12
+ set(scopeId, accounts) {
13
+ set({
14
+ byScope: {
15
+ ...get().byScope,
16
+ [scopeId]: {
17
+ accounts,
18
+ loaded: true
19
+ }
20
+ }
21
+ });
22
+ },
23
+ forget(scopeId) {
24
+ const {
25
+ [scopeId]: _gone,
26
+ ...rest
27
+ } = get().byScope;
28
+ set({
29
+ byScope: rest
30
+ });
31
+ }
15
32
  }));
16
33
  /* The accounts of the host in scope, like `useProviders`. */
17
34
  export function useProviderAccounts(select) {
18
- const { id } = useChatScope();
19
- return useProviderAccountsStore((s) => select(s.byScope[id] ?? NONE));
35
+ const $ = _c(3);
36
+ const {
37
+ id
38
+ } = useChatScope();
39
+ let t0;
40
+ if ($[0] !== id || $[1] !== select) {
41
+ t0 = s => select(s.byScope[id] ?? NONE);
42
+ $[0] = id;
43
+ $[1] = select;
44
+ $[2] = t0;
45
+ } else {
46
+ t0 = $[2];
47
+ }
48
+ return useProviderAccountsStore(t0);
20
49
  }
21
50
  export function providerAccountsOf(scopeId) {
22
- return useProviderAccountsStore.getState().byScope[scopeId] ?? NONE;
51
+ return useProviderAccountsStore.getState().byScope[scopeId] ?? NONE;
23
52
  }
24
53
  /* The accounts as `accountFor` takes them: undefined until the host answered, null for one that keeps none. */
25
54
  export function knownAccounts(row) {
26
- return row.loaded ? row.accounts : undefined;
55
+ return row.loaded ? row.accounts : undefined;
27
56
  }
28
57
  /*
29
58
  * Keeps one host's accounts in the store: the whole list on every fresh link, then every change the
30
59
  * host announces. Answers the function that stops it.
31
60
  */
32
61
  export function watchProviderAccounts(scopeId, transport) {
33
- const store = useProviderAccountsStore.getState();
34
- // A list asked for before a change arrived is older than that change, so it is dropped.
35
- let changes = 0;
36
- const load = () => {
37
- const asked = changes;
38
- transport
39
- .request('accounts.list', {})
40
- .then((accounts) => {
41
- if (changes === asked) {
42
- store.set(scopeId, accounts);
43
- }
44
- })
45
- .catch(() => {
46
- // A host from before accounts never answers; it has only each CLI's own login.
47
- if (changes === asked && !providerAccountsOf(scopeId).loaded) {
48
- store.set(scopeId, null);
49
- }
50
- });
51
- };
52
- const off = [
53
- transport.on('accounts.changed', (accounts) => {
54
- changes += 1;
55
- store.set(scopeId, accounts);
56
- }),
57
- transport.subscribeStatus((status) => {
58
- if (status === 'open') {
59
- load();
60
- }
61
- })
62
- ];
63
- if (transport.status === 'open') {
64
- load();
62
+ const store = useProviderAccountsStore.getState();
63
+ // A list asked for before a change arrived is older than that change, so it is dropped.
64
+ let changes = 0;
65
+ const load = () => {
66
+ const asked = changes;
67
+ transport.request('accounts.list', {}).then(accounts => {
68
+ if (changes === asked) {
69
+ store.set(scopeId, accounts);
70
+ }
71
+ }).catch(() => {
72
+ // A host from before accounts never answers; it has only each CLI's own login.
73
+ if (changes === asked && !providerAccountsOf(scopeId).loaded) {
74
+ store.set(scopeId, null);
75
+ }
76
+ });
77
+ };
78
+ const off = [transport.on('accounts.changed', accounts => {
79
+ changes += 1;
80
+ store.set(scopeId, accounts);
81
+ }), transport.subscribeStatus(status => {
82
+ if (status === 'open') {
83
+ load();
65
84
  }
66
- return () => off.forEach((stop) => stop());
67
- }
85
+ })];
86
+ if (transport.status === 'open') {
87
+ load();
88
+ }
89
+ return () => off.forEach(stop => stop());
90
+ }
@@ -1,33 +1,62 @@
1
+ import { c as _c } from "react/compiler-runtime";
1
2
  import { create } from 'zustand';
2
3
  import { useChatScope } from '../scope.js';
3
4
  /* One object for a host that has not answered yet, so a selector gets a stable snapshot. */
4
- const NONE = { providers: [], loaded: false };
5
+ const NONE = {
6
+ providers: [],
7
+ loaded: false
8
+ };
5
9
  /* Which agent CLIs each host reports, and their models; filled once per connection. */
6
10
  export const useProvidersStore = create((set, get) => ({
7
- byScope: {},
8
- setProviders(scopeId, providers) {
9
- set({ byScope: { ...get().byScope, [scopeId]: { providers, loaded: true } } });
10
- },
11
- forget(scopeId) {
12
- const { [scopeId]: _gone, ...rest } = get().byScope;
13
- set({ byScope: rest });
14
- }
11
+ byScope: {},
12
+ setProviders(scopeId, providers) {
13
+ set({
14
+ byScope: {
15
+ ...get().byScope,
16
+ [scopeId]: {
17
+ providers,
18
+ loaded: true
19
+ }
20
+ }
21
+ });
22
+ },
23
+ forget(scopeId) {
24
+ const {
25
+ [scopeId]: _gone,
26
+ ...rest
27
+ } = get().byScope;
28
+ set({
29
+ byScope: rest
30
+ });
31
+ }
15
32
  }));
16
33
  /*
17
34
  * The CLIs of the host in scope. An agent menu has to offer what the host the chat will run on has
18
35
  * installed, never what another host answered.
19
36
  */
20
37
  export function useProviders(select) {
21
- const { id } = useChatScope();
22
- return useProvidersStore((s) => select(s.byScope[id] ?? NONE));
38
+ const $ = _c(3);
39
+ const {
40
+ id
41
+ } = useChatScope();
42
+ let t0;
43
+ if ($[0] !== id || $[1] !== select) {
44
+ t0 = s => select(s.byScope[id] ?? NONE);
45
+ $[0] = id;
46
+ $[1] = select;
47
+ $[2] = t0;
48
+ } else {
49
+ t0 = $[2];
50
+ }
51
+ return useProvidersStore(t0);
23
52
  }
24
53
  /* The same answer outside a render. */
25
54
  export function providersOf(scopeId) {
26
- return useProvidersStore.getState().byScope[scopeId] ?? NONE;
55
+ return useProvidersStore.getState().byScope[scopeId] ?? NONE;
27
56
  }
28
57
  /* What one host's chat client fills in; it knows its own host and nothing of the others. */
29
58
  export function providerSinkFor(scopeId) {
30
- return {
31
- setProviders: (providers) => useProvidersStore.getState().setProviders(scopeId, providers)
32
- };
33
- }
59
+ return {
60
+ setProviders: providers => useProvidersStore.getState().setProviders(scopeId, providers)
61
+ };
62
+ }
@@ -1,113 +1,190 @@
1
+ import { c as _c } from "react/compiler-runtime";
1
2
  import { chatStorageKey, chatStorageLegacyKeys, createChatStore, onChatStorageConfiguration } from '../storage.js';
2
3
  import { persistedJson } from '../chat/persisted-json.js';
3
4
  import { localTimeZone } from '@adecore/ui/format';
4
5
  import { useChatScope } from '../scope.js';
5
6
  /* Only the id and the length. A store has no words, so the page names a period in its own language. */
6
- export const USAGE_PERIODS = [
7
- { id: 'today', days: 1 },
8
- { id: '7d', days: 7 },
9
- { id: '30d', days: 30 },
10
- { id: '90d', days: 90 }
11
- ];
7
+ export const USAGE_PERIODS = [{
8
+ id: 'today',
9
+ days: 1
10
+ }, {
11
+ id: '7d',
12
+ days: 7
13
+ }, {
14
+ id: '30d',
15
+ days: 30
16
+ }, {
17
+ id: '90d',
18
+ days: 90
19
+ }];
12
20
  const storageKey = () => chatStorageKey('usage');
13
21
  export let USAGE_PREFERENCES_KEY = storageKey();
14
22
  onChatStorageConfiguration(() => {
15
- USAGE_PREFERENCES_KEY = storageKey();
23
+ USAGE_PREFERENCES_KEY = storageKey();
16
24
  });
17
- const DEFAULTS = { period: '7d', metric: 'cost', currency: 'USD' };
25
+ const DEFAULTS = {
26
+ period: '7d',
27
+ metric: 'cost',
28
+ currency: 'USD'
29
+ };
18
30
  function parsePreferences(raw) {
19
- try {
20
- const stored = JSON.parse(raw ?? '{}');
21
- return {
22
- period: USAGE_PERIODS.some((period) => period.id === stored.period) ? stored.period : DEFAULTS.period,
23
- metric: stored.metric === 'tokens' || stored.metric === 'cost' ? stored.metric : DEFAULTS.metric,
24
- currency: stored.currency === 'EUR' ? 'EUR' : DEFAULTS.currency
25
- };
26
- }
27
- catch {
28
- return DEFAULTS;
29
- }
31
+ try {
32
+ const stored = JSON.parse(raw ?? '{}');
33
+ return {
34
+ period: USAGE_PERIODS.some(period => period.id === stored.period) ? stored.period : DEFAULTS.period,
35
+ metric: stored.metric === 'tokens' || stored.metric === 'cost' ? stored.metric : DEFAULTS.metric,
36
+ currency: stored.currency === 'EUR' ? 'EUR' : DEFAULTS.currency
37
+ };
38
+ } catch {
39
+ return DEFAULTS;
40
+ }
30
41
  }
31
42
  const storage = persistedJson(storageKey, parsePreferences, DEFAULTS, () => chatStorageLegacyKeys('usage'));
32
43
  /* The three stored choices out of the store, so a setter writes the other two back unchanged. */
33
44
  function chosen(state) {
34
- return { period: state.period, metric: state.metric, currency: state.currency };
45
+ return {
46
+ period: state.period,
47
+ metric: state.metric,
48
+ currency: state.currency
49
+ };
35
50
  }
36
51
  function pad(value) {
37
- return String(value).padStart(2, '0');
52
+ return String(value).padStart(2, '0');
38
53
  }
39
54
  /* The viewer's own calendar day; the host may stand in another zone and buckets in this one. */
40
55
  export function dayOf(date) {
41
- return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
56
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
42
57
  }
43
58
  /* What a period asks for: today in hours from local midnight, every other period a bar per calendar day. */
44
59
  export function windowFor(period, now = new Date()) {
45
- const days = USAGE_PERIODS.find((entry) => entry.id === period)?.days ?? 7;
46
- const from = new Date(now.getFullYear(), now.getMonth(), now.getDate() - (days - 1));
47
- return {
48
- from: dayOf(from),
49
- to: dayOf(now),
50
- resolution: period === 'today' ? 'hour' : 'day',
51
- timeZone: localTimeZone() ?? 'UTC'
52
- };
60
+ const days = USAGE_PERIODS.find(entry => entry.id === period)?.days ?? 7;
61
+ const from = new Date(now.getFullYear(), now.getMonth(), now.getDate() - (days - 1));
62
+ return {
63
+ from: dayOf(from),
64
+ to: dayOf(now),
65
+ resolution: period === 'today' ? 'hour' : 'day',
66
+ timeZone: localTimeZone() ?? 'UTC'
67
+ };
53
68
  }
54
69
  /* A period, and only the usage of one account when one is picked; null is every account. */
55
70
  export function summaryPayload(period, account, now = new Date()) {
56
- return account === null ? windowFor(period, now) : { ...windowFor(period, now), accounts: [account] };
71
+ return account === null ? windowFor(period, now) : {
72
+ ...windowFor(period, now),
73
+ accounts: [account]
74
+ };
57
75
  }
58
76
  /* What was asked, so an answer to the question before this one is never drawn over a newer one. */
59
77
  export function askedKey(payload) {
60
- return `${payload.from}\0${payload.to}\0${payload.resolution}\0${payload.timeZone}\0${payload.accounts?.join(',') ?? ''}`;
78
+ return `${payload.from}\0${payload.to}\0${payload.resolution}\0${payload.timeZone}\0${payload.accounts?.join(',') ?? ''}`;
61
79
  }
62
80
  /* One object for a host nothing was read from yet, so a selector gets a stable snapshot. */
63
- const EMPTY = { asked: null, summary: null, loading: false, failed: false, limits: null };
81
+ const EMPTY = {
82
+ asked: null,
83
+ summary: null,
84
+ loading: false,
85
+ failed: false,
86
+ limits: null
87
+ };
64
88
  /* Reads the period, metric and currency again, once another window of the same origin wrote them. */
65
89
  export function reloadUsagePreferences() {
66
- useUsageStore.setState(storage.read());
90
+ useUsageStore.setState(storage.read());
67
91
  }
68
92
  export const useUsageStore = createChatStore((set, get) => {
69
- const choosePreference = (change) => {
70
- storage.write({ ...chosen(get()), ...change });
71
- set(change);
72
- };
73
- const patchRow = (scopeId, change) => {
74
- set({ byScope: { ...get().byScope, [scopeId]: { ...(get().byScope[scopeId] ?? EMPTY), ...change } } });
75
- };
76
- return {
77
- ...DEFAULTS,
78
- byScope: {},
79
- chosen: null,
80
- choose(scopeId) {
81
- set({ chosen: scopeId });
82
- },
83
- setPeriod(period) {
84
- choosePreference({ period });
85
- },
86
- setMetric(metric) {
87
- choosePreference({ metric });
88
- },
89
- setCurrency(currency) {
90
- choosePreference({ currency });
91
- },
92
- setLoading(scopeId, loading) {
93
- patchRow(scopeId, { loading });
94
- },
95
- receive(scopeId, asked, summary) {
96
- patchRow(scopeId, { asked, summary, loading: false, failed: false });
97
- },
98
- fail(scopeId) {
99
- patchRow(scopeId, { loading: false, failed: true });
100
- },
101
- setLimits(scopeId, limits) {
102
- patchRow(scopeId, { limits });
103
- },
104
- forget(scopeId) {
105
- const { [scopeId]: _gone, ...rest } = get().byScope;
106
- set({ byScope: rest });
93
+ const choosePreference = change => {
94
+ storage.write({
95
+ ...chosen(get()),
96
+ ...change
97
+ });
98
+ set(change);
99
+ };
100
+ const patchRow = (scopeId, change) => {
101
+ set({
102
+ byScope: {
103
+ ...get().byScope,
104
+ [scopeId]: {
105
+ ...(get().byScope[scopeId] ?? EMPTY),
106
+ ...change
107
107
  }
108
- };
109
- }, (store) => store.setState(storage.read()));
108
+ }
109
+ });
110
+ };
111
+ return {
112
+ ...DEFAULTS,
113
+ byScope: {},
114
+ chosen: null,
115
+ choose(scopeId) {
116
+ set({
117
+ chosen: scopeId
118
+ });
119
+ },
120
+ setPeriod(period) {
121
+ choosePreference({
122
+ period
123
+ });
124
+ },
125
+ setMetric(metric) {
126
+ choosePreference({
127
+ metric
128
+ });
129
+ },
130
+ setCurrency(currency) {
131
+ choosePreference({
132
+ currency
133
+ });
134
+ },
135
+ setLoading(scopeId, loading) {
136
+ patchRow(scopeId, {
137
+ loading
138
+ });
139
+ },
140
+ receive(scopeId, asked, summary) {
141
+ patchRow(scopeId, {
142
+ asked,
143
+ summary,
144
+ loading: false,
145
+ failed: false
146
+ });
147
+ },
148
+ fail(scopeId) {
149
+ patchRow(scopeId, {
150
+ loading: false,
151
+ failed: true
152
+ });
153
+ },
154
+ setLimits(scopeId, limits) {
155
+ patchRow(scopeId, {
156
+ limits
157
+ });
158
+ },
159
+ forget(scopeId) {
160
+ const {
161
+ [scopeId]: _gone,
162
+ ...rest
163
+ } = get().byScope;
164
+ set({
165
+ byScope: rest
166
+ });
167
+ }
168
+ };
169
+ }, store => store.setState(storage.read()));
110
170
  export function useUsage(select) {
111
- const { id } = useChatScope();
112
- return useUsageStore((s) => select({ period: s.period, metric: s.metric, currency: s.currency, ...(s.byScope[id] ?? EMPTY) }));
113
- }
171
+ const $ = _c(3);
172
+ const {
173
+ id
174
+ } = useChatScope();
175
+ let t0;
176
+ if ($[0] !== id || $[1] !== select) {
177
+ t0 = s => select({
178
+ period: s.period,
179
+ metric: s.metric,
180
+ currency: s.currency,
181
+ ...(s.byScope[id] ?? EMPTY)
182
+ });
183
+ $[0] = id;
184
+ $[1] = select;
185
+ $[2] = t0;
186
+ } else {
187
+ t0 = $[2];
188
+ }
189
+ return useUsageStore(t0);
190
+ }
package/dist/storage.js CHANGED
@@ -1,89 +1,90 @@
1
1
  import { create } from 'zustand';
2
2
  const SUFFIXES = {
3
- drafts: 'chat.drafts',
4
- preferences: 'chat.preferences',
5
- stash: 'chat.stash',
6
- usage: 'usage'
3
+ drafts: 'chat.drafts',
4
+ preferences: 'chat.preferences',
5
+ stash: 'chat.stash',
6
+ usage: 'usage'
7
7
  };
8
8
  let options = {};
9
9
  let hydrated = false;
10
10
  const hydrators = [];
11
11
  const configurationListeners = [];
12
12
  export function onChatStorageConfiguration(listener) {
13
- configurationListeners.push(listener);
13
+ configurationListeners.push(listener);
14
14
  }
15
15
  /* Configure once before using a store, so an imported component cannot read another host's records. */
16
16
  export function configureChatStorage(configuration) {
17
- if (hydrated) {
18
- throw new Error('Configure chat storage before using chat stores');
19
- }
20
- options = {
21
- ...configuration,
22
- keys: { ...configuration.keys },
23
- legacyNamespaces: [...(configuration.legacyNamespaces ?? [])],
24
- legacyKeys: Object.fromEntries(Object.entries(configuration.legacyKeys ?? {}).map(([key, values]) => [key, [...values]]))
25
- };
26
- for (const listener of configurationListeners) {
27
- listener();
28
- }
17
+ if (hydrated) {
18
+ throw new Error('Configure chat storage before using chat stores');
19
+ }
20
+ options = {
21
+ ...configuration,
22
+ keys: {
23
+ ...configuration.keys
24
+ },
25
+ legacyNamespaces: [...(configuration.legacyNamespaces ?? [])],
26
+ legacyKeys: Object.fromEntries(Object.entries(configuration.legacyKeys ?? {}).map(([key, values]) => [key, [...values]]))
27
+ };
28
+ for (const listener of configurationListeners) {
29
+ listener();
30
+ }
29
31
  }
30
32
  export function chatStorageKey(record) {
31
- return options.keys?.[record] ?? `${options.namespace ?? 'adecore'}.${SUFFIXES[record]}`;
33
+ return options.keys?.[record] ?? `${options.namespace ?? 'adecore'}.${SUFFIXES[record]}`;
32
34
  }
33
35
  export function chatStorageLegacyKeys(record) {
34
- return [...(options.legacyKeys?.[record] ?? []), ...(options.legacyNamespaces ?? []).map((namespace) => `${namespace}.${SUFFIXES[record]}`)];
36
+ return [...(options.legacyKeys?.[record] ?? []), ...(options.legacyNamespaces ?? []).map(namespace => `${namespace}.${SUFFIXES[record]}`)];
35
37
  }
36
38
  export function chatStorageAdapter() {
37
- if (options.storage !== undefined) {
38
- return options.storage;
39
- }
40
- try {
41
- return globalThis.localStorage;
42
- }
43
- catch {
44
- return null;
45
- }
39
+ if (options.storage !== undefined) {
40
+ return options.storage;
41
+ }
42
+ try {
43
+ return globalThis.localStorage;
44
+ } catch {
45
+ return null;
46
+ }
46
47
  }
47
48
  export function hydrateChatStorage() {
48
- if (hydrated) {
49
- return;
50
- }
51
- hydrated = true;
52
- for (const hydrate of hydrators) {
53
- hydrate();
54
- }
49
+ if (hydrated) {
50
+ return;
51
+ }
52
+ hydrated = true;
53
+ for (const hydrate of hydrators) {
54
+ hydrate();
55
+ }
55
56
  }
56
57
  export function createChatStore(initial, hydrate) {
57
- const store = create(initial);
58
- let initialized = false;
59
- const hydrateOnce = () => {
60
- if (initialized) {
61
- return;
62
- }
63
- initialized = true;
64
- hydrate(store);
65
- };
66
- hydrators.push(hydrateOnce);
67
- const ready = () => {
68
- hydrateChatStorage();
69
- hydrateOnce();
70
- };
71
- const useStore = ((...args) => {
72
- ready();
73
- return store(...args);
74
- });
75
- Object.assign(useStore, store);
76
- useStore.getState = () => {
77
- ready();
78
- return store.getState();
79
- };
80
- useStore.subscribe = (...args) => {
81
- ready();
82
- return store.subscribe(...args);
83
- };
84
- useStore.setState = ((...args) => {
85
- ready();
86
- store.setState(...args);
87
- });
88
- return useStore;
89
- }
58
+ const store = create(initial);
59
+ let initialized = false;
60
+ const hydrateOnce = () => {
61
+ if (initialized) {
62
+ return;
63
+ }
64
+ initialized = true;
65
+ hydrate(store);
66
+ };
67
+ hydrators.push(hydrateOnce);
68
+ const ready = () => {
69
+ hydrateChatStorage();
70
+ hydrateOnce();
71
+ };
72
+ const useStore = (...args) => {
73
+ ready();
74
+ return store(...args);
75
+ };
76
+ Object.assign(useStore, store);
77
+ useStore.getState = () => {
78
+ ready();
79
+ return store.getState();
80
+ };
81
+ useStore.subscribe = (...args) => {
82
+ ready();
83
+ return store.subscribe(...args);
84
+ };
85
+ useStore.setState = (...args) => {
86
+ ready();
87
+ store.setState(...args);
88
+ };
89
+ return useStore;
90
+ }
@@ -1,2 +1,2 @@
1
1
  // Public API: exports.test.ts snapshots this list, so a name added or dropped here is an API change.
2
- export { PROMPT_SAMPLES } from './prompts.js';
2
+ export { PROMPT_SAMPLES } from './prompts.js';