@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
|
@@ -1,131 +1,137 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
unreachable: 'De CLI was niet bereikbaar.',
|
|
16
|
-
filter: 'Accounts waarvan je de limieten ziet',
|
|
17
|
-
signedOut: 'Niet ingelogd',
|
|
18
|
-
signedOutDetail: 'Niet ingelogd. Log in om de limieten te zien.',
|
|
19
|
-
logIn: 'Inloggen',
|
|
20
|
-
nextReset: '{{window}} reset {{at}}',
|
|
21
|
-
checked: {
|
|
22
|
-
now: 'nu',
|
|
23
|
-
ago: '{{duration}} geleden',
|
|
24
|
-
fromTurn: 'Uit een turn · {{when}}'
|
|
25
|
-
}
|
|
2
|
+
limits: {
|
|
3
|
+
title: 'Limieten',
|
|
4
|
+
explain: 'De markering toont waar het verbruik bij een gelijk tempo zou staan. Voorbij de markering verbruik je sneller dan het weer vrijkomt.',
|
|
5
|
+
loading: 'Limieten laden…',
|
|
6
|
+
used: '{{percent}}% gebruikt',
|
|
7
|
+
bar: '{{window}}, {{percent}}% gebruikt',
|
|
8
|
+
windowPassed: '{{percent}}% van het venster voorbij',
|
|
9
|
+
faster: 'Sneller verbruikt dan het weer vrijkomt.',
|
|
10
|
+
slower: 'Langzamer verbruikt dan het weer vrijkomt.',
|
|
11
|
+
pace: {
|
|
12
|
+
ahead: '{{percent}}% gebruikt, voor op een gelijkmatig tempo van {{pace}}%',
|
|
13
|
+
behind: '{{percent}}% gebruikt, achter op een gelijkmatig tempo van {{pace}}%',
|
|
14
|
+
even: '{{percent}}% gebruikt, op een gelijkmatig tempo'
|
|
26
15
|
},
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
metric: 'Eenheid',
|
|
55
|
-
failed: 'Verbruik kon niet worden getekend',
|
|
56
|
-
periods: {
|
|
57
|
-
today: 'Vandaag',
|
|
58
|
-
'7d': '7 dagen',
|
|
59
|
-
'30d': '30 dagen',
|
|
60
|
-
'90d': '90 dagen'
|
|
61
|
-
},
|
|
62
|
-
metrics: {
|
|
63
|
-
cost: 'Kosten',
|
|
64
|
-
tokens: 'Tokens'
|
|
65
|
-
},
|
|
66
|
-
accounts: {
|
|
67
|
-
label: 'Account',
|
|
68
|
-
all: 'Alle accounts'
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
empty: {
|
|
72
|
-
noTranscripts: 'Geen transcripts van Claude of Codex gevonden. De machine leest ~/.claude/projects en ~/.codex/sessions.',
|
|
73
|
-
noUsage: 'Nog geen verbruik op deze machine.'
|
|
74
|
-
},
|
|
75
|
-
agents: {
|
|
76
|
-
none: 'Op deze machine staat geen agent-CLI.',
|
|
77
|
-
installed: 'Deze machine heeft {{list}}.',
|
|
78
|
-
settings: 'Agent-instellingen'
|
|
16
|
+
even: 'Even snel verbruikt als het vrijkomt.',
|
|
17
|
+
resets: 'Reset {{at}}',
|
|
18
|
+
none: 'Nog geen limieten gemeld.',
|
|
19
|
+
notInstalled: 'Niet geïnstalleerd op deze machine.',
|
|
20
|
+
noSubscription: 'API-sleutel, geen abonnementslimieten.',
|
|
21
|
+
unreachable: 'Kon de limieten niet ophalen.',
|
|
22
|
+
filter: 'Getoonde accounts',
|
|
23
|
+
signedOut: 'Niet ingelogd',
|
|
24
|
+
signedOutDetail: 'Niet ingelogd. Log in om limieten te zien.',
|
|
25
|
+
logIn: 'Inloggen',
|
|
26
|
+
nextReset: '{{window}} reset {{at}}',
|
|
27
|
+
checked: {
|
|
28
|
+
now: 'nu',
|
|
29
|
+
ago: '{{duration}} geleden',
|
|
30
|
+
fromTurn: 'Uit een turn · {{when}}'
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
settings: {
|
|
34
|
+
currency: {
|
|
35
|
+
label: 'Valuta',
|
|
36
|
+
dollars: 'Prijzen zoals gepubliceerd, in dollars.',
|
|
37
|
+
noRate: 'Nog geen wisselkoers. Bedragen in dollars.',
|
|
38
|
+
converted: 'Omgerekend met de ECB-koers van {{date}}.',
|
|
39
|
+
options: {
|
|
40
|
+
USD: 'Dollars',
|
|
41
|
+
EUR: "Euro's"
|
|
42
|
+
}
|
|
79
43
|
},
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
44
|
+
page: {
|
|
45
|
+
label: 'Verbruikspagina',
|
|
46
|
+
description: 'Kosten, tokens en planlimieten, per account.',
|
|
47
|
+
open: 'Verbruik openen'
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
section: {
|
|
51
|
+
label: 'Verbruik',
|
|
52
|
+
description: 'Valuta van de verbruikspagina.'
|
|
53
|
+
},
|
|
54
|
+
dialog: {
|
|
55
|
+
title: 'Verbruik',
|
|
56
|
+
description: 'Kosten, tokens en limieten van je abonnement',
|
|
57
|
+
close: 'Verbruik sluiten',
|
|
58
|
+
rescan: 'Opnieuw scannen',
|
|
59
|
+
period: 'Periode',
|
|
60
|
+
metric: 'Eenheid',
|
|
61
|
+
failed: 'Kon het verbruik niet tonen',
|
|
62
|
+
periods: {
|
|
63
|
+
today: 'Vandaag',
|
|
64
|
+
'7d': '7 dagen',
|
|
65
|
+
'30d': '30 dagen',
|
|
66
|
+
'90d': '90 dagen'
|
|
87
67
|
},
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
calls_one: '{{calls}} aanroep',
|
|
92
|
-
calls_other: '{{calls}} aanroepen',
|
|
93
|
-
apiRates: 'tegen API-tarieven'
|
|
68
|
+
metrics: {
|
|
69
|
+
cost: 'Kosten',
|
|
70
|
+
tokens: 'Tokens'
|
|
94
71
|
},
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
72
|
+
accounts: {
|
|
73
|
+
label: 'Account',
|
|
74
|
+
all: 'Alle accounts'
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
empty: {
|
|
78
|
+
noTranscripts: 'Nog geen chats van Claude of Codex gevonden op deze machine.',
|
|
79
|
+
noUsage: 'Nog geen verbruik.'
|
|
80
|
+
},
|
|
81
|
+
agents: {
|
|
82
|
+
none: 'Geen agent-CLI geïnstalleerd.',
|
|
83
|
+
installed: 'Geïnstalleerd: {{list}}.',
|
|
84
|
+
settings: 'Agent-instellingen'
|
|
85
|
+
},
|
|
86
|
+
provenance: {
|
|
87
|
+
failed: 'Kon het laatste verbruik niet lezen. Dit zijn de vorige resultaten.',
|
|
88
|
+
scanned_one: 'Gescand om {{time}}, {{files}} bestand',
|
|
89
|
+
scanned_other: 'Gescand om {{time}}, {{files}} bestanden',
|
|
90
|
+
bundledPrices: 'Ingebouwde prijzen',
|
|
91
|
+
fetchedPrices: 'Prijzen van {{date}}',
|
|
92
|
+
rate: '{{currency}} tegen de ECB-koers van {{date}}'
|
|
93
|
+
},
|
|
94
|
+
summary: {
|
|
95
|
+
sessions_one: '{{sessions}} sessie',
|
|
96
|
+
sessions_other: '{{sessions}} sessies',
|
|
97
|
+
calls_one: '{{calls}} aanroep',
|
|
98
|
+
calls_other: '{{calls}} aanroepen',
|
|
99
|
+
apiRates: 'tegen API-tarieven'
|
|
100
|
+
},
|
|
101
|
+
tiles: {
|
|
102
|
+
processed: 'Verwerkt',
|
|
103
|
+
uncachedInput: 'Input zonder cache',
|
|
104
|
+
cachedInput: 'Input uit cache',
|
|
105
|
+
cacheWrites: 'Naar cache geschreven',
|
|
106
|
+
output: 'Output',
|
|
107
|
+
cacheSavings: 'Bespaard met cache'
|
|
108
|
+
},
|
|
109
|
+
chart: {
|
|
110
|
+
total: 'Totaal'
|
|
111
|
+
},
|
|
112
|
+
breakdown: {
|
|
113
|
+
title: 'Uitsplitsing',
|
|
114
|
+
tabs: {
|
|
115
|
+
models: 'Modellen',
|
|
116
|
+
projects: 'Projecten',
|
|
117
|
+
day: 'Dag'
|
|
102
118
|
},
|
|
103
|
-
|
|
104
|
-
|
|
119
|
+
models: {
|
|
120
|
+
model: 'Model',
|
|
121
|
+
calls: 'Aanroepen',
|
|
122
|
+
input: 'Input',
|
|
123
|
+
output: 'Output',
|
|
124
|
+
cache: 'Cache R/W',
|
|
125
|
+
cost: 'Kosten',
|
|
126
|
+
share: 'Aandeel',
|
|
127
|
+
pricedAs: 'Geprijsd als {{model}}',
|
|
128
|
+
noPrice: 'Geen prijs bekend'
|
|
105
129
|
},
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
day: 'Dag'
|
|
112
|
-
},
|
|
113
|
-
models: {
|
|
114
|
-
model: 'Model',
|
|
115
|
-
calls: 'Aanroepen',
|
|
116
|
-
input: 'Input',
|
|
117
|
-
output: 'Output',
|
|
118
|
-
cache: 'Cache R/W',
|
|
119
|
-
cost: 'Kosten',
|
|
120
|
-
share: 'Aandeel',
|
|
121
|
-
pricedAs: 'Geprijsd als {{model}}',
|
|
122
|
-
noPrice: 'Geen prijs bekend voor dit model'
|
|
123
|
-
},
|
|
124
|
-
days: {
|
|
125
|
-
day: 'Dag',
|
|
126
|
-
total: 'Totaal',
|
|
127
|
-
tokens: 'Tokens',
|
|
128
|
-
empty: 'Geen activiteit in deze periode.'
|
|
129
|
-
}
|
|
130
|
+
days: {
|
|
131
|
+
day: 'Dag',
|
|
132
|
+
total: 'Totaal',
|
|
133
|
+
tokens: 'Tokens',
|
|
134
|
+
empty: 'Geen activiteit in deze periode.'
|
|
130
135
|
}
|
|
131
|
-
}
|
|
136
|
+
}
|
|
137
|
+
};
|
package/dist/locales.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/* The words of this package, a namespace per surface, which the app adds to its i18next beside its own namespaces. */
|
|
2
2
|
export const AGENTS_NAMESPACES = ['agent-chat', 'agent-prompts', 'agent-providers', 'agent-usage'];
|
|
3
3
|
async function open(files) {
|
|
4
|
-
|
|
4
|
+
return Object.fromEntries(await Promise.all(Object.entries(files).map(async ([namespace, file]) => [namespace, (await file()).default])));
|
|
5
5
|
}
|
|
6
6
|
/* The words are modules, not JSON: Node needs `with { type: 'json' }` on a JSON import, and a browser refuses it on the JavaScript Vite serves. */
|
|
7
7
|
/* One loader per language that answers every namespace of it, so a bundler splits them and a window only downloads the language it shows. */
|
|
8
8
|
export const AGENTS_LOCALES = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
9
|
+
en: () => open({
|
|
10
|
+
'agent-chat': () => import('./locales/en/agent-chat.js'),
|
|
11
|
+
'agent-prompts': () => import('./locales/en/agent-prompts.js'),
|
|
12
|
+
'agent-providers': () => import('./locales/en/agent-providers.js'),
|
|
13
|
+
'agent-usage': () => import('./locales/en/agent-usage.js')
|
|
14
|
+
}),
|
|
15
|
+
nl: () => open({
|
|
16
|
+
'agent-chat': () => import('./locales/nl/agent-chat.js'),
|
|
17
|
+
'agent-prompts': () => import('./locales/nl/agent-prompts.js'),
|
|
18
|
+
'agent-providers': () => import('./locales/nl/agent-providers.js'),
|
|
19
|
+
'agent-usage': () => import('./locales/nl/agent-usage.js')
|
|
20
|
+
})
|
|
21
|
+
};
|
package/dist/mounted-registry.js
CHANGED
|
@@ -6,34 +6,35 @@ const REATTACH_CONCURRENCY = 4;
|
|
|
6
6
|
* The host on the other side is a fresh one as far as this client knows, so nothing is assumed.
|
|
7
7
|
*/
|
|
8
8
|
export class MountedRegistry extends Map {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
/*
|
|
17
|
-
* One pass over what is mounted but not attached, in mount order, a few at a time. It works on a
|
|
18
|
-
* copy, because attaching mounts and unmounts as it goes. An entry that left in the meantime is
|
|
19
|
-
* skipped, since a node may leave the canvas while its attach is on the wire.
|
|
20
|
-
*/
|
|
21
|
-
async reattachAll(reattach) {
|
|
22
|
-
const queue = [...this];
|
|
23
|
-
const work = async () => {
|
|
24
|
-
for (let next = queue.shift(); next !== undefined; next = queue.shift()) {
|
|
25
|
-
const [id, entry] = next;
|
|
26
|
-
if (entry.attached || this.get(id) !== entry) {
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
await reattach(id, entry);
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
// A socket that dropped again brings the next pass; anything else surfaces on the next mount.
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
await Promise.all(Array.from({ length: REATTACH_CONCURRENCY }, work));
|
|
9
|
+
/* Nothing is attached over a link that is gone; `report` is how a store hears about it. */
|
|
10
|
+
detachAll(report) {
|
|
11
|
+
for (const [id, entry] of this) {
|
|
12
|
+
entry.attached = false;
|
|
13
|
+
report?.(id, entry);
|
|
38
14
|
}
|
|
39
|
-
}
|
|
15
|
+
}
|
|
16
|
+
/*
|
|
17
|
+
* One pass over what is mounted but not attached, in mount order, a few at a time. It works on a
|
|
18
|
+
* copy, because attaching mounts and unmounts as it goes. An entry that left in the meantime is
|
|
19
|
+
* skipped, since a node may leave the canvas while its attach is on the wire.
|
|
20
|
+
*/
|
|
21
|
+
async reattachAll(reattach) {
|
|
22
|
+
const queue = [...this];
|
|
23
|
+
const work = async () => {
|
|
24
|
+
for (let next = queue.shift(); next !== undefined; next = queue.shift()) {
|
|
25
|
+
const [id, entry] = next;
|
|
26
|
+
if (entry.attached || this.get(id) !== entry) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
await reattach(id, entry);
|
|
31
|
+
} catch {
|
|
32
|
+
// A socket that dropped again brings the next pass; anything else surfaces on the next mount.
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
await Promise.all(Array.from({
|
|
37
|
+
length: REATTACH_CONCURRENCY
|
|
38
|
+
}, work));
|
|
39
|
+
}
|
|
40
|
+
}
|
package/dist/port-transport.js
CHANGED
|
@@ -3,7 +3,7 @@ import { parseServerFrame } from '@adecore/agent-contracts/envelope';
|
|
|
3
3
|
import { AGENT_EVENT_SCHEMAS, AGENT_REQUEST_SCHEMAS } from '@adecore/agent-contracts/protocol';
|
|
4
4
|
import { ChatTransportError } from './transport.js';
|
|
5
5
|
function isEventType(event) {
|
|
6
|
-
|
|
6
|
+
return Object.hasOwn(AGENT_EVENT_SCHEMAS, event);
|
|
7
7
|
}
|
|
8
8
|
/*
|
|
9
9
|
* A chat host at the other end of a port, such as a process that runs the chats beside the window.
|
|
@@ -12,114 +12,125 @@ function isEventType(event) {
|
|
|
12
12
|
* with a warning, the way the socket transport of an app drops one.
|
|
13
13
|
*/
|
|
14
14
|
export function portTransport(port) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
let status = 'open';
|
|
16
|
+
let nextId = 1;
|
|
17
|
+
const pending = new Map();
|
|
18
|
+
const eventHandlers = new Map();
|
|
19
|
+
const statusHandlers = new Set();
|
|
20
|
+
const answer = (id, frame) => {
|
|
21
|
+
const entry = pending.get(id);
|
|
22
|
+
if (!entry) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
pending.delete(id);
|
|
26
|
+
if (!frame.ok) {
|
|
27
|
+
entry.reject(new ChatTransportError(frame.error.code, frame.error.message));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const result = AGENT_REQUEST_SCHEMAS[entry.type].result.safeParse(frame.result);
|
|
31
|
+
if (!result.success) {
|
|
32
|
+
entry.reject(new ChatTransportError('bad-reply', i18next.t('agent-chat:transport.badReply', {
|
|
33
|
+
type: entry.type
|
|
34
|
+
})));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
entry.resolve(result.data);
|
|
38
|
+
};
|
|
39
|
+
const dispatch = (event, payload) => {
|
|
40
|
+
if (!isEventType(event)) {
|
|
41
|
+
console.warn('Dropped an unknown event', event);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const parsed = AGENT_EVENT_SCHEMAS[event].safeParse(payload);
|
|
45
|
+
if (!parsed.success) {
|
|
46
|
+
console.warn(`Dropped a malformed ${event} event`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// A copy, so a handler that unsubscribes while it runs does not change the set being walked.
|
|
50
|
+
for (const handler of [...(eventHandlers.get(event) ?? [])]) {
|
|
51
|
+
handler(parsed.data);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const stopListening = port.onFrame(raw => {
|
|
55
|
+
if (status === 'closed') {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const parsed = parseServerFrame(raw);
|
|
59
|
+
if (!parsed.ok) {
|
|
60
|
+
console.warn('Dropped a malformed frame', parsed.message);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const frame = parsed.value;
|
|
64
|
+
if ('event' in frame) {
|
|
65
|
+
dispatch(frame.event, frame.payload);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (frame.id === null) {
|
|
69
|
+
// An answer without an id is about a frame the host could not read; nothing waits for it.
|
|
70
|
+
console.warn('The chat host refused a frame', frame);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
answer(frame.id, frame);
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
get status() {
|
|
77
|
+
return status;
|
|
78
|
+
},
|
|
79
|
+
request(type, payload) {
|
|
80
|
+
if (status !== 'open') {
|
|
81
|
+
return Promise.reject(new ChatTransportError('not-connected', i18next.t('agent-chat:transport.notConnected')));
|
|
82
|
+
}
|
|
83
|
+
const id = String(nextId++);
|
|
84
|
+
const promise = new Promise((resolve, reject) => {
|
|
85
|
+
pending.set(id, {
|
|
86
|
+
type,
|
|
87
|
+
resolve: resolve,
|
|
88
|
+
reject
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
try {
|
|
92
|
+
port.send({
|
|
93
|
+
id,
|
|
94
|
+
type,
|
|
95
|
+
payload
|
|
96
|
+
});
|
|
97
|
+
} catch {
|
|
98
|
+
// A payload the port cannot clone throws here, and the caller only listens to the promise.
|
|
25
99
|
pending.delete(id);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
dispatch(frame.event, frame.payload);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (frame.id === null) {
|
|
67
|
-
// An answer without an id is about a frame the host could not read; nothing waits for it.
|
|
68
|
-
console.warn('The chat host refused a frame', frame);
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
answer(frame.id, frame);
|
|
72
|
-
});
|
|
73
|
-
return {
|
|
74
|
-
get status() {
|
|
75
|
-
return status;
|
|
76
|
-
},
|
|
77
|
-
request(type, payload) {
|
|
78
|
-
if (status !== 'open') {
|
|
79
|
-
return Promise.reject(new ChatTransportError('not-connected', i18next.t('agent-chat:transport.notConnected')));
|
|
80
|
-
}
|
|
81
|
-
const id = String(nextId++);
|
|
82
|
-
const promise = new Promise((resolve, reject) => {
|
|
83
|
-
pending.set(id, { type, resolve: resolve, reject });
|
|
84
|
-
});
|
|
85
|
-
try {
|
|
86
|
-
port.send({ id, type, payload });
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
// A payload the port cannot clone throws here, and the caller only listens to the promise.
|
|
90
|
-
pending.delete(id);
|
|
91
|
-
return Promise.reject(new ChatTransportError('not-sent', i18next.t('agent-chat:transport.notSent', { type })));
|
|
92
|
-
}
|
|
93
|
-
return promise;
|
|
94
|
-
},
|
|
95
|
-
on(event, handler) {
|
|
96
|
-
const handlers = eventHandlers.get(event) ?? new Set();
|
|
97
|
-
eventHandlers.set(event, handlers);
|
|
98
|
-
handlers.add(handler);
|
|
99
|
-
return () => {
|
|
100
|
-
handlers.delete(handler);
|
|
101
|
-
};
|
|
102
|
-
},
|
|
103
|
-
subscribeStatus(handler) {
|
|
104
|
-
statusHandlers.add(handler);
|
|
105
|
-
return () => {
|
|
106
|
-
statusHandlers.delete(handler);
|
|
107
|
-
};
|
|
108
|
-
},
|
|
109
|
-
close() {
|
|
110
|
-
if (status === 'closed') {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
status = 'closed';
|
|
114
|
-
stopListening();
|
|
115
|
-
const waiting = [...pending.values()];
|
|
116
|
-
pending.clear();
|
|
117
|
-
for (const entry of waiting) {
|
|
118
|
-
entry.reject(new ChatTransportError('disconnected', i18next.t('agent-chat:transport.closedBeforeAnswer')));
|
|
119
|
-
}
|
|
120
|
-
for (const handler of [...statusHandlers]) {
|
|
121
|
-
handler(status);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
}
|
|
100
|
+
return Promise.reject(new ChatTransportError('not-sent', i18next.t('agent-chat:transport.notSent', {
|
|
101
|
+
type
|
|
102
|
+
})));
|
|
103
|
+
}
|
|
104
|
+
return promise;
|
|
105
|
+
},
|
|
106
|
+
on(event, handler) {
|
|
107
|
+
const handlers = eventHandlers.get(event) ?? new Set();
|
|
108
|
+
eventHandlers.set(event, handlers);
|
|
109
|
+
handlers.add(handler);
|
|
110
|
+
return () => {
|
|
111
|
+
handlers.delete(handler);
|
|
112
|
+
};
|
|
113
|
+
},
|
|
114
|
+
subscribeStatus(handler) {
|
|
115
|
+
statusHandlers.add(handler);
|
|
116
|
+
return () => {
|
|
117
|
+
statusHandlers.delete(handler);
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
close() {
|
|
121
|
+
if (status === 'closed') {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
status = 'closed';
|
|
125
|
+
stopListening();
|
|
126
|
+
const waiting = [...pending.values()];
|
|
127
|
+
pending.clear();
|
|
128
|
+
for (const entry of waiting) {
|
|
129
|
+
entry.reject(new ChatTransportError('disconnected', i18next.t('agent-chat:transport.closedBeforeAnswer')));
|
|
130
|
+
}
|
|
131
|
+
for (const handler of [...statusHandlers]) {
|
|
132
|
+
handler(status);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
package/dist/prompts/index.js
CHANGED
|
@@ -7,4 +7,4 @@ export { useFocusAfterAnswer } from './logic/useFocusAfterAnswer.js';
|
|
|
7
7
|
export { usePromptSession } from './logic/usePromptSession.js';
|
|
8
8
|
export { PromptPrimary, ApprovalActions } from './ui/PromptActions.js';
|
|
9
9
|
export { PROMPT_SURFACE, PromptCard } from './ui/PromptCard.js';
|
|
10
|
-
export { PromptView } from './ui/PromptView.js';
|
|
10
|
+
export { PromptView } from './ui/PromptView.js';
|
|
@@ -4,20 +4,21 @@
|
|
|
4
4
|
* keyboard when it stands alone, and a stray Enter never grants anything. False when `root` holds no card.
|
|
5
5
|
*/
|
|
6
6
|
export function focusPromptStart(root) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return start !== null;
|
|
7
|
+
const card = root?.querySelector('.prompt-card');
|
|
8
|
+
if (!card) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
const start = card.querySelector('[data-prompt-entry]:not(:disabled)') ?? card.querySelector('[role="toolbar"] button:not(:disabled):not([data-prompt-primary]):not([data-prompt-lasting])') ?? card.querySelector('[data-prompt-primary]:not(:disabled)') ?? card.querySelector('.prompt-heading');
|
|
12
|
+
start?.focus({
|
|
13
|
+
preventScroll: true
|
|
14
|
+
});
|
|
15
|
+
return start !== null;
|
|
17
16
|
}
|
|
18
17
|
/* Puts the keyboard on a card's heading, where keys typed for something else answer nothing. False when `root` holds no card. */
|
|
19
18
|
export function focusPromptHeading(root) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
19
|
+
const heading = root?.querySelector('.prompt-card .prompt-heading');
|
|
20
|
+
heading?.focus({
|
|
21
|
+
preventScroll: true
|
|
22
|
+
});
|
|
23
|
+
return !!heading;
|
|
24
|
+
}
|