@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.
- package/dist/agents/AccountDot.js +57 -6
- package/dist/agents/AgentIcon.js +88 -12
- package/dist/agents/ModelOptionControl.js +153 -18
- package/dist/agents/ProviderLogo.js +49 -4
- package/dist/agents/account-limits.js +17 -14
- package/dist/agents/accounts.js +99 -67
- package/dist/agents/agent-marks.js +5 -3
- package/dist/agents/model-name.js +42 -31
- package/dist/agents/model-options.js +8 -8
- package/dist/agents/model-requirement.js +17 -14
- package/dist/agents/option-words.d.ts +7 -0
- package/dist/agents/option-words.js +35 -0
- package/dist/agents/provider-paths.js +6 -6
- package/dist/agents/status-look.js +32 -12
- package/dist/chat/account-choice.d.ts +13 -0
- package/dist/chat/account-choice.js +90 -20
- package/dist/chat/actions.js +126 -59
- package/dist/chat/activity.js +5 -5
- package/dist/chat/attachments.js +74 -53
- package/dist/chat/bookmarks.js +58 -48
- package/dist/chat/chat-client.js +344 -263
- package/dist/chat/chat-references.js +3 -3
- package/dist/chat/composer-effort.d.ts +5 -0
- package/dist/chat/composer-effort.js +26 -0
- package/dist/chat/composer-send.js +13 -13
- package/dist/chat/drafts.js +115 -79
- package/dist/chat/forks.js +81 -24
- package/dist/chat/guards.js +15 -43
- package/dist/chat/index.d.ts +3 -1
- package/dist/chat/index.js +3 -2
- package/dist/chat/logic/ansi.js +170 -167
- package/dist/chat/logic/answers.js +2 -2
- package/dist/chat/logic/bookmarks.js +19 -19
- package/dist/chat/logic/command-looks.js +138 -96
- package/dist/chat/logic/context-usage.js +13 -9
- package/dist/chat/logic/continue-after-stop.js +15 -19
- package/dist/chat/logic/effort.d.ts +14 -0
- package/dist/chat/logic/effort.js +34 -0
- package/dist/chat/logic/embedded-code.js +387 -326
- package/dist/chat/logic/fork.js +134 -110
- package/dist/chat/logic/generated-image.js +54 -23
- package/dist/chat/logic/goal.js +28 -20
- package/dist/chat/logic/handback.js +6 -6
- package/dist/chat/logic/json.js +2 -2
- package/dist/chat/logic/limit.js +46 -30
- package/dist/chat/logic/picker-entries.d.ts +5 -3
- package/dist/chat/logic/picker-entries.js +83 -43
- package/dist/chat/logic/resume-compaction.d.ts +14 -1
- package/dist/chat/logic/resume-compaction.js +93 -24
- package/dist/chat/logic/scrubber.js +188 -136
- package/dist/chat/logic/thought.js +13 -16
- package/dist/chat/logic/thread-cards.js +60 -48
- package/dist/chat/logic/timeline-copy.js +30 -38
- package/dist/chat/logic/timeline-target.js +92 -63
- package/dist/chat/logic/timeline.js +499 -355
- package/dist/chat/logic/tool-catalog.js +54 -34
- package/dist/chat/logic/tools.js +106 -82
- package/dist/chat/logic/visual-height.js +18 -18
- package/dist/chat/logic/visual-viewport.js +6 -3
- package/dist/chat/logic/welcome.js +9 -9
- package/dist/chat/logic/workflow.js +45 -34
- package/dist/chat/mentions.js +149 -109
- package/dist/chat/persisted-json.js +51 -54
- package/dist/chat/preferences.d.ts +4 -0
- package/dist/chat/preferences.js +162 -84
- package/dist/chat/prompt-hold.js +9 -9
- package/dist/chat/quote.js +21 -30
- package/dist/chat/reading-width.js +12 -10
- package/dist/chat/recent-messages.js +34 -21
- package/dist/chat/resume-compaction-dismissals.js +25 -5
- package/dist/chat/runtime-modes.js +3 -3
- package/dist/chat/send-key.js +11 -7
- package/dist/chat/stash.js +89 -69
- package/dist/chat/subagent-conversation.js +181 -139
- package/dist/chat/subagent-list.js +65 -67
- package/dist/chat/subagent-support.js +12 -7
- package/dist/chat/subagent-view.js +132 -44
- package/dist/chat/thumbnails.js +88 -60
- package/dist/chat/timeline-flash.js +24 -12
- package/dist/chat/timeline-scroll.js +116 -86
- package/dist/chat/ui/AccountPill.js +126 -15
- package/dist/chat/ui/AnsiOutput.js +62 -6
- package/dist/chat/ui/BookmarkMarker.js +231 -41
- package/dist/chat/ui/BookmarkSubmenu.js +165 -18
- package/dist/chat/ui/ChatActivity.js +649 -70
- package/dist/chat/ui/ChatReferenceChip.js +104 -9
- package/dist/chat/ui/CodeBlock.js +132 -58
- package/dist/chat/ui/Composer.js +866 -132
- package/dist/chat/ui/ComposerInput.js +309 -120
- package/dist/chat/ui/DiffPool.js +75 -14
- package/dist/chat/ui/EditDiff.js +160 -21
- package/dist/chat/ui/FadingWords.js +32 -3
- package/dist/chat/ui/GoalDock.js +235 -42
- package/dist/chat/ui/ImageView.js +617 -61
- package/dist/chat/ui/LimitState.js +446 -72
- package/dist/chat/ui/Markdown.js +991 -173
- package/dist/chat/ui/MermaidBlock.js +238 -68
- package/dist/chat/ui/MessageActions.js +251 -39
- package/dist/chat/ui/ModelMarks.js +55 -5
- package/dist/chat/ui/Pickers.js +664 -113
- package/dist/chat/ui/PromptComposer.js +281 -51
- package/dist/chat/ui/QuoteButton.js +151 -57
- package/dist/chat/ui/ResumeCompactionDock.d.ts +6 -2
- package/dist/chat/ui/ResumeCompactionDock.js +141 -6
- package/dist/chat/ui/RowTime.js +59 -5
- package/dist/chat/ui/RunSettings.js +1744 -154
- package/dist/chat/ui/Scrubber.js +517 -88
- package/dist/chat/ui/ShellCommand.js +183 -107
- package/dist/chat/ui/SubagentControls.js +212 -24
- package/dist/chat/ui/SubagentInfo.js +170 -13
- package/dist/chat/ui/SubagentStopButton.js +115 -24
- package/dist/chat/ui/SubagentTimeline.js +357 -91
- package/dist/chat/ui/Timeline.js +988 -476
- package/dist/chat/ui/TimelineMenu.js +552 -37
- package/dist/chat/ui/UnifiedDiff.js +234 -27
- package/dist/chat/ui/UploadThumb.js +37 -7
- package/dist/chat/ui/VisualDialogs.js +251 -20
- package/dist/chat/ui/VisualFrame.js +321 -95
- package/dist/chat/ui/Welcome.js +72 -7
- package/dist/chat/ui/chips.js +1 -1
- package/dist/chat/ui/code-lines.js +36 -36
- package/dist/chat/ui/code-streaming.js +1 -1
- package/dist/chat/ui/code-theme.js +7 -7
- package/dist/chat/ui/composer/ComposerControls.js +329 -21
- package/dist/chat/ui/composer/ComposerMenu.js +358 -30
- package/dist/chat/ui/composer/DraftParts.js +185 -11
- package/dist/chat/ui/composer/QueuedMessages.js +138 -13
- package/dist/chat/ui/composer/chips.js +29 -19
- package/dist/chat/ui/composer/editor.js +79 -63
- package/dist/chat/ui/composer/insert.js +26 -12
- package/dist/chat/ui/composer/key-handler.js +180 -127
- package/dist/chat/ui/composer/keys.js +90 -73
- package/dist/chat/ui/composer/menu-aria.js +18 -9
- package/dist/chat/ui/composer/placeholder.js +78 -31
- package/dist/chat/ui/composer/surface.js +13 -37
- package/dist/chat/ui/composer/use-chat-controls.js +230 -90
- package/dist/chat/ui/composer/use-compaction-offer.js +50 -18
- package/dist/chat/ui/composer/use-composer-draft.js +65 -34
- package/dist/chat/ui/composer/use-composer-menus.js +478 -193
- package/dist/chat/ui/composer/use-composer-submit.js +251 -109
- package/dist/chat/ui/composer/use-continuable-turn.js +33 -6
- package/dist/chat/ui/composer/use-draft-files.js +245 -93
- package/dist/chat/ui/composer/use-effort-stepper.d.ts +13 -0
- package/dist/chat/ui/composer/use-effort-stepper.js +88 -0
- package/dist/chat/ui/composer/use-notice.js +61 -16
- package/dist/chat/ui/composer/use-pending-requests.js +38 -17
- package/dist/chat/ui/composer/use-prompt-history.js +117 -45
- package/dist/chat/ui/composer/use-prompt-hold.js +119 -35
- package/dist/chat/ui/composer/use-take-back.js +94 -72
- package/dist/chat/ui/diff/ApprovalReview.js +101 -23
- package/dist/chat/ui/diff/DiffFallbackBoundary.js +21 -13
- package/dist/chat/ui/diff/DiffOmitted.js +56 -6
- package/dist/chat/ui/diff/DiffStack.js +92 -8
- package/dist/chat/ui/diff/DiffUnavailable.js +56 -6
- package/dist/chat/ui/diff/EditorEditDiff.js +263 -51
- package/dist/chat/ui/diff/EditorPatchDiff.js +39 -14
- package/dist/chat/ui/diff/LegacyDiffPool.js +27 -10
- package/dist/chat/ui/diff/LegacyEditDiff.js +97 -20
- package/dist/chat/ui/diff/LegacyUnifiedDiff.js +172 -42
- package/dist/chat/ui/diff/RawDiff.js +65 -5
- package/dist/chat/ui/diff/ReviewDiff.js +77 -5
- package/dist/chat/ui/diff/diff-props.js +1 -1
- package/dist/chat/ui/diff/diff-source-budget.js +46 -35
- package/dist/chat/ui/diff/editor-edit-model.js +18 -14
- package/dist/chat/ui/diff/review-plan.js +63 -40
- package/dist/chat/ui/diff/review-settle.js +24 -9
- package/dist/chat/ui/diff/syntax-runtime.js +236 -201
- package/dist/chat/ui/diff/use-review-stack.js +146 -25
- package/dist/chat/ui/diff-syntax.js +70 -58
- package/dist/chat/ui/diff-theme.js +31 -12
- package/dist/chat/ui/file-links.js +39 -10
- package/dist/chat/ui/find-reveal.js +29 -8
- package/dist/chat/ui/full-diff.js +17 -12
- package/dist/chat/ui/highlighter.js +143 -113
- package/dist/chat/ui/icons.js +16 -7
- package/dist/chat/ui/index.js +1 -1
- package/dist/chat/ui/intelligent-ui/UiBlockFrame.js +556 -82
- package/dist/chat/ui/intelligent-ui/UiFallbackPart.js +73 -5
- package/dist/chat/ui/intelligent-ui/UiReply.js +666 -262
- package/dist/chat/ui/intelligent-ui/block-local.js +59 -31
- package/dist/chat/ui/intelligent-ui/chart-data.js +77 -67
- package/dist/chat/ui/intelligent-ui/node-text.js +77 -91
- package/dist/chat/ui/intelligent-ui/registry.js +46 -46
- package/dist/chat/ui/intelligent-ui/render-context.js +1 -1
- package/dist/chat/ui/intelligent-ui/renderers/base-land.js +1 -1
- package/dist/chat/ui/intelligent-ui/renderers/binding.js +3 -3
- package/dist/chat/ui/intelligent-ui/renderers/chart.js +1223 -123
- package/dist/chat/ui/intelligent-ui/renderers/choices.js +312 -34
- package/dist/chat/ui/intelligent-ui/renderers/content.js +1241 -86
- package/dist/chat/ui/intelligent-ui/renderers/data.js +619 -54
- package/dist/chat/ui/intelligent-ui/renderers/inputs.js +868 -67
- package/dist/chat/ui/intelligent-ui/renderers/links.js +366 -62
- package/dist/chat/ui/intelligent-ui/renderers/map-slots.js +118 -60
- package/dist/chat/ui/intelligent-ui/renderers/map-style.js +85 -78
- package/dist/chat/ui/intelligent-ui/renderers/map-view.js +282 -217
- package/dist/chat/ui/intelligent-ui/renderers/map.js +621 -69
- package/dist/chat/ui/intelligent-ui/renderers/place-point.js +15 -8
- package/dist/chat/ui/intelligent-ui/renderers/structure.js +262 -20
- package/dist/chat/ui/intelligent-ui/renderers/text.js +674 -49
- package/dist/chat/ui/intelligent-ui/reply-parts.js +24 -15
- package/dist/chat/ui/intelligent-ui/table-data.js +97 -57
- package/dist/chat/ui/intelligent-ui/tones.js +31 -31
- package/dist/chat/ui/intelligent-ui/use-in-view.js +30 -12
- package/dist/chat/ui/intelligent-ui/use-later.js +28 -13
- package/dist/chat/ui/intelligent-ui/use-truncated.js +45 -21
- package/dist/chat/ui/intelligent-ui/use-ui-links.js +296 -109
- package/dist/chat/ui/intelligent-ui/use-ui-queries.js +256 -246
- package/dist/chat/ui/markdown-blocks.js +296 -262
- package/dist/chat/ui/mermaid.js +60 -72
- package/dist/chat/ui/quote-selection.js +32 -29
- package/dist/chat/ui/rehype-chips.js +35 -23
- package/dist/chat/ui/rehype-fade.js +28 -17
- package/dist/chat/ui/remark-html-as-text.js +22 -15
- package/dist/chat/ui/reply-context.js +1 -1
- package/dist/chat/ui/reveal.js +161 -72
- package/dist/chat/ui/rows/ForksRow.js +226 -24
- package/dist/chat/ui/rows/GeneratedImageRow.js +541 -87
- package/dist/chat/ui/rows/MessageRows.js +1706 -159
- package/dist/chat/ui/rows/RowContainer.js +57 -7
- package/dist/chat/ui/rows/Rows.js +463 -54
- package/dist/chat/ui/rows/SubagentRow.js +577 -60
- package/dist/chat/ui/rows/TaskRow.js +359 -40
- package/dist/chat/ui/rows/VisualRow.js +233 -11
- package/dist/chat/ui/rows/WorkRows.js +1945 -164
- package/dist/chat/ui/rows/WorkflowRow.js +293 -34
- package/dist/chat/ui/rows/row-rhythm.js +27 -17
- package/dist/chat/ui/theme-watch.js +26 -23
- package/dist/chat/ui/timestamp-format.js +4 -1
- package/dist/chat/ui/use-diff-source-tokens.js +70 -34
- package/dist/chat/ui/useToggleSet.js +51 -19
- package/dist/chat/ui/visual-theme.js +153 -128
- package/dist/chat/visual-bridge.js +123 -123
- package/dist/chat/visual-viewport.js +94 -83
- package/dist/chat/visuals.js +13 -5
- package/dist/host-hooks.d.ts +29 -0
- package/dist/host-hooks.js +78 -0
- package/dist/host.js +120 -48
- package/dist/index.js +1 -1
- package/dist/lazy.js +38 -32
- package/dist/locales/en/agent-chat.d.ts +34 -0
- package/dist/locales/en/agent-chat.js +747 -713
- package/dist/locales/en/agent-prompts.js +42 -42
- package/dist/locales/en/agent-providers.d.ts +1 -0
- package/dist/locales/en/agent-providers.js +166 -165
- package/dist/locales/en/agent-usage.d.ts +6 -0
- package/dist/locales/en/agent-usage.js +129 -123
- package/dist/locales/nl/agent-chat.d.ts +34 -0
- package/dist/locales/nl/agent-chat.js +747 -713
- package/dist/locales/nl/agent-prompts.js +42 -42
- package/dist/locales/nl/agent-providers.d.ts +1 -0
- package/dist/locales/nl/agent-providers.js +166 -165
- package/dist/locales/nl/agent-usage.d.ts +6 -0
- package/dist/locales/nl/agent-usage.js +129 -123
- package/dist/locales.js +14 -14
- package/dist/mounted-registry.js +31 -30
- package/dist/port-transport.js +122 -111
- package/dist/prompts/index.js +1 -1
- package/dist/prompts/logic/focus.js +15 -14
- package/dist/prompts/logic/keys.js +93 -59
- package/dist/prompts/logic/prompts.js +27 -14
- package/dist/prompts/logic/subjects.js +60 -46
- package/dist/prompts/logic/useFocusAfterAnswer.js +60 -20
- package/dist/prompts/logic/usePromptSession.js +88 -77
- package/dist/prompts/ui/ApprovalBody.js +246 -27
- package/dist/prompts/ui/PromptActions.js +215 -9
- package/dist/prompts/ui/PromptCard.js +215 -36
- package/dist/prompts/ui/PromptView.js +372 -34
- package/dist/prompts/ui/QuestionBody.js +269 -73
- package/dist/providers/AccountColors.js +36 -5
- package/dist/providers/AccountDetail.js +683 -50
- package/dist/providers/AccountVariables.js +139 -32
- package/dist/providers/AddAccountForm.js +125 -38
- package/dist/providers/CliDetail.js +343 -36
- package/dist/providers/InstallPage.js +644 -59
- package/dist/providers/ProviderList.d.ts +2 -1
- package/dist/providers/ProviderList.js +215 -23
- package/dist/providers/ProvidersPane.d.ts +4 -2
- package/dist/providers/ProvidersPane.js +244 -64
- package/dist/providers/account-actions.js +54 -30
- package/dist/providers/index.js +1 -1
- package/dist/providers/install-steps.js +12 -9
- package/dist/providers/pane-target.d.ts +3 -0
- package/dist/providers/pane-target.js +34 -13
- package/dist/providers/parts.js +62 -12
- package/dist/providers/provider-abilities.js +5 -5
- package/dist/providers/provider-groups.js +75 -40
- package/dist/providers/variables.js +73 -39
- package/dist/scope.js +6 -6
- package/dist/settings/sections.js +18 -18
- package/dist/state/chats.js +404 -192
- package/dist/state/index.js +1 -1
- package/dist/state/provider-accounts.js +70 -47
- package/dist/state/providers.js +45 -16
- package/dist/state/usage.js +154 -77
- package/dist/storage.js +69 -68
- package/dist/testing/index.js +1 -1
- package/dist/testing/prompts.js +105 -67
- package/dist/transport.js +10 -10
- package/dist/ui/PlainTextarea.js +27 -3
- package/dist/usage/LimitsList.js +646 -40
- package/dist/usage/UsageBreakdown.js +879 -38
- package/dist/usage/UsageChart.js +311 -32
- package/dist/usage/UsageDialog.js +46 -4
- package/dist/usage/UsageLimits.js +467 -34
- package/dist/usage/UsageLimitsCard.js +95 -11
- package/dist/usage/UsagePage.js +817 -96
- package/dist/usage/UsagePane.js +164 -10
- package/dist/usage/UsageSummary.js +151 -6
- package/dist/usage/UsageTiles.js +164 -14
- package/dist/usage/format.js +32 -32
- package/dist/usage/index.d.ts +1 -1
- package/dist/usage/index.js +2 -1
- package/dist/usage/limit-groups.d.ts +2 -0
- package/dist/usage/limit-groups.js +77 -59
- package/dist/usage/limits.js +78 -43
- package/dist/usage/money.js +20 -4
- package/dist/usage/summary.js +85 -64
- package/package.json +8 -8
- package/src/agents/ModelOptionControl.tsx +3 -1
- package/src/agents/option-words.ts +27 -0
- package/src/chat/account-choice.ts +41 -1
- package/src/chat/composer-effort.ts +32 -0
- package/src/chat/forks.ts +4 -5
- package/src/chat/index.ts +3 -1
- package/src/chat/logic/effort.ts +32 -0
- package/src/chat/logic/picker-entries.ts +45 -10
- package/src/chat/logic/resume-compaction.ts +95 -17
- package/src/chat/logic/timeline.ts +11 -3
- package/src/chat/preferences.ts +35 -0
- package/src/chat/subagent-view.ts +2 -3
- package/src/chat/ui/AnsiOutput.tsx +1 -2
- package/src/chat/ui/BookmarkSubmenu.tsx +3 -3
- package/src/chat/ui/ChatActivity.tsx +14 -22
- package/src/chat/ui/ChatReferenceChip.tsx +2 -3
- package/src/chat/ui/Composer.tsx +15 -7
- package/src/chat/ui/EditDiff.tsx +2 -3
- package/src/chat/ui/LimitState.tsx +2 -2
- package/src/chat/ui/Markdown.tsx +10 -8
- package/src/chat/ui/MermaidBlock.tsx +2 -3
- package/src/chat/ui/Pickers.tsx +49 -29
- package/src/chat/ui/PromptComposer.tsx +7 -9
- package/src/chat/ui/ResumeCompactionDock.tsx +16 -4
- package/src/chat/ui/RunSettings.tsx +67 -28
- package/src/chat/ui/Scrubber.tsx +3 -3
- package/src/chat/ui/ShellCommand.tsx +2 -0
- package/src/chat/ui/SubagentInfo.tsx +2 -3
- package/src/chat/ui/SubagentTimeline.tsx +12 -16
- package/src/chat/ui/Timeline.tsx +6 -6
- package/src/chat/ui/UnifiedDiff.tsx +3 -4
- package/src/chat/ui/VisualFrame.tsx +5 -8
- package/src/chat/ui/code-theme.ts +4 -4
- package/src/chat/ui/composer/placeholder.ts +2 -2
- package/src/chat/ui/composer/use-compaction-offer.ts +36 -16
- package/src/chat/ui/composer/use-composer-menus.ts +4 -9
- package/src/chat/ui/composer/use-composer-submit.ts +2 -1
- package/src/chat/ui/composer/use-effort-stepper.ts +56 -0
- package/src/chat/ui/composer/use-notice.ts +2 -2
- package/src/chat/ui/diff/EditorEditDiff.tsx +9 -13
- package/src/chat/ui/diff/LegacyEditDiff.tsx +12 -17
- package/src/chat/ui/diff/LegacyUnifiedDiff.tsx +13 -21
- package/src/chat/ui/diff/use-review-stack.ts +4 -4
- package/src/chat/ui/diff-theme.ts +3 -3
- package/src/chat/ui/file-links.ts +2 -2
- package/src/chat/ui/intelligent-ui/UiReply.tsx +2 -0
- package/src/chat/ui/intelligent-ui/renderers/chart.tsx +3 -3
- package/src/chat/ui/intelligent-ui/renderers/content.tsx +5 -6
- package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +2 -1
- package/src/chat/ui/intelligent-ui/renderers/map.tsx +2 -1
- package/src/chat/ui/intelligent-ui/use-truncated.ts +16 -19
- package/src/chat/ui/intelligent-ui/use-ui-links.ts +3 -3
- package/src/chat/ui/rows/ForksRow.tsx +3 -5
- package/src/chat/ui/rows/GeneratedImageRow.tsx +2 -1
- package/src/chat/ui/rows/MessageRows.tsx +12 -21
- package/src/chat/ui/rows/SubagentRow.tsx +3 -3
- package/src/chat/ui/rows/TaskRow.tsx +1 -1
- package/src/chat/ui/rows/WorkRows.tsx +10 -5
- package/src/chat/ui/useToggleSet.ts +15 -18
- package/src/chat/ui/visual-theme.ts +2 -3
- package/src/host-hooks.ts +113 -0
- package/src/lazy.tsx +2 -0
- package/src/locales/en/agent-chat.ts +134 -108
- package/src/locales/en/agent-prompts.ts +7 -7
- package/src/locales/en/agent-providers.ts +35 -34
- package/src/locales/en/agent-usage.ts +26 -20
- package/src/locales/nl/agent-chat.ts +126 -100
- package/src/locales/nl/agent-prompts.ts +5 -5
- package/src/locales/nl/agent-providers.ts +33 -32
- package/src/locales/nl/agent-usage.ts +25 -20
- package/src/providers/CliDetail.tsx +2 -1
- package/src/providers/InstallPage.tsx +2 -4
- package/src/providers/ProviderList.tsx +12 -2
- package/src/providers/ProvidersPane.tsx +45 -15
- package/src/providers/pane-target.ts +20 -4
- package/src/state/chats.ts +2 -2
- package/src/usage/LimitsList.tsx +12 -13
- package/src/usage/UsageBreakdown.tsx +17 -6
- package/src/usage/UsageLimits.tsx +2 -1
- package/src/usage/UsagePage.tsx +3 -3
- package/src/usage/index.ts +1 -1
- package/src/usage/limit-groups.ts +12 -0
- package/src/usage/limits.ts +2 -2
- 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 = {
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
67
|
-
|
|
85
|
+
})];
|
|
86
|
+
if (transport.status === 'open') {
|
|
87
|
+
load();
|
|
88
|
+
}
|
|
89
|
+
return () => off.forEach(stop => stop());
|
|
90
|
+
}
|
package/dist/state/providers.js
CHANGED
|
@@ -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 = {
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
59
|
+
return {
|
|
60
|
+
setProviders: providers => useProvidersStore.getState().setProviders(scopeId, providers)
|
|
61
|
+
};
|
|
62
|
+
}
|
package/dist/state/usage.js
CHANGED
|
@@ -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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
23
|
+
USAGE_PREFERENCES_KEY = storageKey();
|
|
16
24
|
});
|
|
17
|
-
const DEFAULTS = {
|
|
25
|
+
const DEFAULTS = {
|
|
26
|
+
period: '7d',
|
|
27
|
+
metric: 'cost',
|
|
28
|
+
currency: 'USD'
|
|
29
|
+
};
|
|
18
30
|
function parsePreferences(raw) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
45
|
+
return {
|
|
46
|
+
period: state.period,
|
|
47
|
+
metric: state.metric,
|
|
48
|
+
currency: state.currency
|
|
49
|
+
};
|
|
35
50
|
}
|
|
36
51
|
function pad(value) {
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = {
|
|
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
|
-
|
|
90
|
+
useUsageStore.setState(storage.read());
|
|
67
91
|
}
|
|
68
92
|
export const useUsageStore = createChatStore((set, get) => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
}
|
|
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
|
-
|
|
112
|
-
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
33
|
+
return options.keys?.[record] ?? `${options.namespace ?? 'adecore'}.${SUFFIXES[record]}`;
|
|
32
34
|
}
|
|
33
35
|
export function chatStorageLegacyKeys(record) {
|
|
34
|
-
|
|
36
|
+
return [...(options.legacyKeys?.[record] ?? []), ...(options.legacyNamespaces ?? []).map(namespace => `${namespace}.${SUFFIXES[record]}`)];
|
|
35
37
|
}
|
|
36
38
|
export function chatStorageAdapter() {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
+
}
|
package/dist/testing/index.js
CHANGED
|
@@ -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';
|