@adecore/agents-react 0.31.12 → 0.33.0

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