@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.
- package/README.md +1 -1
- 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.d.ts +10 -0
- package/dist/chat/logic/workflow.js +130 -32
- 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 +285 -79
- 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.d.ts +8 -20
- package/dist/chat/ui/mermaid.js +47 -84
- 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.d.ts +3 -0
- package/dist/chat/ui/rows/WorkRows.js +1945 -164
- package/dist/chat/ui/rows/WorkflowRow.js +756 -37
- 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 +42 -0
- package/dist/locales/en/agent-chat.js +755 -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 +42 -0
- package/dist/locales/nl/agent-chat.js +755 -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 +9 -9
- 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/logic/workflow.ts +86 -4
- 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 +57 -49
- 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/mermaid.ts +52 -96
- 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 +11 -6
- package/src/chat/ui/rows/WorkflowRow.tsx +144 -54
- 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 +142 -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 +134 -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/agents/accounts.js
CHANGED
|
@@ -4,102 +4,134 @@ import i18next from 'i18next';
|
|
|
4
4
|
* of them (an older name, or one written by hand) reads as undefined, and the dot takes the accent.
|
|
5
5
|
*/
|
|
6
6
|
export function accountColor(color, accents) {
|
|
7
|
-
|
|
7
|
+
return accents.find(entry => entry.id === color)?.color;
|
|
8
8
|
}
|
|
9
9
|
/*
|
|
10
10
|
* The variable each CLI reads its config folder from, as the host's providers name them. Only for
|
|
11
11
|
* the sentence under the folder; a CLI missing here still works, the sentence just does not name it.
|
|
12
12
|
*/
|
|
13
|
-
export const FOLDER_VARIABLES = {
|
|
13
|
+
export const FOLDER_VARIABLES = {
|
|
14
|
+
claude: 'CLAUDE_CONFIG_DIR',
|
|
15
|
+
codex: 'CODEX_HOME'
|
|
16
|
+
};
|
|
14
17
|
/* The accounts of one CLI, its default one first and the others in the order the machine keeps them. */
|
|
15
18
|
export function accountsOfKind(accounts, kind) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
if (accounts === null) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
const statuses = new Map(accounts.statuses.map(status => [status.id, status]));
|
|
23
|
+
return Object.entries(accounts.accounts).filter(([, account]) => account.kind === kind).map(([id, account]) => ({
|
|
24
|
+
id,
|
|
25
|
+
account,
|
|
26
|
+
status: statuses.get(id) ?? null,
|
|
27
|
+
isDefault: id === kind
|
|
28
|
+
})).sort((a, b) => Number(b.isDefault) - Number(a.isDefault));
|
|
24
29
|
}
|
|
25
30
|
/* A default account nobody named goes by its CLI's name. */
|
|
26
31
|
export function accountName(entry, providerName) {
|
|
27
|
-
|
|
32
|
+
return entry.account.label ?? (entry.isDefault ? providerName : entry.id);
|
|
28
33
|
}
|
|
29
34
|
export function accountLoginOf(accounts, kind) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
if (accounts?.loginCommands?.[kind] !== undefined) {
|
|
36
|
+
return 'terminal';
|
|
37
|
+
}
|
|
38
|
+
return accounts?.chatLogins?.includes(kind) === true ? 'chat' : null;
|
|
34
39
|
}
|
|
35
40
|
export const ACCOUNT_TONE_CLASSES = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
muted: 'text-text-muted',
|
|
42
|
+
'needs-you': 'text-status-needs-you',
|
|
43
|
+
error: 'text-status-error'
|
|
39
44
|
};
|
|
40
45
|
/*
|
|
41
46
|
* What an account's row says about it, in a few words. `canLogIn` is false for a CLI without a config
|
|
42
47
|
* folder: it has no login of its own to report, so being there is all a ready one says.
|
|
43
48
|
*/
|
|
44
49
|
export function accountStatusLine(status, canLogIn) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
50
|
+
const words = (key, values) => i18next.t(`agent-providers:status.${key}`, values);
|
|
51
|
+
switch (status?.state ?? 'checking') {
|
|
52
|
+
case 'checking':
|
|
53
|
+
return {
|
|
54
|
+
text: words('checking'),
|
|
55
|
+
tone: 'muted'
|
|
56
|
+
};
|
|
57
|
+
case 'disabled':
|
|
58
|
+
return {
|
|
59
|
+
text: words('disabled'),
|
|
60
|
+
tone: 'muted'
|
|
61
|
+
};
|
|
62
|
+
case 'not-found':
|
|
63
|
+
return {
|
|
64
|
+
text: words('notFound'),
|
|
65
|
+
tone: 'muted'
|
|
66
|
+
};
|
|
67
|
+
case 'signed-out':
|
|
68
|
+
return {
|
|
69
|
+
text: words('signedOut'),
|
|
70
|
+
tone: 'needs-you'
|
|
71
|
+
};
|
|
72
|
+
case 'ready':
|
|
73
|
+
if (!canLogIn) {
|
|
74
|
+
return {
|
|
75
|
+
text: words('available'),
|
|
76
|
+
tone: 'muted'
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
text: status?.plan ? words('readyPlan', {
|
|
81
|
+
plan: status.plan
|
|
82
|
+
}) : words('ready'),
|
|
83
|
+
tone: 'muted'
|
|
84
|
+
};
|
|
85
|
+
case 'folder-missing':
|
|
86
|
+
return {
|
|
87
|
+
text: words('folderMissing'),
|
|
88
|
+
tone: 'error'
|
|
89
|
+
};
|
|
90
|
+
case 'unavailable':
|
|
91
|
+
return {
|
|
92
|
+
text: words('unavailable'),
|
|
93
|
+
tone: 'muted'
|
|
94
|
+
};
|
|
95
|
+
case 'failed':
|
|
96
|
+
return {
|
|
97
|
+
text: words('failed'),
|
|
98
|
+
tone: 'error'
|
|
99
|
+
};
|
|
100
|
+
}
|
|
67
101
|
}
|
|
68
102
|
/* The part of a name an id can hold, the way the machine makes one: `Work (EU)` becomes `work-eu`. */
|
|
69
103
|
function slugOf(label) {
|
|
70
|
-
|
|
71
|
-
.normalize('NFKD')
|
|
72
|
-
.replace(/[̀-ͯ]/g, '')
|
|
73
|
-
.toLowerCase()
|
|
74
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
75
|
-
.replace(/^-+|-+$/g, '');
|
|
104
|
+
return label.normalize('NFKD').replace(/[̀-ͯ]/g, '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
76
105
|
}
|
|
77
106
|
/* A free id for an account a person links to a folder of their own; one the machine makes gets its id from the machine. */
|
|
78
107
|
export function mintAccountId(kind, label, taken) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
108
|
+
const base = `${kind}_${slugOf(label) || 'account'}`.slice(0, 60).replace(/-+$/, '');
|
|
109
|
+
let id = base;
|
|
110
|
+
for (let suffix = 2; taken.has(id); suffix += 1) {
|
|
111
|
+
id = `${base}-${suffix}`;
|
|
112
|
+
}
|
|
113
|
+
return id;
|
|
85
114
|
}
|
|
86
115
|
/*
|
|
87
116
|
* The first featured accent no account of the CLI wears yet, then any other, so a new one stands apart.
|
|
88
117
|
* An account without a color of its own wears `fallback`, the accent the app is painted in.
|
|
89
118
|
*/
|
|
90
119
|
export function freeAccountColor(entries, accents, fallback) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
120
|
+
const {
|
|
121
|
+
all,
|
|
122
|
+
featured
|
|
123
|
+
} = accents;
|
|
124
|
+
const worn = new Set(entries.map(entry => accountColor(entry.account.color, all) === undefined ? fallback : entry.account.color));
|
|
125
|
+
const choices = [...featured, ...all.map(entry => entry.id).filter(id => !featured.includes(id))];
|
|
126
|
+
return choices.find(id => !worn.has(id)) ?? featured[entries.length % featured.length] ?? fallback;
|
|
95
127
|
}
|
|
96
128
|
/* The accounts of a CLI a picker offers: every one that is on, and the one in use even while it is off. */
|
|
97
129
|
export function offeredAccounts(entries, current) {
|
|
98
|
-
|
|
130
|
+
return entries.filter(entry => entry.account.enabled !== false || entry.id === current);
|
|
99
131
|
}
|
|
100
132
|
/* Whether a person has a choice of account for this CLI at all, which is when a chat shows its account. */
|
|
101
133
|
export function hasAccountChoice(entries) {
|
|
102
|
-
|
|
134
|
+
return entries.filter(entry => entry.account.enabled !== false).length >= 2;
|
|
103
135
|
}
|
|
104
136
|
/*
|
|
105
137
|
* Whether a chat of one account can go on under another, the way the machine decides it: the same
|
|
@@ -107,12 +139,12 @@ export function hasAccountChoice(entries) {
|
|
|
107
139
|
* not say where an account writes them answers no, so the person forks instead of being refused.
|
|
108
140
|
*/
|
|
109
141
|
export function canContinueOn(accounts, kind, from, to) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
142
|
+
const fromId = from ?? kind;
|
|
143
|
+
const toId = to ?? kind;
|
|
144
|
+
if (fromId === toId) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
const folderOf = id => accounts?.accounts[id]?.kind === kind ? accounts.statuses.find(status => status.id === id)?.transcripts : undefined;
|
|
148
|
+
const folder = folderOf(fromId);
|
|
149
|
+
return folder !== undefined && folder !== '' && folder === folderOf(toId);
|
|
150
|
+
}
|
|
@@ -5,8 +5,10 @@ let hostMarks = {};
|
|
|
5
5
|
* A later call replaces the whole set.
|
|
6
6
|
*/
|
|
7
7
|
export function configureAgentMarks(marks) {
|
|
8
|
-
|
|
8
|
+
hostMarks = {
|
|
9
|
+
...marks
|
|
10
|
+
};
|
|
9
11
|
}
|
|
10
12
|
export function hostAgentMark(kind) {
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
+
return hostMarks[kind];
|
|
14
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { c as _c } from "react/compiler-runtime";
|
|
1
2
|
import { useProviders } from '../state/providers.js';
|
|
2
3
|
/*
|
|
3
4
|
* A model id as a person reads it, for a model no catalog names: without its vendor prefix and its
|
|
@@ -5,52 +6,62 @@ import { useProviders } from '../state/providers.js';
|
|
|
5
6
|
* 5).
|
|
6
7
|
*/
|
|
7
8
|
export function modelNameFromSlug(slug) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
words.push(word);
|
|
9
|
+
const bare = slug.slice(slug.lastIndexOf('/') + 1).replace(/-\d{6,8}$/, '');
|
|
10
|
+
const words = [];
|
|
11
|
+
for (const word of bare.split('-')) {
|
|
12
|
+
const previous = words.at(-1);
|
|
13
|
+
if (previous !== undefined && /^\d+$/.test(word) && /\d$/.test(previous)) {
|
|
14
|
+
words[words.length - 1] = `${previous}.${word}`;
|
|
15
|
+
continue;
|
|
17
16
|
}
|
|
18
|
-
|
|
17
|
+
words.push(word);
|
|
18
|
+
}
|
|
19
|
+
return words.map(word => word === 'gpt' ? 'GPT' : word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
|
|
19
20
|
}
|
|
20
21
|
/* What the CLI calls the model, so every surface says the same thing; a slug it no longer offers is read as one. */
|
|
21
22
|
export function modelName(slug, models) {
|
|
22
|
-
|
|
23
|
+
return models?.find(entry => entry.slug === slug)?.name ?? modelNameFromSlug(slug);
|
|
23
24
|
}
|
|
24
25
|
export function agentChipOf(providers, provider, model) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
const owner = providers.find(entry => entry.kind === provider);
|
|
27
|
+
return {
|
|
28
|
+
mark: provider === 'claude' || provider === 'codex' ? 'logo' : 'icon',
|
|
29
|
+
name: owner?.name ?? provider,
|
|
30
|
+
model: modelName(model, owner?.models)
|
|
31
|
+
};
|
|
31
32
|
}
|
|
32
33
|
/* The same answer for the machine in scope, whose catalog is the only one that can name the slug. */
|
|
33
34
|
export function useModelName(provider, slug) {
|
|
34
|
-
|
|
35
|
+
const $ = _c(3);
|
|
36
|
+
let t0;
|
|
37
|
+
if ($[0] !== provider || $[1] !== slug) {
|
|
38
|
+
t0 = state => modelName(slug, state.providers.find(entry => entry.kind === provider)?.models);
|
|
39
|
+
$[0] = provider;
|
|
40
|
+
$[1] = slug;
|
|
41
|
+
$[2] = t0;
|
|
42
|
+
} else {
|
|
43
|
+
t0 = $[2];
|
|
44
|
+
}
|
|
45
|
+
return useProviders(t0);
|
|
35
46
|
}
|
|
36
47
|
/*
|
|
37
48
|
* The leading words every model of a catalog shares, so a tight spot can say `Opus 5.5` where the
|
|
38
49
|
* CLI says `Claude Opus 5.5`. Whole words only, so `GPT-6` never loses its `GPT-`, and never all of a name.
|
|
39
50
|
*/
|
|
40
51
|
export function sharedModelPrefix(models) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
const names = models.map(entry => entry.name.split(' '));
|
|
53
|
+
const first = names[0];
|
|
54
|
+
if (first === undefined || names.length < 2) {
|
|
55
|
+
return '';
|
|
56
|
+
}
|
|
57
|
+
let count = 0;
|
|
58
|
+
while (names.every(words => words.length > count + 1 && words[count] === first[count])) {
|
|
59
|
+
count++;
|
|
60
|
+
}
|
|
61
|
+
return count === 0 ? '' : `${first.slice(0, count).join(' ')} `;
|
|
51
62
|
}
|
|
52
63
|
/* A model's name without the words its whole catalog shares. */
|
|
53
64
|
export function shortModelName(name, models) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
65
|
+
const prefix = sharedModelPrefix(models ?? []);
|
|
66
|
+
return prefix !== '' && name.startsWith(prefix) ? name.slice(prefix.length) : name;
|
|
67
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
function fits(option, value) {
|
|
2
|
-
|
|
2
|
+
return option.type === 'boolean' ? typeof value === 'boolean' : typeof value === 'string' && option.choices.some(choice => choice.id === value);
|
|
3
3
|
}
|
|
4
4
|
/* What an option runs at: the value picked, else the model's own default. A value the model does not offer counts as unpicked. */
|
|
5
5
|
export function optionValue(option, options) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
const picked = options[option.id];
|
|
7
|
+
if (fits(option, picked)) {
|
|
8
|
+
return picked;
|
|
9
|
+
}
|
|
10
|
+
return option.type === 'boolean' ? option.defaultValue : option.defaultChoice;
|
|
11
11
|
}
|
|
12
12
|
/* The picked options that `model` offers as well, so switching models keeps an effort the next one also has. */
|
|
13
13
|
export function carryOptions(options, model) {
|
|
14
|
-
|
|
15
|
-
}
|
|
14
|
+
return Object.fromEntries((model?.options ?? []).filter(option => fits(option, options[option.id])).map(option => [option.id, options[option.id]]));
|
|
15
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
function partsOf(version, strict) {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
const found = (strict ? /^(\d+)\.(\d+)(?:\.(\d+))?$/ : /(\d+)\.(\d+)\.(\d+)/).exec(version);
|
|
3
|
+
return found === null ? null : [Number(found[1]), Number(found[2]), Number(found[3] ?? 0)];
|
|
4
4
|
}
|
|
5
5
|
/* Whether the model's reported name is this model: its slug, the slug with a suffix such as `[1m]`. */
|
|
6
6
|
function isReported(slug, reported) {
|
|
7
|
-
|
|
7
|
+
return [...reported].some(name => name === slug || name.startsWith(`${slug}[`));
|
|
8
8
|
}
|
|
9
9
|
/*
|
|
10
10
|
* What a model asks of the CLI that is too old for it, or null when nothing blocks it: no minimum is
|
|
@@ -12,15 +12,18 @@ function isReported(slug, reported) {
|
|
|
12
12
|
* CLI is new enough, or a chat of this provider already reported running the model.
|
|
13
13
|
*/
|
|
14
14
|
export function modelRequirementOf(model, provider, reported) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
for (let i = 0; i < 3; i++) {
|
|
21
|
-
if (installed[i] !== minimum[i]) {
|
|
22
|
-
return (installed[i] ?? 0) > (minimum[i] ?? 0) ? null : { cli: provider.name, minVersion: model.minCliVersion ?? '' };
|
|
23
|
-
}
|
|
24
|
-
}
|
|
15
|
+
const minimum = model.minCliVersion === undefined ? null : partsOf(model.minCliVersion, true);
|
|
16
|
+
const installed = provider.version === null ? null : partsOf(provider.version, false);
|
|
17
|
+
if (minimum === null || installed === null || isReported(model.slug, reported)) {
|
|
25
18
|
return null;
|
|
26
|
-
}
|
|
19
|
+
}
|
|
20
|
+
for (let i = 0; i < 3; i++) {
|
|
21
|
+
if (installed[i] !== minimum[i]) {
|
|
22
|
+
return (installed[i] ?? 0) > (minimum[i] ?? 0) ? null : {
|
|
23
|
+
cli: provider.name,
|
|
24
|
+
minVersion: model.minCliVersion ?? ''
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ModelOptionDescriptor } from '@adecore/agent-contracts';
|
|
2
|
+
export declare function optionWord(option: ModelOptionDescriptor): string;
|
|
3
|
+
export declare function choiceWord(optionId: string, choice: {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
}): string;
|
|
7
|
+
export declare function localizedOption(option: ModelOptionDescriptor): ModelOptionDescriptor;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import i18next from 'i18next';
|
|
2
|
+
/*
|
|
3
|
+
* The model catalogs write a model's knobs in English. Those words read in the person's language; a word
|
|
4
|
+
* that differs from the catalog's is an agent's own and stays as the agent wrote it.
|
|
5
|
+
*/
|
|
6
|
+
function catalogWord(key, written) {
|
|
7
|
+
return i18next.t(key, {
|
|
8
|
+
lng: 'en',
|
|
9
|
+
defaultValue: ''
|
|
10
|
+
}) === written ? i18next.t(key) : written;
|
|
11
|
+
}
|
|
12
|
+
export function optionWord(option) {
|
|
13
|
+
return catalogWord(`agent-chat:modelOptions.${option.id}.label`, option.label);
|
|
14
|
+
}
|
|
15
|
+
export function choiceWord(optionId, choice) {
|
|
16
|
+
return catalogWord(`agent-chat:modelOptions.${optionId}.choices.${choice.id}`, choice.label);
|
|
17
|
+
}
|
|
18
|
+
/* The option with the words a person reads, for a surface that draws its labels and choices. */
|
|
19
|
+
export function localizedOption(option) {
|
|
20
|
+
const label = optionWord(option);
|
|
21
|
+
if (option.type !== 'select') {
|
|
22
|
+
return {
|
|
23
|
+
...option,
|
|
24
|
+
label
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
...option,
|
|
29
|
+
label,
|
|
30
|
+
choices: option.choices.map(choice => ({
|
|
31
|
+
...choice,
|
|
32
|
+
label: choiceWord(option.id, choice)
|
|
33
|
+
}))
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -4,9 +4,9 @@ import { siGithubcopilot } from 'simple-icons';
|
|
|
4
4
|
* exception for provider marks. One path each, in `currentColor`, so a row decides how loud the logo is.
|
|
5
5
|
*/
|
|
6
6
|
export const PROVIDER_PATHS = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
7
|
+
claude: 'M4.709 15.955l4.72-2.647.079-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.377-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.048.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.607.212-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.914-1.316-.012.01z',
|
|
8
|
+
codex: 'M21.55 10.004a5.416 5.416 0 00-.478-4.501c-1.217-2.09-3.662-3.166-6.05-2.66A5.59 5.59 0 0010.831 1C8.39.995 6.224 2.546 5.473 4.838A5.553 5.553 0 001.76 7.496a5.487 5.487 0 00.691 6.5 5.416 5.416 0 00.477 4.502c1.217 2.09 3.662 3.165 6.05 2.66A5.586 5.586 0 0013.168 23c2.443.006 4.61-1.546 5.361-3.84a5.554 5.554 0 003.715-2.66 5.488 5.488 0 00-.693-6.497v.001zm-8.381 11.558a4.199 4.199 0 01-2.675-.954c.034-.018.093-.05.132-.074l4.44-2.53a.71.71 0 00.364-.623v-6.176l1.877 1.069c.02.01.033.029.036.05v5.115c-.003 2.274-1.87 4.118-4.174 4.123zM4.192 17.78a4.059 4.059 0 01-.498-2.763c.032.019.09.055.131.078l4.44 2.53c.225.13.504.13.73 0l5.42-3.088v2.138a.068.068 0 01-.027.057L9.9 19.288c-1.999 1.136-4.552.46-5.707-1.51h-.001zM3.023 8.216A4.15 4.15 0 015.198 6.41l-.002.151v5.06a.711.711 0 00.364.624l5.42 3.087-1.876 1.07a.067.067 0 01-.063.005l-4.489-2.559c-1.995-1.14-2.679-3.658-1.53-5.63h.001zm15.417 3.54l-5.42-3.088L14.896 7.6a.067.067 0 01.063-.006l4.489 2.557c1.998 1.14 2.683 3.662 1.529 5.633a4.163 4.163 0 01-2.174 1.807V12.38a.71.71 0 00-.363-.623zm1.867-2.773a6.04 6.04 0 00-.132-.078l-4.44-2.53a.731.731 0 00-.729 0l-5.42 3.088V7.325a.068.068 0 01.027-.057L14.1 4.713c2-1.137 4.555-.46 5.707 1.513.487.833.664 1.809.499 2.757h.001zm-11.741 3.81l-1.877-1.068a.065.065 0 01-.036-.051V6.559c.001-2.277 1.873-4.122 4.181-4.12.976 0 1.92.338 2.671.954-.034.018-.092.05-.131.073l-4.44 2.53a.71.71 0 00-.365.623l-.003 6.173v.001zm1.02-2.168L12 9.25l2.414 1.375v2.75L12 14.75l-2.415-1.375v-2.75z',
|
|
9
|
+
nanogpt: 'M5 20V4h2.6l8.8 11.2V4H19v16h-2.6L7.6 8.8V20z',
|
|
10
|
+
grok: 'M6.469 8.776 16.512 23h-4.464L2.005 8.776H6.47Zm-.004 7.9 2.233 3.164L6.467 23H2l4.465-6.324ZM22 2.582V23h-3.659V7.764L22 2.582ZM22 1l-9.952 14.095-2.233-3.163L17.533 1H22Z',
|
|
11
|
+
copilot: siGithubcopilot.path
|
|
12
|
+
};
|
|
@@ -4,20 +4,40 @@ import { CircleCheck, CircleSlash, CircleX, Hourglass, LoaderCircle } from 'luci
|
|
|
4
4
|
* spinner stops under reduced motion with every other animation.
|
|
5
5
|
*/
|
|
6
6
|
const LOOKS = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
running: {
|
|
8
|
+
icon: LoaderCircle,
|
|
9
|
+
tone: 'text-status-running',
|
|
10
|
+
spins: true
|
|
11
|
+
},
|
|
12
|
+
// The hourglass of a chat that stopped on a limit, since that is what holds the work up.
|
|
13
|
+
paused: {
|
|
14
|
+
icon: Hourglass,
|
|
15
|
+
tone: 'text-text-faint',
|
|
16
|
+
spins: false
|
|
17
|
+
},
|
|
18
|
+
done: {
|
|
19
|
+
icon: CircleCheck,
|
|
20
|
+
tone: 'text-status-idle',
|
|
21
|
+
spins: false
|
|
22
|
+
},
|
|
23
|
+
failed: {
|
|
24
|
+
icon: CircleX,
|
|
25
|
+
tone: 'text-status-error',
|
|
26
|
+
spins: false
|
|
27
|
+
},
|
|
28
|
+
cancelled: {
|
|
29
|
+
icon: CircleSlash,
|
|
30
|
+
tone: 'text-text-faint',
|
|
31
|
+
spins: false
|
|
32
|
+
}
|
|
13
33
|
};
|
|
14
34
|
export function statusLookOf(word) {
|
|
15
|
-
|
|
35
|
+
return LOOKS[word];
|
|
16
36
|
}
|
|
17
37
|
/* A task calls its running state `open`, which is the host's word for it and not a person's; an open task whose child stopped on a limit is paused. */
|
|
18
38
|
export function taskStatusWord(task) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
39
|
+
if (task.status !== 'open') {
|
|
40
|
+
return task.status;
|
|
41
|
+
}
|
|
42
|
+
return task.paused === undefined ? 'running' : 'paused';
|
|
43
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AgentKind, ProviderAccounts } from '@adecore/agent-contracts';
|
|
2
2
|
import { type AccountEntry } from '../agents/accounts.js';
|
|
3
|
+
import { type ProviderAccountsRow } from '../state/provider-accounts.js';
|
|
3
4
|
export interface AccountChoice {
|
|
4
5
|
accounts: ProviderAccounts;
|
|
5
6
|
offered: AccountEntry[];
|
|
@@ -9,3 +10,15 @@ export interface AccountChoice {
|
|
|
9
10
|
nameOf(entry: AccountEntry): string;
|
|
10
11
|
}
|
|
11
12
|
export declare function useAccountChoice(kind: AgentKind | null, account: string | undefined): AccountChoice | null;
|
|
13
|
+
export type NewAccountChoice = {
|
|
14
|
+
status: 'loading';
|
|
15
|
+
} | {
|
|
16
|
+
status: 'unsupported';
|
|
17
|
+
} | {
|
|
18
|
+
status: 'ready';
|
|
19
|
+
offered: AccountEntry[];
|
|
20
|
+
providerName: string;
|
|
21
|
+
nameOf(entry: AccountEntry): string;
|
|
22
|
+
};
|
|
23
|
+
export declare function newAccountChoiceOf(row: ProviderAccountsRow, kind: AgentKind | null, providerName: string): NewAccountChoice;
|
|
24
|
+
export declare function useNewAccountChoice(kind: AgentKind | null): NewAccountChoice;
|