@agent-native/toolkit 0.228.0-nightly-20261111212500 → 0.228.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/agent-native.eject.json +2 -0
- package/dist/app/agentkit/react/approval-card.d.ts.map +1 -1
- package/dist/app/agentkit/react/approval-card.js +5 -3
- package/dist/app/agentkit/react/approval-card.js.map +1 -1
- package/dist/app/agentkit/react/code-block.d.ts +32 -0
- package/dist/app/agentkit/react/code-block.d.ts.map +1 -0
- package/dist/app/agentkit/react/code-block.js +125 -0
- package/dist/app/agentkit/react/code-block.js.map +1 -0
- package/dist/app/agentkit/react/components.d.ts +33 -14
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +843 -168
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context-usage.d.ts +45 -0
- package/dist/app/agentkit/react/context-usage.d.ts.map +1 -0
- package/dist/app/agentkit/react/context-usage.js +93 -0
- package/dist/app/agentkit/react/context-usage.js.map +1 -0
- package/dist/app/agentkit/react/context.d.ts +42 -3
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +46 -1
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/disclosure-content.d.ts +12 -0
- package/dist/app/agentkit/react/disclosure-content.d.ts.map +1 -0
- package/dist/app/agentkit/react/disclosure-content.js +33 -0
- package/dist/app/agentkit/react/disclosure-content.js.map +1 -0
- package/dist/app/agentkit/react/duration.d.ts +6 -0
- package/dist/app/agentkit/react/duration.d.ts.map +1 -0
- package/dist/app/agentkit/react/duration.js +21 -0
- package/dist/app/agentkit/react/duration.js.map +1 -0
- package/dist/app/agentkit/react/file-change.d.ts +33 -0
- package/dist/app/agentkit/react/file-change.d.ts.map +1 -0
- package/dist/app/agentkit/react/file-change.js +83 -0
- package/dist/app/agentkit/react/file-change.js.map +1 -0
- package/dist/app/agentkit/react/file-diff.d.ts +17 -0
- package/dist/app/agentkit/react/file-diff.d.ts.map +1 -0
- package/dist/app/agentkit/react/file-diff.js +94 -0
- package/dist/app/agentkit/react/file-diff.js.map +1 -0
- package/dist/app/agentkit/react/index.d.ts +7 -0
- package/dist/app/agentkit/react/index.d.ts.map +1 -1
- package/dist/app/agentkit/react/index.js +7 -0
- package/dist/app/agentkit/react/index.js.map +1 -1
- package/dist/app/agentkit/react/question-card.d.ts +67 -0
- package/dist/app/agentkit/react/question-card.d.ts.map +1 -0
- package/dist/app/agentkit/react/question-card.js +198 -0
- package/dist/app/agentkit/react/question-card.js.map +1 -0
- package/dist/app/agentkit/react/root.d.ts +3 -2
- package/dist/app/agentkit/react/root.d.ts.map +1 -1
- package/dist/app/agentkit/react/root.js +2 -2
- package/dist/app/agentkit/react/root.js.map +1 -1
- package/dist/app/agentkit/react/roving-focus.d.ts +4 -0
- package/dist/app/agentkit/react/roving-focus.d.ts.map +1 -0
- package/dist/app/agentkit/react/roving-focus.js +75 -0
- package/dist/app/agentkit/react/roving-focus.js.map +1 -0
- package/dist/app/agentkit/react/stack-trace.d.ts +34 -0
- package/dist/app/agentkit/react/stack-trace.d.ts.map +1 -0
- package/dist/app/agentkit/react/stack-trace.js +121 -0
- package/dist/app/agentkit/react/stack-trace.js.map +1 -0
- package/dist/app/agentkit/react/stop-button.d.ts.map +1 -1
- package/dist/app/agentkit/react/stop-button.js +22 -6
- package/dist/app/agentkit/react/stop-button.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +1306 -395
- package/dist/app/agentkit/react/terminal.d.ts +28 -0
- package/dist/app/agentkit/react/terminal.d.ts.map +1 -0
- package/dist/app/agentkit/react/terminal.js +84 -0
- package/dist/app/agentkit/react/terminal.js.map +1 -0
- package/dist/app/agentkit/react/trace.d.ts +31 -0
- package/dist/app/agentkit/react/trace.d.ts.map +1 -0
- package/dist/app/agentkit/react/trace.js +73 -0
- package/dist/app/agentkit/react/trace.js.map +1 -0
- package/dist/app/blocks/library/HighlightedCode.d.ts +2 -1
- package/dist/app/blocks/library/HighlightedCode.d.ts.map +1 -1
- package/dist/app/blocks/library/HighlightedCode.js +8 -111
- package/dist/app/blocks/library/HighlightedCode.js.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +23 -245
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/agentkit-chat/guided-questions.d.ts +15 -1
- package/dist/app/chat/agentkit-chat/guided-questions.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/guided-questions.js +142 -2
- package/dist/app/chat/agentkit-chat/guided-questions.js.map +1 -1
- package/dist/app/chat/agentkit-chat/history.js +1 -1
- package/dist/app/chat/agentkit-chat/history.js.map +1 -1
- package/dist/app/chat/agentkit-chat/index.d.ts +1 -1
- package/dist/app/chat/agentkit-chat/index.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/index.js +1 -1
- package/dist/app/chat/agentkit-chat/index.js.map +1 -1
- package/dist/app/chat/agentkit-chat/labels.d.ts +5 -0
- package/dist/app/chat/agentkit-chat/labels.d.ts.map +1 -0
- package/dist/app/chat/agentkit-chat/labels.js +245 -0
- package/dist/app/chat/agentkit-chat/labels.js.map +1 -0
- package/dist/app/chat/agentkit-chat/questions.d.ts +1 -1
- package/dist/app/chat/agentkit-chat/questions.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/questions.js +1 -1
- package/dist/app/chat/agentkit-chat/questions.js.map +1 -1
- package/dist/app/chat/agentkit-chat/root.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/root.js +5 -64
- package/dist/app/chat/agentkit-chat/root.js.map +1 -1
- package/dist/app/chat/agentkit-chat/work-step-labels.d.ts +2 -0
- package/dist/app/chat/agentkit-chat/work-step-labels.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/work-step-labels.js +31 -0
- package/dist/app/chat/agentkit-chat/work-step-labels.js.map +1 -1
- package/dist/app/chat/chat/markdown-renderer.d.ts +2 -12
- package/dist/app/chat/chat/markdown-renderer.d.ts.map +1 -1
- package/dist/app/chat/chat/markdown-renderer.js +2 -41
- package/dist/app/chat/chat/markdown-renderer.js.map +1 -1
- package/dist/app/chat/chat/tool-call-display.d.ts.map +1 -1
- package/dist/app/chat/chat/tool-call-display.js +2 -2
- package/dist/app/chat/chat/tool-call-display.js.map +1 -1
- package/dist/app/chat/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/app/chat/conversation/AgentConversation.js +2 -37
- package/dist/app/chat/conversation/AgentConversation.js.map +1 -1
- package/dist/app/chat/tool-cells/BashCell.d.ts +3 -1
- package/dist/app/chat/tool-cells/BashCell.d.ts.map +1 -1
- package/dist/app/chat/tool-cells/BashCell.js +4 -40
- package/dist/app/chat/tool-cells/BashCell.js.map +1 -1
- package/dist/app/chat/tool-cells/EditCell.d.ts.map +1 -1
- package/dist/app/chat/tool-cells/EditCell.js +5 -108
- package/dist/app/chat/tool-cells/EditCell.js.map +1 -1
- package/dist/app/chat/tool-cells/FilesChangedSummary.d.ts.map +1 -1
- package/dist/app/chat/tool-cells/FilesChangedSummary.js +23 -81
- package/dist/app/chat/tool-cells/FilesChangedSummary.js.map +1 -1
- package/dist/app/chat/tool-cells/WriteCell.d.ts.map +1 -1
- package/dist/app/chat/tool-cells/WriteCell.js +5 -24
- package/dist/app/chat/tool-cells/WriteCell.js.map +1 -1
- package/dist/app/code-highlighter.d.ts +11 -0
- package/dist/app/code-highlighter.d.ts.map +1 -0
- package/dist/app/code-highlighter.js +122 -0
- package/dist/app/code-highlighter.js.map +1 -0
- package/dist/app/context-xray/ThreadContextRing.js +3 -3
- package/dist/app/context-xray/ThreadContextRing.js.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +22 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +22 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +22 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +22 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +22 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +22 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +22 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +22 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +22 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +22 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +22 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +22 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/onboarding/first-run-first-paint.d.ts +10 -0
- package/dist/app/onboarding/first-run-first-paint.d.ts.map +1 -0
- package/dist/app/onboarding/first-run-first-paint.js +22 -0
- package/dist/app/onboarding/first-run-first-paint.js.map +1 -0
- package/dist/app/onboarding/first-run-startup-gate.d.ts +3 -1
- package/dist/app/onboarding/first-run-startup-gate.d.ts.map +1 -1
- package/dist/app/onboarding/first-run-startup-gate.js +30 -6
- package/dist/app/onboarding/first-run-startup-gate.js.map +1 -1
- package/dist/app/providers/AppProviders.d.ts.map +1 -1
- package/dist/app/providers/AppProviders.js +9 -2
- package/dist/app/providers/AppProviders.js.map +1 -1
- package/dist/app/providers/BuilderSignupActivation.d.ts +2 -1
- package/dist/app/providers/BuilderSignupActivation.d.ts.map +1 -1
- package/dist/app/providers/BuilderSignupActivation.js +6 -3
- package/dist/app/providers/BuilderSignupActivation.js.map +1 -1
- package/dist/app/shared/AppShellSkeleton.d.ts.map +1 -1
- package/dist/app/shared/AppShellSkeleton.js +11 -1
- package/dist/app/shared/AppShellSkeleton.js.map +1 -1
- package/dist/app/styles/agent-native.css +2 -2
- package/dist/app/styles/tokens/agent-kit.css +20 -3
- package/dist/composer/AgentSuggestionBar.d.ts.map +1 -1
- package/dist/composer/AgentSuggestionBar.js +2 -2
- package/dist/composer/AgentSuggestionBar.js.map +1 -1
- package/dist/composer/ComposerContextMenu.js +4 -4
- package/dist/composer/ComposerContextMenu.js.map +1 -1
- package/dist/composer/ComposerContextPicker.d.ts.map +1 -1
- package/dist/composer/ComposerContextPicker.js +2 -2
- package/dist/composer/ComposerContextPicker.js.map +1 -1
- package/dist/composer/ComposerContextPickerDialog.d.ts.map +1 -1
- package/dist/composer/ComposerContextPickerDialog.js +2 -2
- package/dist/composer/ComposerContextPickerDialog.js.map +1 -1
- package/dist/composer/ComposerModePicker.d.ts.map +1 -1
- package/dist/composer/ComposerModePicker.js +2 -1
- package/dist/composer/ComposerModePicker.js.map +1 -1
- package/dist/composer/ComposerPlusMenu.js +1 -1
- package/dist/composer/ComposerPlusMenu.js.map +1 -1
- package/dist/composer/MentionChip.js +1 -1
- package/dist/composer/MentionChip.js.map +1 -1
- package/dist/composer/MentionPopover.d.ts +3 -0
- package/dist/composer/MentionPopover.d.ts.map +1 -1
- package/dist/composer/MentionPopover.js +34 -15
- package/dist/composer/MentionPopover.js.map +1 -1
- package/dist/composer/MessageQueueDrawer.d.ts.map +1 -1
- package/dist/composer/MessageQueueDrawer.js +14 -9
- package/dist/composer/MessageQueueDrawer.js.map +1 -1
- package/dist/composer/PastedTextChip.d.ts.map +1 -1
- package/dist/composer/PastedTextChip.js +14 -18
- package/dist/composer/PastedTextChip.js.map +1 -1
- package/dist/composer/PromptBar.js +1 -1
- package/dist/composer/PromptBar.js.map +1 -1
- package/dist/composer/PromptComposer.d.ts.map +1 -1
- package/dist/composer/PromptComposer.js +11 -9
- package/dist/composer/PromptComposer.js.map +1 -1
- package/dist/composer/RealtimeVoiceMode.js +2 -2
- package/dist/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/composer/TiptapComposer.js +52 -89
- package/dist/composer/TiptapComposer.js.map +1 -1
- package/dist/composer/VoiceButton.d.ts +3 -1
- package/dist/composer/VoiceButton.d.ts.map +1 -1
- package/dist/composer/VoiceButton.js +10 -8
- package/dist/composer/VoiceButton.js.map +1 -1
- package/dist/composer/composer-notice.js +3 -3
- package/dist/composer/composer-notice.js.map +1 -1
- package/dist/composer/extensions/FileReference.js +1 -1
- package/dist/composer/extensions/FileReference.js.map +1 -1
- package/dist/composer/extensions/SkillReference.js +1 -1
- package/dist/composer/extensions/SkillReference.js.map +1 -1
- package/dist/composer/popover-surface.d.ts +1 -1
- package/dist/composer/popover-surface.d.ts.map +1 -1
- package/dist/composer/popover-surface.js +1 -1
- package/dist/composer/popover-surface.js.map +1 -1
- package/dist/context-ui/ContextUsageRing.d.ts +1 -45
- package/dist/context-ui/ContextUsageRing.d.ts.map +1 -1
- package/dist/context-ui/ContextUsageRing.js +2 -87
- package/dist/context-ui/ContextUsageRing.js.map +1 -1
- package/dist/context-ui/index.d.ts +2 -2
- package/dist/context-ui/index.d.ts.map +1 -1
- package/dist/context-ui/index.js +2 -2
- package/dist/context-ui/index.js.map +1 -1
- package/package.json +4 -4
- package/src/app/agentkit/react/approval-card.tsx +14 -2
- package/src/app/agentkit/react/code-block.spec.tsx +154 -0
- package/src/app/agentkit/react/code-block.tsx +317 -0
- package/src/app/agentkit/react/components.interaction.spec.tsx +7 -0
- package/src/app/agentkit/react/components.papercuts.spec.tsx +143 -2
- package/src/app/agentkit/react/components.spec.tsx +40 -47
- package/src/app/agentkit/react/components.tsx +1533 -413
- package/src/app/agentkit/react/composer-context.spec.tsx +35 -0
- package/src/app/agentkit/react/context-usage.tsx +353 -0
- package/src/app/agentkit/react/context.tsx +93 -1
- package/src/app/agentkit/react/disclosure-content.ts +42 -0
- package/src/app/agentkit/react/disclosures.spec.tsx +62 -4
- package/src/app/agentkit/react/duration.ts +22 -0
- package/src/app/agentkit/react/file-change.spec.tsx +124 -0
- package/src/app/agentkit/react/file-change.tsx +228 -0
- package/src/app/agentkit/react/file-diff.ts +110 -0
- package/src/app/agentkit/react/index.ts +7 -0
- package/src/app/agentkit/react/lifecycle.spec.tsx +565 -20
- package/src/app/agentkit/react/markdown.spec.tsx +18 -8
- package/src/app/agentkit/react/message-actions.spec.tsx +55 -1
- package/src/app/agentkit/react/notices.spec.tsx +4 -4
- package/src/app/agentkit/react/optimistic-send.spec.tsx +43 -0
- package/src/app/agentkit/react/question-card.spec.tsx +276 -0
- package/src/app/agentkit/react/question-card.tsx +533 -0
- package/src/app/agentkit/react/root.tsx +4 -0
- package/src/app/agentkit/react/roving-focus.spec.tsx +114 -0
- package/src/app/agentkit/react/roving-focus.ts +82 -0
- package/src/app/agentkit/react/stack-trace.spec.tsx +177 -0
- package/src/app/agentkit/react/stack-trace.tsx +281 -0
- package/src/app/agentkit/react/stop-button.spec.tsx +40 -0
- package/src/app/agentkit/react/stop-button.tsx +22 -5
- package/src/app/agentkit/react/styles.css +1306 -395
- package/src/app/agentkit/react/subagent-step.spec.tsx +554 -0
- package/src/app/agentkit/react/terminal.spec.tsx +228 -0
- package/src/app/agentkit/react/terminal.tsx +228 -0
- package/src/app/agentkit/react/trace.spec.tsx +120 -0
- package/src/app/agentkit/react/trace.tsx +239 -0
- package/src/app/blocks/library/HighlightedCode.tsx +14 -126
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +28 -12
- package/src/app/chat/AgentKitAssistantChat.tsx +27 -253
- package/src/app/chat/agentkit-chat/approval-card.spec.tsx +1 -0
- package/src/app/chat/agentkit-chat/guided-questions.flow.spec.tsx +381 -0
- package/src/app/chat/agentkit-chat/guided-questions.tsx +236 -3
- package/src/app/chat/agentkit-chat/history.tsx +1 -1
- package/src/app/chat/agentkit-chat/index.ts +2 -0
- package/src/app/chat/agentkit-chat/labels.ts +259 -0
- package/src/app/chat/agentkit-chat/questions.ts +2 -0
- package/src/app/chat/agentkit-chat/root.spec.tsx +18 -0
- package/src/app/chat/agentkit-chat/root.tsx +5 -64
- package/src/app/chat/agentkit-chat/work-step-labels.ts +42 -0
- package/src/app/chat/chat/markdown-renderer.tsx +2 -59
- package/src/app/chat/chat/tool-call-display.spec.tsx +26 -14
- package/src/app/chat/chat/tool-call-display.tsx +2 -1
- package/src/app/chat/conversation/AgentConversation.tsx +2 -50
- package/src/app/chat/tool-cells/BashCell.tsx +14 -136
- package/src/app/chat/tool-cells/EditCell.tsx +11 -248
- package/src/app/chat/tool-cells/FilesChangedSummary.spec.tsx +62 -5
- package/src/app/chat/tool-cells/FilesChangedSummary.tsx +31 -162
- package/src/app/chat/tool-cells/WriteCell.tsx +11 -121
- package/src/app/code-highlighter.ts +131 -0
- package/src/app/context-xray/ThreadContextRing.tsx +7 -7
- package/src/app/i18n/catalogs/ar-SA.ts +22 -0
- package/src/app/i18n/catalogs/de-DE.ts +22 -0
- package/src/app/i18n/catalogs/en-US.ts +22 -0
- package/src/app/i18n/catalogs/es-ES.ts +22 -0
- package/src/app/i18n/catalogs/fr-FR.ts +22 -0
- package/src/app/i18n/catalogs/hi-IN.ts +22 -0
- package/src/app/i18n/catalogs/ja-JP.ts +22 -0
- package/src/app/i18n/catalogs/ko-KR.ts +22 -0
- package/src/app/i18n/catalogs/pt-BR.ts +22 -0
- package/src/app/i18n/catalogs/zh-CN.ts +22 -0
- package/src/app/i18n/catalogs/zh-TW.ts +22 -0
- package/src/app/onboarding/first-run-first-paint.spec.ts +39 -0
- package/src/app/onboarding/first-run-first-paint.ts +24 -0
- package/src/app/onboarding/first-run-startup-gate.spec.tsx +125 -13
- package/src/app/onboarding/first-run-startup-gate.tsx +48 -5
- package/src/app/providers/AppProviders.tsx +18 -0
- package/src/app/providers/BuilderSignupActivation.tsx +8 -2
- package/src/app/shared/AppShellSkeleton.spec.tsx +60 -1
- package/src/app/shared/AppShellSkeleton.tsx +31 -1
- package/src/app/styles/agent-native.css +2 -2
- package/src/app/styles/agent-native.spec.ts +2 -2
- package/src/app/styles/tokens/agent-kit.css +20 -3
- package/src/composer/AgentSuggestionBar.spec.tsx +3 -1
- package/src/composer/AgentSuggestionBar.tsx +5 -2
- package/src/composer/ComposerContextMenu.tsx +4 -4
- package/src/composer/ComposerContextPicker.tsx +8 -2
- package/src/composer/ComposerContextPickerDialog.tsx +5 -2
- package/src/composer/ComposerModePicker.tsx +2 -1
- package/src/composer/ComposerPlusMenu.tsx +1 -1
- package/src/composer/MentionChip.tsx +1 -1
- package/src/composer/MentionPopover.spec.tsx +108 -2
- package/src/composer/MentionPopover.tsx +93 -17
- package/src/composer/MessageQueueDrawer.spec.tsx +5 -5
- package/src/composer/MessageQueueDrawer.tsx +19 -12
- package/src/composer/PastedTextChip.spec.tsx +36 -0
- package/src/composer/PastedTextChip.tsx +52 -58
- package/src/composer/PromptBar.tsx +1 -1
- package/src/composer/PromptComposer.context.spec.tsx +2 -2
- package/src/composer/PromptComposer.submission.spec.tsx +27 -0
- package/src/composer/PromptComposer.tsx +17 -9
- package/src/composer/RealtimeVoiceMode.tsx +2 -2
- package/src/composer/TiptapComposer.model-picker.spec.tsx +23 -82
- package/src/composer/TiptapComposer.tsx +68 -145
- package/src/composer/VoiceButton.tsx +12 -7
- package/src/composer/composer-notice.tsx +3 -3
- package/src/composer/extensions/FileReference.tsx +1 -1
- package/src/composer/extensions/SkillReference.tsx +1 -1
- package/src/composer/popover-surface.ts +1 -1
- package/src/context-ui/ContextUsageRing.spec.tsx +33 -8
- package/src/context-ui/ContextUsageRing.tsx +13 -348
- package/src/context-ui/index.ts +7 -1
- package/dist/composer/ModelPickerParts.d.ts +0 -20
- package/dist/composer/ModelPickerParts.d.ts.map +0 -1
- package/dist/composer/ModelPickerParts.js +0 -77
- package/dist/composer/ModelPickerParts.js.map +0 -1
- package/src/composer/ModelPickerParts.tsx +0 -188
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
IconTool,
|
|
10
10
|
IconX,
|
|
11
11
|
IconClipboardList,
|
|
12
|
-
|
|
12
|
+
IconAlertTriangle,
|
|
13
13
|
IconLoader2,
|
|
14
14
|
IconRefresh,
|
|
15
15
|
} from "@tabler/icons-react";
|
|
@@ -26,6 +26,7 @@ import React, {
|
|
|
26
26
|
useEffect,
|
|
27
27
|
useLayoutEffect,
|
|
28
28
|
useCallback,
|
|
29
|
+
useId,
|
|
29
30
|
useImperativeHandle,
|
|
30
31
|
useMemo,
|
|
31
32
|
} from "react";
|
|
@@ -48,7 +49,6 @@ import {
|
|
|
48
49
|
DropdownMenuSubTrigger,
|
|
49
50
|
DropdownMenuTrigger,
|
|
50
51
|
} from "../ui/dropdown-menu.js";
|
|
51
|
-
import { Popover, PopoverAnchor, PopoverContent } from "../ui/popover.js";
|
|
52
52
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip.js";
|
|
53
53
|
import { formatAttachmentError } from "./attachment-accept.js";
|
|
54
54
|
import { ComposerNotice } from "./composer-notice.js";
|
|
@@ -78,16 +78,12 @@ import {
|
|
|
78
78
|
isClaudeCodeAgentId,
|
|
79
79
|
resolvePreferredAgentModel,
|
|
80
80
|
} from "./model-selection.js";
|
|
81
|
-
import {
|
|
82
|
-
hasModelDetails,
|
|
83
|
-
RecommendedBadge,
|
|
84
|
-
ModelDetailsCard,
|
|
85
|
-
} from "./ModelPickerParts.js";
|
|
86
81
|
import {
|
|
87
82
|
createPastedAttachmentFile,
|
|
88
83
|
readClipboardPaste,
|
|
89
84
|
shouldConvertClipboardToAttachment,
|
|
90
85
|
} from "./pasted-text.js";
|
|
86
|
+
import { COMPOSER_POPOVER_SURFACE_CLASS } from "./popover-surface.js";
|
|
91
87
|
import {
|
|
92
88
|
AGENT_CHAT_INSERT_REFERENCE_EVENT,
|
|
93
89
|
AGENT_CHAT_INSERT_REFERENCE_MESSAGE_TYPE,
|
|
@@ -532,10 +528,11 @@ function referenceFromComposerReference(
|
|
|
532
528
|
name: ref.label,
|
|
533
529
|
source: ref.source || "",
|
|
534
530
|
refType: ref.refType,
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
531
|
+
// Chip attrs default to null; the run protocol rejects null optionals.
|
|
532
|
+
...(ref.refId ? { refId: ref.refId } : {}),
|
|
533
|
+
...(ref.slotKey ? { slotKey: ref.slotKey } : {}),
|
|
534
|
+
...(ref.slotLabel ? { slotLabel: ref.slotLabel } : {}),
|
|
535
|
+
...(ref.metadata ? { metadata: ref.metadata } : {}),
|
|
539
536
|
};
|
|
540
537
|
}
|
|
541
538
|
|
|
@@ -1135,7 +1132,7 @@ function ComposerChip({
|
|
|
1135
1132
|
return (
|
|
1136
1133
|
<span
|
|
1137
1134
|
data-agent-composer-slot={slot}
|
|
1138
|
-
className="inline-flex h-6 items-center gap-1 rounded-
|
|
1135
|
+
className="inline-flex h-6 items-center gap-1 rounded-[var(--agent-kit-radius-xs,0.25rem)] border border-border bg-muted/50 px-1.5 text-xs font-medium text-foreground"
|
|
1139
1136
|
>
|
|
1140
1137
|
<Icon className="h-3 w-3 text-muted-foreground" />
|
|
1141
1138
|
{label}
|
|
@@ -1143,7 +1140,7 @@ function ComposerChip({
|
|
|
1143
1140
|
type="button"
|
|
1144
1141
|
onClick={onRemove}
|
|
1145
1142
|
aria-label={removeLabel}
|
|
1146
|
-
className="-my-1 -me-1.5 flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-
|
|
1143
|
+
className="-my-1 -me-1.5 flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] text-muted-foreground hover:text-foreground"
|
|
1147
1144
|
>
|
|
1148
1145
|
<IconX aria-hidden="true" className="h-3 w-3" />
|
|
1149
1146
|
</button>
|
|
@@ -1700,9 +1697,7 @@ export const MODEL_SELECTOR_POPOVER_STYLE = {
|
|
|
1700
1697
|
|
|
1701
1698
|
type ModelPickerSection = "more" | "effort" | "image" | "agent" | "mode";
|
|
1702
1699
|
const MODEL_PICKER_STACK_BELOW_PX = 544;
|
|
1703
|
-
|
|
1704
|
-
// scrollable height are added, since the composer sits above app overlays.
|
|
1705
|
-
const MODEL_SELECTOR_MENU_CLASS = "z-[9999] overflow-y-auto";
|
|
1700
|
+
const MODEL_SELECTOR_MENU_CLASS = COMPOSER_POPOVER_SURFACE_CLASS;
|
|
1706
1701
|
const MODEL_PICKER_TWO_LINE_ITEM_CLASS = "flex-col items-start gap-0 py-1.5";
|
|
1707
1702
|
|
|
1708
1703
|
/**
|
|
@@ -1866,10 +1861,6 @@ interface ModelPickerRow {
|
|
|
1866
1861
|
model: string;
|
|
1867
1862
|
engine: string;
|
|
1868
1863
|
label: string;
|
|
1869
|
-
/** The card's title: the row's name without a provider suffix. */
|
|
1870
|
-
cardName: string;
|
|
1871
|
-
/** Marked with the Recommended badge (Auto). */
|
|
1872
|
-
recommended?: boolean;
|
|
1873
1864
|
description?: ComposerModelDescription | undefined;
|
|
1874
1865
|
identity: string;
|
|
1875
1866
|
recommendedRank?: number | undefined;
|
|
@@ -1938,7 +1929,6 @@ function ModelSelector({
|
|
|
1938
1929
|
}) {
|
|
1939
1930
|
const adapters = useComposerRuntimeAdapters();
|
|
1940
1931
|
const t = adapters.translate;
|
|
1941
|
-
const formatNumber = adapters.formatNumber;
|
|
1942
1932
|
const reasoning = adapters.models?.reasoning;
|
|
1943
1933
|
const engineNames = useMemo(
|
|
1944
1934
|
() => engines.map((group) => group.engine),
|
|
@@ -2057,8 +2047,6 @@ function ModelSelector({
|
|
|
2057
2047
|
const [openSection, setOpenSection] = useState<ModelPickerSection | null>(
|
|
2058
2048
|
null,
|
|
2059
2049
|
);
|
|
2060
|
-
const [highlightedRow, setHighlightedRow] = useState<string | null>(null);
|
|
2061
|
-
const [moreSide, setMoreSide] = useState<"left" | "right">("right");
|
|
2062
2050
|
const sectionTriggerRefs = useRef<
|
|
2063
2051
|
Partial<Record<ModelPickerSection, HTMLDivElement | null>>
|
|
2064
2052
|
>({});
|
|
@@ -2068,7 +2056,6 @@ function ModelSelector({
|
|
|
2068
2056
|
if (controlledOpen === undefined) setInternalOpen(nextOpen);
|
|
2069
2057
|
if (!nextOpen) {
|
|
2070
2058
|
setOpenSection(null);
|
|
2071
|
-
setHighlightedRow(null);
|
|
2072
2059
|
}
|
|
2073
2060
|
onModelSelectorOpenChange?.(nextOpen);
|
|
2074
2061
|
},
|
|
@@ -2141,7 +2128,6 @@ function ModelSelector({
|
|
|
2141
2128
|
model: candidate,
|
|
2142
2129
|
engine: group.engine,
|
|
2143
2130
|
label,
|
|
2144
|
-
cardName: label,
|
|
2145
2131
|
description,
|
|
2146
2132
|
identity: description?.catalogId ?? candidate,
|
|
2147
2133
|
recommendedRank: description?.recommended
|
|
@@ -2181,8 +2167,6 @@ function ModelSelector({
|
|
|
2181
2167
|
model: "auto",
|
|
2182
2168
|
engine: autoModelGroup.engine,
|
|
2183
2169
|
label: t("agentChat.composer.auto", { defaultValue: "Auto" }),
|
|
2184
|
-
cardName: t("agentChat.composer.auto", { defaultValue: "Auto" }),
|
|
2185
|
-
recommended: description?.recommended === true,
|
|
2186
2170
|
description,
|
|
2187
2171
|
identity: "auto",
|
|
2188
2172
|
};
|
|
@@ -2270,8 +2254,7 @@ function ModelSelector({
|
|
|
2270
2254
|
}
|
|
2271
2255
|
|
|
2272
2256
|
// Two menus side by side need about 34rem; below that a submenu cannot
|
|
2273
|
-
// clear the viewport on either side, so the sections stack in one menu
|
|
2274
|
-
// the model card, which needs the same room, stays hidden.
|
|
2257
|
+
// clear the viewport on either side, so the sections stack in one menu.
|
|
2275
2258
|
const stacked =
|
|
2276
2259
|
open &&
|
|
2277
2260
|
typeof window !== "undefined" &&
|
|
@@ -2318,7 +2301,7 @@ function ModelSelector({
|
|
|
2318
2301
|
{!onConnectProvider && builderFlow.error && (
|
|
2319
2302
|
<p
|
|
2320
2303
|
role="alert"
|
|
2321
|
-
className="px-2 pb-2 agent-kit-caption-copy
|
|
2304
|
+
className="px-2 pb-2 agent-kit-caption-copy agent-kit-tone-warning"
|
|
2322
2305
|
>
|
|
2323
2306
|
{builderFlow.error}
|
|
2324
2307
|
</p>
|
|
@@ -2378,7 +2361,7 @@ function ModelSelector({
|
|
|
2378
2361
|
>
|
|
2379
2362
|
<span className="min-w-0 flex-1 truncate">{agent.label}</span>
|
|
2380
2363
|
{statusLabel ? (
|
|
2381
|
-
<span className="ms-auto max-w-[6rem] shrink-0 truncate agent-kit-micro-copy text-muted-foreground
|
|
2364
|
+
<span className="ms-auto max-w-[6rem] shrink-0 truncate agent-kit-micro-copy text-muted-foreground">
|
|
2382
2365
|
{statusLabel}
|
|
2383
2366
|
</span>
|
|
2384
2367
|
) : null}
|
|
@@ -2449,91 +2432,26 @@ function ModelSelector({
|
|
|
2449
2432
|
|
|
2450
2433
|
const renderModelRow = (
|
|
2451
2434
|
row: ModelPickerRow,
|
|
2452
|
-
|
|
2453
|
-
options: { shortcut?: number; section?: ModelPickerSection } = {},
|
|
2435
|
+
options: { shortcut?: number } = {},
|
|
2454
2436
|
) => {
|
|
2455
|
-
const { shortcut
|
|
2437
|
+
const { shortcut } = options;
|
|
2456
2438
|
const selected = isSelectedRow(row);
|
|
2457
|
-
|
|
2458
|
-
? row.description
|
|
2459
|
-
: undefined;
|
|
2460
|
-
const cardOpen = !stacked && details && highlightedRow === row.key;
|
|
2461
|
-
const cardId = `${row.key}-card`;
|
|
2462
|
-
const item = (
|
|
2439
|
+
return (
|
|
2463
2440
|
<DropdownMenuItem
|
|
2464
2441
|
key={row.key}
|
|
2465
2442
|
role="menuitemradio"
|
|
2466
2443
|
aria-checked={selected}
|
|
2467
|
-
|
|
2444
|
+
// Digits 1-9 pick these rows; announced, not printed beside every name.
|
|
2445
|
+
aria-keyshortcuts={shortcut === undefined ? undefined : `${shortcut}`}
|
|
2468
2446
|
data-agent-composer-model-row={row.model}
|
|
2469
2447
|
onSelect={() => selectModel(row.model, row.engine)}
|
|
2470
|
-
onFocus={(event) => {
|
|
2471
|
-
setHighlightedRow(row.key);
|
|
2472
|
-
// A submenu row's card goes on the far side of its submenu.
|
|
2473
|
-
const side = event.currentTarget
|
|
2474
|
-
.closest("[data-agent-composer-model-panel]")
|
|
2475
|
-
?.getAttribute("data-side");
|
|
2476
|
-
if (side === "left" || side === "right") setMoreSide(side);
|
|
2477
|
-
}}
|
|
2478
|
-
onBlur={() =>
|
|
2479
|
-
setHighlightedRow((current) => (current === row.key ? null : current))
|
|
2480
|
-
}
|
|
2481
2448
|
>
|
|
2482
|
-
<span className="
|
|
2483
|
-
|
|
2484
|
-
{
|
|
2485
|
-
</
|
|
2486
|
-
{shortcut !== undefined ? (
|
|
2487
|
-
// One trailing column: the current row's check takes the place of
|
|
2488
|
-
// its number, at the same width, so no row shifts.
|
|
2489
|
-
<DropdownMenuShortcut>
|
|
2490
|
-
{selected ? <IconCheck aria-hidden="true" /> : shortcut}
|
|
2491
|
-
</DropdownMenuShortcut>
|
|
2492
|
-
) : (
|
|
2493
|
-
<DropdownMenuTrailing>
|
|
2494
|
-
{selected ? <IconCheck aria-hidden="true" /> : null}
|
|
2495
|
-
</DropdownMenuTrailing>
|
|
2496
|
-
)}
|
|
2449
|
+
<span className="min-w-0 flex-1 truncate">{row.label}</span>
|
|
2450
|
+
<DropdownMenuTrailing>
|
|
2451
|
+
{selected ? <IconCheck aria-hidden="true" /> : null}
|
|
2452
|
+
</DropdownMenuTrailing>
|
|
2497
2453
|
</DropdownMenuItem>
|
|
2498
2454
|
);
|
|
2499
|
-
if (!details || stacked) return item;
|
|
2500
|
-
return (
|
|
2501
|
-
<Popover key={row.key} open={Boolean(cardOpen)}>
|
|
2502
|
-
<PopoverAnchor asChild>{item}</PopoverAnchor>
|
|
2503
|
-
<PopoverContent
|
|
2504
|
-
id={cardId}
|
|
2505
|
-
role="tooltip"
|
|
2506
|
-
side={cardSide}
|
|
2507
|
-
align="start"
|
|
2508
|
-
sideOffset={8}
|
|
2509
|
-
collisionPadding={8}
|
|
2510
|
-
// The card describes the focused row; focus stays in the menu.
|
|
2511
|
-
onOpenAutoFocus={(event) => event.preventDefault()}
|
|
2512
|
-
onCloseAutoFocus={(event) => event.preventDefault()}
|
|
2513
|
-
// The card is the top layer, so it receives the Escape meant for
|
|
2514
|
-
// the menu under it: close that menu, one level at a time.
|
|
2515
|
-
onEscapeKeyDown={(event) => {
|
|
2516
|
-
if (!section) {
|
|
2517
|
-
setPickerOpen(false);
|
|
2518
|
-
return;
|
|
2519
|
-
}
|
|
2520
|
-
event.preventDefault();
|
|
2521
|
-
setHighlightedRow(null);
|
|
2522
|
-
setOpenSection(null);
|
|
2523
|
-
sectionTriggerRefs.current[section]?.focus();
|
|
2524
|
-
}}
|
|
2525
|
-
data-agent-native-composer-popover="true"
|
|
2526
|
-
className="pointer-events-none z-[9999]"
|
|
2527
|
-
>
|
|
2528
|
-
<ModelDetailsCard
|
|
2529
|
-
name={row.cardName}
|
|
2530
|
-
description={details}
|
|
2531
|
-
t={t}
|
|
2532
|
-
formatNumber={formatNumber}
|
|
2533
|
-
/>
|
|
2534
|
-
</PopoverContent>
|
|
2535
|
-
</Popover>
|
|
2536
|
-
);
|
|
2537
2455
|
};
|
|
2538
2456
|
|
|
2539
2457
|
const showModelList =
|
|
@@ -2572,24 +2490,20 @@ function ModelSelector({
|
|
|
2572
2490
|
defaultValue: "No OpenAI models configured",
|
|
2573
2491
|
})}
|
|
2574
2492
|
</span>
|
|
2575
|
-
<span className="shrink-0 agent-kit-caption-copy text-muted-foreground
|
|
2493
|
+
<span className="shrink-0 agent-kit-caption-copy text-muted-foreground">
|
|
2576
2494
|
Configure
|
|
2577
2495
|
</span>
|
|
2578
2496
|
</DropdownMenuItem>
|
|
2579
2497
|
)}
|
|
2580
2498
|
{shortcutRows.map((row, index) =>
|
|
2581
|
-
renderModelRow(row,
|
|
2499
|
+
renderModelRow(row, { shortcut: index + 1 }),
|
|
2582
2500
|
)}
|
|
2583
2501
|
</>
|
|
2584
2502
|
);
|
|
2585
2503
|
|
|
2586
2504
|
const moreItems =
|
|
2587
2505
|
moreRows.length > 0 ? (
|
|
2588
|
-
<>
|
|
2589
|
-
{moreRows.map((row) =>
|
|
2590
|
-
renderModelRow(row, moreSide, stacked ? {} : { section: "more" }),
|
|
2591
|
-
)}
|
|
2592
|
-
</>
|
|
2506
|
+
<>{moreRows.map((row) => renderModelRow(row))}</>
|
|
2593
2507
|
) : null;
|
|
2594
2508
|
|
|
2595
2509
|
const imageItems =
|
|
@@ -2651,11 +2565,8 @@ function ModelSelector({
|
|
|
2651
2565
|
setPickerOpen(false);
|
|
2652
2566
|
}}
|
|
2653
2567
|
>
|
|
2654
|
-
<span className="
|
|
2655
|
-
|
|
2656
|
-
{level === providerDefaultEffort ? (
|
|
2657
|
-
<RecommendedBadge t={t} />
|
|
2658
|
-
) : null}
|
|
2568
|
+
<span className="min-w-0 flex-1 truncate">
|
|
2569
|
+
{effortLabel(level)}
|
|
2659
2570
|
</span>
|
|
2660
2571
|
<DropdownMenuTrailing>
|
|
2661
2572
|
{selected ? <IconCheck aria-hidden="true" /> : null}
|
|
@@ -2818,7 +2729,7 @@ function ModelSelector({
|
|
|
2818
2729
|
})}: ${effortValueLabel}`
|
|
2819
2730
|
: ""
|
|
2820
2731
|
}`}
|
|
2821
|
-
className="agent-composer-model-button flex min-w-[var(--agentkit-composer-model-min-width,min(8rem,100%))] max-w-[var(--agentkit-composer-model-max-width,none)] shrink items-center gap-1 overflow-hidden rounded-[var(--agentkit-composer-control-radius,var(--radius-
|
|
2732
|
+
className="agent-composer-model-button flex min-w-[var(--agentkit-composer-model-min-width,min(8rem,100%))] max-w-[var(--agentkit-composer-model-max-width,none)] shrink items-center gap-1 overflow-hidden rounded-[var(--agentkit-composer-control-radius,var(--agent-kit-radius-xs,0.25rem))] px-[var(--agentkit-composer-toolbar-control-padding-inline,0.5rem)] py-1 text-xs font-medium text-muted-foreground hover:bg-accent/50 hover:text-foreground aria-expanded:bg-accent/50 aria-expanded:text-foreground"
|
|
2822
2733
|
>
|
|
2823
2734
|
<span className="agent-composer-model-name min-w-0 truncate text-foreground">
|
|
2824
2735
|
{selectedAgentOption?.icon ? (
|
|
@@ -3097,6 +3008,10 @@ function TiptapComposerSurface({
|
|
|
3097
3008
|
id: string;
|
|
3098
3009
|
} | null>(null);
|
|
3099
3010
|
const popoverRef = useRef<MentionPopoverRef>(null);
|
|
3011
|
+
const mentionListboxId = useId();
|
|
3012
|
+
const [activeMentionOptionId, setActiveMentionOptionId] = useState<
|
|
3013
|
+
string | undefined
|
|
3014
|
+
>(undefined);
|
|
3100
3015
|
const composerRuntime = useComposerRuntime();
|
|
3101
3016
|
const lastComposerRuntimeSyncRef = useRef<{
|
|
3102
3017
|
text: string;
|
|
@@ -3787,6 +3702,7 @@ function TiptapComposerSurface({
|
|
|
3787
3702
|
attributes: {
|
|
3788
3703
|
"aria-label": ariaLabel ?? resolvedPlaceholder,
|
|
3789
3704
|
"aria-multiline": "true",
|
|
3705
|
+
"aria-autocomplete": "list",
|
|
3790
3706
|
// Context controls can be off while the editor still takes a draft.
|
|
3791
3707
|
"aria-disabled": String(editorLocked),
|
|
3792
3708
|
role: "textbox",
|
|
@@ -3794,8 +3710,10 @@ function TiptapComposerSurface({
|
|
|
3794
3710
|
"data-agent-composer-slot": "editor-input",
|
|
3795
3711
|
// Page-level paste listeners defer to a composer that claims pastes.
|
|
3796
3712
|
...(onPasteContext ? { "data-claims-paste": "true" } : {}),
|
|
3713
|
+
// Each paragraph takes its direction from its first letter; an empty
|
|
3714
|
+
// draft keeps the page's direction for the placeholder.
|
|
3797
3715
|
class:
|
|
3798
|
-
"agent-composer-prosemirror flex-1 resize-none bg-transparent text-[length:var(--agentkit-composer-font-size,0.875rem)] text-foreground outline-none leading-[var(--agentkit-composer-line-height,1.625rem)] min-h-[var(--agentkit-composer-editor-min-height,3.25rem)] max-h-[var(--agentkit-composer-editor-max-height,10rem)] overflow-y-auto [&>p.is-editor-empty:first-child]:before:pointer-events-none [&>p.is-editor-empty:first-child]:before:float-start [&>p.is-editor-empty:first-child]:before:h-0 [&>p.is-editor-empty:first-child]:before:text-muted-foreground [&>p.is-editor-empty:first-child]:before:content-[attr(data-placeholder)]",
|
|
3716
|
+
"agent-composer-prosemirror [&>*]:[unicode-bidi:plaintext] flex-1 resize-none bg-transparent text-[length:var(--agentkit-composer-font-size,0.875rem)] text-foreground outline-none leading-[var(--agentkit-composer-line-height,1.625rem)] min-h-[var(--agentkit-composer-editor-min-height,3.25rem)] max-h-[var(--agentkit-composer-editor-max-height,10rem)] overflow-y-auto [&>p.is-editor-empty:first-child]:before:pointer-events-none [&>p.is-editor-empty:first-child]:before:float-start [&>p.is-editor-empty:first-child]:before:h-0 [&>p.is-editor-empty:first-child]:before:text-muted-foreground [&>p.is-editor-empty:first-child]:before:content-[attr(data-placeholder)]",
|
|
3799
3717
|
},
|
|
3800
3718
|
handleDOMEvents: {
|
|
3801
3719
|
compositionstart: () => {
|
|
@@ -4901,25 +4819,7 @@ function TiptapComposerSurface({
|
|
|
4901
4819
|
source: node.attrs.source || "codebase",
|
|
4902
4820
|
});
|
|
4903
4821
|
} else if (node.type.name === "mentionReference") {
|
|
4904
|
-
|
|
4905
|
-
references.push({
|
|
4906
|
-
type:
|
|
4907
|
-
refType === "file"
|
|
4908
|
-
? "file"
|
|
4909
|
-
: refType === "agent"
|
|
4910
|
-
? "agent"
|
|
4911
|
-
: refType === "custom-agent"
|
|
4912
|
-
? "custom-agent"
|
|
4913
|
-
: "mention",
|
|
4914
|
-
path: node.attrs.refPath || "",
|
|
4915
|
-
name: node.attrs.label,
|
|
4916
|
-
source: node.attrs.source,
|
|
4917
|
-
refType: node.attrs.refType,
|
|
4918
|
-
refId: node.attrs.refId,
|
|
4919
|
-
slotKey: node.attrs.slotKey,
|
|
4920
|
-
slotLabel: node.attrs.slotLabel,
|
|
4921
|
-
metadata: node.attrs.metadata,
|
|
4922
|
-
});
|
|
4822
|
+
references.push(referenceFromComposerReference(node.attrs));
|
|
4923
4823
|
} else if (node.type.name === "skillReference") {
|
|
4924
4824
|
references.push({
|
|
4925
4825
|
type: "skill",
|
|
@@ -6478,6 +6378,18 @@ function TiptapComposerSurface({
|
|
|
6478
6378
|
});
|
|
6479
6379
|
}, [editor, editorLocked]);
|
|
6480
6380
|
|
|
6381
|
+
// The editor ignores attributes it did not set, so these follow the panel without a re-render.
|
|
6382
|
+
const mentionPanelOpen = popover !== null;
|
|
6383
|
+
useEffect(() => {
|
|
6384
|
+
if (!isComposerEditorUsable(editor)) return;
|
|
6385
|
+
const dom = editor.view.dom;
|
|
6386
|
+
if (mentionPanelOpen) dom.setAttribute("aria-controls", mentionListboxId);
|
|
6387
|
+
else dom.removeAttribute("aria-controls");
|
|
6388
|
+
if (mentionPanelOpen && activeMentionOptionId)
|
|
6389
|
+
dom.setAttribute("aria-activedescendant", activeMentionOptionId);
|
|
6390
|
+
else dom.removeAttribute("aria-activedescendant");
|
|
6391
|
+
}, [editor, mentionPanelOpen, mentionListboxId, activeMentionOptionId]);
|
|
6392
|
+
|
|
6481
6393
|
const launchersDisabled = disabled || contextControlsDisabled;
|
|
6482
6394
|
|
|
6483
6395
|
const contextLauncherItems = useMemo(() => {
|
|
@@ -6696,7 +6608,7 @@ function TiptapComposerSurface({
|
|
|
6696
6608
|
{slotReferences.map((ref) => (
|
|
6697
6609
|
<span
|
|
6698
6610
|
key={ref.slotKey}
|
|
6699
|
-
className="inline-flex max-w-full items-center gap-1
|
|
6611
|
+
className="inline-flex h-5 max-w-full items-center gap-1 rounded-[var(--agent-kit-radius-xs,0.25rem)] border border-border bg-background px-2 text-xs leading-4 font-medium text-foreground shadow-sm"
|
|
6700
6612
|
>
|
|
6701
6613
|
<MentionItemMedia
|
|
6702
6614
|
media={ref.media}
|
|
@@ -6723,7 +6635,7 @@ function TiptapComposerSurface({
|
|
|
6723
6635
|
defaultValue: "Remove {{name}} reference",
|
|
6724
6636
|
name: slotReferenceTitle(ref),
|
|
6725
6637
|
})}
|
|
6726
|
-
className="-my-1 -me-1.5 flex size-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground"
|
|
6638
|
+
className="-my-1 -me-1.5 flex size-6 shrink-0 items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] text-muted-foreground hover:bg-accent hover:text-foreground"
|
|
6727
6639
|
>
|
|
6728
6640
|
<IconX aria-hidden="true" className="h-3 w-3" />
|
|
6729
6641
|
</button>
|
|
@@ -6738,7 +6650,7 @@ function TiptapComposerSurface({
|
|
|
6738
6650
|
data-state={
|
|
6739
6651
|
selectedContextItemKey === item.key ? "selected" : undefined
|
|
6740
6652
|
}
|
|
6741
|
-
className={`inline-flex max-w-full items-center gap-1
|
|
6653
|
+
className={`inline-flex h-5 max-w-full items-center gap-1 rounded-[var(--agent-kit-radius-xs,0.25rem)] border px-2 text-xs leading-4 font-medium text-foreground ${
|
|
6742
6654
|
selectedContextItemKey === item.key
|
|
6743
6655
|
? "border-ring bg-accent ring-2 ring-ring/40"
|
|
6744
6656
|
: "border-border bg-muted/50"
|
|
@@ -6752,16 +6664,20 @@ function TiptapComposerSurface({
|
|
|
6752
6664
|
className="size-3 shrink-0 animate-spin motion-reduce:animate-none text-muted-foreground"
|
|
6753
6665
|
/>
|
|
6754
6666
|
) : item.status === "error" ? (
|
|
6755
|
-
<
|
|
6667
|
+
<IconAlertTriangle
|
|
6756
6668
|
aria-label={t("agentChat.composer.contextError", {
|
|
6757
6669
|
defaultValue: "Context failed",
|
|
6758
6670
|
})}
|
|
6759
|
-
className="size-3 shrink-0 text-
|
|
6671
|
+
className="size-3 shrink-0 text-[hsl(var(--agent-kit-warning))]"
|
|
6760
6672
|
/>
|
|
6761
6673
|
) : (
|
|
6762
6674
|
<IconClipboardList className="h-3 w-3 shrink-0 text-muted-foreground" />
|
|
6763
6675
|
)}
|
|
6764
6676
|
<span className="min-w-0 truncate">{item.title}</span>
|
|
6677
|
+
{/* A title attribute only reaches a pointer, so the reason is read here. */}
|
|
6678
|
+
{item.status === "error" && item.statusMessage ? (
|
|
6679
|
+
<span className="sr-only">{item.statusMessage}</span>
|
|
6680
|
+
) : null}
|
|
6765
6681
|
{onRemoveContextItem && item.removable !== false ? (
|
|
6766
6682
|
<button
|
|
6767
6683
|
type="button"
|
|
@@ -6774,7 +6690,7 @@ function TiptapComposerSurface({
|
|
|
6774
6690
|
defaultValue: "Remove {{name}} context",
|
|
6775
6691
|
name: item.title,
|
|
6776
6692
|
})}
|
|
6777
|
-
className="-my-1 -me-1.5 flex size-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground"
|
|
6693
|
+
className="-my-1 -me-1.5 flex size-6 shrink-0 items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] text-muted-foreground hover:bg-accent hover:text-foreground"
|
|
6778
6694
|
>
|
|
6779
6695
|
<IconX aria-hidden="true" className="h-3 w-3" />
|
|
6780
6696
|
</button>
|
|
@@ -6790,7 +6706,7 @@ function TiptapComposerSurface({
|
|
|
6790
6706
|
defaultValue: "Retry {{name}} context",
|
|
6791
6707
|
name: item.title,
|
|
6792
6708
|
})}
|
|
6793
|
-
className="flex size-6 shrink-0 items-center justify-center rounded-
|
|
6709
|
+
className="flex size-6 shrink-0 items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] text-muted-foreground hover:bg-accent hover:text-foreground"
|
|
6794
6710
|
>
|
|
6795
6711
|
<IconRefresh aria-hidden="true" className="size-3.5" />
|
|
6796
6712
|
</button>
|
|
@@ -6800,6 +6716,11 @@ function TiptapComposerSurface({
|
|
|
6800
6716
|
defaultValue: "Retry {{name}} context",
|
|
6801
6717
|
name: item.title,
|
|
6802
6718
|
})}
|
|
6719
|
+
{item.statusMessage ? (
|
|
6720
|
+
<span className="block text-muted-foreground">
|
|
6721
|
+
{item.statusMessage}
|
|
6722
|
+
</span>
|
|
6723
|
+
) : null}
|
|
6803
6724
|
</TooltipContent>
|
|
6804
6725
|
</Tooltip>
|
|
6805
6726
|
) : null}
|
|
@@ -7027,6 +6948,8 @@ function TiptapComposerSurface({
|
|
|
7027
6948
|
onSelectSkill={handleSelectSkill}
|
|
7028
6949
|
onSelectCommand={handleSelectCommand}
|
|
7029
6950
|
onClose={closePopover}
|
|
6951
|
+
listboxId={mentionListboxId}
|
|
6952
|
+
onActiveOptionChange={setActiveMentionOptionId}
|
|
7030
6953
|
/>
|
|
7031
6954
|
</>
|
|
7032
6955
|
);
|
|
@@ -32,6 +32,8 @@ export interface VoiceButtonProps {
|
|
|
32
32
|
className?: string;
|
|
33
33
|
/** Show a live voice-chat session's controls in this slot (default: true). */
|
|
34
34
|
voiceChat?: boolean;
|
|
35
|
+
/** Name the ⌘⇧M shortcut (default: true); off outside the composer, which it dictates into. */
|
|
36
|
+
showShortcut?: boolean;
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
/**
|
|
@@ -45,6 +47,7 @@ export function VoiceButton({
|
|
|
45
47
|
disabled,
|
|
46
48
|
className,
|
|
47
49
|
voiceChat = true,
|
|
50
|
+
showShortcut = true,
|
|
48
51
|
}: VoiceButtonProps) {
|
|
49
52
|
const t = useComposerRuntimeAdapters().translate;
|
|
50
53
|
const realtimeVoice = useRealtimeVoiceModeOptional();
|
|
@@ -61,10 +64,12 @@ export function VoiceButton({
|
|
|
61
64
|
}
|
|
62
65
|
|
|
63
66
|
const shortcut = supportChecked && isMac ? "⌘⇧M" : "Ctrl+Shift+M";
|
|
64
|
-
const label =
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
const label = showShortcut
|
|
68
|
+
? t("agentChat.voice.dictation.start", {
|
|
69
|
+
shortcut,
|
|
70
|
+
defaultValue: `Dictate (${shortcut})`,
|
|
71
|
+
})
|
|
72
|
+
: t("agentChat.voice.dictation.startPlain", { defaultValue: "Dictate" });
|
|
68
73
|
|
|
69
74
|
return (
|
|
70
75
|
<Tooltip>
|
|
@@ -180,7 +185,7 @@ export function VoiceDictationPill({ voice }: VoiceRecordingOverlayProps) {
|
|
|
180
185
|
aria-label={t("agentChat.voice.dictation.recording", {
|
|
181
186
|
defaultValue: "Dictating",
|
|
182
187
|
})}
|
|
183
|
-
className="flex h-[var(--agentkit-composer-toolbar-control-size,1.5rem)] w-[4.5rem] shrink-0 items-center justify-between gap-1.5 overflow-hidden rounded-
|
|
188
|
+
className="flex h-[var(--agentkit-composer-toolbar-control-size,1.5rem)] w-[4.5rem] shrink-0 items-center justify-between gap-1.5 overflow-hidden rounded-[var(--agent-kit-radius-xs,0.25rem)] bg-muted ps-2.5 pe-0.5 text-foreground transition-[width,background-color] duration-150 ease-out starting:w-[var(--agentkit-composer-toolbar-control-size,1.5rem)] starting:bg-transparent motion-reduce:transition-none"
|
|
184
189
|
>
|
|
185
190
|
{transcribing ? (
|
|
186
191
|
<span
|
|
@@ -208,7 +213,7 @@ export function VoiceDictationPill({ voice }: VoiceRecordingOverlayProps) {
|
|
|
208
213
|
data-agent-composer-slot="voice-stop"
|
|
209
214
|
onClick={state === "recording" ? stop : cancel}
|
|
210
215
|
aria-label={controlLabel}
|
|
211
|
-
className="flex size-[calc(var(--agentkit-composer-toolbar-control-size,1.5rem)-0.25rem)] shrink-0 items-center justify-center rounded-
|
|
216
|
+
className="flex size-[calc(var(--agentkit-composer-toolbar-control-size,1.5rem)-0.25rem)] shrink-0 items-center justify-center rounded-[calc(var(--agent-kit-radius-xs,0.25rem)-2px)] bg-foreground text-background transition-colors duration-150 hover:bg-foreground/80"
|
|
212
217
|
>
|
|
213
218
|
{transcribing ? (
|
|
214
219
|
<IconX aria-hidden="true" className="size-3" />
|
|
@@ -334,7 +339,7 @@ function ComposerPrimaryButton({
|
|
|
334
339
|
aria-busy={busy || undefined}
|
|
335
340
|
data-agent-composer-slot="send-button"
|
|
336
341
|
data-composer-primary={mode}
|
|
337
|
-
className="agent-composer-send-button shrink-0 flex size-[var(--agentkit-composer-primary-control-size,1.75rem)] items-center justify-center rounded-
|
|
342
|
+
className="agent-composer-send-button shrink-0 flex size-[var(--agentkit-composer-primary-control-size,1.75rem)] items-center justify-center rounded-[var(--agent-kit-radius-sm,0.5rem)] bg-primary text-primary-foreground hover:opacity-90 transition-[opacity,transform] duration-150 active:scale-[0.97] disabled:opacity-30 disabled:cursor-not-allowed"
|
|
338
343
|
>
|
|
339
344
|
{/* Keyed so the glyph swap replays the entry transition in place. */}
|
|
340
345
|
<span
|
|
@@ -127,7 +127,7 @@ export function ComposerNotice({
|
|
|
127
127
|
data-notice={noticeId}
|
|
128
128
|
role={role ?? (tone === "danger" ? "alert" : "status")}
|
|
129
129
|
className={cn(
|
|
130
|
-
"agent-composer-notice flex min-w-0 items-start gap-2 rounded-
|
|
130
|
+
"agent-composer-notice flex min-w-0 items-start gap-2 rounded-[var(--agent-kit-radius-sm,0.5rem)] border px-3 py-1.5 text-xs leading-5 text-foreground",
|
|
131
131
|
tone === "danger"
|
|
132
132
|
? "border-destructive/30 bg-destructive/5"
|
|
133
133
|
: "border-[hsl(var(--agent-kit-warning)/0.4)] bg-[hsl(var(--agent-kit-warning)/0.1)]",
|
|
@@ -139,7 +139,7 @@ export function ComposerNotice({
|
|
|
139
139
|
className={cn(
|
|
140
140
|
"mt-1 size-4 shrink-0",
|
|
141
141
|
tone === "danger"
|
|
142
|
-
? "text-
|
|
142
|
+
? "text-[color:var(--agent-kit-danger-text)]"
|
|
143
143
|
: "text-[hsl(var(--agent-kit-warning))]",
|
|
144
144
|
)}
|
|
145
145
|
/>
|
|
@@ -167,7 +167,7 @@ export function ComposerNotice({
|
|
|
167
167
|
aria-label={dismissLabel}
|
|
168
168
|
title={dismissLabel}
|
|
169
169
|
onClick={onDismiss}
|
|
170
|
-
className="-me-1.5 flex size-6 shrink-0 items-center justify-center rounded-
|
|
170
|
+
className="-me-1.5 flex size-6 shrink-0 items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
171
171
|
>
|
|
172
172
|
<IconX aria-hidden="true" className="size-4" />
|
|
173
173
|
</button>
|
|
@@ -10,7 +10,7 @@ const FileReferenceComponent = ({ node }: { node: any }) => {
|
|
|
10
10
|
return (
|
|
11
11
|
<NodeViewWrapper as="span" className="inline">
|
|
12
12
|
<span
|
|
13
|
-
className="inline-flex items-center gap-1 rounded-
|
|
13
|
+
className="mx-1 inline-flex max-w-[200px] items-center h-5 gap-1 rounded-[var(--agent-kit-radius-xs,0.25rem)] border border-border bg-muted/50 px-2 text-xs leading-4 font-medium text-foreground align-middle select-none"
|
|
14
14
|
title={node.attrs.path}
|
|
15
15
|
>
|
|
16
16
|
{isFolder ? (
|
|
@@ -14,7 +14,7 @@ const SkillReferenceComponent = ({ node }: { node: any }) => {
|
|
|
14
14
|
return (
|
|
15
15
|
<NodeViewWrapper as="span" className="inline">
|
|
16
16
|
<span
|
|
17
|
-
className="inline-flex items-center gap-1 rounded-
|
|
17
|
+
className="mx-1 inline-flex max-w-[160px] items-center h-5 gap-1 rounded-[var(--agent-kit-radius-xs,0.25rem)] border border-border bg-muted/50 px-2 text-xs leading-4 font-medium text-foreground align-middle select-none"
|
|
18
18
|
title={node.attrs.path}
|
|
19
19
|
>
|
|
20
20
|
<IconStack2 size={14} className="shrink-0 text-muted-foreground" />
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* their defaults and the caller's layout classes.
|
|
5
5
|
*/
|
|
6
6
|
export const COMPOSER_POPOVER_SURFACE_CLASS =
|
|
7
|
-
"z-[9999] max-h-[min(27.5rem,calc(var(--agent-native-viewport-height,100dvh)-2rem))] overflow-y-auto rounded-[var(--radius-
|
|
7
|
+
"z-[9999] max-h-[min(27.5rem,calc(var(--agent-native-viewport-height,100dvh)-2rem))] overflow-y-auto rounded-[var(--agent-kit-radius-sm,0.5rem)] [&_[role^=menuitem]]:rounded-[var(--agent-kit-radius-xs,0.25rem)] border border-[color:var(--agent-kit-border,color-mix(in_srgb,CanvasText_16%,transparent))] bg-[color:var(--agent-kit-popover-surface,var(--agent-kit-raised-surface,Canvas))] p-1 text-[color:var(--agent-kit-popover-text,var(--agent-kit-text,CanvasText))] shadow-(--agent-kit-overlay-elevation) [font:inherit]";
|