@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
package/dist/chat/mentions.js
CHANGED
|
@@ -6,25 +6,25 @@ export const MENTION_DRAG_TYPE = 'application/x-adecore-mention';
|
|
|
6
6
|
export const LEGACY_MENTION_DRAG_TYPE = 'application/x-ruimte-mention';
|
|
7
7
|
export const MENTION_DRAG_TYPES = [MENTION_DRAG_TYPE, LEGACY_MENTION_DRAG_TYPE];
|
|
8
8
|
export function carriesMentions(types) {
|
|
9
|
-
|
|
9
|
+
return MENTION_DRAG_TYPES.some(type => types.includes(type));
|
|
10
10
|
}
|
|
11
11
|
export function droppedMentions(data) {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const text = data.getData(MENTION_DRAG_TYPE) || data.getData(LEGACY_MENTION_DRAG_TYPE);
|
|
13
|
+
return text.trim() === '' ? [] : text.trim().split(/\s+/);
|
|
14
14
|
}
|
|
15
15
|
export function writeMentionDrag(data, paths, legacy = true) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
const text = paths.join(' ');
|
|
17
|
+
data.setData(MENTION_DRAG_TYPE, text);
|
|
18
|
+
if (legacy) {
|
|
19
|
+
data.setData(LEGACY_MENTION_DRAG_TYPE, text);
|
|
20
|
+
}
|
|
21
21
|
}
|
|
22
22
|
function isBoundary(char) {
|
|
23
|
-
|
|
23
|
+
return char === undefined || /\s/.test(char);
|
|
24
24
|
}
|
|
25
25
|
// A path at the end of a sentence still counts, so "open @a.ts." is a mention of a.ts.
|
|
26
26
|
function isTokenEnd(char) {
|
|
27
|
-
|
|
27
|
+
return isBoundary(char) || /[.,;:!?)]/.test(char);
|
|
28
28
|
}
|
|
29
29
|
/*
|
|
30
30
|
* The `<sigil>word` the caret sits in, if any. The sigil has to open a word (start of text or after
|
|
@@ -32,152 +32,192 @@ function isTokenEnd(char) {
|
|
|
32
32
|
* closed with whitespace yet.
|
|
33
33
|
*/
|
|
34
34
|
function findQuery(text, caret, sigil) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
const before = text.slice(0, caret);
|
|
36
|
+
const at = before.lastIndexOf(sigil);
|
|
37
|
+
if (at < 0 || !isBoundary(before[at - 1])) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const query = before.slice(at + 1);
|
|
41
|
+
if (/\s/.test(query) || !isBoundary(text[caret])) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
start: at,
|
|
46
|
+
query
|
|
47
|
+
};
|
|
45
48
|
}
|
|
46
49
|
export function findMentionQuery(text, caret) {
|
|
47
|
-
|
|
50
|
+
return findQuery(text, caret, '@');
|
|
48
51
|
}
|
|
49
52
|
/* The `$word` the caret sits in. The name has to start with a letter, so `$20` and `$1e6` stay text. */
|
|
50
53
|
export function findSkillQuery(text, caret) {
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
const found = findQuery(text, caret, '$');
|
|
55
|
+
return found === null || found.query !== '' && !/^[A-Za-z]/.test(found.query) ? null : found;
|
|
53
56
|
}
|
|
54
57
|
/* Replaces the `<sigil>query` under the caret with the chosen token and a space, and says where the caret goes. */
|
|
55
58
|
export function insertToken(text, query, sigil, value) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
const end = query.start + 1 + query.query.length;
|
|
60
|
+
const token = `${sigil}${value} `;
|
|
61
|
+
return {
|
|
62
|
+
text: `${text.slice(0, query.start)}${token}${text.slice(end)}`,
|
|
63
|
+
caret: query.start + token.length
|
|
64
|
+
};
|
|
59
65
|
}
|
|
60
66
|
/* Takes the `<sigil>query` under the caret out, for a pick that lands beside the text instead of in it. */
|
|
61
67
|
export function dropQuery(text, query) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
return {
|
|
69
|
+
text: `${text.slice(0, query.start)}${text.slice(query.start + 1 + query.query.length)}`,
|
|
70
|
+
caret: query.start
|
|
71
|
+
};
|
|
66
72
|
}
|
|
67
73
|
export function insertMention(text, query, path) {
|
|
68
|
-
|
|
74
|
+
return insertToken(text, query, '@', path);
|
|
69
75
|
}
|
|
70
76
|
export function insertSkill(text, query, name) {
|
|
71
|
-
|
|
77
|
+
return insertToken(text, query, '$', name);
|
|
72
78
|
}
|
|
73
|
-
export const NO_MENTION_SEARCH = {
|
|
79
|
+
export const NO_MENTION_SEARCH = {
|
|
80
|
+
query: null,
|
|
81
|
+
files: []
|
|
82
|
+
};
|
|
74
83
|
/* What Enter or Tab takes from the `@` list at `index`. Files still on screen from an older query are never taken. */
|
|
75
84
|
export function mentionPick(index, chats, search, query) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return
|
|
85
|
+
const chat = chats[index];
|
|
86
|
+
if (chat !== undefined) {
|
|
87
|
+
return {
|
|
88
|
+
kind: 'chat',
|
|
89
|
+
chat
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (search.query !== query) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
const path = search.files[index - chats.length] ?? search.files[0];
|
|
96
|
+
return path === undefined ? null : {
|
|
97
|
+
kind: 'file',
|
|
98
|
+
path
|
|
99
|
+
};
|
|
85
100
|
}
|
|
86
101
|
function findToken(text, sigil, value, from) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
index = text.indexOf(token, index + 1);
|
|
102
|
+
const token = `${sigil}${value}`;
|
|
103
|
+
let index = text.indexOf(token, from);
|
|
104
|
+
while (index >= 0) {
|
|
105
|
+
if (isBoundary(text[index - 1]) && isTokenEnd(text[index + token.length])) {
|
|
106
|
+
return index;
|
|
94
107
|
}
|
|
95
|
-
|
|
108
|
+
index = text.indexOf(token, index + 1);
|
|
109
|
+
}
|
|
110
|
+
return -1;
|
|
96
111
|
}
|
|
97
112
|
function present(text, sigil, chosen) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
113
|
+
const found = [];
|
|
114
|
+
for (const value of new Set(chosen)) {
|
|
115
|
+
const index = findToken(text, sigil, value, 0);
|
|
116
|
+
if (index >= 0) {
|
|
117
|
+
found.push({
|
|
118
|
+
index,
|
|
119
|
+
value
|
|
120
|
+
});
|
|
104
121
|
}
|
|
105
|
-
|
|
122
|
+
}
|
|
123
|
+
return found.sort((a, b) => a.index - b.index).map(entry => entry.value);
|
|
106
124
|
}
|
|
107
125
|
/* The chosen mentions that still sit in the text as a whole `@path` token, in text order and without doubles. */
|
|
108
126
|
export function presentMentions(text, chosen) {
|
|
109
|
-
|
|
127
|
+
return present(text, '@', chosen);
|
|
110
128
|
}
|
|
111
129
|
/* The chosen skills that still sit in the text as a whole `$name` token, in text order and without doubles. */
|
|
112
130
|
export function presentSkills(text, chosen) {
|
|
113
|
-
|
|
131
|
+
return present(text, '$', chosen);
|
|
114
132
|
}
|
|
115
133
|
/* The characters a segment stands for, sigil included; joined, the segments spell the text they were cut from. */
|
|
116
134
|
export function chipText(segment) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
135
|
+
if (segment.kind === 'mention') {
|
|
136
|
+
return `@${segment.path}`;
|
|
137
|
+
}
|
|
138
|
+
if (segment.kind === 'skill') {
|
|
139
|
+
return `$${segment.name}`;
|
|
140
|
+
}
|
|
141
|
+
return segment.text;
|
|
124
142
|
}
|
|
125
143
|
/*
|
|
126
144
|
* The paths in a pasted text that is nothing but `@path` tokens, which is what copying mentions from
|
|
127
145
|
* a list of files puts on the clipboard. Any other text, an email address included, is text.
|
|
128
146
|
*/
|
|
129
147
|
export function pastedMentions(text) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
148
|
+
const tokens = text.trim().split(/\s+/);
|
|
149
|
+
if (tokens.some(token => !/^@[^\s@]+$/.test(token))) {
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
return [...new Set(tokens.map(token => token.slice(1)))];
|
|
135
153
|
}
|
|
136
154
|
/*
|
|
137
155
|
* Where the chosen mentions and skills sit in the text, in text order; longer values win when one
|
|
138
156
|
* prefixes another. A token that overlaps an excluded range (a code span, say) is text.
|
|
139
157
|
*/
|
|
140
158
|
export function chipRanges(text, mentions, skills = [], excluded = []) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
159
|
+
const tokens = [...[...new Set(mentions)].map(value => ({
|
|
160
|
+
sigil: '@',
|
|
161
|
+
kind: 'mention',
|
|
162
|
+
value
|
|
163
|
+
})), ...[...new Set(skills)].map(value => ({
|
|
164
|
+
sigil: '$',
|
|
165
|
+
kind: 'skill',
|
|
166
|
+
value
|
|
167
|
+
}))].sort((a, b) => b.value.length - a.value.length);
|
|
168
|
+
const allowed = (from, to) => !excluded.some(range => from < range.to && to > range.from);
|
|
169
|
+
const ranges = [];
|
|
170
|
+
let cursor = 0;
|
|
171
|
+
while (cursor < text.length) {
|
|
172
|
+
let best = null;
|
|
173
|
+
for (const token of tokens) {
|
|
174
|
+
const length = token.value.length + 1;
|
|
175
|
+
let index = findToken(text, token.sigil, token.value, cursor);
|
|
176
|
+
while (index >= 0 && !allowed(index, index + length)) {
|
|
177
|
+
index = findToken(text, token.sigil, token.value, index + 1);
|
|
178
|
+
}
|
|
179
|
+
if (index >= 0 && (best === null || index < best.from)) {
|
|
180
|
+
best = {
|
|
181
|
+
from: index,
|
|
182
|
+
to: index + length,
|
|
183
|
+
kind: token.kind,
|
|
184
|
+
value: token.value
|
|
185
|
+
};
|
|
186
|
+
}
|
|
165
187
|
}
|
|
166
|
-
|
|
188
|
+
if (best === null) {
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
ranges.push(best);
|
|
192
|
+
cursor = best.to;
|
|
193
|
+
}
|
|
194
|
+
return ranges;
|
|
167
195
|
}
|
|
168
196
|
/* Splits the text so a renderer can draw the mentions and skills as chips. */
|
|
169
197
|
export function tokenizeChips(text, mentions, skills = []) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
if (cursor < text.length) {
|
|
180
|
-
segments.push({ kind: 'text', text: text.slice(cursor) });
|
|
198
|
+
const segments = [];
|
|
199
|
+
let cursor = 0;
|
|
200
|
+
for (const range of chipRanges(text, mentions, skills)) {
|
|
201
|
+
if (range.from > cursor) {
|
|
202
|
+
segments.push({
|
|
203
|
+
kind: 'text',
|
|
204
|
+
text: text.slice(cursor, range.from)
|
|
205
|
+
});
|
|
181
206
|
}
|
|
182
|
-
|
|
183
|
-
|
|
207
|
+
segments.push(range.kind === 'mention' ? {
|
|
208
|
+
kind: 'mention',
|
|
209
|
+
path: range.value
|
|
210
|
+
} : {
|
|
211
|
+
kind: 'skill',
|
|
212
|
+
name: range.value
|
|
213
|
+
});
|
|
214
|
+
cursor = range.to;
|
|
215
|
+
}
|
|
216
|
+
if (cursor < text.length) {
|
|
217
|
+
segments.push({
|
|
218
|
+
kind: 'text',
|
|
219
|
+
text: text.slice(cursor)
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return segments;
|
|
223
|
+
}
|
|
@@ -1,58 +1,55 @@
|
|
|
1
1
|
import { chatStorageAdapter, hydrateChatStorage } from '../storage.js';
|
|
2
2
|
export function persistedJson(key, parse, fallback, legacyKeys = () => []) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
memory = parse(raw);
|
|
34
|
-
return memory;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
return memory;
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
write: (value) => {
|
|
41
|
-
hydrateChatStorage();
|
|
42
|
-
memory = value;
|
|
43
|
-
unwritten = true;
|
|
44
|
-
try {
|
|
45
|
-
const storage = chatStorageAdapter();
|
|
46
|
-
if (!storage) {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
storage.setItem(currentKey(), JSON.stringify(value));
|
|
50
|
-
unwritten = false;
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return false;
|
|
3
|
+
let memory = fallback;
|
|
4
|
+
let unwritten = false;
|
|
5
|
+
const currentKey = () => typeof key === 'string' ? key : key();
|
|
6
|
+
return {
|
|
7
|
+
read: () => {
|
|
8
|
+
hydrateChatStorage();
|
|
9
|
+
if (unwritten) {
|
|
10
|
+
return memory;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const storage = chatStorageAdapter();
|
|
14
|
+
if (!storage) {
|
|
15
|
+
return memory;
|
|
16
|
+
}
|
|
17
|
+
let raw = storage.getItem(currentKey());
|
|
18
|
+
if (raw === null) {
|
|
19
|
+
for (const legacy of legacyKeys()) {
|
|
20
|
+
raw = storage.getItem(legacy);
|
|
21
|
+
if (raw !== null) {
|
|
22
|
+
// Keep the old key for clients still using it, and migrate without changing the record.
|
|
23
|
+
try {
|
|
24
|
+
storage.setItem(currentKey(), raw);
|
|
25
|
+
} catch {
|
|
26
|
+
// A full storage still lets the existing record be read.
|
|
27
|
+
}
|
|
28
|
+
break;
|
|
55
29
|
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
memory = parse(raw);
|
|
33
|
+
return memory;
|
|
34
|
+
} catch {
|
|
35
|
+
return memory;
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
write: value => {
|
|
39
|
+
hydrateChatStorage();
|
|
40
|
+
memory = value;
|
|
41
|
+
unwritten = true;
|
|
42
|
+
try {
|
|
43
|
+
const storage = chatStorageAdapter();
|
|
44
|
+
if (!storage) {
|
|
45
|
+
return false;
|
|
56
46
|
}
|
|
57
|
-
|
|
58
|
-
|
|
47
|
+
storage.setItem(currentKey(), JSON.stringify(value));
|
|
48
|
+
unwritten = false;
|
|
49
|
+
return true;
|
|
50
|
+
} catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -9,6 +9,7 @@ export interface ChatPreferences {
|
|
|
9
9
|
accountByMachine: Record<string, Partial<Record<AgentKind, string>>>;
|
|
10
10
|
readingWidth: ChatReadingWidth;
|
|
11
11
|
sendKey: ChatSendKey;
|
|
12
|
+
favoriteModels: Partial<Record<AgentKind, string[]>>;
|
|
12
13
|
changedAt: number;
|
|
13
14
|
}
|
|
14
15
|
export declare const DEFAULT_CHAT_PREFERENCES: ChatPreferences;
|
|
@@ -29,4 +30,7 @@ export declare function rememberReadingWidth(readingWidth: ChatReadingWidth): vo
|
|
|
29
30
|
export declare function rememberSendKey(sendKey: ChatSendKey): void;
|
|
30
31
|
export declare function rememberChatSelection(provider: AgentKind, selection: ModelSelection): void;
|
|
31
32
|
export declare function rememberChatAccount(scopeId: string, provider: AgentKind, account: string | null): void;
|
|
33
|
+
export declare function favoriteModelsOf(favorites: ChatPreferences['favoriteModels'], provider: AgentKind): ReadonlySet<string>;
|
|
34
|
+
export declare function withFavoriteToggled(preferences: ChatPreferences, provider: AgentKind, slug: string): ChatPreferences;
|
|
35
|
+
export declare function toggleFavoriteModel(provider: AgentKind, slug: string): void;
|
|
32
36
|
export declare function forgetChatSelection(provider: AgentKind): void;
|